<!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>[245665] trunk</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/245665">245665</a></dd>
<dt>Author</dt> <dd>nvasilyev@apple.com</dd>
<dt>Date</dt> <dd>2019-05-22 17:44:42 -0700 (Wed, 22 May 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Provide UIString descriptions to improve localizations
https://bugs.webkit.org/show_bug.cgi?id=195132
<rdar://problem/48457817>

Reviewed by Devin Rousso.

Source/WebInspectorUI:

* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Base/LoadLocalizedStrings.js:
(WI.UIString):
(WI.repeatedUIString.timelineRecordLayout):
(WI.repeatedUIString.timelineRecordPaint):
(WI.repeatedUIString.timelineRecordComposite):
(WI.repeatedUIString.allExceptions):
(WI.repeatedUIString.uncaughtExceptions):
(WI.repeatedUIString.assertionFailures):
(WI.repeatedUIString.allRequests):
(WI.repeatedUIString.fetch):
(WI.repeatedUIString.revealInDOMTree):
* UserInterface/Models/LayoutTimelineRecord.js:
(WI.LayoutTimelineRecord.displayNameForEventType):
* UserInterface/Models/RenderingFrameTimelineRecord.js:
(WI.RenderingFrameTimelineRecord.displayNameForTaskType):
* UserInterface/Models/Resource.js:
(WI.Resource.displayNameForType):
* UserInterface/Views/AuditTestGroupContentView.js:
(WI.AuditTestGroupContentView.prototype.layout):
* UserInterface/Views/CPUTimelineView.js:
(WI.CPUTimelineView.displayNameForSampleType):
* UserInterface/Views/ContextMenuUtilities.js:
* UserInterface/Views/DOMBreakpointTreeElement.js:
(WI.DOMBreakpointTreeElement.displayNameForType):
* UserInterface/Views/DOMNodeTreeElement.js:
(WI.DOMNodeTreeElement.prototype.populateContextMenu):
(WI.DOMNodeTreeElement):
* UserInterface/Views/DOMTreeElement.js:
(WI.DOMTreeElement.prototype.populateDOMNodeContextMenu):
* UserInterface/Views/DebuggerSidebarPanel.js:
(WI.DebuggerSidebarPanel.prototype._addBreakpoint):
(WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointMouseDown):
(WI.DebuggerSidebarPanel):
* UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
(WI.LayerTreeDetailsSidebarPanel.prototype._buildDataGridSection):
* UserInterface/Views/NetworkTableContentView.js:
(WI.NetworkTableContentView.shortDisplayNameForResourceType):
(WI.NetworkTableContentView.prototype.initialLayout):
* UserInterface/Views/SourcesNavigationSidebarPanel.js:
(WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
(WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointMouseDown):
* UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
(WI.SpreadsheetCSSStyleDeclarationSection.prototype._renderSelector):
* UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
(WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):

Tools:

Allow WI.UIString to take:
- WI.UIString(string, key, comment)
- WI.UIString(string, comment)
- WI.UIString(string)

* Scripts/extract-localizable-js-strings:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs">trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceBaseLoadLocalizedStringsjs">trunk/Source/WebInspectorUI/UserInterface/Base/LoadLocalizedStrings.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsLayoutTimelineRecordjs">trunk/Source/WebInspectorUI/UserInterface/Models/LayoutTimelineRecord.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsRenderingFrameTimelineRecordjs">trunk/Source/WebInspectorUI/UserInterface/Models/RenderingFrameTimelineRecord.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsResourcejs">trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsAuditTestGroupContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/AuditTestGroupContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsCPUTimelineViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/CPUTimelineView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsContextMenuUtilitiesjs">trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDOMBreakpointTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/DOMBreakpointTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDOMNodeTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDOMTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsLayerTreeDetailsSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/LayerTreeDetailsSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsNetworkTableContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsSourcesNavigationSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsSpreadsheetCSSStyleDeclarationSectionjs">trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsSpreadsheetRulesStyleDetailsPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptsextractlocalizablejsstrings">trunk/Tools/Scripts/extract-localizable-js-strings</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog    2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/ChangeLog       2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -1,3 +1,58 @@
</span><ins>+2019-05-22  Nikita Vasilyev  <nvasilyev@apple.com>
+
+        Web Inspector: Provide UIString descriptions to improve localizations
+        https://bugs.webkit.org/show_bug.cgi?id=195132
+        <rdar://problem/48457817>
+
+        Reviewed by Devin Rousso.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        * UserInterface/Base/LoadLocalizedStrings.js:
+        (WI.UIString):
+        (WI.repeatedUIString.timelineRecordLayout):
+        (WI.repeatedUIString.timelineRecordPaint):
+        (WI.repeatedUIString.timelineRecordComposite):
+        (WI.repeatedUIString.allExceptions):
+        (WI.repeatedUIString.uncaughtExceptions):
+        (WI.repeatedUIString.assertionFailures):
+        (WI.repeatedUIString.allRequests):
+        (WI.repeatedUIString.fetch):
+        (WI.repeatedUIString.revealInDOMTree):
+        * UserInterface/Models/LayoutTimelineRecord.js:
+        (WI.LayoutTimelineRecord.displayNameForEventType):
+        * UserInterface/Models/RenderingFrameTimelineRecord.js:
+        (WI.RenderingFrameTimelineRecord.displayNameForTaskType):
+        * UserInterface/Models/Resource.js:
+        (WI.Resource.displayNameForType):
+        * UserInterface/Views/AuditTestGroupContentView.js:
+        (WI.AuditTestGroupContentView.prototype.layout):
+        * UserInterface/Views/CPUTimelineView.js:
+        (WI.CPUTimelineView.displayNameForSampleType):
+        * UserInterface/Views/ContextMenuUtilities.js:
+        * UserInterface/Views/DOMBreakpointTreeElement.js:
+        (WI.DOMBreakpointTreeElement.displayNameForType):
+        * UserInterface/Views/DOMNodeTreeElement.js:
+        (WI.DOMNodeTreeElement.prototype.populateContextMenu):
+        (WI.DOMNodeTreeElement):
+        * UserInterface/Views/DOMTreeElement.js:
+        (WI.DOMTreeElement.prototype.populateDOMNodeContextMenu):
+        * UserInterface/Views/DebuggerSidebarPanel.js:
+        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
+        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointMouseDown):
+        (WI.DebuggerSidebarPanel):
+        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
+        (WI.LayerTreeDetailsSidebarPanel.prototype._buildDataGridSection):
+        * UserInterface/Views/NetworkTableContentView.js:
+        (WI.NetworkTableContentView.shortDisplayNameForResourceType):
+        (WI.NetworkTableContentView.prototype.initialLayout):
+        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
+        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
+        (WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointMouseDown):
+        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
+        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._renderSelector):
+        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
+        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
+
</ins><span class="cx"> 2019-05-22  Devin Rousso  <drousso@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: provide a debug setting button to reset all settings for easier testing/presentation
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js   2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js      2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -97,8 +97,10 @@
</span><span class="cx"> localizedStrings["Address"] = "Address";
</span><span class="cx"> localizedStrings["All"] = "All";
</span><span class="cx"> localizedStrings["All Changes"] = "All Changes";
</span><ins>+/* Break (pause) on all exceptions */
</ins><span class="cx"> localizedStrings["All Exceptions"] = "All Exceptions";
</span><span class="cx"> localizedStrings["All Layers"] = "All Layers";
</span><ins>+/* A submenu item of 'Break on' that breaks (pauses) before all network requests */
</ins><span class="cx"> localizedStrings["All Requests"] = "All Requests";
</span><span class="cx"> localizedStrings["All Resources"] = "All Resources";
</span><span class="cx"> localizedStrings["All Storage"] = "All Storage";
</span><span class="lines">@@ -127,6 +129,7 @@
</span><span class="cx"> localizedStrings["Assertion"] = "Assertion";
</span><span class="cx"> localizedStrings["Assertion Failed"] = "Assertion Failed";
</span><span class="cx"> localizedStrings["Assertion Failed: %s"] = "Assertion Failed: %s";
</span><ins>+/* Break (pause) when console.assert() fails */
</ins><span class="cx"> localizedStrings["Assertion Failures"] = "Assertion Failures";
</span><span class="cx"> localizedStrings["Assertion with message: %s"] = "Assertion with message: %s";
</span><span class="cx"> localizedStrings["Assertive"] = "Assertive";
</span><span class="lines">@@ -133,6 +136,7 @@
</span><span class="cx"> localizedStrings["Associated Data"] = "Associated Data";
</span><span class="cx"> localizedStrings["Async audits are not supported."] = "Async audits are not supported.";
</span><span class="cx"> localizedStrings["Attribute"] = "Attribute";
</span><ins>+/* A submenu item of 'Break On' that breaks (pauses) before DOM attribute is modified */
</ins><span class="cx"> localizedStrings["Attribute Modified"] = "Attribute Modified";
</span><span class="cx"> localizedStrings["Attributes"] = "Attributes";
</span><span class="cx"> localizedStrings["Audit"] = "Audit";
</span><span class="lines">@@ -196,6 +200,7 @@
</span><span class="cx"> localizedStrings["Canvas %s"] = "Canvas %s";
</span><span class="cx"> localizedStrings["Canvas Element"] = "Canvas Element";
</span><span class="cx"> localizedStrings["Canvases"] = "Canvases";
</span><ins>+/* Capture screenshot of the selected DOM node */
</ins><span class="cx"> localizedStrings["Capture Screenshot"] = "Capture Screenshot";
</span><span class="cx"> localizedStrings["Capturing"] = "Capturing";
</span><span class="cx"> /* Context menu label for whether searches should be case sensitive. */
</span><span class="lines">@@ -209,6 +214,7 @@
</span><span class="cx"> localizedStrings["Character Data"] = "Character Data";
</span><span class="cx"> localizedStrings["Charge \u201C%s\u201D to Callers"] = "Charge \u201C%s\u201D to Callers";
</span><span class="cx"> localizedStrings["Checked"] = "Checked";
</span><ins>+/* A submenu item of 'Add' to append DOM nodes to the selected DOM node */
</ins><span class="cx"> localizedStrings["Child"] = "Child";
</span><span class="cx"> localizedStrings["Child Layers"] = "Child Layers";
</span><span class="cx"> localizedStrings["Child added to "] = "Child added to ";
</span><span class="lines">@@ -243,7 +249,8 @@
</span><span class="cx"> localizedStrings["Comment"] = "Comment";
</span><span class="cx"> localizedStrings["Compare snapshots"] = "Compare snapshots";
</span><span class="cx"> localizedStrings["Comparison of total memory size at the end of the selected time range to the maximum memory size in this recording"] = "Comparison of total memory size at the end of the selected time range to the maximum memory size in this recording";
</span><del>-localizedStrings["Composite"] = "Composite";
</del><ins>+/* Composite phase timeline records, where graphic layers are combined */
+localizedStrings["Composite @ Timeline record"] = "Composite";
</ins><span class="cx"> localizedStrings["Composited"] = "Composited";
</span><span class="cx"> localizedStrings["Compressed"] = "Compressed";
</span><span class="cx"> localizedStrings["Compression"] = "Compression";
</span><span class="lines">@@ -463,7 +470,9 @@
</span><span class="cx"> localizedStrings["Fade unexecuted code"] = "Fade unexecuted code";
</span><span class="cx"> localizedStrings["Failed to upgrade"] = "Failed to upgrade";
</span><span class="cx"> localizedStrings["Failure status code"] = "Failure status code";
</span><ins>+/* Resource loaded via 'fetch' method */
</ins><span class="cx"> localizedStrings["Fetch"] = "Fetch";
</span><ins>+/* Resources loaded via 'fetch' method */
</ins><span class="cx"> localizedStrings["Fetches"] = "Fetches";
</span><span class="cx"> localizedStrings["File or Resource"] = "File or Resource";
</span><span class="cx"> localizedStrings["Filename"] = "Filename";
</span><span class="lines">@@ -480,7 +489,9 @@
</span><span class="cx"> localizedStrings["Force Dark Appearance"] = "Force Dark Appearance";
</span><span class="cx"> localizedStrings["Force Light Appearance"] = "Force Light Appearance";
</span><span class="cx"> localizedStrings["Force Print Media Styles"] = "Force Print Media Styles";
</span><ins>+/* Layout phase records that were imperative (forced) */
</ins><span class="cx"> localizedStrings["Forced Layout"] = "Forced Layout";
</span><ins>+/* A context menu item to force (override) a DOM node's pseudo-classes */
</ins><span class="cx"> localizedStrings["Forced Pseudo-Classes"] = "Forced Pseudo-Classes";
</span><span class="cx"> localizedStrings["Format: HSL"] = "Format: HSL";
</span><span class="cx"> localizedStrings["Format: HSLA"] = "Format: HSLA";
</span><span class="lines">@@ -570,6 +581,7 @@
</span><span class="cx"> localizedStrings["Indexed Databases"] = "Indexed Databases";
</span><span class="cx"> localizedStrings["Info: "] = "Info: ";
</span><span class="cx"> localizedStrings["Infos"] = "Infos";
</span><ins>+/* A section of CSS rules matching an ancestor DOM node */
</ins><span class="cx"> localizedStrings["Inherited From"] = "Inherited From";
</span><span class="cx"> localizedStrings["Initial State"] = "Initial State";
</span><span class="cx"> localizedStrings["Initial Velocity"] = "Initial Velocity";
</span><span class="lines">@@ -598,8 +610,9 @@
</span><span class="cx"> localizedStrings["Layer Info"] = "Layer Info";
</span><span class="cx"> localizedStrings["Layers"] = "Layers";
</span><span class="cx"> localizedStrings["Layers:"] = "Layers:";
</span><del>-localizedStrings["Layout"] = "Layout";
</del><span class="cx"> localizedStrings["Layout & Rendering"] = "Layout & Rendering";
</span><ins>+/* Layout phase timeline records */
+localizedStrings["Layout @ Timeline record"] = "Layout";
</ins><span class="cx"> localizedStrings["Layout Invalidated"] = "Layout Invalidated";
</span><span class="cx"> localizedStrings["Line %d"] = "Line %d";
</span><span class="cx"> localizedStrings["Line %d:%d"] = "Line %d:%d";
</span><span class="lines">@@ -617,10 +630,12 @@
</span><span class="cx"> localizedStrings["Located at %s"] = "Located at %s";
</span><span class="cx"> localizedStrings["Location"] = "Location";
</span><span class="cx"> localizedStrings["Log Canvas Context"] = "Log Canvas Context";
</span><ins>+/* Log (print) DOM element to Console */
</ins><span class="cx"> localizedStrings["Log Element"] = "Log Element";
</span><span class="cx"> localizedStrings["Log Frame Text"] = "Log Frame Text";
</span><span class="cx"> localizedStrings["Log Frame Value"] = "Log Frame Value";
</span><span class="cx"> localizedStrings["Log Message"] = "Log Message";
</span><ins>+/* Log (print) DOM node to Console */
</ins><span class="cx"> localizedStrings["Log Node"] = "Log Node";
</span><span class="cx"> localizedStrings["Log Symbol"] = "Log Symbol";
</span><span class="cx"> localizedStrings["Log Value"] = "Log Value";
</span><span class="lines">@@ -664,6 +679,7 @@
</span><span class="cx"> localizedStrings["Network Requests"] = "Network Requests";
</span><span class="cx"> localizedStrings["Network Requests:"] = "Network Requests:";
</span><span class="cx"> localizedStrings["New Tab"] = "New Tab";
</span><ins>+/* A submenu item of 'Add' to add DOM nodes after the selected DOM node */
</ins><span class="cx"> localizedStrings["Next Sibling"] = "Next Sibling";
</span><span class="cx"> localizedStrings["No"] = "No";
</span><span class="cx"> localizedStrings["No Accessibility Information"] = "No Accessibility Information";
</span><span class="lines">@@ -704,6 +720,7 @@
</span><span class="cx"> localizedStrings["No response cookies."] = "No response cookies.";
</span><span class="cx"> localizedStrings["No response headers"] = "No response headers";
</span><span class="cx"> localizedStrings["Node"] = "Node";
</span><ins>+/* A submenu item of 'Break On' that breaks (pauses) before DOM node is removed */
</ins><span class="cx"> localizedStrings["Node Removed"] = "Node Removed";
</span><span class="cx"> localizedStrings["Nodes"] = "Nodes";
</span><span class="cx"> localizedStrings["None"] = "None";
</span><span class="lines">@@ -743,8 +760,11 @@
</span><span class="cx"> localizedStrings["Page Issue"] = "Page Issue";
</span><span class="cx"> localizedStrings["Page navigated at %s"] = "Page navigated at %s";
</span><span class="cx"> localizedStrings["Page reloaded at %s"] = "Page reloaded at %s";
</span><del>-localizedStrings["Paint"] = "Paint";
</del><ins>+/* Paint (render) phase timeline records */
+localizedStrings["Paint @ Timeline record"] = "Paint";
</ins><span class="cx"> localizedStrings["Paints"] = "Paints";
</span><ins>+/* A count of how many times an element was painted (rendered) */
+localizedStrings["Paints @ Column title"] = "Paints";
</ins><span class="cx"> localizedStrings["Parent"] = "Parent";
</span><span class="cx"> localizedStrings["Partial Garbage Collection"] = "Partial Garbage Collection";
</span><span class="cx"> localizedStrings["Passive"] = "Passive";
</span><span class="lines">@@ -774,6 +794,7 @@
</span><span class="cx"> localizedStrings["Pressed"] = "Pressed";
</span><span class="cx"> localizedStrings["Pretty print"] = "Pretty print";
</span><span class="cx"> localizedStrings["Preview"] = "Preview";
</span><ins>+/* A submenu item of 'Add' to add DOM nodes before the selected DOM node */
</ins><span class="cx"> localizedStrings["Previous Sibling"] = "Previous Sibling";
</span><span class="cx"> localizedStrings["Primary Key"] = "Primary Key";
</span><span class="cx"> localizedStrings["Primary Key \u2014 %s"] = "Primary Key \u2014 %s";
</span><span class="lines">@@ -861,9 +882,11 @@
</span><span class="cx"> localizedStrings["Return type for function: %s"] = "Return type for function: %s";
</span><span class="cx"> localizedStrings["Return value is not an object, string, or boolean"] = "Return value is not an object, string, or boolean";
</span><span class="cx"> localizedStrings["Reveal Breakpoint"] = "Reveal Breakpoint";
</span><ins>+/* Open Elements tab and select this node in DOM tree */
</ins><span class="cx"> localizedStrings["Reveal in DOM Tree"] = "Reveal in DOM Tree";
</span><span class="cx"> localizedStrings["Reveal in Debugger Tab"] = "Reveal in Debugger Tab";
</span><span class="cx"> localizedStrings["Reveal in Elements Tab"] = "Reveal in Elements Tab";
</span><ins>+/* Open Layers tab and select the layer corresponding to this node */
</ins><span class="cx"> localizedStrings["Reveal in Layers Tab"] = "Reveal in Layers Tab";
</span><span class="cx"> localizedStrings["Reveal in Network Tab"] = "Reveal in Network Tab";
</span><span class="cx"> localizedStrings["Reveal in Original Resource"] = "Reveal in Original Resource";
</span><span class="lines">@@ -892,7 +915,8 @@
</span><span class="cx"> localizedStrings["Script Entries:"] = "Script Entries:";
</span><span class="cx"> localizedStrings["Script Evaluated"] = "Script Evaluated";
</span><span class="cx"> localizedStrings["Scripts"] = "Scripts";
</span><del>-localizedStrings["Scroll Into View"] = "Scroll Into View";
</del><ins>+/* Scroll selected DOM node into view on the inspected web page */
+localizedStrings["Scroll into View"] = "Scroll into View";
</ins><span class="cx"> localizedStrings["Search"] = "Search";
</span><span class="cx"> localizedStrings["Search Again"] = "Search Again";
</span><span class="cx"> localizedStrings["Search Resource Content"] = "Search Resource Content";
</span><span class="lines">@@ -907,10 +931,12 @@
</span><span class="cx"> localizedStrings["Select comparison snapshot"] = "Select comparison snapshot";
</span><span class="cx"> localizedStrings["Selected"] = "Selected";
</span><span class="cx"> localizedStrings["Selected Canvas Context"] = "Selected Canvas Context";
</span><ins>+/* Selected DOM element */
</ins><span class="cx"> localizedStrings["Selected Element"] = "Selected Element";
</span><span class="cx"> localizedStrings["Selected Frame"] = "Selected Frame";
</span><span class="cx"> localizedStrings["Selected Item"] = "Selected Item";
</span><span class="cx"> localizedStrings["Selected Items"] = "Selected Items";
</span><ins>+/* Selected DOM node */
</ins><span class="cx"> localizedStrings["Selected Node"] = "Selected Node";
</span><span class="cx"> localizedStrings["Selected Symbol"] = "Selected Symbol";
</span><span class="cx"> localizedStrings["Selected Value"] = "Selected Value";
</span><span class="lines">@@ -1011,6 +1037,7 @@
</span><span class="cx"> localizedStrings["Stop recording once page loads"] = "Stop recording once page loads";
</span><span class="cx"> localizedStrings["Stopping the \u201C%s\u201D audit"] = "Stopping the \u201C%s\u201D audit";
</span><span class="cx"> localizedStrings["Storage"] = "Storage";
</span><ins>+/* CSS properties defined via HTML style attribute */
</ins><span class="cx"> localizedStrings["Style Attribute"] = "Style Attribute";
</span><span class="cx"> localizedStrings["Style Resolution"] = "Style Resolution";
</span><span class="cx"> localizedStrings["Style rule"] = "Style rule";
</span><span class="lines">@@ -1023,6 +1050,7 @@
</span><span class="cx"> localizedStrings["Stylesheet"] = "Stylesheet";
</span><span class="cx"> localizedStrings["Stylesheets"] = "Stylesheets";
</span><span class="cx"> localizedStrings["Subject"] = "Subject";
</span><ins>+/* A submenu item of 'Break On' that breaks (pauses) before child DOM node is modified */
</ins><span class="cx"> localizedStrings["Subtree Modified"] = "Subtree Modified";
</span><span class="cx"> localizedStrings["Summary"] = "Summary";
</span><span class="cx"> localizedStrings["TCP"] = "TCP";
</span><span class="lines">@@ -1029,6 +1057,7 @@
</span><span class="cx"> localizedStrings["TIFF"] = "TIFF";
</span><span class="cx"> localizedStrings["Tab width:"] = "Tab width:";
</span><span class="cx"> localizedStrings["Tabs"] = "Tabs";
</span><ins>+/* A submenu item of 'Edit' to change DOM element's tag name */
</ins><span class="cx"> localizedStrings["Tag"] = "Tag";
</span><span class="cx"> localizedStrings["Take snapshot"] = "Take snapshot";
</span><span class="cx"> localizedStrings["Target"] = "Target";
</span><span class="lines">@@ -1091,6 +1120,7 @@
</span><span class="cx"> localizedStrings["Totals:"] = "Totals:";
</span><span class="cx"> localizedStrings["Trace"] = "Trace";
</span><span class="cx"> localizedStrings["Trace: %s"] = "Trace: %s";
</span><ins>+/* Amount of data sent over the network for a single resource */
</ins><span class="cx"> localizedStrings["Transfer Size"] = "Transfer Size";
</span><span class="cx"> localizedStrings["Transferred"] = "Transferred";
</span><span class="cx"> localizedStrings["Triggered Breakpoint"] = "Triggered Breakpoint";
</span><span class="lines">@@ -1105,6 +1135,7 @@
</span><span class="cx"> localizedStrings["Unable to determine path to property from root"] = "Unable to determine path to property from root";
</span><span class="cx"> localizedStrings["Unable to parse as JSON: %s"] = "Unable to parse as JSON: %s";
</span><span class="cx"> localizedStrings["Unable to show certificate for \u201C%s\u201D"] = "Unable to show certificate for \u201C%s\u201D";
</span><ins>+/* Break (pause) on uncaught (unhandled) exceptions */
</ins><span class="cx"> localizedStrings["Uncaught Exceptions"] = "Uncaught Exceptions";
</span><span class="cx"> localizedStrings["Undefined custom element"] = "Undefined custom element";
</span><span class="cx"> localizedStrings["Unique"] = "Unique";
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseLoadLocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/LoadLocalizedStrings.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/LoadLocalizedStrings.js   2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/LoadLocalizedStrings.js      2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -43,9 +43,17 @@
</span><span class="cx"> 
</span><span class="cx"> WI.UIString = function(string, key, comment)
</span><span class="cx"> {
</span><ins>+    "use strict";
+
</ins><span class="cx">     if (WI.dontLocalizeUserInterface)
</span><span class="cx">         return string;
</span><span class="cx"> 
</span><ins>+    // UIString(string, comment)
+    if (arguments.length === 2) {
+        comment = key;
+        key = undefined;
+    }
+
</ins><span class="cx">     key = key || string;
</span><span class="cx"> 
</span><span class="cx">     if (window.localizedStrings && key in window.localizedStrings)
</span><span class="lines">@@ -64,3 +72,41 @@
</span><span class="cx"> 
</span><span class="cx">     return "LOCALIZED STRING NOT FOUND";
</span><span class="cx"> };
</span><ins>+
+WI.repeatedUIString = {};
+
+WI.repeatedUIString.timelineRecordLayout = function() {
+    return WI.UIString("Layout", "Layout @ Timeline record", "Layout phase timeline records");
+};
+
+WI.repeatedUIString.timelineRecordPaint = function() {
+    return WI.UIString("Paint", "Paint @ Timeline record", "Paint (render) phase timeline records");
+};
+
+WI.repeatedUIString.timelineRecordComposite = function() {
+    return WI.UIString("Composite", "Composite @ Timeline record", "Composite phase timeline records, where graphic layers are combined");
+};
+
+WI.repeatedUIString.allExceptions = function() {
+    return WI.UIString("All Exceptions", "Break (pause) on all exceptions");
+};
+
+WI.repeatedUIString.uncaughtExceptions = function() {
+    return WI.UIString("Uncaught Exceptions", "Break (pause) on uncaught (unhandled) exceptions");
+};
+
+WI.repeatedUIString.assertionFailures = function() {
+    return WI.UIString("Assertion Failures", "Break (pause) when console.assert() fails");
+};
+
+WI.repeatedUIString.allRequests = function() {
+    return WI.UIString("All Requests", "A submenu item of 'Break on' that breaks (pauses) before all network requests");
+};
+
+WI.repeatedUIString.fetch = function() {
+    return WI.UIString("Fetch", "Resource loaded via 'fetch' method");
+};
+
+WI.repeatedUIString.revealInDOMTree = function() {
+    return WI.UIString("Reveal in DOM Tree", "Open Elements tab and select this node in DOM tree");
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsLayoutTimelineRecordjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/LayoutTimelineRecord.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/LayoutTimelineRecord.js 2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/LayoutTimelineRecord.js    2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -51,13 +51,13 @@
</span><span class="cx">         case WI.LayoutTimelineRecord.EventType.InvalidateLayout:
</span><span class="cx">             return WI.UIString("Layout Invalidated");
</span><span class="cx">         case WI.LayoutTimelineRecord.EventType.ForcedLayout:
</span><del>-            return WI.UIString("Forced Layout");
</del><ins>+            return WI.UIString("Forced Layout", "Layout phase records that were imperative (forced)");
</ins><span class="cx">         case WI.LayoutTimelineRecord.EventType.Layout:
</span><del>-            return WI.UIString("Layout");
</del><ins>+            return WI.repeatedUIString.timelineRecordLayout();
</ins><span class="cx">         case WI.LayoutTimelineRecord.EventType.Paint:
</span><del>-            return WI.UIString("Paint");
</del><ins>+            return WI.repeatedUIString.timelineRecordPaint();
</ins><span class="cx">         case WI.LayoutTimelineRecord.EventType.Composite:
</span><del>-            return WI.UIString("Composite");
</del><ins>+            return WI.repeatedUIString.timelineRecordComposite();
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsRenderingFrameTimelineRecordjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/RenderingFrameTimelineRecord.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/RenderingFrameTimelineRecord.js 2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/RenderingFrameTimelineRecord.js    2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -46,9 +46,9 @@
</span><span class="cx">         case WI.RenderingFrameTimelineRecord.TaskType.Script:
</span><span class="cx">             return WI.UIString("Script");
</span><span class="cx">         case WI.RenderingFrameTimelineRecord.TaskType.Layout:
</span><del>-            return WI.UIString("Layout");
</del><ins>+            return WI.repeatedUIString.timelineRecordLayout();
</ins><span class="cx">         case WI.RenderingFrameTimelineRecord.TaskType.Paint:
</span><del>-            return WI.UIString("Paint");
</del><ins>+            return WI.repeatedUIString.timelineRecordPaint();
</ins><span class="cx">         case WI.RenderingFrameTimelineRecord.TaskType.Other:
</span><span class="cx">             return WI.UIString("Other");
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsResourcejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js     2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js        2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -156,8 +156,8 @@
</span><span class="cx">             return WI.UIString("XHR");
</span><span class="cx">         case WI.Resource.Type.Fetch:
</span><span class="cx">             if (plural)
</span><del>-                return WI.UIString("Fetches");
-            return WI.UIString("Fetch");
</del><ins>+                return WI.UIString("Fetches", "Resources loaded via 'fetch' method");
+            return WI.repeatedUIString.fetch();
</ins><span class="cx">         case WI.Resource.Type.Ping:
</span><span class="cx">             if (plural)
</span><span class="cx">                 return WI.UIString("Pings");
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsAuditTestGroupContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/AuditTestGroupContentView.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/AuditTestGroupContentView.js     2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/AuditTestGroupContentView.js        2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -125,11 +125,11 @@
</span><span class="cx">                 scopeBarItems.push(scopeBarItem);
</span><span class="cx">             };
</span><span class="cx"> 
</span><del>-            addScopeBarItem(WI.AuditTestCaseResult.Level.Pass, WI.UIString("%d Passed", "%d Passed (singular)"), WI.UIString("%d Passed", "%d Passed (plural)"));
</del><ins>+            addScopeBarItem(WI.AuditTestCaseResult.Level.Pass, WI.UIString("%d Passed", "%d Passed (singular)", ""), WI.UIString("%d Passed", "%d Passed (plural)", ""));
</ins><span class="cx">             addScopeBarItem(WI.AuditTestCaseResult.Level.Warn, WI.UIString("%d Warning"), WI.UIString("%d Warnings"));
</span><del>-            addScopeBarItem(WI.AuditTestCaseResult.Level.Fail, WI.UIString("%d Failed", "%d Failed (singular)"), WI.UIString("%d Failed", "%d Failed (plural)"));
</del><ins>+            addScopeBarItem(WI.AuditTestCaseResult.Level.Fail, WI.UIString("%d Failed", "%d Failed (singular)", ""), WI.UIString("%d Failed", "%d Failed (plural)", ""));
</ins><span class="cx">             addScopeBarItem(WI.AuditTestCaseResult.Level.Error, WI.UIString("%d Error"), WI.UIString("%d Errors"));
</span><del>-            addScopeBarItem(WI.AuditTestCaseResult.Level.Unsupported, WI.UIString("%d Unsupported", "%d Unsupported (singular)"), WI.UIString("%d Unsupported", "%d Unsupported (plural)"));
</del><ins>+            addScopeBarItem(WI.AuditTestCaseResult.Level.Unsupported, WI.UIString("%d Unsupported", "%d Unsupported (singular)", ""), WI.UIString("%d Unsupported", "%d Unsupported (plural)", ""));
</ins><span class="cx"> 
</span><span class="cx">             this._levelScopeBar = new WI.ScopeBar(null, scopeBarItems);
</span><span class="cx">             this._levelScopeBar.addEventListener(WI.ScopeBar.Event.SelectionChanged, this._handleLevelScopeBarSelectionChanged, this);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsCPUTimelineViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CPUTimelineView.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/CPUTimelineView.js       2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CPUTimelineView.js  2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -57,9 +57,9 @@
</span><span class="cx">         case WI.CPUTimelineView.SampleType.Script:
</span><span class="cx">             return WI.UIString("Script");
</span><span class="cx">         case WI.CPUTimelineView.SampleType.Layout:
</span><del>-            return WI.UIString("Layout");
</del><ins>+            return WI.repeatedUIString.timelineRecordLayout();
</ins><span class="cx">         case WI.CPUTimelineView.SampleType.Paint:
</span><del>-            return WI.UIString("Paint");
</del><ins>+            return WI.repeatedUIString.timelineRecordPaint();
</ins><span class="cx">         case WI.CPUTimelineView.SampleType.Style:
</span><span class="cx">             return WI.UIString("Style Resolution");
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsContextMenuUtilitiesjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js  2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js     2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -210,7 +210,7 @@
</span><span class="cx">     if (WI.cssManager.canForcePseudoClasses() && domNode.attached) {
</span><span class="cx">         contextMenu.appendSeparator();
</span><span class="cx"> 
</span><del>-        let pseudoSubMenu = contextMenu.appendSubMenuItem(WI.UIString("Forced Pseudo-Classes"));
</del><ins>+        let pseudoSubMenu = contextMenu.appendSubMenuItem(WI.UIString("Forced Pseudo-Classes", "A context menu item to force (override) a DOM node's pseudo-classes"));
</ins><span class="cx"> 
</span><span class="cx">         let enabledPseudoClasses = domNode.enabledPseudoClasses;
</span><span class="cx">         WI.CSSManager.ForceablePseudoClasses.forEach((pseudoClass) => {
</span><span class="lines">@@ -230,10 +230,10 @@
</span><span class="cx">     contextMenu.appendSeparator();
</span><span class="cx"> 
</span><span class="cx">     if (!options.excludeLogElement && !domNode.isInUserAgentShadowTree() && !domNode.isPseudoElement()) {
</span><del>-        let label = isElement ? WI.UIString("Log Element") : WI.UIString("Log Node");
</del><ins>+        let label = isElement ? WI.UIString("Log Element", "Log (print) DOM element to Console") : WI.UIString("Log Node", "Log (print) DOM node to Console");
</ins><span class="cx">         contextMenu.appendItem(label, () => {
</span><span class="cx">             WI.RemoteObject.resolveNode(domNode, WI.RuntimeManager.ConsoleObjectGroup).then((remoteObject) => {
</span><del>-                let text = isElement ? WI.UIString("Selected Element") : WI.UIString("Selected Node");
</del><ins>+                let text = isElement ? WI.UIString("Selected Element", "Selected DOM element") : WI.UIString("Selected Node", "Selected DOM node");
</ins><span class="cx">                 const addSpecialUserLogClass = true;
</span><span class="cx">                 WI.consoleLogViewController.appendImmediateExecutionWithResult(text, remoteObject, addSpecialUserLogClass);
</span><span class="cx">             });
</span><span class="lines">@@ -241,19 +241,19 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!options.excludeRevealElement && window.DOMAgent && attached) {
</span><del>-        contextMenu.appendItem(WI.UIString("Reveal in DOM Tree"), () => {
</del><ins>+        contextMenu.appendItem(WI.repeatedUIString.revealInDOMTree(), () => {
</ins><span class="cx">             WI.domManager.inspectElement(domNode.id);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (WI.settings.experimentalEnableLayersTab.value && window.LayerTreeAgent && attached) {
</span><del>-        contextMenu.appendItem(WI.UIString("Reveal in Layers Tab"), () => {
</del><ins>+        contextMenu.appendItem(WI.UIString("Reveal in Layers Tab", "Open Layers tab and select the layer corresponding to this node"), () => {
</ins><span class="cx">             WI.showLayersTab({nodeToSelect: domNode});
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (window.PageAgent && attached) {
</span><del>-        contextMenu.appendItem(WI.UIString("Capture Screenshot"), () => {
</del><ins>+        contextMenu.appendItem(WI.UIString("Capture Screenshot", "Capture screenshot of the selected DOM node"), () => {
</ins><span class="cx">             PageAgent.snapshotNode(domNode.id, (error, dataURL) => {
</span><span class="cx">                 if (error) {
</span><span class="cx">                     const target = WI.mainTarget;
</span><span class="lines">@@ -276,7 +276,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (isElement && attached) {
</span><del>-        contextMenu.appendItem(WI.UIString("Scroll Into View"), () => {
</del><ins>+        contextMenu.appendItem(WI.UIString("Scroll into View", "Scroll selected DOM node into view on the inspected web page"), () => {
</ins><span class="cx">             domNode.scrollIntoView();
</span><span class="cx">         });
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDOMBreakpointTreeElementjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMBreakpointTreeElement.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMBreakpointTreeElement.js      2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMBreakpointTreeElement.js 2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -50,11 +50,11 @@
</span><span class="cx">     {
</span><span class="cx">         switch (type) {
</span><span class="cx">         case WI.DOMBreakpoint.Type.SubtreeModified:
</span><del>-            return WI.UIString("Subtree Modified");
</del><ins>+            return WI.UIString("Subtree Modified", "A submenu item of 'Break On' that breaks (pauses) before child DOM node is modified");
</ins><span class="cx">         case WI.DOMBreakpoint.Type.AttributeModified:
</span><del>-            return WI.UIString("Attribute Modified");
</del><ins>+            return WI.UIString("Attribute Modified", "A submenu item of 'Break On' that breaks (pauses) before DOM attribute is modified");
</ins><span class="cx">         case WI.DOMBreakpoint.Type.NodeRemoved:
</span><del>-            return WI.UIString("Node Removed");
</del><ins>+            return WI.UIString("Node Removed", "A submenu item of 'Break On' that breaks (pauses) before DOM node is removed");
</ins><span class="cx">         default:
</span><span class="cx">             console.error("Unexpected DOM breakpoint type: " + type);
</span><span class="cx">             return null;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDOMNodeTreeElementjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeTreeElement.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeTreeElement.js    2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeTreeElement.js       2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx"> 
</span><span class="cx">         contextMenu.appendSeparator();
</span><span class="cx"> 
</span><del>-        contextMenu.appendItem(WI.UIString("Reveal in DOM Tree"), () => {
</del><ins>+        contextMenu.appendItem(WI.repeatedUIString.revealInDOMTree(), () => {
</ins><span class="cx">             WI.domManager.inspectElement(this.representedObject.id);
</span><span class="cx">         });
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDOMTreeElementjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js        2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js   2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -764,16 +764,16 @@
</span><span class="cx"> 
</span><span class="cx">         if (isEditableNode) {
</span><span class="cx">             if (!forbiddenClosingTag) {
</span><del>-                subMenus.add.appendItem(WI.UIString("Child"), () => {
</del><ins>+                subMenus.add.appendItem(WI.UIString("Child", "A submenu item of 'Add' to append DOM nodes to the selected DOM node"), () => {
</ins><span class="cx">                     this._addHTML();
</span><span class="cx">                 });
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            subMenus.add.appendItem(WI.UIString("Previous Sibling"), () => {
</del><ins>+            subMenus.add.appendItem(WI.UIString("Previous Sibling", "A submenu item of 'Add' to add DOM nodes before the selected DOM node"), () => {
</ins><span class="cx">                 this._addPreviousSibling();
</span><span class="cx">             });
</span><span class="cx"> 
</span><del>-            subMenus.add.appendItem(WI.UIString("Next Sibling"), () => {
</del><ins>+            subMenus.add.appendItem(WI.UIString("Next Sibling", "A submenu item of 'Add' to add DOM nodes after the selected DOM node"), () => {
</ins><span class="cx">                 this._addNextSibling();
</span><span class="cx">             });
</span><span class="cx">         }
</span><span class="lines">@@ -797,7 +797,7 @@
</span><span class="cx">                 });
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            subMenus.edit.appendItem(WI.UIString("Tag"), () => {
</del><ins>+            subMenus.edit.appendItem(WI.UIString("Tag", "A submenu item of 'Edit' to change DOM element's tag name"), () => {
</ins><span class="cx">                 this._startEditingTagName();
</span><span class="cx">             });
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js  2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js     2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -474,13 +474,13 @@
</span><span class="cx"> 
</span><span class="cx">         if (breakpoint === WI.debuggerManager.allExceptionsBreakpoint) {
</span><span class="cx">             options.className = WI.DebuggerSidebarPanel.ExceptionIconStyleClassName;
</span><del>-            options.title = WI.UIString("All Exceptions");
</del><ins>+            options.title = WI.repeatedUIString.allExceptions();
</ins><span class="cx">         } else if (breakpoint === WI.debuggerManager.uncaughtExceptionsBreakpoint) {
</span><span class="cx">             options.className = WI.DebuggerSidebarPanel.ExceptionIconStyleClassName;
</span><del>-            options.title = WI.UIString("Uncaught Exceptions");
</del><ins>+            options.title = WI.repeatedUIString.uncaughtExceptions();
</ins><span class="cx">         } else if (breakpoint === WI.debuggerManager.assertionFailuresBreakpoint) {
</span><span class="cx">             options.className = WI.DebuggerSidebarPanel.AssertionIconStyleClassName;
</span><del>-            options.title = WI.UIString("Assertion Failures");
</del><ins>+            options.title = WI.repeatedUIString.assertionFailures();
</ins><span class="cx">         } else if (breakpoint instanceof WI.DOMBreakpoint) {
</span><span class="cx">             if (!breakpoint.domNodeIdentifier)
</span><span class="cx">                 return null;
</span><span class="lines">@@ -514,7 +514,7 @@
</span><span class="cx"> 
</span><span class="cx">             if (breakpoint === WI.domDebuggerManager.allRequestsBreakpoint) {
</span><span class="cx">                 options.className = WI.DebuggerSidebarPanel.AssertionIconStyleClassName;
</span><del>-                options.title = WI.UIString("All Requests");
</del><ins>+                options.title = WI.repeatedUIString.allRequests();
</ins><span class="cx">             }
</span><span class="cx">         } else {
</span><span class="cx">             let sourceCode = breakpoint.sourceCodeLocation && breakpoint.sourceCodeLocation.displaySourceCode;
</span><span class="lines">@@ -1457,7 +1457,7 @@
</span><span class="cx">         if (InspectorBackend.domains.Debugger.setPauseOnAssertions) {
</span><span class="cx">             let assertionFailuresBreakpointShown = WI.settings.showAssertionFailuresBreakpoint.value;
</span><span class="cx"> 
</span><del>-            contextMenu.appendCheckboxItem(WI.UIString("Assertion Failures"), () => {
</del><ins>+            contextMenu.appendCheckboxItem(WI.repeatedUIString.assertionFailures(), () => {
</ins><span class="cx">                 if (assertionFailuresBreakpointShown)
</span><span class="cx">                     WI.debuggerManager.removeBreakpoint(WI.debuggerManager.assertionFailuresBreakpoint);
</span><span class="cx">                 else {
</span><span class="lines">@@ -1479,7 +1479,7 @@
</span><span class="cx"> 
</span><span class="cx">             let allRequestsBreakpointShown = WI.settings.showAllRequestsBreakpoint.value;
</span><span class="cx"> 
</span><del>-            contextMenu.appendCheckboxItem(WI.UIString("All Requests"), () => {
</del><ins>+            contextMenu.appendCheckboxItem(WI.repeatedUIString.allRequests(), () => {
</ins><span class="cx">                 if (allRequestsBreakpointShown)
</span><span class="cx">                     WI.domDebuggerManager.removeURLBreakpoint(WI.domDebuggerManager.allRequestsBreakpoint);
</span><span class="cx">                 else {
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsLayerTreeDetailsSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LayerTreeDetailsSidebarPanel.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/LayerTreeDetailsSidebarPanel.js  2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LayerTreeDetailsSidebarPanel.js     2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx">         columns.name.title = WI.UIString("Node");
</span><span class="cx">         columns.name.sortable = false;
</span><span class="cx"> 
</span><del>-        columns.paintCount.title = WI.UIString("Paints");
</del><ins>+        columns.paintCount.title = WI.UIString("Paints", "Paints @ Column title", "A count of how many times an element was painted (rendered)");
</ins><span class="cx">         columns.paintCount.sortable = true;
</span><span class="cx">         columns.paintCount.aligned = "right";
</span><span class="cx">         columns.paintCount.width = "70px";
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsNetworkTableContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js       2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js  2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -211,7 +211,7 @@
</span><span class="cx">         case WI.Resource.Type.XHR:
</span><span class="cx">             return "XHR";
</span><span class="cx">         case WI.Resource.Type.Fetch:
</span><del>-            return WI.UIString("Fetch");
</del><ins>+            return WI.repeatedUIString.fetch();
</ins><span class="cx">         case WI.Resource.Type.Ping:
</span><span class="cx">             return WI.UIString("Ping");
</span><span class="cx">         case WI.Resource.Type.Beacon:
</span><span class="lines">@@ -1172,7 +1172,7 @@
</span><span class="cx">             align: "right",
</span><span class="cx">         });
</span><span class="cx"> 
</span><del>-        this._transferSizeColumn = new WI.TableColumn("transferSize", WI.UIString("Transfer Size"), {
</del><ins>+        this._transferSizeColumn = new WI.TableColumn("transferSize", WI.UIString("Transfer Size", "Amount of data sent over the network for a single resource"), {
</ins><span class="cx">             minWidth: 100,
</span><span class="cx">             maxWidth: 150,
</span><span class="cx">             initialWidth: 100,
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsSourcesNavigationSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js 2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js    2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -889,13 +889,13 @@
</span><span class="cx"> 
</span><span class="cx">         if (breakpoint === WI.debuggerManager.allExceptionsBreakpoint) {
</span><span class="cx">             options.className = "breakpoint-exception-icon";
</span><del>-            options.title = WI.UIString("All Exceptions");
</del><ins>+            options.title = WI.repeatedUIString.allExceptions();
</ins><span class="cx">         } else if (breakpoint === WI.debuggerManager.uncaughtExceptionsBreakpoint) {
</span><span class="cx">             options.className = "breakpoint-exception-icon";
</span><del>-            options.title = WI.UIString("Uncaught Exceptions");
</del><ins>+            options.title = WI.repeatedUIString.uncaughtExceptions();
</ins><span class="cx">         } else if (breakpoint === WI.debuggerManager.assertionFailuresBreakpoint) {
</span><span class="cx">             options.className = "breakpoint-assertion-icon";
</span><del>-            options.title = WI.UIString("Assertion Failures");
</del><ins>+            options.title = WI.repeatedUIString.assertionFailures();
</ins><span class="cx">         } else if (breakpoint instanceof WI.DOMBreakpoint) {
</span><span class="cx">             if (!breakpoint.domNodeIdentifier)
</span><span class="cx">                 return null;
</span><span class="lines">@@ -929,7 +929,7 @@
</span><span class="cx"> 
</span><span class="cx">             if (breakpoint === WI.domDebuggerManager.allRequestsBreakpoint) {
</span><span class="cx">                 options.className = "breakpoint-assertion-icon";
</span><del>-                options.title = WI.UIString("All Requests");
</del><ins>+                options.title = WI.repeatedUIString.allRequests();
</ins><span class="cx">             }
</span><span class="cx">         } else {
</span><span class="cx">             let sourceCode = breakpoint.sourceCodeLocation && breakpoint.sourceCodeLocation.displaySourceCode;
</span><span class="lines">@@ -1508,7 +1508,7 @@
</span><span class="cx">         if (InspectorBackend.domains.Debugger.setPauseOnAssertions) {
</span><span class="cx">             let assertionFailuresBreakpointShown = WI.settings.showAssertionFailuresBreakpoint.value;
</span><span class="cx"> 
</span><del>-            contextMenu.appendCheckboxItem(WI.UIString("Assertion Failures"), () => {
</del><ins>+            contextMenu.appendCheckboxItem(WI.repeatedUIString.assertionFailures(), () => {
</ins><span class="cx">                 if (assertionFailuresBreakpointShown)
</span><span class="cx">                     WI.debuggerManager.removeBreakpoint(WI.debuggerManager.assertionFailuresBreakpoint);
</span><span class="cx">                 else {
</span><span class="lines">@@ -1530,7 +1530,7 @@
</span><span class="cx"> 
</span><span class="cx">             let allRequestsBreakpointShown = WI.settings.showAllRequestsBreakpoint.value;
</span><span class="cx"> 
</span><del>-            contextMenu.appendCheckboxItem(WI.UIString("All Requests"), () => {
</del><ins>+            contextMenu.appendCheckboxItem(WI.repeatedUIString.allRequests(), () => {
</ins><span class="cx">                 if (allRequestsBreakpointShown)
</span><span class="cx">                     WI.domDebuggerManager.removeURLBreakpoint(WI.domDebuggerManager.allRequestsBreakpoint);
</span><span class="cx">                 else {
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsSpreadsheetCSSStyleDeclarationSectionjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js 2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js    2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -315,7 +315,7 @@
</span><span class="cx">             break;
</span><span class="cx"> 
</span><span class="cx">         case WI.CSSStyleDeclaration.Type.Inline:
</span><del>-            this._selectorElement.textContent = WI.UIString("Style Attribute");
</del><ins>+            this._selectorElement.textContent = WI.UIString("Style Attribute", "CSS properties defined via HTML style attribute");
</ins><span class="cx">             this._selectorElement.classList.add("style-attribute");
</span><span class="cx">             break;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsSpreadsheetRulesStyleDetailsPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js     2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js        2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx"> 
</span><span class="cx">         let addSection = (section) => {
</span><span class="cx">             if (section.style.inherited && (!previousStyle || previousStyle.node !== section.style.node))
</span><del>-                addHeader(WI.UIString("Inherited From"), section.style.node);
</del><ins>+                addHeader(WI.UIString("Inherited From", "A section of CSS rules matching an ancestor DOM node"), section.style.node);
</ins><span class="cx"> 
</span><span class="cx">             if (!section.isDescendantOf(this)) {
</span><span class="cx">                 let referenceView = this.subviews[this._sections.length];
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Tools/ChangeLog       2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2019-05-22  Nikita Vasilyev  <nvasilyev@apple.com>
+
+        Web Inspector: Provide UIString descriptions to improve localizations
+        https://bugs.webkit.org/show_bug.cgi?id=195132
+        <rdar://problem/48457817>
+
+        Reviewed by Devin Rousso.
+
+        Allow WI.UIString to take:
+        - WI.UIString(string, key, comment)
+        - WI.UIString(string, comment)
+        - WI.UIString(string)
+
+        * Scripts/extract-localizable-js-strings:
+
</ins><span class="cx"> 2019-05-22  Wenson Hsieh  <wenson_hsieh@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [iOS] The shouldIgnoreMetaViewport test option incorrectly persists across layout tests
</span></span></pre></div>
<a id="trunkToolsScriptsextractlocalizablejsstrings"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/extract-localizable-js-strings (245664 => 245665)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/extract-localizable-js-strings       2019-05-23 00:43:09 UTC (rev 245664)
+++ trunk/Tools/Scripts/extract-localizable-js-strings  2019-05-23 00:44:42 UTC (rev 245665)
</span><span class="lines">@@ -74,7 +74,15 @@
</span><span class="cx">         chomp;
</span><span class="cx"> 
</span><span class="cx">         # Handle WebInspector strings. Prints a warning if a non-string literal is passed to WI.UIString().
</span><del>-        HandleUIString($1, $2 || $1, $3 || "", $file, $.) while s/WI\.UIString\("([^"]+)"(?:,\s*"([^"]+)"(?:,\s*"([^"]+)")?)?\)//;
</del><ins>+        # Allow: WI.UIString(string, comment)
+        #        WI.UIString(string, key, comment)
+        HandleUIString(
+            $1,
+            ($3 || (defined $3 and length $3 == 0)) ? $2 : $1,
+            ($3 || (defined $3 and length $3 == 0)) ? $3 : $2 || "",
+            $file,
+            $.
+        ) while s/WI\.UIString\("([^"]+)"(?:,\s*"([^"]*)"(?:,\s*"([^"]*)")?)?\)//;
</ins><span class="cx">         print "$file:$.:WARNING: $&\n" while s/WI\.UIString\(.*?\)//;
</span><span class="cx"> 
</span><span class="cx">         # Handle strings for other projects that also use this script.
</span></span></pre>
</div>
</div>

</body>
</html>