15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
31d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox}
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorView = function()
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.VBox.call(this);
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.registerRequiredCSS("navigatorView.css");
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    this.element.classList.add("navigator-container");
39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    var scriptsOutlineElement = this.element.createChild("div", "outline-disclosure navigator");
40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    var scriptsTreeElement = scriptsOutlineElement.createChild("ol");
4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this._scriptsTree = new WebInspector.NavigatorTreeOutline(scriptsTreeElement);
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.setDefaultFocusedElement(this._scriptsTree.element);
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
45a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.NavigatorUISourceCodeTreeNode>} */
46591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    this._uiSourceCodeNodes = new Map();
47a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /** @type {!Map.<!WebInspector.NavigatorTreeNode, !StringMap.<!WebInspector.NavigatorFolderTreeNode>>} */
48591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    this._subfolderNodes = new Map();
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._rootNode = new WebInspector.NavigatorRootTreeNode(this);
51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._rootNode.populate();
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
533c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    this.element.addEventListener("contextmenu", this.handleContextMenu.bind(this), false);
54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorView.Events = {
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ItemSelected: "ItemSelected",
58d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    ItemRenamed: "ItemRenamed",
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/**
625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} type
635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {string}
645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */
65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorView.iconClassForType = function(type)
66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (type === WebInspector.NavigatorTreeOutline.Types.Domain)
68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return "navigator-domain-tree-item";
69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (type === WebInspector.NavigatorTreeOutline.Types.FileSystem)
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return "navigator-folder-tree-item";
71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return "navigator-folder-tree-item";
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorView.prototype = {
75d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    setWorkspace: function(workspace)
76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._workspace = workspace;
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this);
79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, this._uiSourceCodeRemoved, this);
80f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        this._workspace.addEventListener(WebInspector.Workspace.Events.ProjectRemoved, this._projectRemoved.bind(this), this);
81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    wasShown: function()
84d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
85d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (this._loaded)
86d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            return;
87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._loaded = true;
88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));
89d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
90d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
92d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
93d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {boolean}
94d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
95d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    accept: function(uiSourceCode)
96d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
97d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return !uiSourceCode.project().isServiceProject();
98d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
99d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
101a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
103d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _addUISourceCode: function(uiSourceCode)
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
105d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (!this.accept(uiSourceCode))
106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            return;
107591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var projectNode = this._projectNode(uiSourceCode.project());
108591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var folderNode = this._folderNode(projectNode, uiSourceCode.parentPath());
109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var uiSourceCodeNode = new WebInspector.NavigatorUISourceCodeTreeNode(this, uiSourceCode);
1109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        this._uiSourceCodeNodes.set(uiSourceCode, uiSourceCodeNode);
111591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        folderNode.appendChild(uiSourceCodeNode);
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
115a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Event} event
116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _uiSourceCodeAdded: function(event)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
119d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
120d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._addUISourceCode(uiSourceCode);
121d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.Event} event
125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
126d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _uiSourceCodeRemoved: function(event)
127d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
128d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
129d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._removeUISourceCode(uiSourceCode);
130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.Event} event
134d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
135f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    _projectRemoved: function(event)
136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
137d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var project = /** @type {!WebInspector.Project} */ (event.data);
1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        project.removeEventListener(WebInspector.Project.Events.DisplayNameUpdated, this._updateProjectNodeTitle, this);
139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var uiSourceCodes = project.uiSourceCodes();
140d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        for (var i = 0; i < uiSourceCodes.length; ++i)
141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this._removeUISourceCode(uiSourceCodes[i]);
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
145a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Project} project
146a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.NavigatorTreeNode}
147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
148591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    _projectNode: function(project)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!project.displayName())
151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return this._rootNode;
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
153591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var projectNode = this._rootNode.child(project.id());
154591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (!projectNode) {
1557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            projectNode = this._createProjectNode(project);
156591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            this._rootNode.appendChild(projectNode);
157591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        }
158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return projectNode;
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @param {!WebInspector.Project} project
1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @return {!WebInspector.NavigatorTreeNode}
1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    _createProjectNode: function(project)
1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var type = project.type() === WebInspector.projectTypes.FileSystem ? WebInspector.NavigatorTreeOutline.Types.FileSystem : WebInspector.NavigatorTreeOutline.Types.Domain;
1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var projectNode = new WebInspector.NavigatorFolderTreeNode(this, project, project.id(), type, "", project.displayName());
1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        project.addEventListener(WebInspector.Project.Events.DisplayNameUpdated, this._updateProjectNodeTitle, this);
1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return projectNode;
1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    },
1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @param {!WebInspector.Event} event
1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    _updateProjectNodeTitle: function(event)
1777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
1787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var project = /** @type {!WebInspector.Project} */(event.target);
1797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var projectNode = this._rootNode.child(project.id());
1807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        if (!projectNode)
1817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            return;
1827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        projectNode.treeElement().titleText = project.displayName();
1837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    },
1847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
186a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NavigatorTreeNode} projectNode
187591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch     * @param {string} folderPath
188a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.NavigatorTreeNode}
189926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
190591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    _folderNode: function(projectNode, folderPath)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
192591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (!folderPath)
193591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            return projectNode;
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
195591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var subfolderNodes = this._subfolderNodes.get(projectNode);
196591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (!subfolderNodes) {
1977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch            subfolderNodes = /** @type {!StringMap.<!WebInspector.NavigatorFolderTreeNode>} */ (new StringMap());
1989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            this._subfolderNodes.set(projectNode, subfolderNodes);
199591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        }
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
201591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var folderNode = subfolderNodes.get(folderPath);
202591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (folderNode)
203591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            return folderNode;
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var parentNode = projectNode;
206591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var index = folderPath.lastIndexOf("/");
207591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (index !== -1)
208591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            parentNode = this._folderNode(projectNode, folderPath.substring(0, index));
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var name = folderPath.substring(index + 1);
2111fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        folderNode = new WebInspector.NavigatorFolderTreeNode(this, null, name, WebInspector.NavigatorTreeOutline.Types.Folder, folderPath, name);
2129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        subfolderNodes.set(folderPath, folderNode);
213591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        parentNode.appendChild(folderNode);
214591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return folderNode;
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
218a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {boolean=} select
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    revealUISourceCode: function(uiSourceCode, select)
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
223591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var node = this._uiSourceCodeNodes.get(uiSourceCode);
224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!node)
22509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            return;
226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this._scriptsTree.selectedTreeElement)
227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._scriptsTree.selectedTreeElement.deselect();
228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._lastSelectedUISourceCode = uiSourceCode;
229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        node.reveal(select);
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
233a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {boolean} focusSource
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
23606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    _sourceSelected: function(uiSourceCode, focusSource)
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
238926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._lastSelectedUISourceCode = uiSourceCode;
239926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var data = { uiSourceCode: uiSourceCode, focusSource: focusSource};
240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.dispatchEventToListeners(WebInspector.NavigatorView.Events.ItemSelected, data);
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
244a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
2461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    sourceDeleted: function(uiSourceCode)
2471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
2481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
2491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
2501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    /**
251a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
2521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     */
253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _removeUISourceCode: function(uiSourceCode)
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
255591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var node = this._uiSourceCodeNodes.get(uiSourceCode);
256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!node)
257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
258591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
259591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var projectNode = this._projectNode(uiSourceCode.project());
260591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var subfolderNodes = this._subfolderNodes.get(projectNode);
261591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var parentNode = node.parent;
262591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        this._uiSourceCodeNodes.remove(uiSourceCode);
263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        parentNode.removeChild(node);
264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        node = parentNode;
265591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        while (node) {
267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            parentNode = node.parent;
268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (!parentNode || !node.isEmpty())
269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                break;
270591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            if (subfolderNodes)
271591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch                subfolderNodes.remove(node._folderPath);
272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            parentNode.removeChild(node);
273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            node = parentNode;
274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
278a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
27953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
280d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _updateIcon: function(uiSourceCode)
2811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
2821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        var node = this._uiSourceCodeNodes.get(uiSourceCode);
2831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        node.updateIcon();
2841e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
2851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    reset: function()
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
288591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var nodes = this._uiSourceCodeNodes.values();
289591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        for (var i = 0; i < nodes.length; ++i)
290591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            nodes[i].dispose();
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._scriptsTree.removeChildren();
2937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        this._uiSourceCodeNodes.clear();
2947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        this._subfolderNodes.clear();
295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._rootNode.reset();
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2983c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    /**
299197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
3003c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     */
3013c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    handleContextMenu: function(event)
3023c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    {
3033c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        var contextMenu = new WebInspector.ContextMenu(event);
3043c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        this._appendAddFolderItem(contextMenu);
3053c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        contextMenu.show();
3063c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    },
3073c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
3083c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    /**
309a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.ContextMenu} contextMenu
3103c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     */
3113c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    _appendAddFolderItem: function(contextMenu)
3123c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    {
3133c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        function addFolder()
3143c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        {
3153c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch            WebInspector.isolatedFileSystemManager.addFileSystem();
3163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        }
3173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
3183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        var addFolderLabel = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Add folder to workspace" : "Add Folder to Workspace");
3193c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        contextMenu.appendItem(addFolderLabel, addFolder);
3203c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    },
3213c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
3223c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    /**
323a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Project} project
324f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {string} path
325f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     */
326f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    _handleContextMenuRefresh: function(project, path)
327f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    {
328f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        project.refresh(path);
329f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    },
330f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
331f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    /**
332a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Project} project
333f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {string} path
334a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode=} uiSourceCode
335f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     */
336f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    _handleContextMenuCreate: function(project, path, uiSourceCode)
337f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    {
338d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.create(project, path, uiSourceCode);
339f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    },
340f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
341f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    /**
3425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
3435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)     */
3445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    _handleContextMenuRename: function(uiSourceCode)
3455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    {
3465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        this.rename(uiSourceCode, false);
3475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    },
3485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
3495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    /**
350a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Project} project
351f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {string} path
352f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     */
353f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    _handleContextMenuExclude: function(project, path)
354f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    {
355f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var shouldExclude = window.confirm(WebInspector.UIString("Are you sure you want to exclude this folder?"));
356f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        if (shouldExclude) {
357f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            WebInspector.startBatchUpdate();
358f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            project.excludeFolder(path);
359f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            WebInspector.endBatchUpdate();
360f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        }
361f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    },
362f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
363f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    /**
364a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
365f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     */
366f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    _handleContextMenuDelete: function(uiSourceCode)
367f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    {
368f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var shouldDelete = window.confirm(WebInspector.UIString("Are you sure you want to delete this file?"));
369f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        if (shouldDelete)
370f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            uiSourceCode.project().deleteFile(uiSourceCode.path());
371f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    },
372f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
373f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    /**
374a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
375a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
3763c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     */
3773c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    handleFileContextMenu: function(event, uiSourceCode)
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var contextMenu = new WebInspector.ContextMenu(event);
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        contextMenu.appendApplicableItems(uiSourceCode);
3813c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        contextMenu.appendSeparator();
382f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
383f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var project = uiSourceCode.project();
3845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        if (project.type() === WebInspector.projectTypes.FileSystem) {
3855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)            var path = uiSourceCode.parentPath();
3865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)            contextMenu.appendItem(WebInspector.UIString("Rename\u2026"), this._handleContextMenuRename.bind(this, uiSourceCode));
3875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Make a copy\u2026" : "Make a Copy\u2026"), this._handleContextMenuCreate.bind(this, project, path, uiSourceCode));
3885d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)            contextMenu.appendItem(WebInspector.UIString("Delete"), this._handleContextMenuDelete.bind(this, uiSourceCode));
3895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)            contextMenu.appendSeparator();
3905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        }
3915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
3923c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        this._appendAddFolderItem(contextMenu);
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        contextMenu.show();
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3963c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    /**
397a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
398a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NavigatorFolderTreeNode} node
3993c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     */
4001fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    handleFolderContextMenu: function(event, node)
4011fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    {
4021fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        var contextMenu = new WebInspector.ContextMenu(event);
4031fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        var path = "/";
4043c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        var projectNode = node;
4053c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        while (projectNode.parent !== this._rootNode) {
4063c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch            path = "/" + projectNode.id + path;
4073c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch            projectNode = projectNode.parent;
4081fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        }
4091fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch
4103c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        var project = projectNode._project;
4111fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch
41223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch        if (project.type() === WebInspector.projectTypes.FileSystem) {
413f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            contextMenu.appendItem(WebInspector.UIString("Refresh"), this._handleContextMenuRefresh.bind(this, project, path));
414f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "New file" : "New File"), this._handleContextMenuCreate.bind(this, project, path));
415f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Exclude folder" : "Exclude Folder"), this._handleContextMenuExclude.bind(this, project, path));
4161fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        }
4173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        contextMenu.appendSeparator();
4183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        this._appendAddFolderItem(contextMenu);
4193c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
420a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        function removeFolder()
421a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        {
422a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            var shouldRemove = window.confirm(WebInspector.UIString("Are you sure you want to remove this folder?"));
423a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            if (shouldRemove)
424a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                project.remove();
425a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        }
426a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
427a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (project.type() === WebInspector.projectTypes.FileSystem && node === projectNode) {
4283c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch            var removeFolderLabel = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Remove folder from workspace" : "Remove Folder from Workspace");
4293c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch            contextMenu.appendItem(removeFolderLabel, removeFolder);
4303c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        }
43123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch
4321fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        contextMenu.show();
4331fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    },
4341fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch
4353c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    /**
436d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
437d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {boolean} deleteIfCanceled
4383c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     */
439d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    rename: function(uiSourceCode, deleteIfCanceled)
440d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
441d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var node = this._uiSourceCodeNodes.get(uiSourceCode);
442d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        console.assert(node);
44343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)        node.rename(callback.bind(this));
44453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
445d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        /**
446d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @this {WebInspector.NavigatorView}
447d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @param {boolean} committed
448d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         */
449d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        function callback(committed)
450d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
451d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (!committed) {
452d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                if (deleteIfCanceled)
453d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                    uiSourceCode.remove();
454d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                return;
455d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            }
456d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
45707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            this.dispatchEventToListeners(WebInspector.NavigatorView.Events.ItemRenamed, uiSourceCode);
458d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this._updateIcon(uiSourceCode);
459d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this._sourceSelected(uiSourceCode, true)
460d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
461d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
46253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
463d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
464d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.Project} project
465d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {string} path
466d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.UISourceCode=} uiSourceCodeToCopy
467d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
468d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    create: function(project, path, uiSourceCodeToCopy)
469d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
470d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var filePath;
471d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var uiSourceCode;
472d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
473d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        /**
474d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @this {WebInspector.NavigatorView}
475d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @param {?string} content
476d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         */
477d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        function contentLoaded(content)
478d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
479d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            createFile.call(this, content || "");
480d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
481d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
482d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (uiSourceCodeToCopy)
483d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            uiSourceCodeToCopy.requestContent(contentLoaded.bind(this));
484d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        else
485d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            createFile.call(this);
486d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
487d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        /**
488d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @this {WebInspector.NavigatorView}
489d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @param {string=} content
490d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         */
491d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        function createFile(content)
492d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
493d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            project.createFile(path, null, content || "", fileCreated.bind(this));
494d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
495d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
496d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        /**
497d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @this {WebInspector.NavigatorView}
498d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @param {?string} path
499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         */
500d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        function fileCreated(path)
501d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
502d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (!path)
503d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                return;
504d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            filePath = path;
505d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            uiSourceCode = project.uiSourceCode(filePath);
506d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (!uiSourceCode) {
507d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                console.assert(uiSourceCode)
508d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                return;
509d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            }
510d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this._sourceSelected(uiSourceCode, false);
51107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            this.revealUISourceCode(uiSourceCode, true);
512d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this.rename(uiSourceCode, true);
513d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
514d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
515d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
516d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.VBox.prototype
517d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
518d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
519d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/**
520d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor
521d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.NavigatorView}
522d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
523d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.SourcesNavigatorView = function()
524d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
525d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.NavigatorView.call(this);
5269e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.InspectedURLChanged, this._inspectedURLChanged, this);
527d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
528d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
529d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.SourcesNavigatorView.prototype = {
530d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
531d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @override
532d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
533d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {boolean}
534d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
535d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    accept: function(uiSourceCode)
536d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
537d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (!WebInspector.NavigatorView.prototype.accept(uiSourceCode))
538d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            return false;
53910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        return uiSourceCode.project().type() !== WebInspector.projectTypes.ContentScripts && uiSourceCode.project().type() !== WebInspector.projectTypes.Snippets;
54010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
541d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
542d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
543d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
544d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.Event} event
545d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
546d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _inspectedURLChanged: function(event)
547d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
548d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)       var nodes = this._uiSourceCodeNodes.values();
549d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)       for (var i = 0; i < nodes.length; ++i) {
550d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)           var uiSourceCode = nodes[i].uiSourceCode();
5519e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)           var inspectedPageURL = WebInspector.targetManager.inspectedPageURL();
5529e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)           if (inspectedPageURL && uiSourceCode.url === inspectedPageURL)
553d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)              this.revealUISourceCode(uiSourceCode, true);
554d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)       }
555d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
556d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
557d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
558d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
559d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
560d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _addUISourceCode: function(uiSourceCode)
561d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
562d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        WebInspector.NavigatorView.prototype._addUISourceCode.call(this, uiSourceCode);
5639e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        var inspectedPageURL = WebInspector.targetManager.inspectedPageURL();
5649e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (inspectedPageURL && uiSourceCode.url === inspectedPageURL)
565d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this.revealUISourceCode(uiSourceCode, true);
566d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     },
567d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
568d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.NavigatorView.prototype
569d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
570d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
571d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/**
572d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor
573d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.NavigatorView}
574d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
575d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.ContentScriptsNavigatorView = function()
576d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
577d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.NavigatorView.call(this);
578d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
579d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
580d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.ContentScriptsNavigatorView.prototype = {
581d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
582d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @override
583d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.UISourceCode} uiSourceCode
584d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {boolean}
585d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
586d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    accept: function(uiSourceCode)
587d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
588d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (!WebInspector.NavigatorView.prototype.accept(uiSourceCode))
589d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            return false;
59010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        return uiSourceCode.project().type() === WebInspector.projectTypes.ContentScripts;
591d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
592d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
593d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.NavigatorView.prototype
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {TreeOutline}
599a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} element
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
60153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.NavigatorTreeOutline = function(element)
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TreeOutline.call(this, element);
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.element = element;
6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.comparator = WebInspector.NavigatorTreeOutline._treeElementsCompare;
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
609926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorTreeOutline.Types = {
610926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Root: "Root",
611926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Domain: "Domain",
612926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Folder: "Folder",
613926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    UISourceCode: "UISourceCode",
614926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    FileSystem: "FileSystem"
615926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
616926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
61709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/**
61809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!TreeElement} treeElement1
61909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!TreeElement} treeElement2
62009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number}
62109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorTreeOutline._treeElementsCompare = function compare(treeElement1, treeElement2)
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Insert in the alphabetical order, first domains, then folders, then scripts.
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function typeWeight(treeElement)
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
627926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var type = treeElement.type();
628926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (type === WebInspector.NavigatorTreeOutline.Types.Domain) {
6299e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            if (treeElement.titleText === WebInspector.targetManager.inspectedPageDomain())
630926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                return 1;
631926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return 2;
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
633926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (type === WebInspector.NavigatorTreeOutline.Types.FileSystem)
634926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return 3;
635926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (type === WebInspector.NavigatorTreeOutline.Types.Folder)
636926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return 4;
637926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 5;
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var typeWeight1 = typeWeight(treeElement1);
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var typeWeight2 = typeWeight(treeElement2);
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var result;
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (typeWeight1 > typeWeight2)
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result = 1;
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else if (typeWeight1 < typeWeight2)
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result = -1;
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else {
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var title1 = treeElement1.titleText;
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var title2 = treeElement2.titleText;
651926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        result = title1.compareTo(title2);
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorTreeOutline.prototype = {
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   /**
658a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    * @return {!Array.<!WebInspector.UISourceCode>}
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    */
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   scriptTreeElements: function()
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   {
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)       var result = [];
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)       if (this.children.length) {
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)           for (var treeElement = this.children[0]; treeElement; treeElement = treeElement.traverseNextTreeElement(false, this, true)) {
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)               if (treeElement instanceof WebInspector.NavigatorSourceTreeElement)
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                   result.push(treeElement.uiSourceCode);
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)           }
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)       }
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)       return result;
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   },
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: TreeOutline.prototype
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {TreeElement}
678926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} type
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} title
680a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<string>} iconClasses
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} hasChildren
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} noIcon
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.BaseNavigatorTreeElement = function(type, title, iconClasses, hasChildren, noIcon)
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
686926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._type = type;
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TreeElement.call(this, "", null, hasChildren);
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._titleText = title;
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._iconClasses = iconClasses;
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._noIcon = noIcon;
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.BaseNavigatorTreeElement.prototype = {
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onattach: function()
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.listItemElement.removeChildren();
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._iconClasses) {
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < this._iconClasses.length; ++i)
699a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                this.listItemElement.classList.add(this._iconClasses[i]);
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
702197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.listItemElement.createChild("div", "selection");
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
704197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (!this._noIcon)
705197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this.imageElement = this.listItemElement.createChild("img", "icon");
706f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
707197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.titleElement = this.listItemElement.createChild("div", "base-navigator-tree-element-title");
7087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        this.titleElement.textContent = this._titleText;
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
711197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /**
712197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Array.<string>} iconClasses
713197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     */
7141e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    updateIconClasses: function(iconClasses)
7151e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
7161e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        for (var i = 0; i < this._iconClasses.length; ++i)
717a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.listItemElement.classList.remove(this._iconClasses[i]);
7181e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        this._iconClasses = iconClasses;
7191e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        for (var i = 0; i < this._iconClasses.length; ++i)
720a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this.listItemElement.classList.add(this._iconClasses[i]);
7211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
7221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onreveal: function()
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.listItemElement)
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.listItemElement.scrollIntoViewIfNeeded(true);
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get titleText()
7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._titleText;
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set titleText(titleText)
7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
739926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this._titleText === titleText)
740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._titleText = titleText || "";
7427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        if (this.titleElement) {
7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.titleElement.textContent = this._titleText;
7447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            this.titleElement.title = this._titleText;
7457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        }
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
747f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {string}
750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
751926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    type: function()
752926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
753926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._type;
754926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
755926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: TreeElement.prototype
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.BaseNavigatorTreeElement}
762a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.NavigatorView} navigatorView
763926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} type
764926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} title
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
7661fad5ca6c42d689812b66fc493992aa6d747a6fbBen MurdochWebInspector.NavigatorFolderTreeElement = function(navigatorView, type, title)
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
768926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    var iconClass = WebInspector.NavigatorView.iconClassForType(type);
769926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.BaseNavigatorTreeElement.call(this, type, title, [iconClass], true);
7701fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    this._navigatorView = navigatorView;
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorFolderTreeElement.prototype = {
774926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    onpopulate: function()
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
776926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._node.populate();
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onattach: function()
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.BaseNavigatorTreeElement.prototype.onattach.call(this);
782926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.collapse();
7831fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        this.listItemElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false);
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
78653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
787a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NavigatorFolderTreeNode} node
78853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
78953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    setNode: function(node)
79053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
79153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._node = node;
79253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var paths = [];
79353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        while (node && !node.isRoot()) {
79453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            paths.push(node._title);
79553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            node = node.parent;
79653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
79753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        paths.reverse();
79853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.tooltip = paths.join("/");
79953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
80053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
8011fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    /**
802197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
8031fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch     */
8041fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    _handleContextMenuEvent: function(event)
8051fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    {
8061fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        if (!this._node)
8071fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            return;
8081fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        this.select();
809197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this._navigatorView.handleFolderContextMenu(event, this._node);
8101fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    },
8111fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.BaseNavigatorTreeElement.prototype
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.BaseNavigatorTreeElement}
818a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.NavigatorView} navigatorView
819a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} title
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorSourceTreeElement = function(navigatorView, uiSourceCode, title)
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._navigatorView = navigatorView;
8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._uiSourceCode = uiSourceCode;
8261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    WebInspector.BaseNavigatorTreeElement.call(this, WebInspector.NavigatorTreeOutline.Types.UISourceCode, title, this._calculateIconClasses(), false);
827926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.tooltip = uiSourceCode.originURL();
8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NavigatorSourceTreeElement.prototype = {
8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
832a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.UISourceCode}
8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get uiSourceCode()
8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._uiSourceCode;
8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    /**
840a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<string>}
8411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     */
8421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    _calculateIconClasses: function()
8431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
8441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        return ["navigator-" + this._uiSourceCode.contentType().name() + "-tree-item"];
8451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
8461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
8471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    updateIcon: function()
8481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
8491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        this.updateIconClasses(this._calculateIconClasses());
8501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
8511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onattach: function()
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.BaseNavigatorTreeElement.prototype.onattach.call(this);
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.listItemElement.draggable = true;
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.listItemElement.addEventListener("click", this._onclick.bind(this), false);
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.listItemElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false);
8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.listItemElement.addEventListener("mousedown", this._onmousedown.bind(this), false);
8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.listItemElement.addEventListener("dragstart", this._ondragstart.bind(this), false);
8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _onmousedown: function(event)
8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (event.which === 1) // Warm-up data for drag'n'drop
8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._uiSourceCode.requestContent(callback.bind(this));
8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?string} content
86809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.NavigatorSourceTreeElement}
8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
8701e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function callback(content)
8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._warmedUpContent = content;
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
87653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _shouldRenameOnMouseDown: function()
87753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
87893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        if (!this._uiSourceCode.canRename())
87993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return false;
88053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var isSelected = this === this.treeOutline.selectedTreeElement;
88153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var isFocused = this.treeOutline.childrenListElement.isSelfOrAncestor(document.activeElement);
88253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return isSelected && isFocused && !WebInspector.isBeingEdited(this.treeOutline.element);
88353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
88453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
88553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    selectOnMouseDown: function(event)
88653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
88793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        if (event.which !== 1 || !this._shouldRenameOnMouseDown()) {
88853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            TreeElement.prototype.selectOnMouseDown.call(this, event);
88953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            return;
89053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
89153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        setTimeout(rename.bind(this), 300);
89253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
89309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
89409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.NavigatorSourceTreeElement}
89509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
89653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        function rename()
89753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        {
89853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            if (this._shouldRenameOnMouseDown())
899d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                this._navigatorView.rename(this.uiSourceCode, false);
90053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
90153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
90253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _ondragstart: function(event)
9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        event.dataTransfer.setData("text/plain", this._warmedUpContent);
9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        event.dataTransfer.effectAllowed = "copy";
9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
91009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
91109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {boolean}
91209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onspace: function()
9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
91506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._navigatorView._sourceSelected(this.uiSourceCode, true);
9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
920a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _onclick: function(event)
9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
92406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._navigatorView._sourceSelected(this.uiSourceCode, false);
9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
928a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @override
92909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {boolean}
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ondblclick: function(event)
9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var middleClick = event.button === 1;
93406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._navigatorView._sourceSelected(this.uiSourceCode, !middleClick);
935a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return false;
9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
938a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /**
939a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @override
94009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {boolean}
941a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     */
9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onenter: function()
9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
94406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._navigatorView._sourceSelected(this.uiSourceCode, true);
9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
948a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /**
949a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @override
95009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {boolean}
951a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     */
9521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    ondelete: function()
9531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
9541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        this._navigatorView.sourceDeleted(this.uiSourceCode);
9551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        return true;
9561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
9571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
959a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _handleContextMenuEvent: function(event)
9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
96353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.select();
9643c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        this._navigatorView.handleFileContextMenu(event, this._uiSourceCode);
9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.BaseNavigatorTreeElement.prototype
9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
969926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
970926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
971926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor
972926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} id
973926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
974926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorTreeNode = function(id)
975926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
976926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.id = id;
9777757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /** @type {!StringMap.<!WebInspector.NavigatorTreeNode>} */
978e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    this._children = new StringMap();
979926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
980926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
981926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorTreeNode.prototype = {
982926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
983a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!TreeElement}
984926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
98509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    treeElement: function() { throw "Not implemented"; },
986926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
987926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    dispose: function() { },
988926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
989926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
990926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {boolean}
991926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
992926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    isRoot: function()
993926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
994926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return false;
995926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
996926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
997926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
998926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {boolean}
999926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1000926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    hasChildren: function()
1001926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1002926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return true;
1003926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1004926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1005926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    populate: function()
1006926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1007926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this.isPopulated())
1008926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1009926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this.parent)
1010926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this.parent.populate();
1011926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._populated = true;
1012926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.wasPopulated();
1013926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1014926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1015926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    wasPopulated: function()
1016926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1017e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        var children = this.children();
1018e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        for (var i = 0; i < children.length; ++i)
1019e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)            this.treeElement().appendChild(children[i].treeElement());
1020926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1021926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10227757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10237757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @param {!WebInspector.NavigatorTreeNode} node
10247757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1025926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    didAddChild: function(node)
1026926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1027926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this.isPopulated())
1028926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this.treeElement().appendChild(node.treeElement());
1029926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1030926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @param {!WebInspector.NavigatorTreeNode} node
10337757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1034926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    willRemoveChild: function(node)
1035926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1036926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this.isPopulated())
1037926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this.treeElement().removeChild(node.treeElement());
1038926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1039926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10417757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @return {boolean}
10427757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1043926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    isPopulated: function()
1044926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1045926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._populated;
1046926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1047926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10487757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10497757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @return {boolean}
10507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1051926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    isEmpty: function()
1052926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
10539e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        return !this._children.size;
1054926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1055926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @param {string} id
105809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.NavigatorTreeNode}
10597757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1060926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    child: function(id)
1061926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
106209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._children.get(id) || null;
1063926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1064926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10657757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10667757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @return {!Array.<!WebInspector.NavigatorTreeNode>}
10677757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1068926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    children: function()
1069926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1070e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        return this._children.values();
1071926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1072926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10737757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10747757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @param {!WebInspector.NavigatorTreeNode} node
10757757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1076926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    appendChild: function(node)
1077926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
10789e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        this._children.set(node.id, node);
1079926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        node.parent = this;
1080926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.didAddChild(node);
1081926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1082926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10837757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    /**
10847757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     * @param {!WebInspector.NavigatorTreeNode} node
10857757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch     */
1086926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    removeChild: function(node)
1087926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1088926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.willRemoveChild(node);
1089e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        this._children.remove(node.id);
1090926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        delete node.parent;
1091926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        node.dispose();
1092926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1093926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1094926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    reset: function()
1095926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1096e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        this._children.clear();
1097926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1098926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1099926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
1101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor
1102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.NavigatorTreeNode}
1103a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.NavigatorView} navigatorView
1104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
1105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorRootTreeNode = function(navigatorView)
1106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.NavigatorTreeNode.call(this, "");
1108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._navigatorView = navigatorView;
1109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorRootTreeNode.prototype = {
1112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {boolean}
1114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    isRoot: function()
1116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return true;
1118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1121a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!TreeOutline}
1122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    treeElement: function()
1124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._navigatorView._scriptsTree;
1126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    __proto__: WebInspector.NavigatorTreeNode.prototype
1129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
1132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor
1133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.NavigatorTreeNode}
1134a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.NavigatorView} navigatorView
1135a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode
1136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
1137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorUISourceCodeTreeNode = function(navigatorView, uiSourceCode)
1138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.NavigatorTreeNode.call(this, uiSourceCode.name());
1140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._navigatorView = navigatorView;
1141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._uiSourceCode = uiSourceCode;
1142591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    this._treeElement = null;
1143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorUISourceCodeTreeNode.prototype = {
1146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1147a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.UISourceCode}
1148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    uiSourceCode: function()
1150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._uiSourceCode;
1152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
11541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    updateIcon: function()
11551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
11561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        if (this._treeElement)
11571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            this._treeElement.updateIcon();
11581e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    },
11591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
1160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1161a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!TreeElement}
1162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    treeElement: function()
1164926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this._treeElement)
1166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return this._treeElement;
1167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._treeElement = new WebInspector.NavigatorSourceTreeElement(this._navigatorView, this._uiSourceCode, "");
1169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.updateTitle();
1170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._titleChanged, this);
1172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._workingCopyChanged, this);
1173926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._workingCopyCommitted, this);
1174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._treeElement;
1176926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {boolean=} ignoreIsDirty
1180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    updateTitle: function(ignoreIsDirty)
1182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!this._treeElement)
1184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1186e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        var titleText = this._uiSourceCode.displayName();
11878abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        if (!ignoreIsDirty && (this._uiSourceCode.isDirty() || this._uiSourceCode.hasUnsavedCommittedChanges()))
1188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            titleText = "*" + titleText;
1189926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._treeElement.titleText = titleText;
1190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {boolean}
1194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    hasChildren: function()
1196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return false;
1198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    dispose: function()
1201926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1202926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!this._treeElement)
1203926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1204926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._titleChanged, this);
1205926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._workingCopyChanged, this);
1206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._workingCopyCommitted, this);
1207926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _titleChanged: function(event)
1210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.updateTitle();
1212926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1214926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _workingCopyChanged: function(event)
1215926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.updateTitle();
1217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _workingCopyCommitted: function(event)
1220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.updateTitle();
1222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {boolean=} select
1226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    reveal: function(select)
1228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.parent.populate();
1230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.parent.treeElement().expand();
1231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._treeElement.reveal();
1232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (select)
123309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this._treeElement.select(true);
1234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1235926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1236926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1237926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {function(boolean)=} callback
1238926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1239926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    rename: function(callback)
1240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!this._treeElement)
1242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Tree outline should be marked as edited as well as the tree element to prevent search from starting.
1245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var treeOutlineElement = this._treeElement.treeOutline.element;
1246926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        WebInspector.markBeingEdited(treeOutlineElement, true);
1247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
124809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
124909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {!Element} element
125009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {string} newTitle
125109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {string} oldTitle
125209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
125309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
1254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function commitHandler(element, newTitle, oldTitle)
1255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        {
125693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            if (newTitle !== oldTitle) {
125793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                this._treeElement.titleText = newTitle;
125893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                this._uiSourceCode.rename(newTitle, renameCallback.bind(this));
125993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                return;
126093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            }
126193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            afterEditing.call(this, true);
126293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        }
126393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
126409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
126509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {boolean} success
126609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
126709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
126893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        function renameCallback(success)
126993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        {
127093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            if (!success) {
127193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                WebInspector.markBeingEdited(treeOutlineElement, false);
127293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                this.updateTitle();
127393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                this.rename(callback);
127493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                return;
127593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            }
1276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            afterEditing.call(this, true);
1277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
1278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
127909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
128009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
128109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
1282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function cancelHandler()
1283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        {
1284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            afterEditing.call(this, false);
1285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
1286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        /**
1288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         * @param {boolean} committed
128909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
1290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         */
1291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function afterEditing(committed)
1292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        {
1293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            WebInspector.markBeingEdited(treeOutlineElement, false);
1294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this.updateTitle();
129593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            this._treeElement.treeOutline.childrenListElement.focus();
1296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (callback)
1297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                callback(committed);
1298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
1299926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
130009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        var editingConfig = new WebInspector.InplaceEditor.Config(commitHandler.bind(this), cancelHandler.bind(this));
1301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.updateTitle(true);
130209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        WebInspector.InplaceEditor.startEditing(this._treeElement.titleElement, editingConfig);
1303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        window.getSelection().setBaseAndExtent(this._treeElement.titleElement, 0, this._treeElement.titleElement, 1);
1304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    __proto__: WebInspector.NavigatorTreeNode.prototype
1307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
1310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor
1311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.NavigatorTreeNode}
1312a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.NavigatorView} navigatorView
1313a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?WebInspector.Project} project
1314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} id
1315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} type
1316591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} folderPath
1317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} title
1318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
13191fad5ca6c42d689812b66fc493992aa6d747a6fbBen MurdochWebInspector.NavigatorFolderTreeNode = function(navigatorView, project, id, type, folderPath, title)
1320926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1321926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.NavigatorTreeNode.call(this, id);
1322926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._navigatorView = navigatorView;
13231fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    this._project = project;
1324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._type = type;
1325591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    this._folderPath = folderPath;
1326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._title = title;
1327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NavigatorFolderTreeNode.prototype = {
1330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1331a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!TreeElement}
1332926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    treeElement: function()
1334926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1335926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this._treeElement)
1336926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return this._treeElement;
1337926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._treeElement = this._createTreeElement(this._title, this);
1338926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._treeElement;
1339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
1342a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!TreeElement}
1343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _createTreeElement: function(title, node)
1345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
13461fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        var treeElement = new WebInspector.NavigatorFolderTreeElement(this._navigatorView, this._type, title);
134753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        treeElement.setNode(node);
1348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return treeElement;
1349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    wasPopulated: function()
1352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!this._treeElement || this._treeElement._node !== this)
1354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._addChildrenRecursive();
1356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _addChildrenRecursive: function()
1359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1360e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        var children = this.children();
1361e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        for (var i = 0; i < children.length; ++i) {
1362e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)            var child = children[i];
1363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this.didAddChild(child);
1364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (child instanceof WebInspector.NavigatorFolderTreeNode)
1365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                child._addChildrenRecursive();
1366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
1367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _shouldMerge: function(node)
1370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._type !== WebInspector.NavigatorTreeOutline.Types.Domain && node instanceof WebInspector.NavigatorFolderTreeNode;
1372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    didAddChild: function(node)
1375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function titleForNode(node)
1377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        {
1378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return node._title;
1379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
1380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!this._treeElement)
1382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var children = this.children();
1385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (children.length === 1 && this._shouldMerge(node)) {
1387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            node._isMerged = true;
1388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._treeElement.titleText = this._treeElement.titleText + "/" + node._title;
1389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            node._treeElement = this._treeElement;
139053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._treeElement.setNode(node);
1391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
1393926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1394926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var oldNode;
1395926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (children.length === 2)
1396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            oldNode = children[0] !== node ? children[0] : children[1];
1397926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (oldNode && oldNode._isMerged) {
1398926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            delete oldNode._isMerged;
1399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var mergedToNodes = [];
1400926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            mergedToNodes.push(this);
1401926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var treeNode = this;
1402926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            while (treeNode._isMerged) {
1403926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                treeNode = treeNode.parent;
1404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                mergedToNodes.push(treeNode);
1405926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            }
1406926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            mergedToNodes.reverse();
1407926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var titleText = mergedToNodes.map(titleForNode).join("/");
1408926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1409926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var nodes = [];
1410926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            treeNode = oldNode;
1411926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            do {
1412926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                nodes.push(treeNode);
1413926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                children = treeNode.children();
1414926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                treeNode = children.length === 1 ? children[0] : null;
1415926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            } while (treeNode && treeNode._isMerged);
1416926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1417926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (!this.isPopulated()) {
1418926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                this._treeElement.titleText = titleText;
141953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                this._treeElement.setNode(this);
1420926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                for (var i = 0; i < nodes.length; ++i) {
1421926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                    delete nodes[i]._treeElement;
1422926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                    delete nodes[i]._isMerged;
1423926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                }
1424926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                return;
1425926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            }
1426926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var oldTreeElement = this._treeElement;
1427926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var treeElement = this._createTreeElement(titleText, this);
1428926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            for (var i = 0; i < mergedToNodes.length; ++i)
1429926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                mergedToNodes[i]._treeElement = treeElement;
1430926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            oldTreeElement.parent.appendChild(treeElement);
1431926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
143253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            oldTreeElement.setNode(nodes[nodes.length - 1]);
1433926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            oldTreeElement.titleText = nodes.map(titleForNode).join("/");
1434926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            oldTreeElement.parent.removeChild(oldTreeElement);
1435926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._treeElement.appendChild(oldTreeElement);
1436926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (oldTreeElement.expanded)
1437926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                treeElement.expand();
1438926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
1439926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this.isPopulated())
1440926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._treeElement.appendChild(node.treeElement());
1441926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1442926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1443926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    willRemoveChild: function(node)
1444926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
1445926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (node._isMerged || !this.isPopulated())
1446926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
1447926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._treeElement.removeChild(node._treeElement);
1448926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1449926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1450926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    __proto__: WebInspector.NavigatorTreeNode.prototype
1451926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1452