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
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.SourceFrame}
32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.UISourceCode} uiSourceCode
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.UISourceCodeFrame = function(uiSourceCode)
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._uiSourceCode = uiSourceCode;
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.SourceFrame.call(this, this._uiSourceCode);
38bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    WebInspector.settings.textEditorAutocompletion.addChangeListener(this._enableAutocompletionIfNeeded, this);
39bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    this._enableAutocompletionIfNeeded();
4093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._onWorkingCopyChanged, this);
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._onWorkingCopyCommitted, this);
438abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    this._updateStyle();
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.UISourceCodeFrame.prototype = {
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {!WebInspector.UISourceCode}
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    uiSourceCode: function()
5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._uiSourceCode;
5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
55bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    _enableAutocompletionIfNeeded: function()
56bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
57bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        this.textEditor.setCompletionDictionary(WebInspector.settings.textEditorAutocompletion.get() ? new WebInspector.SampleCompletionDictionary() : null);
58bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    },
59bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    wasShown: function()
61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        WebInspector.SourceFrame.prototype.wasShown.call(this);
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._boundWindowFocused = this._windowFocused.bind(this);
64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        window.addEventListener("focus", this._boundWindowFocused, false);
65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._checkContentUpdated();
66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    willHide: function()
69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        WebInspector.SourceFrame.prototype.willHide.call(this);
71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        window.removeEventListener("focus", this._boundWindowFocused, false);
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        delete this._boundWindowFocused;
7353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._uiSourceCode.removeWorkingCopyGetter();
74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    canEditSource: function()
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        var projectType = this._uiSourceCode.project().type();
82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        if (projectType === WebInspector.projectTypes.Debugger || projectType === WebInspector.projectTypes.Formatter)
83f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu            return false;
84f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        if (projectType === WebInspector.projectTypes.Network && this._uiSourceCode.contentType() === WebInspector.resourceTypes.Document)
85f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu            return false;
86f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        return true;
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _windowFocused: function(event)
90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._checkContentUpdated();
92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _checkContentUpdated: function()
95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!this.loaded || !this.isShowing())
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._uiSourceCode.checkContentUpdated();
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    commitEditing: function()
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._uiSourceCode.isDirty())
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._muteSourceCodeEvents = true;
107c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._uiSourceCode.commitWorkingCopy();
10853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        delete this._muteSourceCodeEvents;
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onTextChanged: function(oldRange, newRange)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        WebInspector.SourceFrame.prototype.onTextChanged.call(this, oldRange, newRange);
11453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this._isSettingContent)
11553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            return;
11653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._muteSourceCodeEvents = true;
11753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this._textEditor.isClean())
11853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._uiSourceCode.resetWorkingCopy();
11953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        else
12053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._uiSourceCode.setWorkingCopyGetter(this._textEditor.text.bind(this._textEditor));
12153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        delete this._muteSourceCodeEvents;
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Event} event
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _onWorkingCopyChanged: function(event)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this._muteSourceCodeEvents)
13053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            return;
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._innerSetContent(this._uiSourceCode.workingCopy());
13253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.onUISourceCodeContentChanged();
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
136a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Event} event
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _onWorkingCopyCommitted: function(event)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
140e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        if (!this._muteSourceCodeEvents) {
141e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            this._innerSetContent(this._uiSourceCode.workingCopy());
142e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            this.onUISourceCodeContentChanged();
143e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        }
14453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._textEditor.markClean();
1458abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        this._updateStyle();
146197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, {
147197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            action: WebInspector.UserMetrics.UserActionNames.FileSaved,
148197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            url: this._uiSourceCode.url
149197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        });
1508abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    },
1518abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1528abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    _updateStyle: function()
1538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    {
154d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.element.classList.toggle("source-frame-unsaved-committed-changes", this._uiSourceCode.hasUnsavedCommittedChanges());
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    onUISourceCodeContentChanged: function()
158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {string} content
163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _innerSetContent: function(content)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
16653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._isSettingContent = true;
1671e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        this.setContent(content);
16853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        delete this._isSettingContent;
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    populateTextAreaContextMenu: function(contextMenu, lineNumber)
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.SourceFrame.prototype.populateTextAreaContextMenu.call(this, contextMenu, lineNumber);
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        contextMenu.appendApplicableItems(this._uiSourceCode);
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        contextMenu.appendSeparator();
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
178c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
179c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!Array.<!WebInspector.UISourceCodeFrame.Infobar|undefined>} infobars
180c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
181c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    attachInfobars: function(infobars)
182c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
183c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        for (var i = infobars.length - 1; i >= 0; --i) {
184c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            var infobar = infobars[i];
185c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            if (!infobar)
186c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                continue;
187c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            this.element.insertBefore(infobar.element, this.element.children[0]);
188c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            infobar._attached(this);
189c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        }
190c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this.doResize();
191c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
192c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    dispose: function()
194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
195d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        WebInspector.settings.textEditorAutocompletion.removeChangeListener(this._enableAutocompletionIfNeeded, this);
196d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        this._textEditor.dispose();
197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.detach();
198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.SourceFrame.prototype
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
202c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
203c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/**
204c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @constructor
2057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.UISourceCodeFrame.Infobar.Level} level
206c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {string} message
207c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */
2087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.UISourceCodeFrame.Infobar = function(level, message)
209c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){
2107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this.element = document.createElementWithClass("div", "source-frame-infobar source-frame-infobar-" + level);
211c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._mainRow = this.element.createChild("div", "source-frame-infobar-main-row");
212c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._detailsContainer = this.element.createChild("span", "source-frame-infobar-details-container");
213c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
2147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this._mainRow.createChild("span", "source-frame-infobar-icon");
215c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._mainRow.createChild("span", "source-frame-infobar-row-message").textContent = message;
216c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
217c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._toggleElement = this._mainRow.createChild("div", "source-frame-infobar-toggle source-frame-infobar-link");
218c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._toggleElement.addEventListener("click", this._onToggleDetails.bind(this), false);
2197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
2207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this._closeElement = this._mainRow.createChild("div", "close-button");
2217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this._closeElement.addEventListener("click", this._onClose.bind(this), false);
2227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
223c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._updateToggleElement();
224c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}
225c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
2267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/**
2277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @enum {string}
2287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */
2297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.UISourceCodeFrame.Infobar.Level = {
2307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Info: "info",
2317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Warning: "warning",
2327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Error: "error",
2337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci};
2347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
235c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.UISourceCodeFrame.Infobar.prototype = {
236c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    _onResize: function()
237c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
238c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        if (this._uiSourceCodeFrame)
239c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            this._uiSourceCodeFrame.doResize();
240c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
241c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
242c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    _onToggleDetails: function()
243c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
244c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._toggled = !this._toggled;
245c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._updateToggleElement();
246c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._onResize();
247c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
2487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
2497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    _onClose: function()
2507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
2517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        this.dispose();
2527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    },
253c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
254c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    _updateToggleElement: function()
255c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
256c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._toggleElement.textContent = this._toggled ? WebInspector.UIString("less") : WebInspector.UIString("more");
257c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._detailsContainer.classList.toggle("hidden", !this._toggled);
258c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
259c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
260c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
261c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!WebInspector.UISourceCodeFrame} uiSourceCodeFrame
262c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
263c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    _attached: function(uiSourceCodeFrame)
264c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
265c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._uiSourceCodeFrame = uiSourceCodeFrame;
266c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
267c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
268c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
269c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {string=} message
270c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {!Element}
271c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
272c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    createDetailsRowMessage: function(message)
273c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
274c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var infobarDetailsRow = this._detailsContainer.createChild("div", "source-frame-infobar-details-row");
275c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var detailsRowMessage = infobarDetailsRow.createChild("span", "source-frame-infobar-row-message");
276c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        detailsRowMessage.textContent = message || "";
277c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return detailsRowMessage;
278c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
279c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
280c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    dispose: function()
281c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
282c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this.element.remove();
283c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._onResize();
284c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        delete this._uiSourceCodeFrame;
285c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    }
286c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}
287