<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[170238] trunk/Source/WebInspectorUI</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/170238">170238</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-06-21 07:51:12 -0700 (Sat, 21 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Esc in quick console no longer toggles console drawer
https://bugs.webkit.org/show_bug.cgi?id=134068

Patch by Joseph Pecoraro &lt;pecoraro@apple.com&gt; on 2014-06-21
Reviewed by Timothy Hatcher.

For Escape to toggle console behavior we were relying on the Escape
keyboard event to propagate up to the window and be handled by
QuickConsole's global keyboard shortcut. With CodeMirror 4, all
editors have a default &quot;Esc&quot; key handler to reduce multiple selections
to a single selection. Unfortunately this always prevents default,
which our keyboard shortcut respects and doesn't toggle the console.

Workaround this by putting a specific handler for when a Console
Prompt is empty and the Escape key is triggered. This does not go
through the normal ConsolePrompt delegate because the delegate
is never the QuickConsole, it is actually the JavaScript log.

* UserInterface/Views/ConsolePrompt.js:
(WebInspector.ConsolePrompt):
(WebInspector.ConsolePrompt.prototype.set escapeKeyHandlerWhenEmpty):
(WebInspector.ConsolePrompt.prototype._handleEscapeKey):
* UserInterface/Views/QuickConsole.js:
(WebInspector.QuickConsole.this.prompt.escapeKeyHandlerWhenEmpty):
(WebInspector.QuickConsole):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsConsolePromptjs">trunk/Source/WebInspectorUI/UserInterface/Views/ConsolePrompt.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsQuickConsolejs">trunk/Source/WebInspectorUI/UserInterface/Views/QuickConsole.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (170237 => 170238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2014-06-21 14:43:35 UTC (rev 170237)
+++ trunk/Source/WebInspectorUI/ChangeLog        2014-06-21 14:51:12 UTC (rev 170238)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2014-06-21  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Esc in quick console no longer toggles console drawer
+        https://bugs.webkit.org/show_bug.cgi?id=134068
+
+        Reviewed by Timothy Hatcher.
+
+        For Escape to toggle console behavior we were relying on the Escape
+        keyboard event to propagate up to the window and be handled by
+        QuickConsole's global keyboard shortcut. With CodeMirror 4, all
+        editors have a default &quot;Esc&quot; key handler to reduce multiple selections
+        to a single selection. Unfortunately this always prevents default,
+        which our keyboard shortcut respects and doesn't toggle the console.
+
+        Workaround this by putting a specific handler for when a Console
+        Prompt is empty and the Escape key is triggered. This does not go
+        through the normal ConsolePrompt delegate because the delegate
+        is never the QuickConsole, it is actually the JavaScript log.
+
+        * UserInterface/Views/ConsolePrompt.js:
+        (WebInspector.ConsolePrompt):
+        (WebInspector.ConsolePrompt.prototype.set escapeKeyHandlerWhenEmpty):
+        (WebInspector.ConsolePrompt.prototype._handleEscapeKey):
+        * UserInterface/Views/QuickConsole.js:
+        (WebInspector.QuickConsole.this.prompt.escapeKeyHandlerWhenEmpty):
+        (WebInspector.QuickConsole):
+
</ins><span class="cx"> 2014-06-18  James Craig  &lt;jcraig@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: AXI: expose aria-relevant
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsConsolePromptjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ConsolePrompt.js (170237 => 170238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ConsolePrompt.js        2014-06-21 14:43:35 UTC (rev 170237)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ConsolePrompt.js        2014-06-21 14:51:12 UTC (rev 170238)
</span><span class="lines">@@ -49,7 +49,8 @@
</span><span class="cx">         &quot;Ctrl-P&quot;: this._handlePreviousKey.bind(this),
</span><span class="cx">         &quot;Ctrl-N&quot;: this._handleNextKey.bind(this),
</span><span class="cx">         &quot;Enter&quot;: this._handleEnterKey.bind(this),
</span><del>-        &quot;Cmd-Enter&quot;: this._handleCommandEnterKey.bind(this)
</del><ins>+        &quot;Cmd-Enter&quot;: this._handleCommandEnterKey.bind(this),
+        &quot;Esc&quot;: this._handleEscapeKey.bind(this)
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     this._codeMirror.addKeyMap(keyMap);
</span><span class="lines">@@ -84,6 +85,11 @@
</span><span class="cx">         this._delegate = delegate || null;
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    set escapeKeyHandlerWhenEmpty(handler)
+    {
+        this._escapeKeyHandlerWhenEmpty = handler;
+    },
+
</ins><span class="cx">     get text()
</span><span class="cx">     {
</span><span class="cx">         return this._codeMirror.getValue();
</span><span class="lines">@@ -152,7 +158,18 @@
</span><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     // Private
</span><ins>+    
+    _handleEscapeKey: function(codeMirror)
+    {
+        if (this.text)
+            return CodeMirror.Pass;
</ins><span class="cx"> 
</span><ins>+        if (!this._escapeKeyHandlerWhenEmpty)
+            return CodeMirror.Pass;
+
+        this._escapeKeyHandlerWhenEmpty();
+    },
+
</ins><span class="cx">     _handlePreviousKey: function(codeMirror)
</span><span class="cx">     {
</span><span class="cx">         if (this._codeMirror.somethingSelected())
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsQuickConsolejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/QuickConsole.js (170237 => 170238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/QuickConsole.js        2014-06-21 14:43:35 UTC (rev 170237)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/QuickConsole.js        2014-06-21 14:51:12 UTC (rev 170238)
</span><span class="lines">@@ -43,6 +43,13 @@
</span><span class="cx">     this.prompt.element.classList.add(WebInspector.QuickConsole.TextPromptStyleClassName);
</span><span class="cx">     this._element.appendChild(this.prompt.element);
</span><span class="cx"> 
</span><ins>+    // FIXME: CodeMirror 4 has a default &quot;Esc&quot; key handler that always prevents default.
+    // Our keyboard shortcut above will respect the default prevented and ignore the event
+    // and not toggle the console. Install our own Escape key handler that will trigger
+    // when the ConsolePrompt is empty, to restore toggling behavior. A better solution
+    // would be for CodeMirror's event handler to pass if it doesn't do anything.
+    this.prompt.escapeKeyHandlerWhenEmpty = function() { WebInspector.toggleSplitConsole(); };
+
</ins><span class="cx">     this.prompt.shown();
</span><span class="cx"> 
</span><span class="cx">     this._navigationBar = new WebInspector.QuickConsoleNavigationBar;
</span></span></pre>
</div>
</div>

</body>
</html>