Changeset 83288 in webkit


Ignore:
Timestamp:
Apr 8, 2011 5:31:41 AM (13 years ago)
Author:
podivilov@chromium.org
Message:

2011-04-07 Pavel Podivilov <podivilov@chromium.org>

Reviewed by Pavel Feldman.

Web Inspector: make SourceFrame TextViewer's delegate for editing operations.
https://bugs.webkit.org/show_bug.cgi?id=58026

This is the first step of decoupling TextViewer from SourceFrame.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/inspector/debugger/live-edit.html

    r82590 r83288  
    6969    {
    7070        sourceFrame._textViewer.readOnly = false;
    71         sourceFrame._startEditing();
     71        sourceFrame.startEditing();
    7272        var newText = sourceFrame._textModel.text.replace(string, replacement);
    7373        sourceFrame._textModel.setText(null, newText);
  • trunk/Source/WebCore/ChangeLog

    r83287 r83288  
     12011-04-07  Pavel Podivilov  <podivilov@chromium.org>
     2
     3        Reviewed by Pavel Feldman.
     4
     5        Web Inspector: make SourceFrame TextViewer's delegate for editing operations.
     6        https://bugs.webkit.org/show_bug.cgi?id=58026
     7
     8        This is the first step of decoupling TextViewer from SourceFrame.
     9
     10        * inspector/front-end/SourceFrame.js:
     11        (WebInspector.SourceFrame):
     12        (WebInspector.SourceFrame.prototype.show):
     13        (WebInspector.SourceFrame.prototype.hide):
     14        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
     15        (WebInspector.SourceFrame.prototype.contentEditable):
     16        (WebInspector.SourceFrame.prototype.startEditing):
     17        (WebInspector.SourceFrame.prototype.endEditing):
     18        (WebInspector.SourceFrame.prototype._createTextViewer):
     19        (WebInspector.SourceFrame.prototype._handleSave):
     20        (WebInspector.SourceFrame.prototype._handleRevertEditing):
     21        * inspector/front-end/TextViewer.js:
     22        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
     23        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
     24        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
     25        (WebInspector.TextViewer.prototype._doubleClick):
     26        (WebInspector.TextViewerDelegate):
     27        (WebInspector.TextViewerDelegate.prototype.contentEditable):
     28        (WebInspector.TextViewerDelegate.prototype.startEditing):
     29        (WebInspector.TextViewerDelegate.prototype.endEditing):
     30        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
     31        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
     32        * inspector/front-end/inspector.html:
     33
    1342011-04-08  Leandro Gracia Gil  <leandrogracia@chromium.org>
    235
  • trunk/Source/WebCore/inspector/front-end/SourceFrame.js

    r82932 r83288  
    3131WebInspector.SourceFrame = function(delegate, url)
    3232{
    33     WebInspector.View.call(this);
    34 
    35     this.element.addStyleClass("script-view");
     33    WebInspector.TextViewerDelegate.call(this);
    3634
    3735    this._delegate = delegate;
     
    5149
    5250    this._registerShortcuts();
    53     this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false);
    5451}
    5552
     
    6259    show: function(parentElement)
    6360    {
    64         WebInspector.View.prototype.show.call(this, parentElement);
     61        this._parentElement = parentElement;
    6562
    6663        this._ensureContentLoaded();
     
    7168            if (this._scrollLeft)
    7269                this._textViewer.scrollLeft = this._scrollLeft;
     70            this._textViewer.show(parentElement);
    7371            this._textViewer.resize();
    7472        }
     
    7775    hide: function()
    7876    {
     77        delete this._parentElement;
     78
    7979        if (this._textViewer) {
    8080            this._scrollTop = this._textViewer.scrollTop;
    8181            this._scrollLeft = this._textViewer.scrollLeft;
    8282            this._textViewer.freeCachedElements();
    83         }
    84 
    85         WebInspector.View.prototype.hide.call(this);
     83            this._textViewer.hide();
     84        }
    8685
    8786        this._hidePopup();
    8887        this._clearLineHighlight();
     88    },
     89
     90    detach: function()
     91    {
     92        delete this._parentElement;
     93
     94        if (this._textViewer)
     95            this._textViewer.detach();
     96    },
     97
     98    get element()
     99    {
     100        return this._textViewer.element;
    89101    },
    90102
     
    212224    },
    213225
    214     _startEditing: function()
     226    isContentEditable: function()
     227    {
     228        return this._delegate.canEditScriptSource();
     229    },
     230
     231    startEditing: function()
    215232    {
    216233        if (!this._viewerState) {
     
    223240    },
    224241
    225     _endEditing: function(oldRange, newRange)
     242    endEditing: function(oldRange, newRange)
    226243    {
    227244        // Adjust execution line number.
     
    267284        this._textModel.setText(null, content);
    268285
    269         this._textViewer = new WebInspector.TextViewer(this._textModel, WebInspector.platform, this._url);
    270         this._textViewer.startEditingListener = this._startEditing.bind(this);
    271         this._textViewer.endEditingListener = this._endEditing.bind(this);
     286        this._textViewer = new WebInspector.TextViewer(this._textModel, WebInspector.platform, this._url, this);
    272287
    273288        var element = this._textViewer.element;
     289        element.addStyleClass("script-view");
    274290        if (this._delegate.debuggingSupported()) {
    275291            element.addEventListener("contextmenu", this._contextMenu.bind(this), true);
     
    278294            element.addEventListener("scroll", this._scroll.bind(this), true);
    279295        }
    280 
    281         if (this._delegate.canEditScriptSource())
    282             element.addEventListener("dblclick", this._doubleClick.bind(this), true);
    283 
    284         this.element.appendChild(element);
     296        element.addEventListener("keydown", this._handleKeyDown.bind(this), false);
    285297
    286298        this._textViewer.beginUpdates();
     
    305317
    306318        this._textViewer.endUpdates();
     319
     320        if (this._parentElement)
     321            this.show(this._parentElement)
    307322    },
    308323
     
    892907                this._textViewer.readOnly = false;
    893908                this._delegate.setScriptSourceIsBeingEdited(true);
    894                 WebInspector.log(error, WebInspector.ConsoleMessage.MessageLevel.Error);
     909                WebInspector.log(error.data[0], WebInspector.ConsoleMessage.MessageLevel.Error);
    895910                WebInspector.showConsole();
    896911            }
     
    909924        this._delegate.setScriptSourceIsBeingEdited(false);
    910925        return true;
    911     },
    912 
    913     _doubleClick: function(event)
    914     {
    915         if (!this._delegate.canEditScriptSource())
    916             return;
    917 
    918         var lineRow = event.target.enclosingNodeOrSelfWithClass("webkit-line-content");
    919         if (!lineRow)
    920             return;  // Do not trigger editing from line numbers.
    921 
    922         if (this._textViewer.readOnly) {
    923             this._textViewer.readOnly = false;
    924             window.getSelection().collapseToStart();
    925         }
    926926    }
    927927}
    928928
    929 WebInspector.SourceFrame.prototype.__proto__ = WebInspector.View.prototype;
     929WebInspector.SourceFrame.prototype.__proto__ = WebInspector.TextViewerDelegate.prototype;
    930930
    931931
  • trunk/Source/WebCore/inspector/front-end/TextViewer.js

    r83285 r83288  
    3030 */
    3131
    32 WebInspector.TextViewer = function(textModel, platform, url)
     32WebInspector.TextViewer = function(textModel, platform, url, delegate)
    3333{
     34    WebInspector.View.call(this);
     35
    3436    this._textModel = textModel;
    3537    this._textModel.changeListener = this._textChanged.bind(this);
    36 
    37     this.element = document.createElement("div");
     38    this._delegate = delegate;
     39
    3840    this.element.className = "text-editor monospace";
    3941
     
    5052    this._gutterPanel.element.addEventListener("mousewheel", function(e) {
    5153        this._mainPanel.element.dispatchEvent(e);
    52     }.bind(this), false)
     54    }.bind(this), false);
     55
     56    this.element.addEventListener("dblclick", this._doubleClick.bind(this), true);
    5357}
    5458
     
    6771    {
    6872        return this._mainPanel.readOnly;
    69     },
    70 
    71     set startEditingListener(startEditingListener)
    72     {
    73         this._startEditingListener = startEditingListener;
    74     },
    75 
    76     set endEditingListener(endEditingListener)
    77     {
    78         this._endEditingListener = endEditingListener;
    7973    },
    8074
     
    176170        this._internalTextChangeMode = true;
    177171
    178         if (this._startEditingListener)
    179             this._startEditingListener();
     172        this._delegate.startEditing();
    180173    },
    181174
     
    188181        this._updatePanelOffsets();
    189182
    190         if (this._endEditingListener)
    191             this._endEditingListener(oldRange, newRange);
     183        this._delegate.endEditing(oldRange, newRange);
    192184    },
    193185
     
    231223                gutterChunk.element.style.removeProperty("height");
    232224        }
     225    },
     226
     227    _doubleClick: function(event)
     228    {
     229        if (!this._delegate.isContentEditable())
     230            return;
     231
     232        var lineRow = event.target.enclosingNodeOrSelfWithClass("webkit-line-content");
     233        if (!lineRow)
     234            return;  // Do not trigger editing from line numbers.
     235
     236        if (this.readOnly) {
     237            this.readOnly = false;
     238            window.getSelection().collapseToStart();
     239        }
    233240    }
    234241}
     242
     243WebInspector.TextViewer.prototype.__proto__ = WebInspector.View.prototype;
     244
     245WebInspector.TextViewerDelegate = function()
     246{
     247}
     248
     249WebInspector.TextViewerDelegate.prototype = {
     250    isContentEditable: function()
     251    {
     252        // Should be implemented by subclasses.
     253    },
     254
     255    startEditing: function()
     256    {
     257        // Should be implemented by subclasses.
     258    },
     259
     260    endEditing: function(oldRange, newRange)
     261    {
     262        // Should be implemented by subclasses.
     263    }
     264}
     265
     266WebInspector.TextViewerDelegate.prototype.__proto__ = WebInspector.Object.prototype;
    235267
    236268WebInspector.TextEditorChunkedPanel = function(textModel)
     
    12701302            delete lineRow.lineNumber;
    12711303        }
    1272  
     1304
    12731305        if (this._dirtyLines) {
    12741306            this._dirtyLines.start = Math.min(this._dirtyLines.start, startLine);
  • trunk/Source/WebCore/inspector/front-end/inspector.html

    r83176 r83288  
    101101    <script type="text/javascript" src="NetworkPanel.js"></script>
    102102    <script type="text/javascript" src="InjectedFakeWorker.js"></script>
     103    <script type="text/javascript" src="TextViewer.js"></script>
    103104    <script type="text/javascript" src="SourceFrame.js"></script>
    104105    <script type="text/javascript" src="ResourceView.js"></script>
     
    127128    <script type="text/javascript" src="TextEditorModel.js"></script>
    128129    <script type="text/javascript" src="TextEditorHighlighter.js"></script>
    129     <script type="text/javascript" src="TextViewer.js"></script>
    130130    <script type="text/javascript" src="SourceTokenizer.js"></script>
    131131    <script type="text/javascript" src="SourceCSSTokenizer.js"></script>
Note: See TracChangeset for help on using the changeset viewer.