Index: third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js b/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js |
index 872798171c43677ae40110f32a0de801714cadc2..1f41d7c6d2ef12c86e693043da1d0118511c3a97 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js |
@@ -25,30 +25,30 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
* @interface |
*/ |
-WebInspector.TabbedEditorContainerDelegate = function() { }; |
+WebInspector.TabbedEditorContainerDelegate = function() {}; |
WebInspector.TabbedEditorContainerDelegate.prototype = { |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @return {!WebInspector.Widget} |
- */ |
- viewForFile: function(uiSourceCode) { }, |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @return {!WebInspector.Widget} |
+ */ |
+ viewForFile: function(uiSourceCode) {}, |
}; |
/** |
- * @constructor |
- * @extends {WebInspector.Object} |
- * @param {!WebInspector.TabbedEditorContainerDelegate} delegate |
- * @param {!WebInspector.Setting} setting |
- * @param {string} placeholderText |
+ * @unrestricted |
*/ |
-WebInspector.TabbedEditorContainer = function(delegate, setting, placeholderText) |
-{ |
- WebInspector.Object.call(this); |
+WebInspector.TabbedEditorContainer = class extends WebInspector.Object { |
+ /** |
+ * @param {!WebInspector.TabbedEditorContainerDelegate} delegate |
+ * @param {!WebInspector.Setting} setting |
+ * @param {string} placeholderText |
+ */ |
+ constructor(delegate, setting, placeholderText) { |
+ super(); |
this._delegate = delegate; |
this._tabbedPane = new WebInspector.TabbedPane(); |
@@ -61,799 +61,763 @@ WebInspector.TabbedEditorContainer = function(delegate, setting, placeholderText |
this._tabbedPane.addEventListener(WebInspector.TabbedPane.Events.TabClosed, this._tabClosed, this); |
this._tabbedPane.addEventListener(WebInspector.TabbedPane.Events.TabSelected, this._tabSelected, this); |
- WebInspector.persistence.addEventListener(WebInspector.Persistence.Events.BindingCreated, this._onBindingCreated, this); |
- WebInspector.persistence.addEventListener(WebInspector.Persistence.Events.BindingRemoved, this._onBindingRemoved, this); |
+ WebInspector.persistence.addEventListener( |
+ WebInspector.Persistence.Events.BindingCreated, this._onBindingCreated, this); |
+ WebInspector.persistence.addEventListener( |
+ WebInspector.Persistence.Events.BindingRemoved, this._onBindingRemoved, this); |
this._tabIds = new Map(); |
this._files = {}; |
this._previouslyViewedFilesSetting = setting; |
this._history = WebInspector.TabbedEditorContainer.History.fromObject(this._previouslyViewedFilesSetting.get()); |
-}; |
- |
-/** @enum {symbol} */ |
-WebInspector.TabbedEditorContainer.Events = { |
- EditorSelected: Symbol("EditorSelected"), |
- EditorClosed: Symbol("EditorClosed") |
-}; |
- |
-WebInspector.TabbedEditorContainer._tabId = 0; |
- |
-WebInspector.TabbedEditorContainer.maximalPreviouslyViewedFilesCount = 30; |
- |
-WebInspector.TabbedEditorContainer.prototype = { |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onBindingCreated: function(event) |
- { |
- var binding = /** @type {!WebInspector.PersistenceBinding} */(event.data); |
- var networkTabId = this._tabIds.get(binding.network); |
- var fileSystemTabId = this._tabIds.get(binding.fileSystem); |
- |
- if (networkTabId) |
- this._tabbedPane.changeTabTitle(networkTabId, this._titleForFile(binding.fileSystem), this._tooltipForFile(binding.fileSystem)); |
- if (!fileSystemTabId) |
- return; |
- |
- var wasSelectedInFileSystem = this._currentFile === binding.fileSystem; |
- var currentSelectionRange = this._history.selectionRange(binding.fileSystem.url()); |
- var currentScrollLineNumber = this._history.scrollLineNumber(binding.fileSystem.url()); |
- |
- var tabIndex = this._tabbedPane.tabIndex(fileSystemTabId); |
- var tabsToClose = [fileSystemTabId]; |
- if (networkTabId) |
- tabsToClose.push(networkTabId); |
- this._closeTabs(tabsToClose, true); |
- networkTabId = this._appendFileTab(binding.network, false, tabIndex); |
- this._updateHistory(); |
- |
- if (wasSelectedInFileSystem) |
- this._tabbedPane.selectTab(networkTabId, false); |
- |
- var networkTabView = /** @type {!WebInspector.Widget} */(this._tabbedPane.tabView(networkTabId)); |
- this._restoreEditorProperties(networkTabView, currentSelectionRange, currentScrollLineNumber); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onBindingRemoved: function(event) |
- { |
- var binding = /** @type {!WebInspector.PersistenceBinding} */(event.data); |
- var networkTabId = this._tabIds.get(binding.network); |
- if (!networkTabId) |
- return; |
- var tabIndex = this._tabbedPane.tabIndex(networkTabId); |
- var wasSelected = this._currentFile === binding.network; |
- var fileSystemTabId = this._appendFileTab(binding.fileSystem, false, tabIndex); |
- this._updateHistory(); |
- |
- if (wasSelected) |
- this._tabbedPane.selectTab(fileSystemTabId, false); |
- |
- var fileSystemTabView = /** @type {!WebInspector.Widget} */(this._tabbedPane.tabView(fileSystemTabId)); |
- var savedSelectionRange = this._history.selectionRange(binding.network.url()); |
- var savedScrollLineNumber = this._history.scrollLineNumber(binding.network.url()); |
- this._restoreEditorProperties(fileSystemTabView, savedSelectionRange, savedScrollLineNumber); |
- }, |
- |
- /** |
- * @return {!WebInspector.Widget} |
- */ |
- get view() |
- { |
- return this._tabbedPane; |
- }, |
- |
- /** |
- * @type {!WebInspector.Widget} |
- */ |
- get visibleView() |
- { |
- return this._tabbedPane.visibleView; |
- }, |
- |
- /** |
- * @return {!Array.<!WebInspector.Widget>} |
- */ |
- fileViews: function() |
- { |
- return /** @type {!Array.<!WebInspector.Widget>} */ (this._tabbedPane.tabViews()); |
- }, |
- |
- /** |
- * @return {!WebInspector.Toolbar} |
- */ |
- leftToolbar: function() |
- { |
- return this._tabbedPane.leftToolbar(); |
- }, |
- |
- /** |
- * @return {!WebInspector.Toolbar} |
- */ |
- rightToolbar: function() |
- { |
- return this._tabbedPane.rightToolbar(); |
- }, |
- |
- /** |
- * @param {!Element} parentElement |
- */ |
- show: function(parentElement) |
- { |
- this._tabbedPane.show(parentElement); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- showFile: function(uiSourceCode) |
- { |
- this._innerShowFile(uiSourceCode, true); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- closeFile: function(uiSourceCode) |
- { |
- var tabId = this._tabIds.get(uiSourceCode); |
- if (!tabId) |
- return; |
- this._closeTabs([tabId]); |
- }, |
- |
- closeAllFiles: function() |
- { |
- this._closeTabs(this._tabbedPane.allTabs()); |
- }, |
- |
- /** |
- * @return {!Array.<!WebInspector.UISourceCode>} |
- */ |
- historyUISourceCodes: function() |
- { |
- // FIXME: there should be a way to fetch UISourceCode for its uri. |
- var uriToUISourceCode = {}; |
- for (var id in this._files) { |
- var uiSourceCode = this._files[id]; |
- uriToUISourceCode[uiSourceCode.url()] = uiSourceCode; |
- } |
- |
- var result = []; |
- var uris = this._history._urls(); |
- for (var i = 0; i < uris.length; ++i) { |
- var uiSourceCode = uriToUISourceCode[uris[i]]; |
- if (uiSourceCode) |
- result.push(uiSourceCode); |
- } |
- return result; |
- }, |
- |
- _addViewListeners: function() |
- { |
- if (!this._currentView || !this._currentView.textEditor) |
- return; |
- this._currentView.textEditor.addEventListener(WebInspector.SourcesTextEditor.Events.ScrollChanged, this._scrollChanged, this); |
- this._currentView.textEditor.addEventListener(WebInspector.SourcesTextEditor.Events.SelectionChanged, this._selectionChanged, this); |
- }, |
- |
- _removeViewListeners: function() |
- { |
- if (!this._currentView || !this._currentView.textEditor) |
- return; |
- this._currentView.textEditor.removeEventListener(WebInspector.SourcesTextEditor.Events.ScrollChanged, this._scrollChanged, this); |
- this._currentView.textEditor.removeEventListener(WebInspector.SourcesTextEditor.Events.SelectionChanged, this._selectionChanged, this); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _scrollChanged: function(event) |
- { |
- if (this._scrollTimer) |
- clearTimeout(this._scrollTimer); |
- var lineNumber = /** @type {number} */ (event.data); |
- this._scrollTimer = setTimeout(saveHistory.bind(this), 100); |
- this._history.updateScrollLineNumber(this._currentFile.url(), lineNumber); |
- |
- /** |
- * @this {WebInspector.TabbedEditorContainer} |
- */ |
- function saveHistory() |
- { |
- this._history.save(this._previouslyViewedFilesSetting); |
- } |
- }, |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onBindingCreated(event) { |
+ var binding = /** @type {!WebInspector.PersistenceBinding} */ (event.data); |
+ var networkTabId = this._tabIds.get(binding.network); |
+ var fileSystemTabId = this._tabIds.get(binding.fileSystem); |
+ |
+ if (networkTabId) |
+ this._tabbedPane.changeTabTitle( |
+ networkTabId, this._titleForFile(binding.fileSystem), this._tooltipForFile(binding.fileSystem)); |
+ if (!fileSystemTabId) |
+ return; |
+ |
+ var wasSelectedInFileSystem = this._currentFile === binding.fileSystem; |
+ var currentSelectionRange = this._history.selectionRange(binding.fileSystem.url()); |
+ var currentScrollLineNumber = this._history.scrollLineNumber(binding.fileSystem.url()); |
+ |
+ var tabIndex = this._tabbedPane.tabIndex(fileSystemTabId); |
+ var tabsToClose = [fileSystemTabId]; |
+ if (networkTabId) |
+ tabsToClose.push(networkTabId); |
+ this._closeTabs(tabsToClose, true); |
+ networkTabId = this._appendFileTab(binding.network, false, tabIndex); |
+ this._updateHistory(); |
+ |
+ if (wasSelectedInFileSystem) |
+ this._tabbedPane.selectTab(networkTabId, false); |
+ |
+ var networkTabView = /** @type {!WebInspector.Widget} */ (this._tabbedPane.tabView(networkTabId)); |
+ this._restoreEditorProperties(networkTabView, currentSelectionRange, currentScrollLineNumber); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onBindingRemoved(event) { |
+ var binding = /** @type {!WebInspector.PersistenceBinding} */ (event.data); |
+ var networkTabId = this._tabIds.get(binding.network); |
+ if (!networkTabId) |
+ return; |
+ var tabIndex = this._tabbedPane.tabIndex(networkTabId); |
+ var wasSelected = this._currentFile === binding.network; |
+ var fileSystemTabId = this._appendFileTab(binding.fileSystem, false, tabIndex); |
+ this._updateHistory(); |
+ |
+ if (wasSelected) |
+ this._tabbedPane.selectTab(fileSystemTabId, false); |
+ |
+ var fileSystemTabView = /** @type {!WebInspector.Widget} */ (this._tabbedPane.tabView(fileSystemTabId)); |
+ var savedSelectionRange = this._history.selectionRange(binding.network.url()); |
+ var savedScrollLineNumber = this._history.scrollLineNumber(binding.network.url()); |
+ this._restoreEditorProperties(fileSystemTabView, savedSelectionRange, savedScrollLineNumber); |
+ } |
+ |
+ /** |
+ * @return {!WebInspector.Widget} |
+ */ |
+ get view() { |
+ return this._tabbedPane; |
+ } |
+ |
+ /** |
+ * @return {?WebInspector.Widget} |
+ */ |
+ get visibleView() { |
+ return this._tabbedPane.visibleView; |
+ } |
+ |
+ /** |
+ * @return {!Array.<!WebInspector.Widget>} |
+ */ |
+ fileViews() { |
+ return /** @type {!Array.<!WebInspector.Widget>} */ (this._tabbedPane.tabViews()); |
+ } |
+ |
+ /** |
+ * @return {!WebInspector.Toolbar} |
+ */ |
+ leftToolbar() { |
+ return this._tabbedPane.leftToolbar(); |
+ } |
+ |
+ /** |
+ * @return {!WebInspector.Toolbar} |
+ */ |
+ rightToolbar() { |
+ return this._tabbedPane.rightToolbar(); |
+ } |
+ |
+ /** |
+ * @param {!Element} parentElement |
+ */ |
+ show(parentElement) { |
+ this._tabbedPane.show(parentElement); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ showFile(uiSourceCode) { |
+ this._innerShowFile(uiSourceCode, true); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ closeFile(uiSourceCode) { |
+ var tabId = this._tabIds.get(uiSourceCode); |
+ if (!tabId) |
+ return; |
+ this._closeTabs([tabId]); |
+ } |
+ |
+ closeAllFiles() { |
+ this._closeTabs(this._tabbedPane.allTabs()); |
+ } |
+ |
+ /** |
+ * @return {!Array.<!WebInspector.UISourceCode>} |
+ */ |
+ historyUISourceCodes() { |
+ // FIXME: there should be a way to fetch UISourceCode for its uri. |
+ var uriToUISourceCode = {}; |
+ for (var id in this._files) { |
+ var uiSourceCode = this._files[id]; |
+ uriToUISourceCode[uiSourceCode.url()] = uiSourceCode; |
+ } |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _selectionChanged: function(event) |
- { |
- var range = /** @type {!WebInspector.TextRange} */ (event.data); |
- this._history.updateSelectionRange(this._currentFile.url(), range); |
- this._history.save(this._previouslyViewedFilesSetting); |
- }, |
+ var result = []; |
+ var uris = this._history._urls(); |
+ for (var i = 0; i < uris.length; ++i) { |
+ var uiSourceCode = uriToUISourceCode[uris[i]]; |
+ if (uiSourceCode) |
+ result.push(uiSourceCode); |
+ } |
+ return result; |
+ } |
+ |
+ _addViewListeners() { |
+ if (!this._currentView || !this._currentView.textEditor) |
+ return; |
+ this._currentView.textEditor.addEventListener( |
+ WebInspector.SourcesTextEditor.Events.ScrollChanged, this._scrollChanged, this); |
+ this._currentView.textEditor.addEventListener( |
+ WebInspector.SourcesTextEditor.Events.SelectionChanged, this._selectionChanged, this); |
+ } |
+ |
+ _removeViewListeners() { |
+ if (!this._currentView || !this._currentView.textEditor) |
+ return; |
+ this._currentView.textEditor.removeEventListener( |
+ WebInspector.SourcesTextEditor.Events.ScrollChanged, this._scrollChanged, this); |
+ this._currentView.textEditor.removeEventListener( |
+ WebInspector.SourcesTextEditor.Events.SelectionChanged, this._selectionChanged, this); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _scrollChanged(event) { |
+ if (this._scrollTimer) |
+ clearTimeout(this._scrollTimer); |
+ var lineNumber = /** @type {number} */ (event.data); |
+ this._scrollTimer = setTimeout(saveHistory.bind(this), 100); |
+ this._history.updateScrollLineNumber(this._currentFile.url(), lineNumber); |
+ |
+ /** |
+ * @this {WebInspector.TabbedEditorContainer} |
+ */ |
+ function saveHistory() { |
+ this._history.save(this._previouslyViewedFilesSetting); |
+ } |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _selectionChanged(event) { |
+ var range = /** @type {!WebInspector.TextRange} */ (event.data); |
+ this._history.updateSelectionRange(this._currentFile.url(), range); |
+ this._history.save(this._previouslyViewedFilesSetting); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @param {boolean=} userGesture |
+ */ |
+ _innerShowFile(uiSourceCode, userGesture) { |
+ var binding = WebInspector.persistence.binding(uiSourceCode); |
+ uiSourceCode = binding ? binding.network : uiSourceCode; |
+ if (this._currentFile === uiSourceCode) |
+ return; |
+ |
+ this._removeViewListeners(); |
+ this._currentFile = uiSourceCode; |
+ |
+ var tabId = this._tabIds.get(uiSourceCode) || this._appendFileTab(uiSourceCode, userGesture); |
+ |
+ this._tabbedPane.selectTab(tabId, userGesture); |
+ if (userGesture) |
+ this._editorSelectedByUserAction(); |
+ |
+ var previousView = this._currentView; |
+ this._currentView = this.visibleView; |
+ this._addViewListeners(); |
+ |
+ var eventData = { |
+ currentFile: this._currentFile, |
+ currentView: this._currentView, |
+ previousView: previousView, |
+ userGesture: userGesture |
+ }; |
+ this.dispatchEventToListeners(WebInspector.TabbedEditorContainer.Events.EditorSelected, eventData); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @return {string} |
+ */ |
+ _titleForFile(uiSourceCode) { |
+ var binding = WebInspector.persistence.binding(uiSourceCode); |
+ var titleUISourceCode = binding ? binding.fileSystem : uiSourceCode; |
+ var maxDisplayNameLength = 30; |
+ var title = titleUISourceCode.displayName(true).trimMiddle(maxDisplayNameLength); |
+ if (uiSourceCode.isDirty() || WebInspector.persistence.hasUnsavedCommittedChanges(uiSourceCode)) |
+ title += '*'; |
+ return title; |
+ } |
+ |
+ /** |
+ * @param {string} id |
+ * @param {string} nextTabId |
+ */ |
+ _maybeCloseTab(id, nextTabId) { |
+ var uiSourceCode = this._files[id]; |
+ var shouldPrompt = uiSourceCode.isDirty() && uiSourceCode.project().canSetFileContent(); |
+ // FIXME: this should be replaced with common Save/Discard/Cancel dialog. |
+ if (!shouldPrompt || |
+ confirm(WebInspector.UIString('Are you sure you want to close unsaved file: %s?', uiSourceCode.name()))) { |
+ uiSourceCode.resetWorkingCopy(); |
+ var previousView = this._currentView; |
+ if (nextTabId) |
+ this._tabbedPane.selectTab(nextTabId, true); |
+ this._tabbedPane.closeTab(id, true); |
+ return true; |
+ } |
+ return false; |
+ } |
+ |
+ /** |
+ * @param {!Array.<string>} ids |
+ * @param {boolean=} forceCloseDirtyTabs |
+ */ |
+ _closeTabs(ids, forceCloseDirtyTabs) { |
+ var dirtyTabs = []; |
+ var cleanTabs = []; |
+ for (var i = 0; i < ids.length; ++i) { |
+ var id = ids[i]; |
+ var uiSourceCode = this._files[id]; |
+ if (!forceCloseDirtyTabs && uiSourceCode.isDirty()) |
+ dirtyTabs.push(id); |
+ else |
+ cleanTabs.push(id); |
+ } |
+ if (dirtyTabs.length) |
+ this._tabbedPane.selectTab(dirtyTabs[0], true); |
+ this._tabbedPane.closeTabs(cleanTabs, true); |
+ for (var i = 0; i < dirtyTabs.length; ++i) { |
+ var nextTabId = i + 1 < dirtyTabs.length ? dirtyTabs[i + 1] : null; |
+ if (!this._maybeCloseTab(dirtyTabs[i], nextTabId)) |
+ break; |
+ } |
+ } |
+ |
+ /** |
+ * @param {string} tabId |
+ * @param {!WebInspector.ContextMenu} contextMenu |
+ */ |
+ _onContextMenu(tabId, contextMenu) { |
+ var uiSourceCode = this._files[tabId]; |
+ if (uiSourceCode) |
+ contextMenu.appendApplicableItems(uiSourceCode); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ addUISourceCode(uiSourceCode) { |
+ var uri = uiSourceCode.url(); |
+ var index = this._history.index(uri); |
+ if (index === -1) |
+ return; |
+ |
+ if (!this._tabIds.has(uiSourceCode)) |
+ this._appendFileTab(uiSourceCode, false); |
+ |
+ // Select tab if this file was the last to be shown. |
+ if (!index) { |
+ this._innerShowFile(uiSourceCode, false); |
+ return; |
+ } |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @param {boolean=} userGesture |
- */ |
- _innerShowFile: function(uiSourceCode, userGesture) |
- { |
- var binding = WebInspector.persistence.binding(uiSourceCode); |
- uiSourceCode = binding ? binding.network : uiSourceCode; |
- if (this._currentFile === uiSourceCode) |
- return; |
- |
- this._removeViewListeners(); |
- this._currentFile = uiSourceCode; |
- |
- var tabId = this._tabIds.get(uiSourceCode) || this._appendFileTab(uiSourceCode, userGesture); |
- |
- this._tabbedPane.selectTab(tabId, userGesture); |
- if (userGesture) |
- this._editorSelectedByUserAction(); |
- |
- var previousView = this._currentView; |
- this._currentView = this.visibleView; |
- this._addViewListeners(); |
- |
- var eventData = { |
- currentFile: this._currentFile, |
- currentView: this._currentView, |
- previousView: previousView, |
- userGesture: userGesture |
- }; |
- this.dispatchEventToListeners(WebInspector.TabbedEditorContainer.Events.EditorSelected, eventData); |
- }, |
+ if (!this._currentFile) |
+ return; |
+ var currentProjectType = this._currentFile.project().type(); |
+ var addedProjectType = uiSourceCode.project().type(); |
+ var snippetsProjectType = WebInspector.projectTypes.Snippets; |
+ if (this._history.index(this._currentFile.url()) && currentProjectType === snippetsProjectType && |
+ addedProjectType !== snippetsProjectType) |
+ this._innerShowFile(uiSourceCode, false); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ removeUISourceCode(uiSourceCode) { |
+ this.removeUISourceCodes([uiSourceCode]); |
+ } |
+ |
+ /** |
+ * @param {!Array.<!WebInspector.UISourceCode>} uiSourceCodes |
+ */ |
+ removeUISourceCodes(uiSourceCodes) { |
+ var tabIds = []; |
+ for (var i = 0; i < uiSourceCodes.length; ++i) { |
+ var uiSourceCode = uiSourceCodes[i]; |
+ var tabId = this._tabIds.get(uiSourceCode); |
+ if (tabId) |
+ tabIds.push(tabId); |
+ } |
+ this._tabbedPane.closeTabs(tabIds); |
+ } |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @return {string} |
- */ |
- _titleForFile: function(uiSourceCode) |
- { |
- var binding = WebInspector.persistence.binding(uiSourceCode); |
- var titleUISourceCode = binding ? binding.fileSystem : uiSourceCode; |
- var maxDisplayNameLength = 30; |
- var title = titleUISourceCode.displayName(true).trimMiddle(maxDisplayNameLength); |
- if (uiSourceCode.isDirty() || WebInspector.persistence.hasUnsavedCommittedChanges(uiSourceCode)) |
- title += "*"; |
- return title; |
- }, |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ _editorClosedByUserAction(uiSourceCode) { |
+ this._history.remove(uiSourceCode.url()); |
+ this._updateHistory(); |
+ } |
- /** |
- * @param {string} id |
- * @param {string} nextTabId |
- */ |
- _maybeCloseTab: function(id, nextTabId) |
- { |
- var uiSourceCode = this._files[id]; |
- var shouldPrompt = uiSourceCode.isDirty() && uiSourceCode.project().canSetFileContent(); |
- // FIXME: this should be replaced with common Save/Discard/Cancel dialog. |
- if (!shouldPrompt || confirm(WebInspector.UIString("Are you sure you want to close unsaved file: %s?", uiSourceCode.name()))) { |
- uiSourceCode.resetWorkingCopy(); |
- var previousView = this._currentView; |
- if (nextTabId) |
- this._tabbedPane.selectTab(nextTabId, true); |
- this._tabbedPane.closeTab(id, true); |
- return true; |
- } |
- return false; |
- }, |
+ _editorSelectedByUserAction() { |
+ this._updateHistory(); |
+ } |
- /** |
- * @param {!Array.<string>} ids |
- * @param {boolean=} forceCloseDirtyTabs |
- */ |
- _closeTabs: function(ids, forceCloseDirtyTabs) |
- { |
- var dirtyTabs = []; |
- var cleanTabs = []; |
- for (var i = 0; i < ids.length; ++i) { |
- var id = ids[i]; |
- var uiSourceCode = this._files[id]; |
- if (!forceCloseDirtyTabs && uiSourceCode.isDirty()) |
- dirtyTabs.push(id); |
- else |
- cleanTabs.push(id); |
- } |
- if (dirtyTabs.length) |
- this._tabbedPane.selectTab(dirtyTabs[0], true); |
- this._tabbedPane.closeTabs(cleanTabs, true); |
- for (var i = 0; i < dirtyTabs.length; ++i) { |
- var nextTabId = i + 1 < dirtyTabs.length ? dirtyTabs[i + 1] : null; |
- if (!this._maybeCloseTab(dirtyTabs[i], nextTabId)) |
- break; |
- } |
- }, |
+ _updateHistory() { |
+ var tabIds = |
+ this._tabbedPane.lastOpenedTabIds(WebInspector.TabbedEditorContainer.maximalPreviouslyViewedFilesCount); |
/** |
* @param {string} tabId |
- * @param {!WebInspector.ContextMenu} contextMenu |
- */ |
- _onContextMenu: function(tabId, contextMenu) |
- { |
- var uiSourceCode = this._files[tabId]; |
- if (uiSourceCode) |
- contextMenu.appendApplicableItems(uiSourceCode); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- addUISourceCode: function(uiSourceCode) |
- { |
- var uri = uiSourceCode.url(); |
- var index = this._history.index(uri); |
- if (index === -1) |
- return; |
- |
- if (!this._tabIds.has(uiSourceCode)) |
- this._appendFileTab(uiSourceCode, false); |
- |
- // Select tab if this file was the last to be shown. |
- if (!index) { |
- this._innerShowFile(uiSourceCode, false); |
- return; |
- } |
- |
- if (!this._currentFile) |
- return; |
- var currentProjectType = this._currentFile.project().type(); |
- var addedProjectType = uiSourceCode.project().type(); |
- var snippetsProjectType = WebInspector.projectTypes.Snippets; |
- if (this._history.index(this._currentFile.url()) && currentProjectType === snippetsProjectType && addedProjectType !== snippetsProjectType) |
- this._innerShowFile(uiSourceCode, false); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- removeUISourceCode: function(uiSourceCode) |
- { |
- this.removeUISourceCodes([uiSourceCode]); |
- }, |
- |
- /** |
- * @param {!Array.<!WebInspector.UISourceCode>} uiSourceCodes |
- */ |
- removeUISourceCodes: function(uiSourceCodes) |
- { |
- var tabIds = []; |
- for (var i = 0; i < uiSourceCodes.length; ++i) { |
- var uiSourceCode = uiSourceCodes[i]; |
- var tabId = this._tabIds.get(uiSourceCode); |
- if (tabId) |
- tabIds.push(tabId); |
- } |
- this._tabbedPane.closeTabs(tabIds); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _editorClosedByUserAction: function(uiSourceCode) |
- { |
- this._history.remove(uiSourceCode.url()); |
- this._updateHistory(); |
- }, |
- |
- _editorSelectedByUserAction: function() |
- { |
- this._updateHistory(); |
- }, |
- |
- _updateHistory: function() |
- { |
- var tabIds = this._tabbedPane.lastOpenedTabIds(WebInspector.TabbedEditorContainer.maximalPreviouslyViewedFilesCount); |
- |
- /** |
- * @param {string} tabId |
- * @this {WebInspector.TabbedEditorContainer} |
- */ |
- function tabIdToURI(tabId) |
- { |
- return this._files[tabId].url(); |
- } |
- |
- this._history.update(tabIds.map(tabIdToURI.bind(this))); |
- this._history.save(this._previouslyViewedFilesSetting); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @return {string} |
- */ |
- _tooltipForFile: function(uiSourceCode) |
- { |
- uiSourceCode = WebInspector.persistence.fileSystem(uiSourceCode) || uiSourceCode; |
- return uiSourceCode.url(); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @param {boolean=} userGesture |
- * @param {number=} index |
- * @return {string} |
- */ |
- _appendFileTab: function(uiSourceCode, userGesture, index) |
- { |
- var view = this._delegate.viewForFile(uiSourceCode); |
- var title = this._titleForFile(uiSourceCode); |
- var tooltip = this._tooltipForFile(uiSourceCode); |
- |
- var tabId = this._generateTabId(); |
- this._tabIds.set(uiSourceCode, tabId); |
- this._files[tabId] = uiSourceCode; |
- |
- var savedSelectionRange = this._history.selectionRange(uiSourceCode.url()); |
- var savedScrollLineNumber = this._history.scrollLineNumber(uiSourceCode.url()); |
- this._restoreEditorProperties(view, savedSelectionRange, savedScrollLineNumber); |
- |
- this._tabbedPane.appendTab(tabId, title, view, tooltip, userGesture, undefined, index); |
- |
- this._updateFileTitle(uiSourceCode); |
- this._addUISourceCodeListeners(uiSourceCode); |
- return tabId; |
- }, |
- |
- /** |
- * @param {!WebInspector.Widget} editorView |
- * @param {!WebInspector.TextRange=} selection |
- * @param {number=} firstLineNumber |
- */ |
- _restoreEditorProperties: function(editorView, selection, firstLineNumber) |
- { |
- var sourceFrame = editorView instanceof WebInspector.SourceFrame ? /** @type {!WebInspector.SourceFrame} */ (editorView) : null; |
- if (!sourceFrame) |
- return; |
- if (selection) |
- sourceFrame.setSelection(selection); |
- if (typeof firstLineNumber === "number") |
- sourceFrame.scrollToLine(firstLineNumber); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _tabClosed: function(event) |
- { |
- var tabId = /** @type {string} */ (event.data.tabId); |
- var userGesture = /** @type {boolean} */ (event.data.isUserGesture); |
- |
- var uiSourceCode = this._files[tabId]; |
- if (this._currentFile === uiSourceCode) { |
- this._removeViewListeners(); |
- delete this._currentView; |
- delete this._currentFile; |
- } |
- this._tabIds.remove(uiSourceCode); |
- delete this._files[tabId]; |
- |
- this._removeUISourceCodeListeners(uiSourceCode); |
- |
- this.dispatchEventToListeners(WebInspector.TabbedEditorContainer.Events.EditorClosed, uiSourceCode); |
- |
- if (userGesture) |
- this._editorClosedByUserAction(uiSourceCode); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
+ * @this {WebInspector.TabbedEditorContainer} |
*/ |
- _tabSelected: function(event) |
- { |
- var tabId = /** @type {string} */ (event.data.tabId); |
- var userGesture = /** @type {boolean} */ (event.data.isUserGesture); |
- |
- var uiSourceCode = this._files[tabId]; |
- this._innerShowFile(uiSourceCode, userGesture); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _addUISourceCodeListeners: function(uiSourceCode) |
- { |
- uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this); |
- uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._uiSourceCodeWorkingCopyChanged, this); |
- uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeWorkingCopyCommitted, this); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _removeUISourceCodeListeners: function(uiSourceCode) |
- { |
- uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this); |
- uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._uiSourceCodeWorkingCopyChanged, this); |
- uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeWorkingCopyCommitted, this); |
- }, |
+ function tabIdToURI(tabId) { |
+ return this._files[tabId].url(); |
+ } |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _updateFileTitle: function(uiSourceCode) |
- { |
- var tabId = this._tabIds.get(uiSourceCode); |
- if (tabId) { |
- var title = this._titleForFile(uiSourceCode); |
- this._tabbedPane.changeTabTitle(tabId, title); |
- if (WebInspector.persistence.hasUnsavedCommittedChanges(uiSourceCode)) |
- this._tabbedPane.setTabIcon(tabId, "warning-icon", WebInspector.UIString("Changes to this file were not saved to file system.")); |
- else |
- this._tabbedPane.setTabIcon(tabId, ""); |
- } |
- }, |
- |
- _uiSourceCodeTitleChanged: function(event) |
- { |
- var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.target); |
- this._updateFileTitle(uiSourceCode); |
- this._updateHistory(); |
- }, |
- |
- _uiSourceCodeWorkingCopyChanged: function(event) |
- { |
- var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.target); |
- this._updateFileTitle(uiSourceCode); |
- }, |
- |
- _uiSourceCodeWorkingCopyCommitted: function(event) |
- { |
- var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.target); |
- this._updateFileTitle(uiSourceCode); |
- }, |
+ this._history.update(tabIds.map(tabIdToURI.bind(this))); |
+ this._history.save(this._previouslyViewedFilesSetting); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @return {string} |
+ */ |
+ _tooltipForFile(uiSourceCode) { |
+ uiSourceCode = WebInspector.persistence.fileSystem(uiSourceCode) || uiSourceCode; |
+ return uiSourceCode.url(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @param {boolean=} userGesture |
+ * @param {number=} index |
+ * @return {string} |
+ */ |
+ _appendFileTab(uiSourceCode, userGesture, index) { |
+ var view = this._delegate.viewForFile(uiSourceCode); |
+ var title = this._titleForFile(uiSourceCode); |
+ var tooltip = this._tooltipForFile(uiSourceCode); |
+ |
+ var tabId = this._generateTabId(); |
+ this._tabIds.set(uiSourceCode, tabId); |
+ this._files[tabId] = uiSourceCode; |
+ |
+ var savedSelectionRange = this._history.selectionRange(uiSourceCode.url()); |
+ var savedScrollLineNumber = this._history.scrollLineNumber(uiSourceCode.url()); |
+ this._restoreEditorProperties(view, savedSelectionRange, savedScrollLineNumber); |
+ |
+ this._tabbedPane.appendTab(tabId, title, view, tooltip, userGesture, undefined, index); |
+ |
+ this._updateFileTitle(uiSourceCode); |
+ this._addUISourceCodeListeners(uiSourceCode); |
+ return tabId; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Widget} editorView |
+ * @param {!WebInspector.TextRange=} selection |
+ * @param {number=} firstLineNumber |
+ */ |
+ _restoreEditorProperties(editorView, selection, firstLineNumber) { |
+ var sourceFrame = |
+ editorView instanceof WebInspector.SourceFrame ? /** @type {!WebInspector.SourceFrame} */ (editorView) : null; |
+ if (!sourceFrame) |
+ return; |
+ if (selection) |
+ sourceFrame.setSelection(selection); |
+ if (typeof firstLineNumber === 'number') |
+ sourceFrame.scrollToLine(firstLineNumber); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _tabClosed(event) { |
+ var tabId = /** @type {string} */ (event.data.tabId); |
+ var userGesture = /** @type {boolean} */ (event.data.isUserGesture); |
+ |
+ var uiSourceCode = this._files[tabId]; |
+ if (this._currentFile === uiSourceCode) { |
+ this._removeViewListeners(); |
+ delete this._currentView; |
+ delete this._currentFile; |
+ } |
+ this._tabIds.remove(uiSourceCode); |
+ delete this._files[tabId]; |
+ |
+ this._removeUISourceCodeListeners(uiSourceCode); |
+ |
+ this.dispatchEventToListeners(WebInspector.TabbedEditorContainer.Events.EditorClosed, uiSourceCode); |
+ |
+ if (userGesture) |
+ this._editorClosedByUserAction(uiSourceCode); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _tabSelected(event) { |
+ var tabId = /** @type {string} */ (event.data.tabId); |
+ var userGesture = /** @type {boolean} */ (event.data.isUserGesture); |
+ |
+ var uiSourceCode = this._files[tabId]; |
+ this._innerShowFile(uiSourceCode, userGesture); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ _addUISourceCodeListeners(uiSourceCode) { |
+ uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this); |
+ uiSourceCode.addEventListener( |
+ WebInspector.UISourceCode.Events.WorkingCopyChanged, this._uiSourceCodeWorkingCopyChanged, this); |
+ uiSourceCode.addEventListener( |
+ WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeWorkingCopyCommitted, this); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ _removeUISourceCodeListeners(uiSourceCode) { |
+ uiSourceCode.removeEventListener( |
+ WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this); |
+ uiSourceCode.removeEventListener( |
+ WebInspector.UISourceCode.Events.WorkingCopyChanged, this._uiSourceCodeWorkingCopyChanged, this); |
+ uiSourceCode.removeEventListener( |
+ WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeWorkingCopyCommitted, this); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ _updateFileTitle(uiSourceCode) { |
+ var tabId = this._tabIds.get(uiSourceCode); |
+ if (tabId) { |
+ var title = this._titleForFile(uiSourceCode); |
+ this._tabbedPane.changeTabTitle(tabId, title); |
+ if (WebInspector.persistence.hasUnsavedCommittedChanges(uiSourceCode)) |
+ this._tabbedPane.setTabIcon( |
+ tabId, 'warning-icon', WebInspector.UIString('Changes to this file were not saved to file system.')); |
+ else |
+ this._tabbedPane.setTabIcon(tabId, ''); |
+ } |
+ } |
+ |
+ _uiSourceCodeTitleChanged(event) { |
+ var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.target); |
+ this._updateFileTitle(uiSourceCode); |
+ this._updateHistory(); |
+ } |
+ |
+ _uiSourceCodeWorkingCopyChanged(event) { |
+ var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.target); |
+ this._updateFileTitle(uiSourceCode); |
+ } |
+ |
+ _uiSourceCodeWorkingCopyCommitted(event) { |
+ var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.target); |
+ this._updateFileTitle(uiSourceCode); |
+ } |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ _generateTabId() { |
+ return 'tab_' + (WebInspector.TabbedEditorContainer._tabId++); |
+ } |
+ |
+ /** |
+ * @return {?WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ currentFile() { |
+ return this._currentFile || null; |
+ } |
+}; |
- /** |
- * @return {string} |
- */ |
- _generateTabId: function() |
- { |
- return "tab_" + (WebInspector.TabbedEditorContainer._tabId++); |
- }, |
+/** @enum {symbol} */ |
+WebInspector.TabbedEditorContainer.Events = { |
+ EditorSelected: Symbol('EditorSelected'), |
+ EditorClosed: Symbol('EditorClosed') |
+}; |
- /** |
- * @return {?WebInspector.UISourceCode} uiSourceCode |
- */ |
- currentFile: function() |
- { |
- return this._currentFile || null; |
- }, |
+WebInspector.TabbedEditorContainer._tabId = 0; |
- __proto__: WebInspector.Object.prototype |
-}; |
+WebInspector.TabbedEditorContainer.maximalPreviouslyViewedFilesCount = 30; |
/** |
- * @constructor |
- * @param {string} url |
- * @param {!WebInspector.TextRange=} selectionRange |
- * @param {number=} scrollLineNumber |
+ * @unrestricted |
*/ |
-WebInspector.TabbedEditorContainer.HistoryItem = function(url, selectionRange, scrollLineNumber) |
-{ |
+WebInspector.TabbedEditorContainer.HistoryItem = class { |
+ /** |
+ * @param {string} url |
+ * @param {!WebInspector.TextRange=} selectionRange |
+ * @param {number=} scrollLineNumber |
+ */ |
+ constructor(url, selectionRange, scrollLineNumber) { |
/** @const */ this.url = url; |
- /** @const */ this._isSerializable = url.length < WebInspector.TabbedEditorContainer.HistoryItem.serializableUrlLengthLimit; |
+ /** @const */ this._isSerializable = |
+ url.length < WebInspector.TabbedEditorContainer.HistoryItem.serializableUrlLengthLimit; |
this.selectionRange = selectionRange; |
this.scrollLineNumber = scrollLineNumber; |
+ } |
+ |
+ /** |
+ * @param {!Object} serializedHistoryItem |
+ * @return {!WebInspector.TabbedEditorContainer.HistoryItem} |
+ */ |
+ static fromObject(serializedHistoryItem) { |
+ var selectionRange = serializedHistoryItem.selectionRange ? |
+ WebInspector.TextRange.fromObject(serializedHistoryItem.selectionRange) : |
+ undefined; |
+ return new WebInspector.TabbedEditorContainer.HistoryItem( |
+ serializedHistoryItem.url, selectionRange, serializedHistoryItem.scrollLineNumber); |
+ } |
+ |
+ /** |
+ * @return {?Object} |
+ */ |
+ serializeToObject() { |
+ if (!this._isSerializable) |
+ return null; |
+ var serializedHistoryItem = {}; |
+ serializedHistoryItem.url = this.url; |
+ serializedHistoryItem.selectionRange = this.selectionRange; |
+ serializedHistoryItem.scrollLineNumber = this.scrollLineNumber; |
+ return serializedHistoryItem; |
+ } |
}; |
WebInspector.TabbedEditorContainer.HistoryItem.serializableUrlLengthLimit = 4096; |
-/** |
- * @param {!Object} serializedHistoryItem |
- * @return {!WebInspector.TabbedEditorContainer.HistoryItem} |
- */ |
-WebInspector.TabbedEditorContainer.HistoryItem.fromObject = function(serializedHistoryItem) |
-{ |
- var selectionRange = serializedHistoryItem.selectionRange ? WebInspector.TextRange.fromObject(serializedHistoryItem.selectionRange) : undefined; |
- return new WebInspector.TabbedEditorContainer.HistoryItem(serializedHistoryItem.url, selectionRange, serializedHistoryItem.scrollLineNumber); |
-}; |
- |
-WebInspector.TabbedEditorContainer.HistoryItem.prototype = { |
- /** |
- * @return {?Object} |
- */ |
- serializeToObject: function() |
- { |
- if (!this._isSerializable) |
- return null; |
- var serializedHistoryItem = {}; |
- serializedHistoryItem.url = this.url; |
- serializedHistoryItem.selectionRange = this.selectionRange; |
- serializedHistoryItem.scrollLineNumber = this.scrollLineNumber; |
- return serializedHistoryItem; |
- } |
-}; |
/** |
- * @constructor |
- * @param {!Array.<!WebInspector.TabbedEditorContainer.HistoryItem>} items |
+ * @unrestricted |
*/ |
-WebInspector.TabbedEditorContainer.History = function(items) |
-{ |
+WebInspector.TabbedEditorContainer.History = class { |
+ /** |
+ * @param {!Array.<!WebInspector.TabbedEditorContainer.HistoryItem>} items |
+ */ |
+ constructor(items) { |
this._items = items; |
this._rebuildItemIndex(); |
-}; |
+ } |
-/** |
- * @param {!Array.<!Object>} serializedHistory |
- * @return {!WebInspector.TabbedEditorContainer.History} |
- */ |
-WebInspector.TabbedEditorContainer.History.fromObject = function(serializedHistory) |
-{ |
+ /** |
+ * @param {!Array.<!Object>} serializedHistory |
+ * @return {!WebInspector.TabbedEditorContainer.History} |
+ */ |
+ static fromObject(serializedHistory) { |
var items = []; |
for (var i = 0; i < serializedHistory.length; ++i) |
- items.push(WebInspector.TabbedEditorContainer.HistoryItem.fromObject(serializedHistory[i])); |
+ items.push(WebInspector.TabbedEditorContainer.HistoryItem.fromObject(serializedHistory[i])); |
return new WebInspector.TabbedEditorContainer.History(items); |
-}; |
- |
-WebInspector.TabbedEditorContainer.History.prototype = { |
- /** |
- * @param {string} url |
- * @return {number} |
- */ |
- index: function(url) |
- { |
- return this._itemsIndex.has(url) ? /** @type {number} */(this._itemsIndex.get(url)) : -1; |
- }, |
- |
- _rebuildItemIndex: function() |
- { |
- /** @type {!Map<string, number>} */ |
- this._itemsIndex = new Map(); |
- for (var i = 0; i < this._items.length; ++i) { |
- console.assert(!this._itemsIndex.has(this._items[i].url)); |
- this._itemsIndex.set(this._items[i].url, i); |
- } |
- }, |
- |
- /** |
- * @param {string} url |
- * @return {!WebInspector.TextRange|undefined} |
- */ |
- selectionRange: function(url) |
- { |
- var index = this.index(url); |
- return index !== -1 ? this._items[index].selectionRange : undefined; |
- }, |
- |
- /** |
- * @param {string} url |
- * @param {!WebInspector.TextRange=} selectionRange |
- */ |
- updateSelectionRange: function(url, selectionRange) |
- { |
- if (!selectionRange) |
- return; |
- var index = this.index(url); |
- if (index === -1) |
- return; |
- this._items[index].selectionRange = selectionRange; |
- }, |
- |
- /** |
- * @param {string} url |
- * @return {number|undefined} |
- */ |
- scrollLineNumber: function(url) |
- { |
- var index = this.index(url); |
- return index !== -1 ? this._items[index].scrollLineNumber : undefined; |
- }, |
- |
- /** |
- * @param {string} url |
- * @param {number} scrollLineNumber |
- */ |
- updateScrollLineNumber: function(url, scrollLineNumber) |
- { |
- var index = this.index(url); |
- if (index === -1) |
- return; |
- this._items[index].scrollLineNumber = scrollLineNumber; |
- }, |
- |
- /** |
- * @param {!Array.<string>} urls |
- */ |
- update: function(urls) |
- { |
- for (var i = urls.length - 1; i >= 0; --i) { |
- var index = this.index(urls[i]); |
- var item; |
- if (index !== -1) { |
- item = this._items[index]; |
- this._items.splice(index, 1); |
- } else |
- item = new WebInspector.TabbedEditorContainer.HistoryItem(urls[i]); |
- this._items.unshift(item); |
- this._rebuildItemIndex(); |
- } |
- }, |
- |
- /** |
- * @param {string} url |
- */ |
- remove: function(url) |
- { |
- var index = this.index(url); |
- if (index !== -1) { |
- this._items.splice(index, 1); |
- this._rebuildItemIndex(); |
- } |
- }, |
- |
- /** |
- * @param {!WebInspector.Setting} setting |
- */ |
- save: function(setting) |
- { |
- setting.set(this._serializeToObject()); |
- }, |
- |
- /** |
- * @return {!Array.<!Object>} |
- */ |
- _serializeToObject: function() |
- { |
- var serializedHistory = []; |
- for (var i = 0; i < this._items.length; ++i) { |
- var serializedItem = this._items[i].serializeToObject(); |
- if (serializedItem) |
- serializedHistory.push(serializedItem); |
- if (serializedHistory.length === WebInspector.TabbedEditorContainer.maximalPreviouslyViewedFilesCount) |
- break; |
- } |
- return serializedHistory; |
- }, |
- |
- |
- /** |
- * @return {!Array.<string>} |
- */ |
- _urls: function() |
- { |
- var result = []; |
- for (var i = 0; i < this._items.length; ++i) |
- result.push(this._items[i].url); |
- return result; |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @return {number} |
+ */ |
+ index(url) { |
+ return this._itemsIndex.has(url) ? /** @type {number} */ (this._itemsIndex.get(url)) : -1; |
+ } |
+ |
+ _rebuildItemIndex() { |
+ /** @type {!Map<string, number>} */ |
+ this._itemsIndex = new Map(); |
+ for (var i = 0; i < this._items.length; ++i) { |
+ console.assert(!this._itemsIndex.has(this._items[i].url)); |
+ this._itemsIndex.set(this._items[i].url, i); |
+ } |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @return {!WebInspector.TextRange|undefined} |
+ */ |
+ selectionRange(url) { |
+ var index = this.index(url); |
+ return index !== -1 ? this._items[index].selectionRange : undefined; |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @param {!WebInspector.TextRange=} selectionRange |
+ */ |
+ updateSelectionRange(url, selectionRange) { |
+ if (!selectionRange) |
+ return; |
+ var index = this.index(url); |
+ if (index === -1) |
+ return; |
+ this._items[index].selectionRange = selectionRange; |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @return {number|undefined} |
+ */ |
+ scrollLineNumber(url) { |
+ var index = this.index(url); |
+ return index !== -1 ? this._items[index].scrollLineNumber : undefined; |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @param {number} scrollLineNumber |
+ */ |
+ updateScrollLineNumber(url, scrollLineNumber) { |
+ var index = this.index(url); |
+ if (index === -1) |
+ return; |
+ this._items[index].scrollLineNumber = scrollLineNumber; |
+ } |
+ |
+ /** |
+ * @param {!Array.<string>} urls |
+ */ |
+ update(urls) { |
+ for (var i = urls.length - 1; i >= 0; --i) { |
+ var index = this.index(urls[i]); |
+ var item; |
+ if (index !== -1) { |
+ item = this._items[index]; |
+ this._items.splice(index, 1); |
+ } else |
+ item = new WebInspector.TabbedEditorContainer.HistoryItem(urls[i]); |
+ this._items.unshift(item); |
+ this._rebuildItemIndex(); |
+ } |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ */ |
+ remove(url) { |
+ var index = this.index(url); |
+ if (index !== -1) { |
+ this._items.splice(index, 1); |
+ this._rebuildItemIndex(); |
} |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Setting} setting |
+ */ |
+ save(setting) { |
+ setting.set(this._serializeToObject()); |
+ } |
+ |
+ /** |
+ * @return {!Array.<!Object>} |
+ */ |
+ _serializeToObject() { |
+ var serializedHistory = []; |
+ for (var i = 0; i < this._items.length; ++i) { |
+ var serializedItem = this._items[i].serializeToObject(); |
+ if (serializedItem) |
+ serializedHistory.push(serializedItem); |
+ if (serializedHistory.length === WebInspector.TabbedEditorContainer.maximalPreviouslyViewedFilesCount) |
+ break; |
+ } |
+ return serializedHistory; |
+ } |
+ |
+ /** |
+ * @return {!Array.<string>} |
+ */ |
+ _urls() { |
+ var result = []; |
+ for (var i = 0; i < this._items.length; ++i) |
+ result.push(this._items[i].url); |
+ return result; |
+ } |
}; |
+ |
/** |
- * @constructor |
* @implements {WebInspector.TabbedPaneTabDelegate} |
- * @param {!WebInspector.TabbedEditorContainer} editorContainer |
+ * @unrestricted |
*/ |
-WebInspector.EditorContainerTabDelegate = function(editorContainer) |
-{ |
+WebInspector.EditorContainerTabDelegate = class { |
+ /** |
+ * @param {!WebInspector.TabbedEditorContainer} editorContainer |
+ */ |
+ constructor(editorContainer) { |
this._editorContainer = editorContainer; |
-}; |
- |
-WebInspector.EditorContainerTabDelegate.prototype = { |
- /** |
- * @override |
- * @param {!WebInspector.TabbedPane} tabbedPane |
- * @param {!Array.<string>} ids |
- */ |
- closeTabs: function(tabbedPane, ids) |
- { |
- this._editorContainer._closeTabs(ids); |
- }, |
- |
- /** |
- * @override |
- * @param {string} tabId |
- * @param {!WebInspector.ContextMenu} contextMenu |
- */ |
- onContextMenu: function(tabId, contextMenu) |
- { |
- this._editorContainer._onContextMenu(tabId, contextMenu); |
- } |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.TabbedPane} tabbedPane |
+ * @param {!Array.<string>} ids |
+ */ |
+ closeTabs(tabbedPane, ids) { |
+ this._editorContainer._closeTabs(ids); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {string} tabId |
+ * @param {!WebInspector.ContextMenu} contextMenu |
+ */ |
+ onContextMenu(tabId, contextMenu) { |
+ this._editorContainer._onContextMenu(tabId, contextMenu); |
+ } |
}; |