// Copyright 2020 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import './map-panel/map-details.mjs'; import './map-panel/map-transitions.mjs'; import {MapLogEntry} from '../log/map.mjs'; import {FocusEvent} from './events.mjs'; import {CollapsableElement, DOM} from './helper.mjs'; DOM.defineCustomElement('view/map-panel', (templateText) => class MapPanel extends CollapsableElement { _map; _timeline; _selectedLogEntries = []; _displayedLogEntries = []; constructor() { super(templateText); this.searchBarBtn.addEventListener('click', e => this._handleSearch(e)); this.showAllRadio.onclick = _ => this._showEntries(this._timeline); this.showTimerangeRadio.onclick = _ => this._showEntries(this._timeline.selectionOrSelf); this.showSelectionRadio.onclick = _ => this._showEntries(this._selectedLogEntries); } get showAllRadio() { return this.$('#show-all'); } get showTimerangeRadio() { return this.$('#show-timerange'); } get showSelectionRadio() { return this.$('#show-selection'); } get mapTransitionsPanel() { return this.$('#map-transitions'); } get mapDetailsTransitionsPanel() { return this.$('#map-details-transitions'); } get mapDetailsPanel() { return this.$('#map-details'); } get searchBarBtn() { return this.$('#searchBarBtn'); } get searchBar() { return this.$('#searchBar'); } set timeline(timeline) { console.assert(timeline !== undefined, 'timeline undefined!'); this._timeline = timeline; this.$('.panel').style.display = timeline.isEmpty() ? 'none' : 'inherit'; this.mapTransitionsPanel.timeline = timeline; this.mapDetailsTransitionsPanel.timeline = timeline; } set selectedLogEntries(entries) { if (entries === this._timeline.selection) { this.showTimerangeRadio.click(); } else if (entries == this._timeline) { this.showAllRadio.click(); } else { this._selectedLogEntries = entries; this.showSelectionRadio.click(); } } set map(map) { this._map = map; this.requestUpdate(); } _showEntries(entries) { this._displayedLogEntries = entries; this.requestUpdate(); } _update() { this.mapDetailsTransitionsPanel.selectedLogEntries = [this._map]; this.mapDetailsPanel.map = this._map; this.mapTransitionsPanel.selectedLogEntries = this._displayedLogEntries; } _handleSearch(e) { const searchBar = this.$('#searchBarInput'); const searchBarInput = searchBar.value; // access the map from model cache const selectedMap = MapLogEntry.get(searchBarInput); if (selectedMap) { searchBar.className = 'success'; this.dispatchEvent(new FocusEvent(selectedMap)); } else { searchBar.className = 'failure'; } } });