⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 117750 in webkit


Ignore:
Timestamp:
May 21, 2012, 1:55:58 AM (14 years ago)
Author:
pfeldman@chromium.org
Message:

Web Inspector: implement revision history view.
https://bugs.webkit.org/show_bug.cgi?id=86966

Reviewed by Yury Semikhatsky.

Added revision view into the drawer. It now lists all the revisions
along with the inline diffs. Once source panel is enabled by default,
this view will completely substitute the one in the resources panel.
See the screenshot attached. View is updated when revisions are added
and when editor view is switched.

  • English.lproj/localizedStrings.js:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • inspector/compile-front-end.py:
  • inspector/front-end/AdvancedSearchController.js:

(WebInspector.FileBasedSearchResultsPane.prototype._appendSearchMatches):

  • inspector/front-end/ContextMenu.js:

(WebInspector.ContextMenu.prototype._itemSelected):
(WebInspector.ContextMenu.prototype.appendApplicableItems):
(WebInspector.ContextMenu.Provider.prototype.appendApplicableItems):
(WebInspector.ContextMenu.registerProvider):

  • inspector/front-end/JavaScriptSourceFrame.js:

(WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):

  • inspector/front-end/Resource.js:

(WebInspector.ResourceRevision.prototype.revertToThis):

  • inspector/front-end/RevisionHistoryView.js: Added.

(WebInspector.RevisionHistoryView):
(WebInspector.RevisionHistoryView.showHistory):
(WebInspector.RevisionHistoryView.uiSourceCodeSelected):
(WebInspector.RevisionHistoryView.prototype._revisionAdded):
(WebInspector.RevisionHistoryView.prototype._onclose):
(WebInspector.RevisionHistoryTreeElement.else.revert):
(WebInspector.RevisionHistoryTreeElement):
(WebInspector.RevisionHistoryTreeElement.prototype.onexpand.step1):
(WebInspector.RevisionHistoryTreeElement.prototype.onexpand.step2):
(WebInspector.RevisionHistoryTreeElement.prototype.onexpand):
(WebInspector.RevisionHistoryTreeElement.prototype._createLine):
(WebInspector.RevisionHistoryTreeElement.prototype._diff.popsym):
(WebInspector.RevisionHistoryTreeElement.prototype._diff):

  • inspector/front-end/ScriptsPanel.js:

(WebInspector.ScriptsPanel.prototype._editorSelected):
(WebInspector.ScriptsPanel.prototype.registerUISourceCodeProvider):
(WebInspector.ScriptsPanel.prototype._showLocalHistory):
(WebInspector.ScriptsPanel.prototype.appendApplicableItems):

  • inspector/front-end/StylesPanel.js:

(WebInspector.StyleSourceFrame.prototype._contentChanged):
(WebInspector.StyleSourceFrame.prototype.populateTextAreaContextMenu):

  • inspector/front-end/WebKit.qrc:
  • inspector/front-end/inspector.css:

(#search-results-pane-file-based .search-result):
(#search-results-pane-file-based .search-result:hover):
(#search-results-pane-file-based .search-match:hover):
(#search-results-pane-file-based .search-match .search-match-content):

  • inspector/front-end/inspector.html:
  • inspector/front-end/scriptsPanel.css:

(.outline-disclosure.revision-history-drawer):
(.outline-disclosure.revision-history-drawer ol):
(.outline-disclosure.revision-history-drawer > ol):
(.outline-disclosure.revision-history-drawer li):
(.outline-disclosure.revision-history-drawer li.parent):
(.revision-history-link):
(.outline-disclosure.revision-history-drawer .revision-history-line):
(.revision-history-drawer .webkit-line-number):
(.revision-history-line-added):
(.revision-history-line-removed):

  • inspector/front-end/textViewer.css:

(.webkit-added-line.webkit-line-number):
(.webkit-removed-line.webkit-line-number):
(.webkit-changed-line.webkit-line-number):

Location:
trunk/Source/WebCore
Files:
2 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r117749 r117750  
     12012-05-21  Pavel Feldman  <pfeldman@chromium.org>
     2
     3        Web Inspector: implement revision history view.
     4        https://bugs.webkit.org/show_bug.cgi?id=86966
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        Added revision view into the drawer. It now lists all the revisions
     9        along with the inline diffs. Once source panel is enabled by default,
     10        this view will completely substitute the one in the resources panel.
     11        See the screenshot attached. View is updated when revisions are added
     12        and when editor view is switched.
     13
     14        * English.lproj/localizedStrings.js:
     15        * WebCore.gypi:
     16        * WebCore.vcproj/WebCore.vcproj:
     17        * inspector/compile-front-end.py:
     18        * inspector/front-end/AdvancedSearchController.js:
     19        (WebInspector.FileBasedSearchResultsPane.prototype._appendSearchMatches):
     20        * inspector/front-end/ContextMenu.js:
     21        (WebInspector.ContextMenu.prototype._itemSelected):
     22        (WebInspector.ContextMenu.prototype.appendApplicableItems):
     23        (WebInspector.ContextMenu.Provider.prototype.appendApplicableItems):
     24        (WebInspector.ContextMenu.registerProvider):
     25        * inspector/front-end/JavaScriptSourceFrame.js:
     26        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
     27        * inspector/front-end/Resource.js:
     28        (WebInspector.ResourceRevision.prototype.revertToThis):
     29        * inspector/front-end/RevisionHistoryView.js: Added.
     30        (WebInspector.RevisionHistoryView):
     31        (WebInspector.RevisionHistoryView.showHistory):
     32        (WebInspector.RevisionHistoryView.uiSourceCodeSelected):
     33        (WebInspector.RevisionHistoryView.prototype._revisionAdded):
     34        (WebInspector.RevisionHistoryView.prototype._onclose):
     35        (WebInspector.RevisionHistoryTreeElement.else.revert):
     36        (WebInspector.RevisionHistoryTreeElement):
     37        (WebInspector.RevisionHistoryTreeElement.prototype.onexpand.step1):
     38        (WebInspector.RevisionHistoryTreeElement.prototype.onexpand.step2):
     39        (WebInspector.RevisionHistoryTreeElement.prototype.onexpand):
     40        (WebInspector.RevisionHistoryTreeElement.prototype._createLine):
     41        (WebInspector.RevisionHistoryTreeElement.prototype._diff.popsym):
     42        (WebInspector.RevisionHistoryTreeElement.prototype._diff):
     43        * inspector/front-end/ScriptsPanel.js:
     44        (WebInspector.ScriptsPanel.prototype._editorSelected):
     45        (WebInspector.ScriptsPanel.prototype.registerUISourceCodeProvider):
     46        (WebInspector.ScriptsPanel.prototype._showLocalHistory):
     47        (WebInspector.ScriptsPanel.prototype.appendApplicableItems):
     48        * inspector/front-end/StylesPanel.js:
     49        (WebInspector.StyleSourceFrame.prototype._contentChanged):
     50        (WebInspector.StyleSourceFrame.prototype.populateTextAreaContextMenu):
     51        * inspector/front-end/WebKit.qrc:
     52        * inspector/front-end/inspector.css:
     53        (#search-results-pane-file-based .search-result):
     54        (#search-results-pane-file-based .search-result:hover):
     55        (#search-results-pane-file-based .search-match:hover):
     56        (#search-results-pane-file-based .search-match .search-match-content):
     57        * inspector/front-end/inspector.html:
     58        * inspector/front-end/scriptsPanel.css:
     59        (.outline-disclosure.revision-history-drawer):
     60        (.outline-disclosure.revision-history-drawer ol):
     61        (.outline-disclosure.revision-history-drawer > ol):
     62        (.outline-disclosure.revision-history-drawer li):
     63        (.outline-disclosure.revision-history-drawer li.parent):
     64        (.revision-history-link):
     65        (.outline-disclosure.revision-history-drawer .revision-history-line):
     66        (.revision-history-drawer .webkit-line-number):
     67        (.revision-history-line-added):
     68        (.revision-history-line-removed):
     69        * inspector/front-end/textViewer.css:
     70        (.webkit-added-line.webkit-line-number):
     71        (.webkit-removed-line.webkit-line-number):
     72        (.webkit-changed-line.webkit-line-number):
     73
    1742012-05-18  Ilya Tikhonovsky  <loislo@chromium.org>
    275
  • trunk/Source/WebCore/WebCore.gypi

    r117420 r117750  
    64646464            'inspector/front-end/ResourceWebSocketFrameView.js',
    64656465            'inspector/front-end/ResourcesPanel.js',
     6466            'inspector/front-end/RevisionHistoryView.js',
    64666467            'inspector/front-end/ScopeChainSidebarPane.js',
    64676468            'inspector/front-end/Script.js',
     
    65426543            'inspector/front-end/resourceView.css',
    65436544            'inspector/front-end/resourcesPanel.css',
     6545            'inspector/front-end/revisionHistory.css',
    65446546            'inspector/front-end/scriptsPanel.css',
    65456547            'inspector/front-end/splitView.css',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r117420 r117750  
    7465874658                                </File>
    7465974659                                <File
     74660                                        RelativePath="..\inspector\front-end\revisionHistory.css"
     74661                                        >
     74662                                </File>
     74663                                <File
     74664                                        RelativePath="..\inspector\front-end\RevisionHistoryView.js"
     74665                                        >
     74666                                </File>
     74667                                <File
    7466074668                                        RelativePath="..\inspector\front-end\ScopeChainSidebarPane.js"
    7466174669                                        >
  • trunk/Source/WebCore/inspector/compile-front-end.py

    r117277 r117750  
    217217            "JavaScriptSourceFrame.js",
    218218            "PresentationConsoleMessageHelper.js",
    219             "TabbedEditorContainer.js",
     219            "RevisionHistoryView.js",
    220220            "ScriptsNavigator.js",
    221221            "ScriptsPanel.js",
    222222            "ScriptsSearchScope.js",
     223            "TabbedEditorContainer.js",
    223224            "WatchExpressionsSidebarPane.js",
    224225            "WorkerManager.js",
  • trunk/Source/WebCore/inspector/front-end/AdvancedSearchController.js

    r117746 r117750  
    586586            var searchMatchElement = new TreeElement("", null, false);
    587587            fileTreeElement.appendChild(searchMatchElement);
    588             searchMatchElement.listItemElement.className = "search-match";
     588            searchMatchElement.listItemElement.className = "search-match source-code";
    589589            searchMatchElement.listItemElement.appendChild(anchor);
    590590        }
  • trunk/Source/WebCore/inspector/front-end/ContextMenu.js

    r116857 r117750  
    9393        if (this._handlers[id])
    9494            this._handlers[id].call(this);
     95    },
     96
     97    /**
     98     * @param {Object} target
     99     */
     100    appendApplicableItems: function(target)
     101    {
     102        for (var i = 0; i < WebInspector.ContextMenu._providers.length; ++i) {
     103            var provider = WebInspector.ContextMenu._providers[i];
     104            provider.appendApplicableItems(this, target);
     105        }
    95106    }
    96107}
     108
     109/**
     110 * @interface
     111 */
     112WebInspector.ContextMenu.Provider = function() {
     113}
     114
     115WebInspector.ContextMenu.Provider.prototype = {
     116    /**
     117     * @param {WebInspector.ContextMenu} contextMenu
     118     * @param {Object} target
     119     */
     120    appendApplicableItems: function(contextMenu, target) { }
     121}
     122
     123/**
     124 * @param {WebInspector.ContextMenu.Provider} provider
     125 */
     126WebInspector.ContextMenu.registerProvider = function(provider)
     127{
     128    WebInspector.ContextMenu._providers.push(provider);
     129}
     130
     131WebInspector.ContextMenu._providers = [];
    97132
    98133WebInspector.contextMenuItemSelected = function(id)
  • trunk/Source/WebCore/inspector/front-end/JavaScriptSourceFrame.js

    r117455 r117750  
    149149            var evaluateLabel = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Evaluate in console" : "Evaluate in Console");
    150150            contextMenu.appendItem(evaluateLabel, WebInspector.evaluateInConsole.bind(WebInspector, selection.toString()));
    151         }
     151            contextMenu.appendSeparator();
     152        }
     153        contextMenu.appendApplicableItems(this._uiSourceCode);
    152154    },
    153155
  • trunk/Source/WebCore/inspector/front-end/Resource.js

    r117571 r117750  
    302302
    303303    /**
    304      * @return {number}
     304     * @return {Date}
    305305     */
    306306    get contentTimestamp()
     
    515515        function revert(content)
    516516        {
    517             this._resource.setContent(content, true);
     517            if (this._resource._content !== content)
     518                this._resource.setContent(content, true);
    518519        }
    519520        this.requestContent(revert.bind(this));
  • trunk/Source/WebCore/inspector/front-end/ScriptsPanel.js

    r117746 r117750  
    2828 * @constructor
    2929 * @implements {WebInspector.TabbedEditorContainerDelegate}
     30 * @implements {WebInspector.ContextMenu.Provider}
    3031 * @extends {WebInspector.Panel}
    3132 * @param {WebInspector.CompositeUISourceCodeProvider=} uiSourceCodeProviderForTest
     
    187188
    188189    WebInspector.advancedSearchController.registerSearchScope(new WebInspector.ScriptsSearchScope(this._uiSourceCodeProvider));
     190    WebInspector.ContextMenu.registerProvider(this);
    189191}
    190192
     
    231233    willHide: function()
    232234    {
     235        WebInspector.Panel.prototype.willHide.call(this);
    233236        WebInspector.closeViewInDrawer();
    234237    },
     
    579582    {
    580583        var uiSourceCode = /** @type {WebInspector.UISourceCode} */ event.data;
     584        WebInspector.RevisionHistoryView.uiSourceCodeSelected(uiSourceCode);
    581585        this._showFile(uiSourceCode);
    582586        this._navigatorController.hideNavigatorOverlay();
     
    10461050    {
    10471051        this._uiSourceCodeProvider._registerUISourceCodeProvider(uiSourceCodeProvider);
     1052    },
     1053
     1054    /**
     1055     * @param {WebInspector.UISourceCode} uiSourceCode
     1056     */
     1057    _showLocalHistory: function(uiSourceCode)
     1058    {
     1059        WebInspector.RevisionHistoryView.showHistory(uiSourceCode);
     1060    },
     1061
     1062    /**
     1063     * @param {WebInspector.ContextMenu} contextMenu
     1064     * @param {Object} target
     1065     */
     1066    appendApplicableItems: function(contextMenu, target)
     1067    {
     1068        if (WebInspector.experimentsSettings.sourceCodePanel.isEnabled() && target instanceof WebInspector.UISourceCode) {
     1069            contextMenu.appendSeparator();
     1070            contextMenu.appendItem(WebInspector.UIString("Revision history..."), this._showLocalHistory.bind(this, /** @type {WebInspector.UISourceCode} */ target));
     1071            contextMenu.appendSeparator();
     1072        }
    10481073    }
    10491074}
  • trunk/Source/WebCore/inspector/front-end/StylesPanel.js

    r117600 r117750  
    155155        this._styleSource.contentChanged(this._styleSource.resource().content || "");
    156156        this.setContent(this._styleSource.resource().content, false, "text/stylesheet");
     157    },
     158
     159    populateTextAreaContextMenu: function(contextMenu, lineNumber)
     160    {
     161        WebInspector.SourceFrame.prototype.populateTextAreaContextMenu.call(this, contextMenu, lineNumber);
     162        var scriptsPanel = WebInspector.panels.scripts;
     163        contextMenu.appendApplicableItems(this._styleSource);
     164        contextMenu.appendSeparator();
    157165    }
    158166}
  • trunk/Source/WebCore/inspector/front-end/WebKit.qrc

    r117277 r117750  
    128128    <file>ResourceWebSocketFrameView.js</file>
    129129    <file>ResourcesPanel.js</file>
     130    <file>RevisionHistoryView.js</file>
    130131    <file>ScopeChainSidebarPane.js</file>
    131132    <file>Script.js</file>
     
    204205    <file>resourceView.css</file>
    205206    <file>resourcesPanel.css</file>
     207    <file>revisionHistory.css</file>
    206208    <file>scriptsPanel.css</file>
    207209    <file>splitView.css</file>
  • trunk/Source/WebCore/inspector/front-end/inspector.css

    r117746 r117750  
    25092509
    25102510#search-results-pane-file-based .search-result {
    2511     font-size: 12px;
     2511    font-size: 11px;
    25122512    padding: 2px 0 2px 10px;
    25132513    word-wrap: normal;
     
    25182518#search-results-pane-file-based .search-result:hover {
    25192519    background-color: rgba(121, 121, 121, 0.1);
    2520     -webkit-border-radius: 5px;
    25212520}
    25222521
     
    25432542}
    25442543
    2545 
    25462544#search-results-pane-file-based .search-match {
    2547     font-family: 'dejavu sans mono', monospace;
    2548     font-size: 11px;
    25492545    word-wrap: normal;
    25502546    white-space: pre;
     
    25622558#search-results-pane-file-based .search-match:hover {
    25632559    background-color: rgba(56, 121, 217, 0.1);
    2564     -webkit-border-radius: 5px;
    25652560}
    25662561
     
    25762571#search-results-pane-file-based .search-match .search-match-content {
    25772572    color: #000;
    2578     white-space: pre;
    25792573}
    25802574
  • trunk/Source/WebCore/inspector/front-end/inspector.html

    r117481 r117750  
    128128    <script type="text/javascript" src="TabbedEditorContainer.js"></script>
    129129    <script type="text/javascript" src="ScriptsPanel.js"></script>
     130    <script type="text/javascript" src="RevisionHistoryView.js"></script>
    130131    <script type="text/javascript" src="ScriptsNavigator.js"></script>
    131132    <script type="text/javascript" src="ResourcesPanel.js"></script>
  • trunk/Source/WebCore/inspector/front-end/textViewer.css

    r114123 r117750  
    176176}
    177177
    178 .diff-container .webkit-added-line.webkit-line-number {
     178.webkit-added-line.webkit-line-number {
    179179    background-color: rgb(170, 255, 170);
    180180    color: #333;
    181181}
    182182
    183 .diff-container .webkit-removed-line.webkit-line-number {
     183.webkit-removed-line.webkit-line-number {
    184184    background-color: rgb(255, 220, 220);
    185185    text-decoration: line-through;
    186186}
    187187
    188 .diff-container .webkit-changed-line.webkit-line-number {
     188.webkit-changed-line.webkit-line-number {
    189189    background-color: rgb(170, 170, 255);
    190190    color: #333;
  • trunk/Source/WebCore/inspector/front-end/treeoutline.js

    r114504 r117750  
    11181118{
    11191119    // FIXME: We should not use getComputedStyle(). For that we need to get rid of using ::before for disclosure triangle. (http://webk.it/74446)
    1120     var computedLeftPadding = window.getComputedStyle(this._listItemNode).getPropertyCSSValue("padding-left").getFloatValue(CSSPrimitiveValue.CSS_PX);
     1120    var paddingLeftValue = window.getComputedStyle(this._listItemNode).getPropertyCSSValue("padding-left");
     1121    var computedLeftPadding = paddingLeftValue ? paddingLeftValue.getFloatValue(CSSPrimitiveValue.CSS_PX) : 0;
    11211122    var left = this._listItemNode.totalOffsetLeft() + computedLeftPadding;
    11221123    return event.pageX >= left && event.pageX <= left + this.arrowToggleWidth && this.hasChildren;
Note: See TracChangeset for help on using the changeset viewer.