15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 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) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox} 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @implements {WebInspector.Replaceable} 35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ContentProvider} contentProvider 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame = function(contentProvider) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.VBox.call(this); 40a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this.element.classList.add("script-view"); 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._url = contentProvider.contentURL(); 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contentProvider = contentProvider; 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var textEditorDelegate = new WebInspector.TextEditorDelegateForSourceFrame(this); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._textEditor = new WebInspector.CodeMirrorTextEditor(this._url, textEditorDelegate); 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = []; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messages = []; 53c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._rowMessageBuckets = {}; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.setReadOnly(!this.canEditSource()); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._shortcuts = {}; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false); 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 6053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition = new WebInspector.StatusBarText("", "source-frame-cursor-position"); 61c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._errorPopoverHelper = new WebInspector.PopoverHelper(this.element, this._getErrorAnchor.bind(this), this._showErrorPopover.bind(this)); 63c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._errorPopoverHelper.setTimeout(100, 100); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string=} modifiers 6900d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch * @return {!RegExp} 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame.createSearchRegex = function(query, modifiers) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var regex; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) modifiers = modifiers || ""; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // First try creating regex if user knows the / / hint. 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 7800d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch if (/^\/.+\/$/.test(query)) { 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) regex = new RegExp(query.substring(1, query.length - 1), modifiers); 8000d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch regex.__fromRegExpQuery = true; 8100d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch } 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } catch (e) { 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Silent catch. 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Otherwise just do case-insensitive search. 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!regex) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) regex = createPlainTextSearchRegex(query, "i" + modifiers); 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return regex; 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame.Events = { 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ScrollChanged: "ScrollChanged", 9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SelectionChanged: "SelectionChanged", 9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) JumpHappened: "JumpHappened" 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame.prototype = { 1005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 101c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!Element} target 102c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!Event} event 103c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {(!Element|undefined)} 104c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 105c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) _getErrorAnchor: function(target, event) 106c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 107c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var element = target.enclosingNodeOrSelfWithClass("text-editor-line-decoration-icon") 108c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || target.enclosingNodeOrSelfWithClass("text-editor-line-decoration-wave"); 109c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!element) 110c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 111c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._errorWavePopoverAnchor = new AnchorBox(event.clientX, event.clientY, 1, 1); 112c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return element; 113c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 114c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 115c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 116c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!Element} anchor 117c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.Popover} popover 118c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 119c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) _showErrorPopover: function(anchor, popover) 120c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 121c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var messageBucket = anchor.enclosingNodeOrSelfWithClass("text-editor-line-decoration")._messageBucket; 122c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var messagesOutline = messageBucket.messagesDescription(); 123c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var popoverAnchor = anchor.enclosingNodeOrSelfWithClass("text-editor-line-decoration-icon") ? anchor : this._errorWavePopoverAnchor; 124c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) popover.show(messagesOutline, popoverAnchor); 125c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 126c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 127c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 1285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} key 129c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {function():boolean} handler 1305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 1315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) addShortcut: function(key, handler) 1325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 1335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._shortcuts[key] = handler; 1345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 1355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) wasShown: function() 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._ensureContentLoaded(); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.show(this.element); 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._editorAttached = true; 141c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (var line in this._rowMessageBuckets) { 142c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var bucket = this._rowMessageBuckets[line]; 143c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) bucket._updateDecorationPosition(); 144c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._wasShownOrLoaded(); 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {boolean} 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _isEditorShowing: function() 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this.isShowing() && this._editorAttached; 154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willHide: function() 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.View.prototype.willHide.call(this); 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._clearPositionToReveal(); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 164926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {?Element} 165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) statusBarText: function() 167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 16853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return this._sourcePosition.element; 169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 172a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Array.<!Element>} 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) statusBarItems: function() 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return []; 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 18009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!Element} 18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) defaultFocusedElement: function() 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._textEditor.defaultFocusedElement(); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get loaded() 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._loaded; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 19309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) hasContent: function() 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get textEditor() 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._textEditor; 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _ensureContentLoaded: function() 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._contentRequested) { 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contentRequested = true; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contentProvider.requestContent(this.setContent.bind(this)); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addMessage: function(msg) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messages.push(msg); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.loaded) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.addMessageToSource(msg.line - 1, msg); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clearMessages: function() 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 222c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (var line in this._rowMessageBuckets) { 223c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var bubble = this._rowMessageBuckets[line]; 224c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) bubble.detachFromEditor(); 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messages = []; 228c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._rowMessageBuckets = {}; 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {number} line 0-based 23343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @param {number=} column 23443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @param {boolean=} shouldHighlight 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 23643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) revealPosition: function(line, column, shouldHighlight) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._clearLineToScrollTo(); 239591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._clearSelectionToSet(); 24043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._positionToReveal = { line: line, column: column, shouldHighlight: shouldHighlight }; 24143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._innerRevealPositionIfNeeded(); 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) _innerRevealPositionIfNeeded: function() 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 24643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!this._positionToReveal) 24743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return; 24843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 24943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!this.loaded || !this._isEditorShowing()) 25043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return; 25143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 25243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._textEditor.revealPosition(this._positionToReveal.line, this._positionToReveal.column, this._positionToReveal.shouldHighlight); 25343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) delete this._positionToReveal; 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) _clearPositionToReveal: function() 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 25843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._textEditor.clearPositionHighlight(); 25943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) delete this._positionToReveal; 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} line 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) scrollToLine: function(line) 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 26743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._clearPositionToReveal(); 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._lineToScrollTo = line; 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._innerScrollToLineIfNeeded(); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _innerScrollToLineIfNeeded: function() 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (typeof this._lineToScrollTo === "number") { 275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this.loaded && this._isEditorShowing()) { 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.scrollToLine(this._lineToScrollTo); 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) delete this._lineToScrollTo; 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _clearLineToScrollTo: function() 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._lineToScrollTo; 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 288d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {!WebInspector.TextRange} 289d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 290d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) selection: function() 291d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 292d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return this.textEditor.selection(); 293d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 294d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 295d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 296a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.TextRange} textRange 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSelection: function(textRange) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._selectionToSet = textRange; 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._innerSetSelectionIfNeeded(); 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _innerSetSelectionIfNeeded: function() 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._selectionToSet && this.loaded && this._isEditorShowing()) { 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.setSelection(this._selectionToSet); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._selectionToSet; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 312591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _clearSelectionToSet: function() 313591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 314591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._selectionToSet; 315591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 316591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _wasShownOrLoaded: function() 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 31943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._innerRevealPositionIfNeeded(); 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._innerSetSelectionIfNeeded(); 321591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._innerScrollToLineIfNeeded(); 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTextChanged: function(oldRange, newRange) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (this._searchResultsChangedCallback) 32751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._searchResultsChangedCallback(); 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.clearMessages(); 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 331591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _simplifyMimeType: function(content, mimeType) 33253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 33353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!mimeType) 33453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return ""; 33553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (mimeType.indexOf("javascript") >= 0 || 33653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) mimeType.indexOf("jscript") >= 0 || 33753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) mimeType.indexOf("ecmascript") >= 0) 33853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return "text/javascript"; 339591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // A hack around the fact that files with "php" extension might be either standalone or html embedded php scripts. 340591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (mimeType === "text/x-php" && content.match(/\<\?.*\?\>/g)) 341591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return "application/x-httpd-php"; 34253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return mimeType; 34353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 34453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 3461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * @param {string} highlighterType 3471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) */ 3481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setHighlighterType: function(highlighterType) 3491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) { 3501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._highlighterType = highlighterType; 3511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._updateHighlighterType(""); 3521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) }, 3531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 3541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) /** 3551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * @param {string} content 3561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) */ 3571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) _updateHighlighterType: function(content) 3581e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) { 3591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._textEditor.setMimeType(this._simplifyMimeType(content, this._highlighterType)); 3601e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) }, 3611e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 3621e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) /** 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?string} content 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3651e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setContent: function(content) 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this._loaded) { 368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._loaded = true; 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._textEditor.setText(content || ""); 37053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._textEditor.markClean(); 371e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else { 372e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var firstLine = this._textEditor.firstVisibleLine(); 373e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var selection = this._textEditor.selection(); 37483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch this._textEditor.setText(content || ""); 375e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch this._textEditor.scrollToLine(firstLine); 376e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch this._textEditor.setSelection(selection); 377e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3791e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._updateHighlighterType(content || ""); 3805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.beginUpdates(); 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._setTextEditorDecorations(); 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._wasShownOrLoaded(); 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._delayedFindSearchMatches) { 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delayedFindSearchMatches(); 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._delayedFindSearchMatches; 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.onTextEditorContentLoaded(); 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.endUpdates(); 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTextEditorContentLoaded: function() {}, 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _setTextEditorDecorations: function() 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 401c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._rowMessageBuckets = {}; 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.beginUpdates(); 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._addExistingMessagesToSource(); 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.endUpdates(); 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 410591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {boolean} shouldJump 411a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {boolean} jumpBackwards 412a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.View, number)} callback 41351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number)} currentMatchChangedCallback 41451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function()} searchResultsChangedCallback 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 416a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch performSearch: function(query, shouldJump, jumpBackwards, callback, currentMatchChangedCallback, searchResultsChangedCallback) 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 41909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} query 42009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.SourceFrame} 42109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function doFindSearchMatches(query) 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = []; 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var regex = WebInspector.SourceFrame.createSearchRegex(query); 428591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchRegex = regex; 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = this._collectRegexMatches(regex); 430591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this._searchResults.length) 431591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.cancelSearchResultsHighlight(); 432a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch else if (shouldJump && jumpBackwards) 433a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this.jumpToPreviousSearchResult(); 434591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else if (shouldJump) 435591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.jumpToNextSearchResult(); 436591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else 437591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(regex, null); 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(this, this._searchResults.length); 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 441591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._resetSearch(); 442591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchMatchChangedCallback = currentMatchChangedCallback; 44351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._searchResultsChangedCallback = searchResultsChangedCallback; 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.loaded) 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) doFindSearchMatches.call(this, query); 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delayedFindSearchMatches = doFindSearchMatches.bind(this, query); 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._ensureContentLoaded(); 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 452591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _editorFocused: function() 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 454a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._resetCurrentSearchResultIndex(); 455a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 456a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 457a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _resetCurrentSearchResultIndex: function() 458a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 459591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this._searchResults.length) 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 461591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchResultIndex = -1; 462591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._currentSearchMatchChangedCallback) 463591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchMatchChangedCallback(this._currentSearchResultIndex); 464591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(this._searchRegex, null); 465591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 467591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _resetSearch: function() 468591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 469591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._delayedFindSearchMatches; 470591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._currentSearchMatchChangedCallback; 47151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) delete this._searchResultsChangedCallback; 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = []; 474591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._searchRegex; 475591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 476591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 477591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch searchCanceled: function() 478591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 479591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var range = this._currentSearchResultIndex !== -1 ? this._searchResults[this._currentSearchResultIndex] : null; 480591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._resetSearch(); 481591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this.loaded) 482591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return; 483591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.cancelSearchResultsHighlight(); 484591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (range) 485591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.setSelection(range); 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 48909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 49009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) hasSearchResults: function() 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._searchResults.length > 0; 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToFirstSearchResult: function() 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.jumpToSearchResult(0); 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToLastSearchResult: function() 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.jumpToSearchResult(this._searchResults.length - 1); 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 506a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 507a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @return {number} 508a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 509a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _searchResultIndexForCurrentSelection: function() 510a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 511a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return insertionIndexForObjectInListSortedByFunction(this._textEditor.selection(), this._searchResults, WebInspector.TextRange.comparator); 512a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 513a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToNextSearchResult: function() 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 516a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var currentIndex = this._searchResultIndexForCurrentSelection(); 517591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var nextIndex = this._currentSearchResultIndex === -1 ? currentIndex : currentIndex + 1; 518591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.jumpToSearchResult(nextIndex); 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToPreviousSearchResult: function() 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 523a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var currentIndex = this._searchResultIndexForCurrentSelection(); 524591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.jumpToSearchResult(currentIndex - 1); 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 52809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 52909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) showingFirstSearchResult: function() 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._searchResults.length && this._currentSearchResultIndex === 0; 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 53609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 53709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) showingLastSearchResult: function() 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._searchResults.length && this._currentSearchResultIndex === (this._searchResults.length - 1); 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get currentSearchResultIndex() 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._currentSearchResultIndex; 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToSearchResult: function(index) 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.loaded || !this._searchResults.length) 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = (index + this._searchResults.length) % this._searchResults.length; 553591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._currentSearchMatchChangedCallback) 554591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchMatchChangedCallback(this._currentSearchResultIndex); 555591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(this._searchRegex, this._searchResults[this._currentSearchResultIndex]); 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} text 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 56109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) replaceSelectionWith: function(text) 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var range = this._searchResults[this._currentSearchResultIndex]; 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 566591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(this._searchRegex, null); 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var newRange = this._textEditor.editRange(range, text); 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.setSelection(newRange.collapseToEnd()); 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} replacement 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) replaceAllWith: function(query, replacement) 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 577a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._resetCurrentSearchResultIndex(); 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var text = this._textEditor.text(); 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var range = this._textEditor.range(); 58100d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch var regex = WebInspector.SourceFrame.createSearchRegex(query, "g"); 58200d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch if (regex.__fromRegExpQuery) 58300d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch text = text.replace(regex, replacement); 58400d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch else 58500d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch text = text.replace(regex, function() { return replacement; }); 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 587a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var ranges = this._collectRegexMatches(regex); 588a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (!ranges.length) 589a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return; 590a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 591a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // Calculate the position of the end of the last range to be edited. 592a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var currentRangeIndex = insertionIndexForObjectInListSortedByFunction(this._textEditor.selection(), ranges, WebInspector.TextRange.comparator); 593a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastRangeIndex = mod(currentRangeIndex - 1, ranges.length); 594a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastRange = ranges[lastRangeIndex]; 595a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var replacementLineEndings = replacement.lineEndings(); 596a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var replacementLineCount = replacementLineEndings.length; 597a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastLineNumber = lastRange.startLine + replacementLineEndings.length - 1; 598a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastColumnNumber = lastRange.startColumn; 599a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (replacementLineEndings.length > 1) 600a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lastColumnNumber = replacementLineEndings[replacementLineCount - 1] - replacementLineEndings[replacementLineCount - 2] - 1; 601a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.editRange(range, text); 603a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._textEditor.revealPosition(lastLineNumber, lastColumnNumber); 604a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._textEditor.setSelection(WebInspector.TextRange.createFromLocation(lastLineNumber, lastColumnNumber)); 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _collectRegexMatches: function(regexObject) 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ranges = []; 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this._textEditor.linesCount; ++i) { 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var line = this._textEditor.line(i); 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var offset = 0; 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) do { 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var match = regexObject.exec(line); 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (match) { 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (match[0].length) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ranges.push(new WebInspector.TextRange(i, offset + match.index, i, offset + match.index + match[0].length)); 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) offset += match.index + 1; 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) line = line.substring(match.index + 1); 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } while (match && line); 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ranges; 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _addExistingMessagesToSource: function() 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var length = this._messages.length; 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < length; ++i) 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.addMessageToSource(this._messages[i].line - 1, this._messages[i]); 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 633926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 634926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} lineNumber 635c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.ConsoleMessage} consoleMessage 636926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 637c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) addMessageToSource: function(lineNumber, consoleMessage) 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber >= this._textEditor.linesCount) 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = this._textEditor.linesCount - 1; 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber < 0) 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = 0; 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 644c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!this._rowMessageBuckets[lineNumber]) 645c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._rowMessageBuckets[lineNumber] = new WebInspector.SourceFrame.RowMessageBucket(this, this._textEditor, lineNumber); 646c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var messageBucket = this._rowMessageBuckets[lineNumber]; 647c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) messageBucket.addMessage(consoleMessage); 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 650926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 651926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} lineNumber 652a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ConsoleMessage} msg 653926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeMessageFromSource: function(lineNumber, msg) 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber >= this._textEditor.linesCount) 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = this._textEditor.linesCount - 1; 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber < 0) 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = 0; 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 661c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var messageBucket = this._rowMessageBuckets[lineNumber]; 662c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!messageBucket) 663c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 664c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) messageBucket.removeMessage(msg); 665c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!messageBucket.uniqueMessagesCount()) { 666c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) messageBucket.detachFromEditor(); 667c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) delete this._rowMessageBuckets[lineNumber]; 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateLineGutterContextMenu: function(contextMenu, lineNumber) 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateTextAreaContextMenu: function(contextMenu, lineNumber) 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 67909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 68009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} from 68109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} to 68209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 68309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onJumpToPosition: function(from, to) 68409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 68509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.SourceFrame.Events.JumpHappened, { 68609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) from: from, 68709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) to: to 68809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }); 68909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 69009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inheritScrollPositions: function(sourceFrame) 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.inheritScrollPositions(sourceFrame._textEditor); 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) canEditSource: function() 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 705a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.TextRange} textRange 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectionChanged: function(textRange) 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7096f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch this._updateSourcePosition(); 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.SourceFrame.Events.SelectionChanged, textRange); 7111e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) WebInspector.notifications.dispatchEventToListeners(WebInspector.SourceFrame.Events.SelectionChanged, textRange); 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7146f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch _updateSourcePosition: function() 715926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 7166f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch var selections = this._textEditor.selections(); 7176f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (!selections.length) 718926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 7196f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (selections.length > 1) { 7206f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch this._sourcePosition.setText(WebInspector.UIString("%d selection regions", selections.length)); 7216f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return; 7226f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch } 7236f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch var textRange = selections[0]; 724926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (textRange.isEmpty()) { 72553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition.setText(WebInspector.UIString("Line %d, Column %d", textRange.endLine + 1, textRange.endColumn + 1)); 726926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 727926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 728926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) textRange = textRange.normalize(); 729926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 730926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var selectedText = this._textEditor.copyRange(textRange); 731926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (textRange.startLine === textRange.endLine) 73253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition.setText(WebInspector.UIString("%d characters selected", selectedText.length)); 733926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 73453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition.setText(WebInspector.UIString("%d lines, %d characters selected", textRange.endLine - textRange.startLine + 1, selectedText.length)); 735926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 736926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 737926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} lineNumber 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) scrollChanged: function(lineNumber) 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.SourceFrame.Events.ScrollChanged, lineNumber); 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _handleKeyDown: function(e) 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var shortcutKey = WebInspector.KeyboardShortcut.makeKeyFromEvent(e); 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var handler = this._shortcuts[shortcutKey]; 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (handler && handler()) 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) e.consume(true); 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 753d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.VBox.prototype 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 756c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame._iconClassPerLevel = {}; 757c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame._iconClassPerLevel[WebInspector.ConsoleMessage.MessageLevel.Error] = "error-icon-small"; 758c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame._iconClassPerLevel[WebInspector.ConsoleMessage.MessageLevel.Warning] = "warning-icon-small"; 759c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 760c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame._lineClassPerLevel = {}; 761c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame._lineClassPerLevel[WebInspector.ConsoleMessage.MessageLevel.Error] = "text-editor-line-with-error"; 762c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame._lineClassPerLevel[WebInspector.ConsoleMessage.MessageLevel.Warning] = "text-editor-line-with-warning"; 763c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 764c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/** 765c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @constructor 766c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.ConsoleMessage} consoleMessage 767c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 768c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame.RowMessage = function(consoleMessage) 769c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 770c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._consoleMessage = consoleMessage; 771c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._repeatCount = 1; 772c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this.element = document.createElementWithClass("div", "text-editor-row-message"); 773c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._icon = this.element.createChild("span", "text-editor-row-message-icon"); 774c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._icon.classList.add(WebInspector.SourceFrame._iconClassPerLevel[consoleMessage.level]); 775c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._repeatCountElement = this.element.createChild("span", "bubble-repeat-count hidden error"); 7769e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) var linesContainer = this.element.createChild("div", "text-editor-row-message-lines"); 7779e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) var lines = this._consoleMessage.messageText.split("\n"); 7789e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) for (var i = 0; i < lines.length; ++i) { 7799e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) var messageLine = linesContainer.createChild("div"); 7809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) messageLine.textContent = lines[i]; 7819e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) } 782c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 783c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 784c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame.RowMessage.prototype = { 785c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 786c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {!WebInspector.ConsoleMessage} 787c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 788c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) consoleMessage: function() 789c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 790c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return this._consoleMessage; 791c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 792c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 793c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 794c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {number} 795c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 796c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) repeatCount: function() 797c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 798c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return this._repeatCount; 799c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 800c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 801c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) setRepeatCount: function(repeatCount) 802c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 803c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (this._repeatCount === repeatCount) 804c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 805c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._repeatCount = repeatCount; 806c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._updateMessageRepeatCount(); 807c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 808c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 809c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) _updateMessageRepeatCount: function() 810c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 811c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._repeatCountElement.textContent = this._repeatCount; 812c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var showRepeatCount = this._repeatCount > 1; 813c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._repeatCountElement.classList.toggle("hidden", !showRepeatCount); 814c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._icon.classList.toggle("hidden", showRepeatCount); 815c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 816c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 817c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 818c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/** 819c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @constructor 820c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.SourceFrame} sourceFrame 821c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.TextEditor} textEditor 822c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {number} lineNumber 823c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 824c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame.RowMessageBucket = function(sourceFrame, textEditor, lineNumber) 825c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 826c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._sourceFrame = sourceFrame; 827c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._textEditor = textEditor; 828c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._lineHandle = textEditor.textEditorPositionHandle(lineNumber, 0); 829c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._decoration = document.createElementWithClass("div", "text-editor-line-decoration"); 830c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._decoration._messageBucket = this; 831c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._wave = this._decoration.createChild("div", "text-editor-line-decoration-wave"); 832c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._icon = this._wave.createChild("div", "text-editor-line-decoration-icon"); 833c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 834c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._textEditor.addDecoration(lineNumber, this._decoration); 835c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 836c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._messagesDescriptionElement = document.createElementWithClass("div", "text-editor-messages-description-container"); 837c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Array.<!WebInspector.SourceFrame.RowMessage>} */ 838c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._messages = []; 839c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 840c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._updateDecorationPosition(); 841c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 842c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._level = null; 843c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 844c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 845c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SourceFrame.RowMessageBucket.prototype = { 846c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) _updateDecorationPosition: function() 847c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 848c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!this._sourceFrame._isEditorShowing()) 849c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 850c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var position = this._lineHandle.resolve(); 851c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!position) 852c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 853c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var lineNumber = position.lineNumber; 854c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var lineText = this._textEditor.line(lineNumber); 855c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var lineIndent = WebInspector.TextUtils.lineIndent(lineText).length; 856c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var base = this._textEditor.cursorPositionToCoordinates(lineNumber, 0); 857c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var start = this._textEditor.cursorPositionToCoordinates(lineNumber, lineIndent); 858c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var end = this._textEditor.cursorPositionToCoordinates(lineNumber, lineText.length); 8597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @const */ 8607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var codeMirrorLinesLeftPadding = 4; 8617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._wave.style.left = (start.x - base.x + codeMirrorLinesLeftPadding) + "px"; 862c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._wave.style.width = (end.x - start.x) + "px"; 863c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 864c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 865c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 866c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {!Element} 867c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 868c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) messagesDescription: function() 869c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 870c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._messagesDescriptionElement.removeChildren(); 871c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (var i = 0; i < this._messages.length; ++i) { 872c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._messagesDescriptionElement.appendChild(this._messages[i].element); 873c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 874c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return this._messagesDescriptionElement; 875c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 876c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 877c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) detachFromEditor: function() 878c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 879c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var position = this._lineHandle.resolve(); 880c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!position) 881c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 882c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var lineNumber = position.lineNumber; 883c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (this._level) 884c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._textEditor.toggleLineClass(lineNumber, WebInspector.SourceFrame._lineClassPerLevel[this._level], false); 885c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._textEditor.removeDecoration(lineNumber, this._decoration); 886c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 887c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 888c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 889c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {number} 890c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 891c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) uniqueMessagesCount: function() 892c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 893c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return this._messages.length; 894c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 895c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 896c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 897c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.ConsoleMessage} consoleMessage 898c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 899c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) addMessage: function(consoleMessage) 900c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 901c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (var i = 0; i < this._messages.length; ++i) { 902c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var message = this._messages[i]; 903c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (message.consoleMessage().isEqual(consoleMessage)) { 904c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) message.setRepeatCount(message.repeatCount() + 1); 905c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 906c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 907c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 908c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 909c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var rowMessage = new WebInspector.SourceFrame.RowMessage(consoleMessage); 910c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._messages.push(rowMessage); 911c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._updateBucketLevel(); 912c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 913c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 914c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 915c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.ConsoleMessage} consoleMessage 916c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 917c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) removeMessage: function(consoleMessage) 918c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 919c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (var i = 0; i < this._messages.length; ++i) { 920c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var rowMessage = this._messages[i]; 921c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!rowMessage.consoleMessage().isEqual(consoleMessage)) 922c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) continue; 923c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) rowMessage.setRepeatCount(rowMessage.repeatCount() - 1); 924c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!rowMessage.repeatCount()) 925c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._messages.splice(i, 1); 926c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._updateBucketLevel(); 927c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 928c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 929c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }, 930c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 931c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) _updateBucketLevel: function() 932c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 933c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!this._messages.length) 934c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 935c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var position = this._lineHandle.resolve(); 936c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!position) 937c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 938c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 939c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var lineNumber = position.lineNumber; 940c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var maxMessage = null; 941c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (var i = 0; i < this._messages.length; ++i) { 942c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var message = this._messages[i].consoleMessage();; 943c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!maxMessage || WebInspector.ConsoleMessage.messageLevelComparator(maxMessage, message) < 0) 944c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) maxMessage = message; 945c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 946c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 947c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (this._level) { 948c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._textEditor.toggleLineClass(lineNumber, WebInspector.SourceFrame._lineClassPerLevel[this._level], false); 949c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._icon.classList.toggle(WebInspector.SourceFrame._iconClassPerLevel[this._level], false); 950c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 951c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._level = maxMessage.level; 952c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!this._level) 953c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 954c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._textEditor.toggleLineClass(lineNumber, WebInspector.SourceFrame._lineClassPerLevel[this._level], true); 955c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._icon.classList.toggle(WebInspector.SourceFrame._iconClassPerLevel[this._level], true); 956c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 957c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.TextEditorDelegate} 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.TextEditorDelegateForSourceFrame = function(sourceFrame) 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame = sourceFrame; 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.TextEditorDelegateForSourceFrame.prototype = { 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTextChanged: function(oldRange, newRange) 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.onTextChanged(oldRange, newRange); 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 975a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.TextRange} textRange 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectionChanged: function(textRange) 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.selectionChanged(textRange); 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} lineNumber 9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) scrollChanged: function(lineNumber) 9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.scrollChanged(lineNumber); 9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 990591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch editorFocused: function() 991591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 992591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._sourceFrame._editorFocused(); 993591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 994591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateLineGutterContextMenu: function(contextMenu, lineNumber) 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.populateLineGutterContextMenu(contextMenu, lineNumber); 9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateTextAreaContextMenu: function(contextMenu, lineNumber) 10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.populateTextAreaContextMenu(contextMenu, lineNumber); 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} hrefValue 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} isExternal 1008a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Element} 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) createLink: function(hrefValue, isExternal) 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var targetLocation = WebInspector.ParsedURL.completeURL(this._sourceFrame._url, hrefValue); 10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.linkifyURLAsNode(targetLocation || hrefValue, hrefValue, undefined, isExternal); 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 101609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 101709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} from 101809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} to 101909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 102009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onJumpToPosition: function(from, to) 102109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 102209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._sourceFrame.onJumpToPosition(from, to); 102309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1025