RESOLVED FIXED Bug 174754
Web Inspector: add context menu item for taking a screenshot of a node
https://bugs.webkit.org/show_bug.cgi?id=174754
Summary Web Inspector: add context menu item for taking a screenshot of a node
Devin Rousso
Reported 2017-07-22 02:19:31 PDT
.
Attachments
Patch (9.90 KB, patch)
2017-07-22 02:28 PDT, Devin Rousso
no flags
[Image] After Patch is applied (229.80 KB, image/png)
2017-07-22 02:29 PDT, Devin Rousso
no flags
Patch (9.92 KB, patch)
2017-07-22 02:30 PDT, Devin Rousso
no flags
Patch (28.50 KB, patch)
2017-07-24 23:13 PDT, Devin Rousso
no flags
Archive of layout-test-results from ews124 for ios-simulator-wk2 (9.91 MB, application/zip)
2017-07-25 00:40 PDT, Build Bot
no flags
Devin Rousso
Comment 1 2017-07-22 02:28:49 PDT
Devin Rousso
Comment 2 2017-07-22 02:29:02 PDT
Created attachment 316188 [details] [Image] After Patch is applied
Devin Rousso
Comment 3 2017-07-22 02:30:53 PDT
Matt Baker
Comment 4 2017-07-22 11:46:10 PDT
Screenshot of the result?
Devin Rousso
Comment 5 2017-07-22 12:46:47 PDT
(In reply to Matt Baker from comment #4) > Screenshot of the result? The file is downloaded to wherever the user selects with the same name format as the macOS screenshot. Screen Shot ${year}-${month}-${day} at ${hours}.${minutes}.${seconds}.png
Joseph Pecoraro
Comment 6 2017-07-24 11:35:51 PDT
Comment on attachment 316190 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=316190&action=review r- for lack of test for the utility function. But also cause I wanted to see a version 2. Were we going to add a full page screenshot button in the navigation bar? Or is that going to be done separately? > Source/WebInspectorUI/UserInterface/Base/Utilities.js:1131 > +Object.defineProperty(Number, "pad", > +{ > + value(num, length) > + { > + let string = num.toLocaleString(); > + while (string.length < length) > + string = "0" + string; > + return string; > + }, > +}); String.prototype.padStart already exists and is standard. It can be used here instead of the while loop. How about making this Number.zeroPad / Number.prototype.zeroPad? let string = num.toLocaleString(); return string.padStart(length, "0"); This should have a test in: LayoutTests/inspector/unit-tests/number-utilities.html > Source/WebInspectorUI/UserInterface/Models/DOMNode.js:468 > + function scrollIntoView() Since we are moving this, lets fix the name of this inner function to be: function inspectedPage_node_scrollIntoView That is because this function is evaluated in the inspected page and the `this` value is the node. We name these specially so (1) they are easy to find and (2) we are aware that we have to be backwards compatible with older iOS releases for the contents of these functions. We can't use `let` for instance (we support back to iOS 7). > Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:203 > + contextMenu.appendItem(WebInspector.UIString("Screenshot Node"), () => { We should wrap this in: if (window.PageAgent) { ... } I don't think there exists a case where it is possible to have DOMNodes without a PageAgent, but lets do it anyways to be safe. > Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:218 > + // url: "web-inspector:///Node.png", Stale comment it seems.
Blaze Burg
Comment 7 2017-07-24 11:43:39 PDT
Comment on attachment 316190 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=316190&action=review After taking my comments, please test saving a screenshot with Arabic system language. It should match the same filename format as a normal screen capture. > Source/WebInspectorUI/ChangeLog:19 > + Add Number.pad to add leading zeros up to a certain width. It might be better to add support for pad to our String.format implementation. >> Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:203 >> + contextMenu.appendItem(WebInspector.UIString("Screenshot Node"), () => { > > We should wrap this in: > > if (window.PageAgent) { > ... > } > > I don't think there exists a case where it is possible to have DOMNodes without a PageAgent, but lets do it anyways to be safe. Two nits: 1) "Screenshot" is not a verb, at least not enough in common usage that it is suitable for a menu item 2) Most people don't know node vs element, so just calling it Element is fine. Together, I would prefer "Capture Element Screenshot" or "Take Element Screenshot". Either of these are workable with a similar "Take Viewport/Page Screenshot" context menu items. > Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:205 > + if (error) We should log an error to console so the user knows why nothing showed up. > Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:208 > + let date = new Date; Unfortunately we can't replicate what Cocoa does directly in JS because the Intl API doesn't do what NSDateFormatter does with arbitrary format strings. We can get around this, however, by using WebInspector.UIString("Screen Shot %d-%d-%d at %d.%d.%d").format(...). This will get us proper localization because UIString("...").format(...) will use the correct number characters for Arabic locales. AFAIK, in all other locales the date format is the same even if it's not what would be produced by default in the locale. For example, `new Date.toLocaleDateString()` will get you mm-dd-yyyy, instead of yyyy-mm-dd as the system does for whatever reason. > Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js:-1524 > - _scrollIntoView() Nice cleanup.
Devin Rousso
Comment 8 2017-07-24 23:13:06 PDT
Build Bot
Comment 9 2017-07-25 00:40:40 PDT
Comment on attachment 316357 [details] Patch Attachment 316357 [details] did not pass ios-sim-ews (ios-simulator-wk2): Output: http://webkit-queues.webkit.org/results/4182945 New failing tests: imported/w3c/IndexedDB-private-browsing/idbfactory_open12.html
Build Bot
Comment 10 2017-07-25 00:40:42 PDT
Created attachment 316359 [details] Archive of layout-test-results from ews124 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews124 Port: ios-simulator-wk2 Platform: Mac OS X 10.12.5
Blaze Burg
Comment 11 2017-07-25 09:38:06 PDT
Comment on attachment 316357 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=316357&action=review r=me > Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:213 > + WebInspector.consoleLogViewController.appendConsoleMessage(consoleMessage); Very nice, thanks. > Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:226 > + let filename = WebInspector.UIString("Screen Shot %s-%s-%s at %s.%s.%s").format(...values); Does .format do the right thing for %s? Hmm..
WebKit Commit Bot
Comment 12 2017-07-25 10:07:25 PDT
Comment on attachment 316357 [details] Patch Clearing flags on attachment: 316357 Committed r219870: <http://trac.webkit.org/changeset/219870>
WebKit Commit Bot
Comment 13 2017-07-25 10:07:27 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.