Home | History | Annotate | Download | only in components
      1 /*
      2  * Copyright (C) 2010 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 /**
     32  * @constructor
     33  */
     34 WebInspector.ShortcutsScreen = function()
     35 {
     36     /** @type {!Object.<string, !WebInspector.ShortcutsSection>} */
     37     this._sections = {};
     38 }
     39 
     40 WebInspector.ShortcutsScreen.prototype = {
     41     /**
     42      * @param {string} name
     43      * @return {!WebInspector.ShortcutsSection}
     44      */
     45     section: function(name)
     46     {
     47         var section = this._sections[name];
     48         if (!section)
     49             this._sections[name] = section = new WebInspector.ShortcutsSection(name);
     50         return section;
     51     },
     52 
     53     /**
     54      * @return {!WebInspector.View}
     55      */
     56     createShortcutsTabView: function()
     57     {
     58         var orderedSections = [];
     59         for (var section in this._sections)
     60             orderedSections.push(this._sections[section]);
     61         function compareSections(a, b)
     62         {
     63             return a.order - b.order;
     64         }
     65         orderedSections.sort(compareSections);
     66 
     67         var view = new WebInspector.View();
     68 
     69         view.element.className = "settings-tab-container"; // Override
     70         view.element.createChild("header").createChild("h3").createTextChild(WebInspector.UIString("Shortcuts"));
     71         var scrollPane = view.element.createChild("div", "help-container-wrapper");
     72         var container = scrollPane.createChild("div");
     73         container.className = "help-content help-container";
     74         for (var i = 0; i < orderedSections.length; ++i)
     75             orderedSections[i].renderSection(container);
     76 
     77         var note = scrollPane.createChild("p", "help-footnote");
     78         var noteLink = note.createChild("a");
     79         noteLink.href = "https://developers.google.com/chrome-developer-tools/docs/shortcuts";
     80         noteLink.target = "_blank";
     81         noteLink.createTextChild(WebInspector.UIString("Full list of keyboard shortcuts and gestures"));
     82 
     83         return view;
     84     }
     85 }
     86 
     87 /**
     88  * We cannot initialize it here as localized strings are not loaded yet.
     89  * @type {!WebInspector.ShortcutsScreen}
     90  */
     91 WebInspector.shortcutsScreen;
     92 
     93 /**
     94  * @constructor
     95  * @param {string} name
     96  */
     97 WebInspector.ShortcutsSection = function(name)
     98 {
     99     this.name = name;
    100     this._lines = /** @type {!Array.<!{key: !Node, text: string}>} */ ([]);
    101     this.order = ++WebInspector.ShortcutsSection._sequenceNumber;
    102 };
    103 
    104 WebInspector.ShortcutsSection._sequenceNumber = 0;
    105 
    106 WebInspector.ShortcutsSection.prototype = {
    107     /**
    108      * @param {!WebInspector.KeyboardShortcut.Descriptor} key
    109      * @param {string} description
    110      */
    111     addKey: function(key, description)
    112     {
    113         this._addLine(this._renderKey(key), description);
    114     },
    115 
    116     /**
    117      * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} keys
    118      * @param {string} description
    119      */
    120     addRelatedKeys: function(keys, description)
    121     {
    122         this._addLine(this._renderSequence(keys, "/"), description);
    123     },
    124 
    125     /**
    126      * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} keys
    127      * @param {string} description
    128      */
    129     addAlternateKeys: function(keys, description)
    130     {
    131         this._addLine(this._renderSequence(keys, WebInspector.UIString("or")), description);
    132     },
    133 
    134     /**
    135      * @param {!Node} keyElement
    136      * @param {string} description
    137      */
    138     _addLine: function(keyElement, description)
    139     {
    140         this._lines.push({ key: keyElement, text: description })
    141     },
    142 
    143     /**
    144      * @param {!Element} container
    145      */
    146     renderSection: function(container)
    147     {
    148         var parent = container.createChild("div", "help-block");
    149 
    150         var headLine = parent.createChild("div", "help-line");
    151         headLine.createChild("div", "help-key-cell");
    152         headLine.createChild("div", "help-section-title help-cell").textContent = this.name;
    153 
    154         for (var i = 0; i < this._lines.length; ++i) {
    155             var line = parent.createChild("div", "help-line");
    156             var keyCell = line.createChild("div", "help-key-cell");
    157             keyCell.appendChild(this._lines[i].key);
    158             keyCell.appendChild(this._createSpan("help-key-delimiter", ":"));
    159             line.createChild("div", "help-cell").textContent = this._lines[i].text;
    160         }
    161     },
    162 
    163     /**
    164      * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} sequence
    165      * @param {string} delimiter
    166      * @return {!Node}
    167      */
    168     _renderSequence: function(sequence, delimiter)
    169     {
    170         var delimiterSpan = this._createSpan("help-key-delimiter", delimiter);
    171         return this._joinNodes(sequence.map(this._renderKey.bind(this)), delimiterSpan);
    172     },
    173 
    174     /**
    175      * @param {!WebInspector.KeyboardShortcut.Descriptor} key
    176      * @return {!Node}
    177      */
    178     _renderKey: function(key)
    179     {
    180         var keyName = key.name;
    181         var plus = this._createSpan("help-combine-keys", "+");
    182         return this._joinNodes(keyName.split(" + ").map(this._createSpan.bind(this, "help-key")), plus);
    183     },
    184 
    185     /**
    186      * @param {string} className
    187      * @param {string} textContent
    188      * @return {!Element}
    189      */
    190     _createSpan: function(className, textContent)
    191     {
    192         var node = document.createElement("span");
    193         node.className = className;
    194         node.textContent = textContent;
    195         return node;
    196     },
    197 
    198     /**
    199      * @param {!Array.<!Element>} nodes
    200      * @param {!Element} delimiter
    201      * @return {!Node}
    202      */
    203     _joinNodes: function(nodes, delimiter)
    204     {
    205         var result = document.createDocumentFragment();
    206         for (var i = 0; i < nodes.length; ++i) {
    207             if (i > 0)
    208                 result.appendChild(delimiter.cloneNode(true));
    209             result.appendChild(nodes[i]);
    210         }
    211         return result;
    212     }
    213 }
    214 
    215 WebInspector.ShortcutsScreen.registerShortcuts = function()
    216 {
    217     // Elements panel
    218     var elementsSection = WebInspector.shortcutsScreen.section(WebInspector.UIString("Elements Panel"));
    219 
    220     var navigate = WebInspector.ShortcutsScreen.ElementsPanelShortcuts.NavigateUp.concat(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.NavigateDown);
    221     elementsSection.addRelatedKeys(navigate, WebInspector.UIString("Navigate elements"));
    222 
    223     var expandCollapse = WebInspector.ShortcutsScreen.ElementsPanelShortcuts.Expand.concat(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.Collapse);
    224     elementsSection.addRelatedKeys(expandCollapse, WebInspector.UIString("Expand/collapse"));
    225 
    226     elementsSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.EditAttribute, WebInspector.UIString("Edit attribute"));
    227     elementsSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.HideElement, WebInspector.UIString("Hide element"));
    228     elementsSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.ToggleEditAsHTML, WebInspector.UIString("Toggle edit as HTML"));
    229 
    230     var stylesPaneSection = WebInspector.shortcutsScreen.section(WebInspector.UIString("Styles Pane"));
    231 
    232     var nextPreviousProperty = WebInspector.ShortcutsScreen.ElementsPanelShortcuts.NextProperty.concat(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.PreviousProperty);
    233     stylesPaneSection.addRelatedKeys(nextPreviousProperty, WebInspector.UIString("Next/previous property"));
    234 
    235     stylesPaneSection.addRelatedKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementValue, WebInspector.UIString("Increment value"));
    236     stylesPaneSection.addRelatedKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementValue, WebInspector.UIString("Decrement value"));
    237 
    238     stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementBy10, WebInspector.UIString("Increment by %f", 10));
    239     stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementBy10, WebInspector.UIString("Decrement by %f", 10));
    240 
    241     stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementBy100, WebInspector.UIString("Increment by %f", 100));
    242     stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementBy100, WebInspector.UIString("Decrement by %f", 100));
    243 
    244     stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementBy01, WebInspector.UIString("Increment by %f", 0.1));
    245     stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementBy01, WebInspector.UIString("Decrement by %f", 0.1));
    246 
    247 
    248     // Debugger
    249     var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Debugger"));
    250 
    251     section.addAlternateKeys(WebInspector.shortcutRegistry.shortcutDescriptorsForAction("debugger.toggle-pause"), WebInspector.UIString("Pause/Continue"));
    252     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepOver, WebInspector.UIString("Step over"));
    253     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepInto, WebInspector.UIString("Step into"));
    254     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepOut, WebInspector.UIString("Step out"));
    255 
    256     var nextAndPrevFrameKeys = WebInspector.ShortcutsScreen.SourcesPanelShortcuts.NextCallFrame.concat(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.PrevCallFrame);
    257     section.addRelatedKeys(nextAndPrevFrameKeys, WebInspector.UIString("Next/previous call frame"));
    258 
    259     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.EvaluateSelectionInConsole, WebInspector.UIString("Evaluate selection in console"));
    260     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.AddSelectionToWatch, WebInspector.UIString("Add selection to watch"));
    261     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleBreakpoint, WebInspector.UIString("Toggle breakpoint"));
    262 
    263     // Editing
    264     section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Text Editor"));
    265     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToMember, WebInspector.UIString("Go to member"));
    266     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleAutocompletion, WebInspector.UIString("Autocompletion"));
    267     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToLine, WebInspector.UIString("Go to line"));
    268     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToPreviousLocation, WebInspector.UIString("Jump to previous editing location"));
    269     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToNextLocation, WebInspector.UIString("Jump to next editing location"));
    270     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleComment, WebInspector.UIString("Toggle comment"));
    271     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.IncreaseCSSUnitByOne, WebInspector.UIString("Increment CSS unit by 1"));
    272     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.DecreaseCSSUnitByOne, WebInspector.UIString("Decrement CSS unit by 1"));
    273     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.IncreaseCSSUnitByTen, WebInspector.UIString("Increment CSS unit by 10"));
    274     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.DecreaseCSSUnitByTen, WebInspector.UIString("Decrement CSS unit by 10"));
    275     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.SelectNextOccurrence, WebInspector.UIString("Select next occurrence"));
    276     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.SoftUndo, WebInspector.UIString("Soft undo"));
    277     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GotoMatchingBracket, WebInspector.UIString("Go to matching bracket"));
    278     section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.CloseEditorTab, WebInspector.UIString("Close editor tab"));
    279     section.addAlternateKeys(WebInspector.shortcutRegistry.shortcutDescriptorsForAction("sources.switch-file"), WebInspector.UIString("Switch between files with the same name and different extensions."));
    280 
    281     // Timeline panel
    282     section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Timeline Panel"));
    283     section.addAlternateKeys(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.StartStopRecording, WebInspector.UIString("Start/stop recording"));
    284     section.addAlternateKeys(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.SaveToFile, WebInspector.UIString("Save timeline data"));
    285     section.addAlternateKeys(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.LoadFromFile, WebInspector.UIString("Load timeline data"));
    286 
    287 
    288     // Profiles panel
    289     section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Profiles Panel"));
    290     section.addAlternateKeys(WebInspector.ShortcutsScreen.ProfilesPanelShortcuts.StartStopRecording, WebInspector.UIString("Start/stop recording"));
    291 
    292     // Layers panel
    293     if (Runtime.experiments.isEnabled("layersPanel")) {
    294         section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Layers Panel"));
    295         section.addAlternateKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.ResetView, WebInspector.UIString("Reset view"));
    296         section.addAlternateKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.PanMode, WebInspector.UIString("Switch to pan mode"));
    297         section.addAlternateKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.RotateMode, WebInspector.UIString("Switch to rotate mode"));
    298         section.addAlternateKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.TogglePanRotate, WebInspector.UIString("Temporarily toggle pan/rotate mode while held"));
    299         section.addAlternateKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.ZoomIn, WebInspector.UIString("Zoom in"));
    300         section.addAlternateKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.ZoomOut, WebInspector.UIString("Zoom out"));
    301         section.addRelatedKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.Up.concat(WebInspector.ShortcutsScreen.LayersPanelShortcuts.Down), WebInspector.UIString("Pan or rotate up/down"));
    302         section.addRelatedKeys(WebInspector.ShortcutsScreen.LayersPanelShortcuts.Left.concat(WebInspector.ShortcutsScreen.LayersPanelShortcuts.Right), WebInspector.UIString("Pan or rotate left/right"));
    303     }
    304 }
    305 
    306 WebInspector.ShortcutsScreen.ElementsPanelShortcuts = {
    307     NavigateUp: [
    308         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up)
    309     ],
    310 
    311     NavigateDown: [
    312         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down)
    313     ],
    314 
    315     Expand: [
    316         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Right)
    317     ],
    318 
    319     Collapse: [
    320         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Left)
    321     ],
    322 
    323     EditAttribute: [
    324         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Enter)
    325     ],
    326 
    327     HideElement: [
    328         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.H)
    329     ],
    330 
    331     ToggleEditAsHTML: [
    332         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F2)
    333     ],
    334 
    335     NextProperty: [
    336         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Tab)
    337     ],
    338 
    339     PreviousProperty: [
    340         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Tab, WebInspector.KeyboardShortcut.Modifiers.Shift)
    341     ],
    342 
    343     IncrementValue: [
    344         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up)
    345     ],
    346 
    347     DecrementValue: [
    348         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down)
    349     ],
    350 
    351     IncrementBy10: [
    352         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp),
    353         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up, WebInspector.KeyboardShortcut.Modifiers.Shift)
    354     ],
    355 
    356     DecrementBy10: [
    357         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown),
    358         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down, WebInspector.KeyboardShortcut.Modifiers.Shift)
    359     ],
    360 
    361     IncrementBy100: [
    362         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Shift)
    363     ],
    364 
    365     DecrementBy100: [
    366         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Shift)
    367     ],
    368 
    369     IncrementBy01: [
    370         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up, WebInspector.KeyboardShortcut.Modifiers.Alt)
    371     ],
    372 
    373     DecrementBy01: [
    374         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down, WebInspector.KeyboardShortcut.Modifiers.Alt)
    375     ]
    376 };
    377 
    378 WebInspector.ShortcutsScreen.SourcesPanelShortcuts = {
    379     SelectNextOccurrence: [
    380         WebInspector.KeyboardShortcut.makeDescriptor("d", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    381     ],
    382 
    383     SoftUndo: [
    384         WebInspector.KeyboardShortcut.makeDescriptor("u", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    385     ],
    386 
    387     GotoMatchingBracket: [
    388         WebInspector.KeyboardShortcut.makeDescriptor("m", WebInspector.KeyboardShortcut.Modifiers.Ctrl)
    389     ],
    390 
    391     ToggleAutocompletion: [
    392         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Space, WebInspector.KeyboardShortcut.Modifiers.Ctrl)
    393     ],
    394 
    395     IncreaseCSSUnitByOne: [
    396         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up, WebInspector.KeyboardShortcut.Modifiers.Alt)
    397     ],
    398 
    399     DecreaseCSSUnitByOne: [
    400         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down, WebInspector.KeyboardShortcut.Modifiers.Alt)
    401     ],
    402 
    403     IncreaseCSSUnitByTen: [
    404         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Alt)
    405     ],
    406 
    407     DecreaseCSSUnitByTen: [
    408         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Alt)
    409     ],
    410 
    411     RunSnippet: [
    412         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Enter, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    413     ],
    414 
    415     StepOver: [
    416         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F10),
    417         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.SingleQuote, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    418     ],
    419 
    420     StepInto: [
    421         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11),
    422         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Semicolon, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    423     ],
    424 
    425     StepOut: [
    426         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11, WebInspector.KeyboardShortcut.Modifiers.Shift),
    427         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Semicolon, WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    428     ],
    429 
    430     EvaluateSelectionInConsole: [
    431         WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.Ctrl)
    432     ],
    433 
    434     AddSelectionToWatch: [
    435         WebInspector.KeyboardShortcut.makeDescriptor("a", WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.Ctrl)
    436     ],
    437 
    438     GoToMember: [
    439         WebInspector.KeyboardShortcut.makeDescriptor("p", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta | WebInspector.KeyboardShortcut.Modifiers.Shift)
    440     ],
    441 
    442     GoToLine: [
    443         WebInspector.KeyboardShortcut.makeDescriptor("g", WebInspector.KeyboardShortcut.Modifiers.Ctrl)
    444     ],
    445 
    446     ToggleBreakpoint: [
    447         WebInspector.KeyboardShortcut.makeDescriptor("b", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    448     ],
    449 
    450     NextCallFrame: [
    451         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Period, WebInspector.KeyboardShortcut.Modifiers.Ctrl)
    452     ],
    453 
    454     PrevCallFrame: [
    455         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Comma, WebInspector.KeyboardShortcut.Modifiers.Ctrl)
    456     ],
    457 
    458     ToggleComment: [
    459         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Slash, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    460     ],
    461 
    462     JumpToPreviousLocation: [
    463         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Minus, WebInspector.KeyboardShortcut.Modifiers.Alt)
    464     ],
    465 
    466     JumpToNextLocation: [
    467         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Plus, WebInspector.KeyboardShortcut.Modifiers.Alt)
    468     ],
    469 
    470     CloseEditorTab: [
    471         WebInspector.KeyboardShortcut.makeDescriptor("w", WebInspector.KeyboardShortcut.Modifiers.Alt)
    472     ],
    473 
    474     Save: [
    475         WebInspector.KeyboardShortcut.makeDescriptor("s", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    476     ],
    477 
    478     SaveAll: [
    479         WebInspector.KeyboardShortcut.makeDescriptor("s", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta | WebInspector.KeyboardShortcut.Modifiers.ShiftOrOption)
    480     ],
    481 };
    482 
    483 WebInspector.ShortcutsScreen.TimelinePanelShortcuts = {
    484     StartStopRecording: [
    485         WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    486     ],
    487 
    488     SaveToFile: [
    489         WebInspector.KeyboardShortcut.makeDescriptor("s", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    490     ],
    491 
    492     LoadFromFile: [
    493         WebInspector.KeyboardShortcut.makeDescriptor("o", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    494     ]
    495 };
    496 
    497 WebInspector.ShortcutsScreen.ProfilesPanelShortcuts = {
    498     StartStopRecording: [
    499         WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
    500     ]
    501 };
    502 
    503 WebInspector.ShortcutsScreen.LayersPanelShortcuts = {
    504     ResetView: [
    505         WebInspector.KeyboardShortcut.makeDescriptor("0")
    506     ],
    507 
    508     PanMode: [
    509         WebInspector.KeyboardShortcut.makeDescriptor("x")
    510     ],
    511 
    512     RotateMode: [
    513         WebInspector.KeyboardShortcut.makeDescriptor("v")
    514     ],
    515 
    516     TogglePanRotate: [
    517         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Shift)
    518     ],
    519 
    520     ZoomIn: [
    521         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Plus, WebInspector.KeyboardShortcut.Modifiers.Shift),
    522         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.NumpadPlus)
    523     ],
    524 
    525     ZoomOut: [
    526         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Minus, WebInspector.KeyboardShortcut.Modifiers.Shift),
    527         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.NumpadMinus)
    528     ],
    529 
    530     Up: [
    531         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up),
    532         WebInspector.KeyboardShortcut.makeDescriptor("w")
    533     ],
    534 
    535     Down: [
    536         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down),
    537         WebInspector.KeyboardShortcut.makeDescriptor("s")
    538     ],
    539 
    540     Left: [
    541         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Left),
    542         WebInspector.KeyboardShortcut.makeDescriptor("a")
    543     ],
    544 
    545     Right: [
    546         WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Right),
    547         WebInspector.KeyboardShortcut.makeDescriptor("d")
    548     ]
    549 }
    550