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) 31f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/codemirror.js"); 32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/css.js"); 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/javascript.js"); 34f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/xml.js"); 35f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/htmlmixed.js"); 36f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 37f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/matchbrackets.js"); 38f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/closebrackets.js"); 39f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/markselection.js"); 40f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/comment.js"); 41f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/overlay.js"); 42f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 43f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/htmlembedded.js"); 44f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/clike.js"); 45f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/coffeescript.js"); 46f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/php.js"); 47f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/python.js"); 48f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("../cm/shell.js"); 49f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("CodeMirrorUtils.js"); 50f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("CodeMirrorTextEditor.js"); 51f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox} 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @implements {WebInspector.Replaceable} 56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ContentProvider} contentProvider 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame = function(contentProvider) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.VBox.call(this); 61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this.element.classList.add("script-view"); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._url = contentProvider.contentURL(); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contentProvider = contentProvider; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var textEditorDelegate = new WebInspector.TextEditorDelegateForSourceFrame(this); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._textEditor = new WebInspector.CodeMirrorTextEditor(this._url, textEditorDelegate); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = []; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messages = []; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rowMessages = {}; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messageBubbles = {}; 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.setReadOnly(!this.canEditSource()); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._shortcuts = {}; 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false); 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition = new WebInspector.StatusBarText("", "source-frame-cursor-position"); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string=} modifiers 8800d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch * @return {!RegExp} 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame.createSearchRegex = function(query, modifiers) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var regex; 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) modifiers = modifiers || ""; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // First try creating regex if user knows the / / hint. 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 9700d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch if (/^\/.+\/$/.test(query)) { 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) regex = new RegExp(query.substring(1, query.length - 1), modifiers); 9900d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch regex.__fromRegExpQuery = true; 10000d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch } 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } catch (e) { 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Silent catch. 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Otherwise just do case-insensitive search. 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!regex) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) regex = createPlainTextSearchRegex(query, "i" + modifiers); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return regex; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame.Events = { 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ScrollChanged: "ScrollChanged", 11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SelectionChanged: "SelectionChanged", 11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) JumpHappened: "JumpHappened" 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.SourceFrame.prototype = { 1195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 1205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {number} key 1215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {function()} handler 1225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 1235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) addShortcut: function(key, handler) 1245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 1255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._shortcuts[key] = handler; 1265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 1275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) wasShown: function() 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._ensureContentLoaded(); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.show(this.element); 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._editorAttached = true; 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._wasShownOrLoaded(); 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {boolean} 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _isEditorShowing: function() 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this.isShowing() && this._editorAttached; 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willHide: function() 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.View.prototype.willHide.call(this); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._clearPositionToReveal(); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {?Element} 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) statusBarText: function() 155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 15653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return this._sourcePosition.element; 157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Array.<!Element>} 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) statusBarItems: function() 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return []; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 16809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!Element} 16909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) defaultFocusedElement: function() 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._textEditor.defaultFocusedElement(); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get loaded() 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._loaded; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 18209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) hasContent: function() 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get textEditor() 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._textEditor; 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _ensureContentLoaded: function() 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._contentRequested) { 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contentRequested = true; 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contentProvider.requestContent(this.setContent.bind(this)); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addMessage: function(msg) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messages.push(msg); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.loaded) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.addMessageToSource(msg.line - 1, msg); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clearMessages: function() 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var line in this._messageBubbles) { 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var bubble = this._messageBubbles[line]; 212926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var lineNumber = parseInt(line, 10); 213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._textEditor.removeDecoration(lineNumber, bubble); 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messages = []; 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rowMessages = {}; 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messageBubbles = {}; 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} line 22343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @param {number=} column 22443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @param {boolean=} shouldHighlight 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 22643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) revealPosition: function(line, column, shouldHighlight) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._clearLineToScrollTo(); 229591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._clearSelectionToSet(); 23043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._positionToReveal = { line: line, column: column, shouldHighlight: shouldHighlight }; 23143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._innerRevealPositionIfNeeded(); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) _innerRevealPositionIfNeeded: function() 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 23643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!this._positionToReveal) 23743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return; 23843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 23943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!this.loaded || !this._isEditorShowing()) 24043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return; 24143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 24243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._textEditor.revealPosition(this._positionToReveal.line, this._positionToReveal.column, this._positionToReveal.shouldHighlight); 24343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) delete this._positionToReveal; 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) _clearPositionToReveal: function() 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 24843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._textEditor.clearPositionHighlight(); 24943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) delete this._positionToReveal; 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} line 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) scrollToLine: function(line) 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 25743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._clearPositionToReveal(); 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._lineToScrollTo = line; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._innerScrollToLineIfNeeded(); 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _innerScrollToLineIfNeeded: function() 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (typeof this._lineToScrollTo === "number") { 265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this.loaded && this._isEditorShowing()) { 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.scrollToLine(this._lineToScrollTo); 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) delete this._lineToScrollTo; 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _clearLineToScrollTo: function() 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._lineToScrollTo; 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 278d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {!WebInspector.TextRange} 279d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 280d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) selection: function() 281d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 282d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return this.textEditor.selection(); 283d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 284d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 285d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 286a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.TextRange} textRange 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSelection: function(textRange) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._selectionToSet = textRange; 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._innerSetSelectionIfNeeded(); 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _innerSetSelectionIfNeeded: function() 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._selectionToSet && this.loaded && this._isEditorShowing()) { 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.setSelection(this._selectionToSet); 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._selectionToSet; 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 302591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _clearSelectionToSet: function() 303591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 304591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._selectionToSet; 305591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 306591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _wasShownOrLoaded: function() 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 30943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._innerRevealPositionIfNeeded(); 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._innerSetSelectionIfNeeded(); 311591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._innerScrollToLineIfNeeded(); 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTextChanged: function(oldRange, newRange) 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 31651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (this._searchResultsChangedCallback && !this._isReplacing) 31751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._searchResultsChangedCallback(); 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.clearMessages(); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 321591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _simplifyMimeType: function(content, mimeType) 32253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 32353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!mimeType) 32453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return ""; 32553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (mimeType.indexOf("javascript") >= 0 || 32653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) mimeType.indexOf("jscript") >= 0 || 32753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) mimeType.indexOf("ecmascript") >= 0) 32853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return "text/javascript"; 329591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // A hack around the fact that files with "php" extension might be either standalone or html embedded php scripts. 330591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (mimeType === "text/x-php" && content.match(/\<\?.*\?\>/g)) 331591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return "application/x-httpd-php"; 33253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return mimeType; 33353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 33453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 3361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * @param {string} highlighterType 3371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) */ 3381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setHighlighterType: function(highlighterType) 3391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) { 3401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._highlighterType = highlighterType; 3411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._updateHighlighterType(""); 3421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) }, 3431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 3441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) /** 3451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * @param {string} content 3461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) */ 3471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) _updateHighlighterType: function(content) 3481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) { 3491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._textEditor.setMimeType(this._simplifyMimeType(content, this._highlighterType)); 3501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) }, 3511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 3521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) /** 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?string} content 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setContent: function(content) 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this._loaded) { 358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._loaded = true; 359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._textEditor.setText(content || ""); 36053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._textEditor.markClean(); 361e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else { 362e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var firstLine = this._textEditor.firstVisibleLine(); 363e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var selection = this._textEditor.selection(); 36483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch this._textEditor.setText(content || ""); 365e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch this._textEditor.scrollToLine(firstLine); 366e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch this._textEditor.setSelection(selection); 367e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3691e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) this._updateHighlighterType(content || ""); 3705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.beginUpdates(); 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._setTextEditorDecorations(); 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._wasShownOrLoaded(); 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._delayedFindSearchMatches) { 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delayedFindSearchMatches(); 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._delayedFindSearchMatches; 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.onTextEditorContentLoaded(); 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.endUpdates(); 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTextEditorContentLoaded: function() {}, 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _setTextEditorDecorations: function() 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rowMessages = {}; 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._messageBubbles = {}; 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.beginUpdates(); 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._addExistingMessagesToSource(); 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.endUpdates(); 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 403591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {boolean} shouldJump 404a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {boolean} jumpBackwards 405a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.View, number)} callback 40651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function(number)} currentMatchChangedCallback 40751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * @param {function()} searchResultsChangedCallback 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 409a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch performSearch: function(query, shouldJump, jumpBackwards, callback, currentMatchChangedCallback, searchResultsChangedCallback) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 41209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} query 41309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.SourceFrame} 41409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function doFindSearchMatches(query) 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = []; 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var regex = WebInspector.SourceFrame.createSearchRegex(query); 421591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._searchRegex = regex; 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = this._collectRegexMatches(regex); 423591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this._searchResults.length) 424591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.cancelSearchResultsHighlight(); 425a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch else if (shouldJump && jumpBackwards) 426a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this.jumpToPreviousSearchResult(); 427591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else if (shouldJump) 428591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.jumpToNextSearchResult(); 429591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch else 430591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(regex, null); 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(this, this._searchResults.length); 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 434591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._resetSearch(); 435591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchMatchChangedCallback = currentMatchChangedCallback; 43651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) this._searchResultsChangedCallback = searchResultsChangedCallback; 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.loaded) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) doFindSearchMatches.call(this, query); 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delayedFindSearchMatches = doFindSearchMatches.bind(this, query); 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._ensureContentLoaded(); 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _editorFocused: function() 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 447a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._resetCurrentSearchResultIndex(); 448a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 449a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 450a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _resetCurrentSearchResultIndex: function() 451a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 452591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this._searchResults.length) 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 454591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchResultIndex = -1; 455591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._currentSearchMatchChangedCallback) 456591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchMatchChangedCallback(this._currentSearchResultIndex); 457591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(this._searchRegex, null); 458591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 460591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _resetSearch: function() 461591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 462591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._delayedFindSearchMatches; 463591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._currentSearchMatchChangedCallback; 46451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) delete this._searchResultsChangedCallback; 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = []; 467591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch delete this._searchRegex; 468591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 469591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 470591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch searchCanceled: function() 471591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 472591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var range = this._currentSearchResultIndex !== -1 ? this._searchResults[this._currentSearchResultIndex] : null; 473591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._resetSearch(); 474591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!this.loaded) 475591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return; 476591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.cancelSearchResultsHighlight(); 477591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (range) 478591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.setSelection(range); 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 48209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 48309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) hasSearchResults: function() 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._searchResults.length > 0; 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToFirstSearchResult: function() 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.jumpToSearchResult(0); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToLastSearchResult: function() 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.jumpToSearchResult(this._searchResults.length - 1); 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 499a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 500a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @return {number} 501a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 502a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _searchResultIndexForCurrentSelection: function() 503a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 504a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return insertionIndexForObjectInListSortedByFunction(this._textEditor.selection(), this._searchResults, WebInspector.TextRange.comparator); 505a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 506a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToNextSearchResult: function() 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 509a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var currentIndex = this._searchResultIndexForCurrentSelection(); 510591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var nextIndex = this._currentSearchResultIndex === -1 ? currentIndex : currentIndex + 1; 511591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.jumpToSearchResult(nextIndex); 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToPreviousSearchResult: function() 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 516a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var currentIndex = this._searchResultIndexForCurrentSelection(); 517591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.jumpToSearchResult(currentIndex - 1); 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 52109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 52209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) showingFirstSearchResult: function() 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._searchResults.length && this._currentSearchResultIndex === 0; 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 52909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 53009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) showingLastSearchResult: function() 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._searchResults.length && this._currentSearchResultIndex === (this._searchResults.length - 1); 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get currentSearchResultIndex() 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._currentSearchResultIndex; 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToSearchResult: function(index) 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.loaded || !this._searchResults.length) 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = (index + this._searchResults.length) % this._searchResults.length; 546591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._currentSearchMatchChangedCallback) 547591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._currentSearchMatchChangedCallback(this._currentSearchResultIndex); 548591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(this._searchRegex, this._searchResults[this._currentSearchResultIndex]); 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} text 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 55409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) replaceSelectionWith: function(text) 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var range = this._searchResults[this._currentSearchResultIndex]; 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 559591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._textEditor.highlightSearchResults(this._searchRegex, null); 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._isReplacing = true; 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var newRange = this._textEditor.editRange(range, text); 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._isReplacing; 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.setSelection(newRange.collapseToEnd()); 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} replacement 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) replaceAllWith: function(query, replacement) 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 574a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._resetCurrentSearchResultIndex(); 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var text = this._textEditor.text(); 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var range = this._textEditor.range(); 57800d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch var regex = WebInspector.SourceFrame.createSearchRegex(query, "g"); 57900d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch if (regex.__fromRegExpQuery) 58000d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch text = text.replace(regex, replacement); 58100d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch else 58200d3faa021f1e9934a353eeebe4e57e354856cf6Ben Murdoch text = text.replace(regex, function() { return replacement; }); 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 584a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var ranges = this._collectRegexMatches(regex); 585a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (!ranges.length) 586a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return; 587a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 588a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // Calculate the position of the end of the last range to be edited. 589a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var currentRangeIndex = insertionIndexForObjectInListSortedByFunction(this._textEditor.selection(), ranges, WebInspector.TextRange.comparator); 590a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastRangeIndex = mod(currentRangeIndex - 1, ranges.length); 591a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastRange = ranges[lastRangeIndex]; 592a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var replacementLineEndings = replacement.lineEndings(); 593a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var replacementLineCount = replacementLineEndings.length; 594a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastLineNumber = lastRange.startLine + replacementLineEndings.length - 1; 595a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var lastColumnNumber = lastRange.startColumn; 596a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (replacementLineEndings.length > 1) 597a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch lastColumnNumber = replacementLineEndings[replacementLineCount - 1] - replacementLineEndings[replacementLineCount - 2] - 1; 598a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._isReplacing = true; 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.editRange(range, text); 601a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._textEditor.revealPosition(lastLineNumber, lastColumnNumber); 602a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._textEditor.setSelection(WebInspector.TextRange.createFromLocation(lastLineNumber, lastColumnNumber)); 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._isReplacing; 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _collectRegexMatches: function(regexObject) 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ranges = []; 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this._textEditor.linesCount; ++i) { 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var line = this._textEditor.line(i); 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var offset = 0; 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) do { 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var match = regexObject.exec(line); 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (match) { 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (match[0].length) 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ranges.push(new WebInspector.TextRange(i, offset + match.index, i, offset + match.index + match[0].length)); 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) offset += match.index + 1; 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) line = line.substring(match.index + 1); 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } while (match && line); 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ranges; 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _addExistingMessagesToSource: function() 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var length = this._messages.length; 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < length; ++i) 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.addMessageToSource(this._messages[i].line - 1, this._messages[i]); 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 632926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 633926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} lineNumber 634a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ConsoleMessage} msg 635926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addMessageToSource: function(lineNumber, msg) 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber >= this._textEditor.linesCount) 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = this._textEditor.linesCount - 1; 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber < 0) 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = 0; 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rowMessages = this._rowMessages[lineNumber]; 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!rowMessages) { 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rowMessages = []; 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rowMessages[lineNumber] = rowMessages; 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < rowMessages.length; ++i) { 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (rowMessages[i].consoleMessage.isEqual(msg)) { 65107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch rowMessages[i].repeatCount++; 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateMessageRepeatCount(rowMessages[i]); 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rowMessage = { consoleMessage: msg }; 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rowMessages.push(rowMessage); 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 660926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._textEditor.beginUpdates(); 661926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var messageBubbleElement = this._messageBubbles[lineNumber]; 662926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!messageBubbleElement) { 663926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) messageBubbleElement = document.createElement("div"); 664926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) messageBubbleElement.className = "webkit-html-message-bubble"; 665926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._messageBubbles[lineNumber] = messageBubbleElement; 666926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._textEditor.addDecoration(lineNumber, messageBubbleElement); 667926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 668926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 66953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var imageElement = document.createElement("div"); 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (msg.level) { 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInspector.ConsoleMessage.MessageLevel.Error: 672a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) messageBubbleElement.classList.add("webkit-html-error-message"); 67353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) imageElement.className = "error-icon-small"; 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInspector.ConsoleMessage.MessageLevel.Warning: 676a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) messageBubbleElement.classList.add("webkit-html-warning-message"); 67753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) imageElement.className = "warning-icon-small"; 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var messageLineElement = document.createElement("div"); 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) messageLineElement.className = "webkit-html-message-line"; 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) messageBubbleElement.appendChild(messageLineElement); 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Create the image element in the Inspector's document so we can use relative image URLs. 68653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) messageLineElement.appendChild(imageElement); 687d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) messageLineElement.appendChild(document.createTextNode(msg.messageText)); 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rowMessage.element = messageLineElement; 69007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch rowMessage.repeatCount = 1; 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateMessageRepeatCount(rowMessage); 692926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._textEditor.endUpdates(); 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateMessageRepeatCount: function(rowMessage) 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (rowMessage.repeatCount < 2) 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!rowMessage.repeatCountElement) { 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var repeatCountElement = document.createElement("span"); 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rowMessage.element.appendChild(repeatCountElement); 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rowMessage.repeatCountElement = repeatCountElement; 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rowMessage.repeatCountElement.textContent = WebInspector.UIString(" (repeated %d times)", rowMessage.repeatCount); 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 709926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 710926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} lineNumber 711a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ConsoleMessage} msg 712926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeMessageFromSource: function(lineNumber, msg) 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber >= this._textEditor.linesCount) 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = this._textEditor.linesCount - 1; 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (lineNumber < 0) 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber = 0; 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rowMessages = this._rowMessages[lineNumber]; 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; rowMessages && i < rowMessages.length; ++i) { 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rowMessage = rowMessages[i]; 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (rowMessage.consoleMessage !== msg) 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var messageLineElement = rowMessage.element; 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var messageBubbleElement = messageLineElement.parentElement; 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) messageBubbleElement.removeChild(messageLineElement); 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rowMessages.remove(rowMessage); 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!rowMessages.length) 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._rowMessages[lineNumber]; 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!messageBubbleElement.childElementCount) { 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.removeDecoration(lineNumber, messageBubbleElement); 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._messageBubbles[lineNumber]; 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateLineGutterContextMenu: function(contextMenu, lineNumber) 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateTextAreaContextMenu: function(contextMenu, lineNumber) 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 74809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 74909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} from 75009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} to 75109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 75209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onJumpToPosition: function(from, to) 75309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 75409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.SourceFrame.Events.JumpHappened, { 75509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) from: from, 75609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) to: to 75709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }); 75809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 75909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inheritScrollPositions: function(sourceFrame) 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._textEditor.inheritScrollPositions(sourceFrame._textEditor); 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) canEditSource: function() 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 774a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.TextRange} textRange 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectionChanged: function(textRange) 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7786f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch this._updateSourcePosition(); 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.SourceFrame.Events.SelectionChanged, textRange); 7801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) WebInspector.notifications.dispatchEventToListeners(WebInspector.SourceFrame.Events.SelectionChanged, textRange); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7836f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch _updateSourcePosition: function() 784926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 7856f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch var selections = this._textEditor.selections(); 7866f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (!selections.length) 787926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 7886f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (selections.length > 1) { 7896f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch this._sourcePosition.setText(WebInspector.UIString("%d selection regions", selections.length)); 7906f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return; 7916f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch } 7926f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch var textRange = selections[0]; 793926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (textRange.isEmpty()) { 79453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition.setText(WebInspector.UIString("Line %d, Column %d", textRange.endLine + 1, textRange.endColumn + 1)); 795926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 796926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 797926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) textRange = textRange.normalize(); 798926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 799926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var selectedText = this._textEditor.copyRange(textRange); 800926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (textRange.startLine === textRange.endLine) 80153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition.setText(WebInspector.UIString("%d characters selected", selectedText.length)); 802926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 80353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._sourcePosition.setText(WebInspector.UIString("%d lines, %d characters selected", textRange.endLine - textRange.startLine + 1, selectedText.length)); 804926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 805926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 806926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} lineNumber 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) scrollChanged: function(lineNumber) 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.SourceFrame.Events.ScrollChanged, lineNumber); 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _handleKeyDown: function(e) 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var shortcutKey = WebInspector.KeyboardShortcut.makeKeyFromEvent(e); 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var handler = this._shortcuts[shortcutKey]; 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (handler && handler()) 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) e.consume(true); 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 822d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.VBox.prototype 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.TextEditorDelegate} 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.TextEditorDelegateForSourceFrame = function(sourceFrame) 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame = sourceFrame; 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.TextEditorDelegateForSourceFrame.prototype = { 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTextChanged: function(oldRange, newRange) 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.onTextChanged(oldRange, newRange); 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 842a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.TextRange} textRange 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectionChanged: function(textRange) 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.selectionChanged(textRange); 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} lineNumber 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) scrollChanged: function(lineNumber) 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.scrollChanged(lineNumber); 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 857591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch editorFocused: function() 858591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 859591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._sourceFrame._editorFocused(); 860591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 861591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateLineGutterContextMenu: function(contextMenu, lineNumber) 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.populateLineGutterContextMenu(contextMenu, lineNumber); 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateTextAreaContextMenu: function(contextMenu, lineNumber) 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sourceFrame.populateTextAreaContextMenu(contextMenu, lineNumber); 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} hrefValue 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} isExternal 875a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Element} 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) createLink: function(hrefValue, isExternal) 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var targetLocation = WebInspector.ParsedURL.completeURL(this._sourceFrame._url, hrefValue); 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.linkifyURLAsNode(targetLocation || hrefValue, hrefValue, undefined, isExternal); 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 88409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} from 88509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?WebInspector.TextRange} to 88609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 88709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onJumpToPosition: function(from, to) 88809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 88909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._sourceFrame.onJumpToPosition(from, to); 89009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 892f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 893f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("GoToLineDialog.js"); 894f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("ResourceView.js"); 895f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("FontView.js"); 896f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuimportScript("ImageView.js"); 897