Customize taskbar needs screenshot feature as a choice Topic is solved

Talk about code development, features, specific bugs, enhancements, patches, and similar things.
Forum rules
Please keep everything here strictly on-topic.
This board is meant for Pale Moon source code development related subjects only like code snippets, patches, specific bugs, git, the repositories, etc.

This is not for tech support! Please do not post tech support questions in the "Development" board!
Please make sure not to use this board for support questions. Please post issues with specific websites, extensions, etc. in the relevant boards for those topics.

Please keep things on-topic as this forum will be used for reference for Pale Moon development. Expect topics that aren't relevant as such to be moved or deleted.
context
Fanatic
Fanatic
Posts: 212
Joined: 2012-07-22, 18:56
Location: USA Texas

Customize taskbar needs screenshot feature as a choice

Unread post by context » 2020-09-12, 16:59

After using it from the Web Developer Tool Panel for a few months, I'm continually impressed by how useful the screenshot tool is. There are some browsing instances where a true screenshot is really the only good capture option. And the screenshot tool is an excellent solution. But having to have the Developer Tools active on the desktop is cumbersome.

Since the screenshot tool already exists in Pale Moon, why not add it as a choice for the taskbar? It would make Pale Moon even more excellent!

User avatar
RealityRipple
Astronaut
Astronaut
Posts: 666
Joined: 2018-05-17, 02:34
Location: Los Berros Canyon, California

Re: Customize taskbar needs screenshot feature as a choice

Unread post by RealityRipple » 2020-09-12, 18:16

Image

context
Fanatic
Fanatic
Posts: 212
Joined: 2012-07-22, 18:56
Location: USA Texas

Re: Customize taskbar needs screenshot feature as a choice

Unread post by context » 2020-09-12, 22:09

Just to clarify: the screenshot feature in the developer tools makes a PNG image of the entire web page the browser is currently viewing, regardless of its scrollable length. There are browser plugins that can do that sort of things (I've tried a couple), but nothing is as streamlined and as reliable as the developer screenshot tool. I suppose that's because it's directly accessing PM's page display buffer.

letmeindude

Re: Customize taskbar needs screenshot feature as a choice

Unread post by letmeindude » 2020-09-13, 00:15

I use a button for that, but you will need Custom Buttons extension.

Image

Page Capture button code (Paste & Go it in the address bar after installing CB extension):

Code: Select all

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EPage%20Capture%20%28by%20Odyseus%29%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAESklEQVQ4jZXLS0zTBwDH8b8nd9qiS2aWtUhbBlIeSimP0oGAVYEibGDSTKSCK4OgjCFzsi0khGQE7XRW2eKUqSVqtBLUmBlCFhcoWGuLfVBeLX3RCuruGr18d9DNZbcdPpffQwDWWK3WdRaLJclisaT8T0lWq3UdsEYYtYyu9y8Ehlfiq88erz7lyeqfbzz+j391j1efshJffeZfCAyPWkbXC2azOXk5En8eDEQIh2IsRx4RCcWw2xxcu3qdH4zHOXbUyNDQZSattn824VCMYCDCciT+3Gw2JwsDAwNpsegjQktRYtEVVuJPMF8cYteuKrIV2chkMqRSKRkZmWzdWszpUz+xEn9CLLry+vOIgYGBNMFkMqVHI3FCwWXisVWOHOkiKSmJhIQExGIxEokEiUSCWCxGLBYjEokwGJqIx1YJBZeJRuKYTKZ0wWg0ZoaDywQWw1w8byY1NRWZTEZyehL5lWl8/l0Ohw5l8nFZCplpMmSyV86eOUdgMUw4uIzRaMwUenv7Nwf9ESbHbdR8UoNcLidDkUlZ6046L+2l+1w1DXXr6G0W01YrR7lZjlwup7qqGuv4PYL+CL29/ZuFnp6eLf75EJeGrlBSUkJGRgYFVWXU9rbScqqZfd+oqSl7iwb1Wr7d8T67CzaRnp5Oaek2Ll+6in8+RE9Pzxahu6s7a963RH/fMdRqNQUFBZTsa+KLn8+w84CB0ho1e7d9yGcZ79Ch3EBznhSFQkFRUREnjpuY9y3R3dWdJXR2dmX7PIv0fX+U4uJi1Go1GTvrkZQYSFB+yke5e2hQ7qJvu5ZT2u00Z6WgVCrRaDSYfjyNz7NIZ2dXttDR0aH0uua48OsQFRUVFBUVkawoR5b3JQliPVve3UeD/AAXDhq50NhGeUoqhYWF1Nbu5vq1EbyuOTo6OpRCe2t7jssxwx+/T1BVVU15eTmK7AJSN+nIfK+dvLeb0accxlQ/QMv2OlSKHCoqKjAYmpiasONyzNDe2p4jtLS05Trve/C55xkcPE9ubi5arRZFloq0D3aQv2EPO8T1FMm2kZ+Vh1arRaPRMDJ8E59nAed9Dy0tbbmCocGQb598iNc1R3gpxuGvvqawsBCdTkdlZSUqlQqVSkVlZSU6nY6ysjJOnjQRDsbwuuawTz7E0GDIF/T6/aqpcSdOu5dZr59oOM6Vy1dpbGyksaGR+vp69Ho9TYYmDh44yK2bt4mG48x6/TjtXqbGnej1+1WCTleXP3Zn4sW9CScOmxuXw4fPPY9t8gE3hm9x5uez/HLmHLdv/sYD2zQ+zwIuhw+Hzc29CSdjdyZe6HR1+YJGo5Ee6z8xfXds8qV9yoXD5mHa7sXtnGXGvcDcTIC5mQAz7gXczlmm7V4cNg/2KRd3xyZfHu07/rC0tFQmCIKwViQS1Ug2SgYTE6UjiYnSG9K/SaU3pFLZa2/yxFdGJBslgyKRqEYQhLV/AaXdCaOlCJzHAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/**%0A%20*%20%20Button%20based%20on%20code%20found%20in%20Mozilla%20German%20Forums.%20http%3A//www.camp-firefox.de/forum/viewtopic.php%3Ff%3D16%26t%3D100898%0A%20*%20%20Source%3A%20https%3A//github.com/ardiman/userChrome.js/tree/master/webscreenshot%0A%20*/%0A%0Aif%20%28self.parentNode%20%26%26%20/%5Ewrapper-/.test%28self.parentNode.id%29%29%0A%09return%3B%0A%0Avar%20%24%20%3D%20this.PageCapture%20%3D%20%7B%0A%09init%3A%20function%28%29%20%7B%0A%09%09if%20%28%21%28%22Services%22%20in%20window%29%29%0A%09%09%09Cu.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0A%0A%09%09custombuttons.isPref%28%24.Branch%20+%20%22pForceToSaveImages%22%2C%20false%29%3B%0A%09%09custombuttons.isPref%28%24.Branch%20+%20%22pContextMenuForImages%22%2C%20false%29%3B%0A%09%09custombuttons.isPref%28%24.Branch%20+%20%22pHotkeyAction%22%2C%200%29%3B%0A%0A%09%09if%20%28%21%28%24._UID%20in%20window%29%29%20%7B%0A%09%09%09window%5B%24._UID%5D%20%3D%20%7B%0A%09%09%09%09CustomizableUI%3A%20false%2C%0A%09%09%09%09FrameScriptLoaded%3A%20false%2C%0A%09%09%09%09RandomID%3A%20false%2C%0A%09%09%09%09SaveImage%3A%20null%0A%09%09%09%7D%3B%0A%09%09%7D%0A%0A%09%09//%20I%27m%20forced%20to%20use%20this%20effing%20sheet%20for%20multiple%20windows%20opened%21%21%21%0A%09%09//%20Otherwise%2C%20the%20stupid%20frame%20script%20is%20loaded%20every%20effing%20time%20a%20window%20is%20opened%21%21%21%0A%09%09//%20Mozilla%2C%20get%20your%20head%20out%20of%20your%20effing%20a%24%24%21%21%21%21%21%0A%09%09if%20%28%21window%5B%24._UID%5D%5B%22RandomID%22%5D%29%20%7B%0A%09%09%09window%5B%24._UID%5D%5B%22RandomID%22%5D%20%3D%20parseInt%28Math.random%28%29%20*%2010000%2C%2010%29%3B%0A%09%09%7D%0A%09%09%24._randomID%20%3D%20window%5B%24._UID%5D%5B%22RandomID%22%5D%3B%0A%0A%09%09window%5B%24._UID%5D%5B%22SaveImage%22%5D%20%3D%20%24.saveImage%3B%0A%0A%09%09self.setAttribute%28%22popup%22%2C%20%24._UID%20+%20%22-menupopup%22%29%3B%0A%09%09%24.createElements%28%29%3B%0A%0A%09%09if%20%28Services.prefs.getBoolPref%28%24.Branch%20+%20%22pContextMenuForImages%22%29%29%20%7B%0A%09%09%09if%20%28%21%24.%24%28%24._UID%20+%20%22-WebScreenShotOnImage%22%29%29%0A%09%09%09%09%24.b64Context.init%28%29%3B%0A%09%09%7D%0A%0A%09%09self.tooltipText%20%3D%20%22%20%20%22%20+%20self.name%20+%20%22%5Cn%5Cn%22%20+%0A%09%09%09%22%20%20Middle%20Click%20%3D%20Options%20menu%5Cn%22%20+%0A%09%09%09%22%20%20Right%20click%20-%20%5C%22Button%20Help%5C%22%20for%20tips.%20%20%22%3B%0A%0A%09%09self.onmousedown%20%3D%20function%28aE%29%20%7B%0A%09%09%09if%20%28aE.button%20%3D%3D%3D%200%20%26%26%20%24.accel%28aE%29%29%0A%09%09%09%09aE.preventDefault%28%29%3B%0A%09%09%7D%3B%0A%0A%09%09self.onclick%20%3D%20function%28aE%29%20%7B%0A%09%09%09if%20%28aE.button%20%3D%3D%3D%201%20%26%26%20%21aE.shiftKey%20%26%26%20%21%24.accel%28aE%29%20%26%26%20%21aE.altKey%20%7C%7C%0A%09%09%09%09aE.button%20%3D%3D%3D%200%20%26%26%20%21aE.shiftKey%20%26%26%20%24.accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09%09aE.preventDefault%28%29%3B%0A%09%09%09%09let%20optPop%20%3D%20%24.%24%28%24._UID%20+%20%22-options-menu%22%29%3B%0A%09%09%09%09optPop%20%26%26%20optPop.openPopup%28aE.target%2C%20%22after_start%22%2C%200%2C%200%2C%20false%2C%20null%2C%20null%29%3B%0A%09%09%09%7D%0A%09%09%09aE.stopPropagation%28%29%3B%0A%09%09%7D%3B%0A%0A%09%09if%20%28%21window%5B%24._UID%5D%5B%22FrameScriptLoaded%22%5D%29%20%7B%0A%09%09%09window%5B%24._UID%5D%5B%22FrameScriptLoaded%22%5D%20%3D%20true%3B%0A%09%09%09%24._frameScript%20%3D%20%22data%3Aapplication/javascript%2C%22%20+%20encodeURIComponent%28%24.getHelp%28%22%25FrameScript%25%22%29%0A%09%09%09%09.replace%28/%25Capture_All_MsgID%25/g%2C%20%24._captureAllMsgID%29%0A%09%09%09%09.replace%28/%25Capture_Page_MsgID%25/g%2C%20%24._capturePageMsgID%29%0A%09%09%09%09.replace%28/%25Capture_Sel_Region_MsgID%25/g%2C%20%24._captureSelRegionMsgID%29%0A%09%09%09%09.replace%28/%25Cleanup_ID%25/g%2C%20%24._cleanUpMsgID%29%0A%09%09%09%09.replace%28/%25Capture_Sel_Node_MsgID%25/g%2C%20%24._captureSelNodeMsgID%29%0A%09%09%09%09.replace%28/%25Response_ID%25/g%2C%20%24._responseMsgID%29%29%3B%0A%09%09%09//%20Load%20frame%20script%20to%20send%20messages%20TO%20content.%0A%09%09%09%24._globalMM.loadFrameScript%28%24._frameScript%2C%20true%29%3B%0A%09%09%09//%20Add%20listener%20to%20receive%20messages%20FROM%20content.%0A%09%09%09%24._globalMM.addMessageListener%28%24._responseMsgID%2C%20%24._messageResponse%29%3B%0A%09%09%7D%0A%0A%09%09if%20%28%22CustomizableUI%22%20in%20window%29%20%7B%0A%09%09%09if%20%28%21window%5B%24._UID%5D%5B%22CustomizableUI%22%5D%29%20%7B%0A%09%09%09%09window%5B%24._UID%5D%5B%22CustomizableUI%22%5D%20%3D%20true%3B%0A%09%09%09%09CustomizableUI.addListener%28%7B%0A%09%09%09%09%09onCustomizeEnd%3A%20function%28aWindow%29%20%7B%0A%09%09%09%09%09%09var%20thisBtn%20%3D%20aWindow.document.getElementById%28self.id%29%3B%0A%09%09%09%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09%09%09aWindow%5B%24._UID%5D%5B%22CustomizableUI%22%5D%20%26%26%20thisBtn.init%28%29%3B%0A%09%09%09%09%09%09%7D%2C%20Math.floor%28Math.random%28%29%20*%20%281%20+%202000%20-%20200%29%29%20+%20200%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09addDestructor%28function%28aReason%29%20%7B%0A%09%09%09if%20%28aReason%20%3D%3D%3D%20%22update%22%20%7C%7C%20aReason%20%3D%3D%3D%20%22delete%22%29%20%7B%0A%09%09%09%09//%20Delete%20all%20elements%20created%20by%20this%20button.%0A%09%09%09%09let%20selfEls%20%3D%20document.getElementsByAttribute%28%22cb_id%22%2C%20%24._UID%29%3B%0A%09%09%09%09Array.prototype.slice.call%28selfEls%29.forEach%28function%28aEl%29%20%7B%0A%09%09%09%09%09aEl.parentNode.removeChild%28aEl%29%3B%0A%09%09%09%09%7D%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28aReason%20%3D%3D%3D%20%22delete%22%20%7C%7C%20aReason%20%3D%3D%3D%20%22destructor%22%29%20%7B%0A%09%09%09%09%24._mm.sendAsyncMessage%28%24._cleanUpMsgID%29%3B%0A%09%09%09%09%24._globalMM.removeDelayedFrameScript%28%24._frameScript%29%3B%0A%09%09%09%09%24._globalMM.removeMessageListener%28%24._responseMsgID%2C%20%24._messageResponse%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28aReason%20%3D%3D%3D%20%22delete%22%29%20%7B%0A%09%09%09%09%28%24.SP.getBranch%28%24.Branch%29%29.deleteBranch%28%22%22%29%3B%0A%09%09%09%09Services.prefs.savePrefFile%28null%29%3B%0A%09%09%09%09delete%20window%5B%24._UID%5D%3B%0A%09%09%09%7D%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%0A%09_messageResponse%3A%20%7B%0A%09%09receiveMessage%3A%20function%28aMsg%29%20%7B%0A%09%09%09if%20%28aMsg.name%20%21%3D%3D%20%24._responseMsgID%29%0A%09%09%09%09return%3B%0A%09%09%09switch%20%28aMsg.data.id%29%20%7B%0A%09%09%09%09case%20%22OpenImageOnTab%22%3A%0A%09%09%09%09%09gBrowser.addTab%28aMsg.data.image%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22SaveImageToDisk%22%3A%0A%09%09%09%09%09window%5B%24._UID%5D%5B%22SaveImage%22%5D%28aMsg.data.image%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22NotPossible%22%3A%0A%09%09%09%09%09%24.alertCallback.opt%20%3D%20%7B%0A%09%09%09%09%09%09centerScreen%3A%20true%2C%0A%09%09%09%09%09%7D%3B%0A%09%09%09%09%09%24.notifyme%28self.name%2C%0A%09%09%09%09%09%09%22No%20picture%20possible%21%21%21%22%2C%0A%09%09%09%09%09%09%24.getHelp%28%22%25WarningImg%25%22%29%2C%0A%09%09%09%09%09%09%24.alertCallback%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%7D%2C%0A%0A%09hotkeyPressed%3A%20function%28aE%29%20%7B%0A%09%09switch%20%28Services.prefs.getIntPref%28%24.Branch%20+%20%22pHotkeyAction%22%29%29%20%7B%0A%09%09%09case%201%3A%0A%09%09%09%09%24.shotCmd%28aE%2C%20%22captureAll%22%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%202%3A%0A%09%09%09%09%24.shotCmd%28aE%2C%20%22capturePage%22%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%203%3A%0A%09%09%09%09%24.shotCmd%28aE%2C%20%22captureSelRegion%22%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%204%3A%0A%09%09%09%09%24.shotCmd%28aE%2C%20%22captureSelNode%22%29%3B%0A%09%09%09%09break%3B%0A%09%09%09default%3A%0A%09%09%09%09return%20true%3B%0A%09%09%7D%0A%09%09aE.stopPropagation%28%29%3B%0A%09%7D%2C%0A%0A%09setHotkeyAction%3A%20function%28%29%20%7B%0A%09%09let%20opts%20%3D%20%5B%22Disabled%22%2C%0A%09%09%09%22Capture%20whole%20page%22%2C%0A%09%09%09%22Capture%20current%20view%22%2C%0A%09%09%09%22Capture%20selected%20region%22%2C%0A%09%09%09%22Capture%20selected%20node%22%0A%09%09%5D%3B%0A%09%09let%20selected%20%3D%20%7B%7D%3B%0A%09%09let%20result%20%3D%20Services.prompt.select%28null%2C%20self.name%2C%20%22Choose%20hotkey%20action.%22%2C%20opts.length%2C%0A%09%09%09opts%2C%20selected%29%3B%0A%09%09if%20%28result%29%20%7B%0A%09%09%09Services.prefs.setIntPref%28%24.Branch%20+%20%22pHotkeyAction%22%2C%20selected.value%29%3B%0A%09%09%7D%20else%0A%09%09%09return%3B%0A%09%7D%2C%0A%0A%09createElements%3A%20function%28%29%20%7B%0A%09%09let%20popSet%20%3D%20%24.%24%28%22mainPopupSet%22%29%3B%0A%09%09if%20%28popSet%20%26%26%20%21%24.%24%28%24._UID%20+%20%22-menupopup%22%29%29%20%7B%0A%09%09%09let%20shotMenu%20%3D%20popSet.appendChild%28%24.%24CNS%28%22menupopup%22%2C%20%7B%0A%09%09%09%09id%3A%20%24._UID%20+%20%22-menupopup%22%2C%0A%09%09%09%09position%3A%20%22after_start%22%2C%0A%09%09%09%09consumeoutsideclicks%3A%20false%2C%0A%09%09%09%09onpopupshown%3A%20%22this.handleOpenState%28event%2C%20true%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%09onpopuphidden%3A%20%22this.handleOpenState%28event%2C%20false%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%09cb_id%3A%20%24._UID%0A%09%09%09%7D%29%29%3B%0A%09%09%09shotMenu.handleOpenState%20%3D%20function%28aE%2C%20aState%29%20%7B%0A%09%09%09%09if%20%28aState%29%0A%09%09%09%09%09self.setAttribute%28%22open%22%2C%20aState%29%3B%0A%09%09%09%09else%0A%09%09%09%09%09self.removeAttribute%28%22open%22%29%3B%0A%09%09%09%09aE.stopPropagation%28%29%3B%0A%09%09%09%7D%3B%0A%09%09%09shotMenu.appendChild%28%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09%09label%3A%20%22Capture%20whole%20page%22%2C%0A%09%09%09%09oncommand%3A%20%24.that%20+%20%22shotCmd%28event%2C%20%27captureAll%27%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%09%7D%29%29%3B%0A%09%09%09shotMenu.appendChild%28%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09%09label%3A%20%22Capture%20current%20view%22%2C%0A%09%09%09%09oncommand%3A%20%24.that%20+%20%22shotCmd%28event%2C%20%27capturePage%27%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%09%7D%29%29%3B%0A%09%09%09shotMenu.appendChild%28%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09%09label%3A%20%22Capture%20selected%20region%22%2C%0A%09%09%09%09oncommand%3A%20%24.that%20+%20%22shotCmd%28event%2C%20%27captureSelRegion%27%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%09%7D%29%29%3B%0A%09%09%09shotMenu.appendChild%28%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09%09label%3A%20%22Capture%20selected%20node%22%2C%0A%09%09%09%09oncommand%3A%20%24.that%20+%20%22shotCmd%28event%2C%20%27captureSelNode%27%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%09%7D%29%29%3B%0A%09%09%7D%0A%09%09if%20%28popSet%20%26%26%20%21%24.%24%28%24._UID%20+%20%22-options-menu%22%29%29%20%7B%0A%09%09%09popSet.appendChild%28%24.%24CNS%28%22menupopup%22%2C%20%7B%0A%09%09%09%09id%3A%20%24._UID%20+%20%22-options-menu%22%2C%0A%09%09%09%09position%3A%20%22after_start%22%2C%0A%09%09%09%09cb_id%3A%20%24._UID%2C%0A%09%09%09%09onpopupshowing%3A%20%24.that%20+%20%22populateOptionsMenu%28this%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%7D%29%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%0A%09populateOptionsMenu%3A%20function%28aN%29%20%7B%0A%09%09aN.textContent%20%3D%20%22%22%3B%0A%09%09aN.appendChild%28%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09label%3A%20%22Context%20menu%20for%20images%22%2C%0A%09%09%09tooltiptext%3A%20%22If%20enabled/checked%2C%20it%20will%20add%20a%20context%20menu%20for%20images%20that%2C%20when%20clicked%2C%22%20+%0A%09%09%09%09%22%20will%20copy%20to%20the%20clipboard%20the%20selected%20image%20in%20base64%20format.%22%2C%0A%09%09%09type%3A%20%22checkbox%22%2C%0A%09%09%09checked%3A%20Services.prefs.getBoolPref%28%24.Branch%20+%20%22pContextMenuForImages%22%29%2C%0A%09%09%09oncommand%3A%20%24.that%20+%20%22switchPref%28%27pContextMenuForImages%27%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%7D%29%29%3B%0A%09%09aN.appendChild%28%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09label%3A%20%22Force%20to%20save%20images%22%2C%0A%09%09%09type%3A%20%22checkbox%22%2C%0A%09%09%09tooltiptext%3A%20%22If%20enabled/checked%2C%20all%20page%20capture%20actions%20will%20save%20the%20image%20to%20disk%22%20+%0A%09%09%09%09%22%20instead%20of%20loading%20them%20in%20a%20new%20tab.%5Cn%22%20+%0A%09%09%09%09%22%20Even%20with%20this%20option%20set%20to%20false%2C%20images%20can%20be%20saved%20to%20disk%20if%20the%20Shift%20key%20is%20pressed%22%20+%0A%09%09%09%09%22%20while%20any%20capture%20action%20is%20performed.%5Cn%5Cn%22%20+%0A%09%09%09%09%22%20As%20a%20fails%20safe%2C%20images%20bigger%20than%205MB%20are%20forced%20to%20be%20saved%20to%20disk.%20Because%22%20+%0A%09%09%09%09%22%20Base64%20images%20that%20big%20will%20be%20hard%20to%20be%20loaded%20into%20a%20tab%22%20+%0A%09%09%09%09%22%20%28more%20than%205%20million%20characters%20%28aprox.%29%20inside%20the%20URL%20bar%29.%22%2C%0A%09%09%09checked%3A%20Services.prefs.getBoolPref%28%24.Branch%20+%20%22pForceToSaveImages%22%29%2C%0A%09%09%09oncommand%3A%20%24.that%20+%20%22switchPref%28%27pForceToSaveImages%27%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%7D%29%29%3B%0A%09%09aN.appendChild%28%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09label%3A%20%22Choose%20hotkey%20action%22%2C%0A%09%09%09tooltiptext%3A%20%22Choose%20the%20action%20to%20be%20performed%20when%20this%20button%20hotkey%20is%20activated.%22%2C%0A%09%09%09oncommand%3A%20%24.that%20+%20%22setHotkeyAction%28%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%7D%29%29%3B%0A%09%7D%2C%0A%0A%09switchPref%3A%20function%28aPref%29%20%7B%0A%09%09Services.prefs.setBoolPref%28%24.Branch%20+%20aPref%2C%20%21Services.prefs.getBoolPref%28%24.Branch%20+%20aPref%29%29%3B%0A%09%09if%20%28aPref%20%3D%3D%3D%20%22pContextMenuForImages%22%29%20%7B%0A%09%09%09if%20%28Services.prefs.getBoolPref%28%24.Branch%20+%20aPref%29%29%0A%09%09%09%09%24.b64Context.init%28%29%3B%0A%09%09%09else%0A%09%09%09%09%24.b64Context.uninit%28%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%0A%09shotCmd%3A%20function%28aE%2C%20aType%29%20%7B%0A%09%09let%20save%20%3D%20Services.prefs.getBoolPref%28%24.Branch%20+%20%22pForceToSaveImages%22%29%20%7C%7C%20aE.shiftKey%3B%0A%09%09switch%20%28aType%29%20%7B%0A%09%09%09case%20%22captureAll%22%3A%0A%09%09%09%09%24._mm.sendAsyncMessage%28%24._captureAllMsgID%2C%20%7B%0A%09%09%09%09%09SaveImage%3A%20save%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22capturePage%22%3A%0A%09%09%09%09%24._mm.sendAsyncMessage%28%24._capturePageMsgID%2C%20%7B%0A%09%09%09%09%09SaveImage%3A%20save%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22captureSelRegion%22%3A%0A%09%09%09%09%24._mm.sendAsyncMessage%28%24._captureSelRegionMsgID%2C%20%7B%0A%09%09%09%09%09SaveImage%3A%20save%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22captureSelNode%22%3A%0A%09%09%09%09%24._mm.sendAsyncMessage%28%24._captureSelNodeMsgID%2C%20%7B%0A%09%09%09%09%09SaveImage%3A%20save%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22b64Img%22%3A%0A%09%09%09%09%24.b64Context.copyImageAsBase64%28gContextMenu.target.src%29%3B%0A%09%09%09%09break%3B%0A%09%09%7D%0A%09%7D%2C%0A%0A%09b64Context%3A%20%7B%0A%09%09init%3A%20function%28%29%20%7B%0A%09%09%09if%20%28%21%24.%24%28%24._UID%20+%20%22-WebScreenShotOnImage%22%29%29%20%7B%0A%09%09%09%09let%20inserPoint%20%3D%20%24.%24%28%22context-copyimage%22%29%3B%0A%09%09%09%09let%20b64Img%20%3D%20%24.%24CNS%28%22menuitem%22%2C%20%7B%0A%09%09%09%09%09id%3A%20%24._UID%20+%20%22-WebScreenShotOnImage%22%2C%0A%09%09%09%09%09cb_id%3A%20%24._UID%2C%0A%09%09%09%09%09class%3A%20%22menuitem-iconic%22%2C%0A%09%09%09%09%09label%3A%20%22Copy%20image%20as%20Base64%22%2C%0A%09%09%09%09%09image%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB7kl%22%20+%0A%09%09%09%09%09%09%22EQVQ4jc3Sz0vbYBjAcf/aeqiXQbAs3WFihuwQRFima7S0RVZ/ZFTNq61NmBpfmdREBk2Yc6/dOmV%22%20+%0A%09%09%09%09%09%09%22K6xiSg2OX7w5iZaznsef28Dx8ngeeZ2Tkv47ZFY+t4JhW9J6t4Bh7tcnQxiSOUUqRxDFe00MIl9r%22%20+%0A%09%09%09%09%09%09%22aBsv1PVrtU5RStNqnLNf3EMJFCPcBchwHpRRKKaSURGFImqakaUrv6pKLboduR3HR7XDd75Om6aD%22%20+%0A%09%09%09%09%09%09%223D8QwDDRNIwpDrvt9lFIEB4fMrng8LaxjrzaRUg6GRWGI4zh3iG3baJpGZjRDFIacnHxgrbGLPu8%22%20+%0A%09%09%09%09%09%09%22z53dYCa95VvtIzn6Lu72DUopu98vDBvdANptFSomUksmSTy285Kz3k3JwztzBD0y/x2SxMdhkKNC%22%20+%0A%09%09%09%09%09%09%22o19msbzM2u4No31AOznne+Ebp+Bcbn2CiekTp9SpJHA8HhHB5U1sn+3IX0+9h+j2KR7csJRB8vQM%22%20+%0A%09%09%09%09%09%09%22KxQpRGA4HvKbHUrXKk1ebTDWu8D5D9waS7yDaNzx+UcNxHA7fHf4NZEYzgz+YthZ4ZG0zt3PB/tk%22%20+%0A%09%09%09%09%09%09%22t5eAcfd5n2lrAa3oPZ9Q0jcXFRUzTJK/nkVKSxDFCuBSKFSZmKoxNlZiYqVAoVhDCJYljpJTk9fw%22%20+%0A%09%09%09%09%09%09%22dYlkWlmVhmiamaXKfG4aBnhtH0zT03DiGYQxqtm0Pf+t/Hr8B1iDy8J2HiUcAAAAASUVORK5CYII%3D%22%2C%0A%09%09%09%09%09oncommand%3A%20%24.that%20+%20%22shotCmd%28event%2C%20%27b64Img%27%29%3Bevent.stopPropagation%28%29%3B%22%2C%0A%09%09%09%09%09onclick%3A%20%22event.stopPropagation%28%29%3B%22%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09inserPoint.parentNode.insertBefore%28b64Img%2C%20inserPoint.nextSibling%29%3B%0A%09%09%09%09let%20ctx%20%3D%20%24.%24%28%22contentAreaContextMenu%22%29%3B%0A%09%09%09%09if%20%28ctx%29%0A%09%09%09%09%09ctx.addEventListener%28%22popupshowing%22%2C%20%24.b64Context.contextMenuListener%2C%20false%29%3B%0A%09%09%09%09addDestructor%28function%28aReason%29%20%7B%0A%09%09%09%09%09if%20%28aReason%20%3D%3D%3D%20%22update%22%20%7C%7C%20aReason%20%3D%3D%3D%20%22delete%22%29%20%7B%0A%09%09%09%09%09%09ctx.removeEventListener%28%22popupshowing%22%2C%20%24.b64Context.contextMenuListener%2C%20false%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09uninit%3A%20function%28%29%20%7B%0A%09%09%09let%20ctx%20%3D%20%24.%24%28%22contentAreaContextMenu%22%29%3B%0A%09%09%09ctx%20%26%26%20ctx.removeEventListener%28%22popupshowing%22%2C%20%24.b64Context.contextMenuListener%2C%20false%29%3B%0A%09%09%09let%20mI%20%3D%20%24.%24%28%24._UID%20+%20%22-WebScreenShotOnImage%22%29%3B%0A%09%09%09mI%20%26%26%20mI.parentNode.removeChild%28mI%29%3B%0A%09%09%7D%2C%0A%09%09copyImageAsBase64%3A%20function%28aImg%29%20%7B%0A%09%09%09%24.img_to_b64_cback%28aImg%2C%20function%28aImgData%29%20%7B%0A%09%09%09%09if%20%28aImgData%29%20%7B%0A%09%09%09%09%09gClipboard.write%28aImgData%29%3B%0A%09%09%09%09%09%24.alertCallback.opt%20%3D%20%7B%0A%09%09%09%09%09%09centerScreen%3A%20false%2C%0A%09%09%09%09%09%7D%3B%0A%09%09%09%09%09%24.notifyme%28self.name%2C%0A%09%09%09%09%09%09%22Image%20copied%20as%20Base64%22%2C%0A%09%09%09%09%09%09%24.getHelp%28%22%25AlertImg%25%22%29%2C%0A%09%09%09%09%09%09%24.alertCallback%29%3B%0A%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09%24.alertCallback.opt%20%3D%20%7B%0A%09%09%09%09%09%09centerScreen%3A%20true%2C%0A%09%09%09%09%09%7D%3B%0A%09%09%09%09%09%24.notifyme%28self.name%2C%0A%09%09%09%09%09%09%22Something%20went%20wrong%20while%20trying%20to%20convert%20image%20to%20Base64.%22%2C%0A%09%09%09%09%09%09%24.getHelp%28%22%25ErrorImg%25%22%29%2C%0A%09%09%09%09%09%09%24.alertCallback%29%3B%0A%09%09%09%09%7D%0A%0A%09%09%09%7D%29%3B%0A%09%09%7D%2C%0A%09%09contextMenuListener%3A%20function%28%29%20%7B%0A%09%09%09let%20itm%20%3D%20%24.%24%28%24._UID%20+%20%22-WebScreenShotOnImage%22%29%3B%0A%09%09%09if%20%28gContextMenu%20%26%26%20itm%29%0A%09%09%09%09itm.hidden%20%3D%20%28%21gContextMenu.onImage%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%0A%09img_to_b64_cback%3A%20function%28aURL%2C%20aCallback%29%20%7B%0A%09%09if%20%28%21aURL%29%0A%09%09%09aCallback%28false%29%3B%0A%09%09else%20%7B%0A%09%09%09let%20xhr%20%3D%20new%20XMLHttpRequest%28%29%2C%0A%09%09%09%09nsIMIMEService%20%3D%20Cc%5B%22@mozilla.org/mime%3B1%22%5D.getService%28Ci.nsIMIMEService%29%3B%0A%09%09%09try%20%7B%0A%09%09%09%09xhr.open%28%22GET%22%2C%20aURL%2C%20true%29%3B%0A%09%09%09%7D%20catch%20%28aErr%29%20%7B%0A%09%09%09%09aCallback%28false%29%3B%0A%09%09%09%09return%20true%3B%0A%09%09%09%7D%0A%09%09%09xhr.responseType%20%3D%20%22arraybuffer%22%3B%0A%09%09%09xhr.onload%20%3D%20function%28%29%20%7B%0A%09%09%09%09let%20mediaType%2C%0A%09%09%09%09%09dataURI%2C%0A%09%09%09%09%09binary%2C%0A%09%09%09%09%09bytes%3B%0A%09%09%09%09bytes%20%3D%20new%20Uint8Array%28xhr.response%29%3B%0A%09%09%09%09binary%20%3D%20%5B%5D.map.call%28bytes%2C%20function%28aByte%29%20%7B%0A%09%09%09%09%09return%20String.fromCharCode%28aByte%29%3B%0A%09%09%09%09%7D%29.join%28%22%22%29%3B%0A%09%09%09%09mediaType%20%3D%20xhr.getResponseHeader%28%22Content-Type%22%29%3B%0A%09%09%09%09let%20base64%20%3D%20btoa%28binary%29%3B%0A%09%09%09%09if%20%28mediaType.indexOf%28%22image/%22%29%20%21%3D%3D%200%29%20%7B%0A%09%09%09%09%09try%20%7B%0A%09%09%09%09%09%09mediaType%20%3D%20nsIMIMEService.getTypeFromURI%28Services.io.newURI%28aURL%2C%20null%2C%20null%29%29%3B%0A%09%09%09%09%09%09console.info%28mediaType%29%3B%0A%09%09%09%09%09%7D%20catch%20%28aError%29%20%7B%0A%09%09%09%09%09%09mediaType%20%3D%20%22image/png%22%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%09dataURI%20%3D%20%22data%3A%22%20+%20mediaType%20+%20%22%3Bbase64%2C%22%20+%20base64%3B%0A%09%09%09%09aCallback%28dataURI%29%3B%0A%09%09%09%7D%3B%0A%09%09%09xhr.onerror%20%3D%20function%28%29%20%7B%0A%09%09%09%09aCallback%28false%29%3B%0A%09%09%09%7D%3B%0A%09%09%09xhr.send%28null%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%0A%09saveImage%3A%20function%28aImg%29%20%7B%0A%09%09if%20%28%21%28%22Task%22%20in%20window%29%29%0A%09%09%09Cu.import%28%22resource%3A//gre/modules/Task.jsm%22%29%3B%0A%09%09if%20%28%21%28%22Downloads%22%20in%20window%29%29%0A%09%09%09Cu.import%28%22resource%3A//gre/modules/Downloads.jsm%22%29%3B%0A%0A%09%09var%20fp%20%3D%20Cc%5B%22@mozilla.org/filepicker%3B1%22%5D.createInstance%28Ci.nsIFilePicker%29%3B%0A%09%09fp.init%28window%2C%20%22Save%20image%22%2C%20Ci.nsIFilePicker.modeSave%29%3B%0A%09%09fp.appendFilters%28fp.filterImages%29%3B%0A%09%09fp.appendFilters%28fp.filterAll%29%3B%0A%09%09fp.defaultString%20%3D%20%22Page%20Capture.png%22%3B%0A%09%09if%20%28fp.show%28%29%20%3D%3D%3D%20fp.returnOK%29%20%7B%0A%09%09%09Task.spawn%28function%28%29%20%7B%0A%09%09%09%09let%20doDownload%20%3D%20%22fetch%22%20in%20Downloads%20%3F%20Downloads.fetch%20%3A%20Downloads.simpleDownload%3B%0A%09%09%09%09doDownload.call%28Downloads%2C%20aImg%2C%20fp.file.path%29%3B%0A%09%09%09%7D%29.then%28null%2C%20Cu.reportError%29%3B%0A%09%09%7D%20else%0A%09%09%09return%3B%0A%09%7D%2C%0A%0A%09notifyme%3A%20function%28aTitle%2C%20aMsg%2C%20aImg%2C%20aCallback%29%20%7B%20//%20Notification%20function%0A%09%09let%20origin%20%3D%20%28Services.prefs.getPrefType%28%22ui.alertNotificationOrigin%22%29%20%21%3D%3D%200%29%20%3F%0A%09%09%09Services.prefs.getIntPref%28%22ui.alertNotificationOrigin%22%29%20%3A%0A%09%09%09null%3B%0A%09%09let%20win%20%3D%20Services.ww.openWindow%28null%2C%20%22chrome%3A//global/content/alerts/alert.xul%22%2C%0A%09%09%09%22_blank%22%2C%20%22chrome%2Ctitlebar%3Dno%2Cpopup%3Dyes%22%2C%20null%29%3B%0A%09%09win.arguments%20%3D%20%5BaImg%2C%20aTitle%2C%20aMsg%2C%20%21%21aCallback%2C%20%22%22%2C%20origin%2C%20%22%22%2C%20%22%22%2C%20null%2C%20%28%21%21aCallback%20%3F%20aCallback%20%3A%20null%29%5D%3B%0A%09%7D%2C%0A%0A%09alertCallback%3A%20%7B%0A%09%09opt%3A%20%7B%0A%09%09%09centerScreen%3A%20null%2C%0A%09%09%7D%2C%0A%09%09observe%3A%20function%28aSubject%2C%20aTopic%2C%20aData%29%20%7B%0A%09%09%09let%20alt%20%3D%20Services.wm.getMostRecentWindow%28%22alert%3Aalert%22%29%3B%0A%09%09%09let%20tBox%20%3D%20alt.document.getElementById%28%22alertTextBox%22%29%3B%0A%09%09%09if%20%28aTopic%20%3D%3D%3D%20%22alertshow%22%29%20%7B%0A%09%09%09%09tBox.appendChild%28%24.%24CNS%28%22label%22%2C%20%7B%0A%09%09%09%09%09flex%3A%201%2C%0A%09%09%09%09%09value%3A%20%22%uD835%uDDD6%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%20%uD835%uDDFA%uD835%uDDF2%20%uD835%uDE01%uD835%uDDFC%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDFC%uD835%uDE00%uD835%uDDF2%20%uD835%uDDFA%uD835%uDDF2%22%2C%0A%09%09%09%09%7D%29%29%3B%0A%09%09%09%09if%20%28this.opt.centerScreen%29%20%7B%0A%09%09%09%09%09alt.moveTo%28%28screen.availWidth%20/%202%29%20-%20%28alt.outerWidth%20/%202%29%2C%0A%09%09%09%09%09%09%28screen.availHeight%20/%202%29%20-%20%28alt.outerHeight%20/%202%29%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09alt.close%28%29%3B%0A%09%09%09%09%7D%2C%20%28this.opt.centerScreen%20%3F%2010000%20%3A%203000%29%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28aTopic%20%3D%3D%3D%20%22alertclickcallback%22%29%20%7B%0A%09%09%09%09alt.close%28%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%2C%0A%0A%09getHelp%3A%20function%28aPlaceholder%29%20%7B%20//%20Get%20specific%20data%2C%20surrounded%20by%20%22placeholders%22%2C%20from%20the%20Help%20tab.%0A%09%09return%20%24.%24%28self.id%29.getAttribute%28%22Help%22%29.split%28%22%3C%21--%22%20+%20aPlaceholder%20+%20%22--%3E%22%29%5B1%5D%3B%0A%09%7D%2C%0A%0A%09%24%3A%20function%28aID%2C%20aParent%29%20%7B%0A%09%09if%20%28%21aParent%29%0A%09%09%09return%20document.getElementById%28aID%29%3B%0A%09%09return%20aParent.getElementById%28aID%29%3B%0A%09%7D%2C%0A%0A%09%24CNS%3A%20function%28aElName%2C%20aAttrs%2C%20aNS%29%20%7B%0A%09%09var%20el%20%3D%20document.createElement%28aElName%29%3B%0A%09%09if%20%28aAttrs%29%0A%09%09%09Object.keys%28aAttrs%29.forEach%28function%28n%29%20%7B%0A%09%09%09%09if%20%28aAttrs%5Bn%5D%20%21%3D%3D%20%22%22%29%0A%09%09%09%09%09el.setAttribute%28n%2C%20aAttrs%5Bn%5D%29%3B%0A%09%09%09%7D%29%3B%0A%09%09return%20el%3B%0A%09%7D%2C%0A%0A%09_UID%3A%20%22__page_capture%22%20+%20self.id.slice%2820%29%2C%0A%09_globalMM%3A%20Cc%5B%22@mozilla.org/globalmessagemanager%3B1%22%5D.getService%28Ci.nsIMessageListenerManager%29%2C%0A%09that%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.PageCapture.%22%2C%0A%09_randomID%3A%20null%2C%0A%09_frameScript%3A%20null%2C%0A%09isOSX%3A%20Services.appinfo.OS.toLowerCase%28%29.startsWith%28%22darwin%22%29%2C%0A%09accel%3A%20function%28aE%29%20%7B%0A%09%09if%20%28aE%29%0A%09%09%09return%20%24.isOSX%20%3F%20aE.metaKey%20%3A%20aE.ctrlKey%3B%0A%09%09return%20%24.isOSX%20%3F%20%22%uD835%uDDD6%uD835%uDDFC%uD835%uDDFA%uD835%uDDFA%uD835%uDDEE%uD835%uDDFB%uD835%uDDF1%22%20%3A%20%22%uD835%uDDD6%uD835%uDDFC%uD835%uDDFB%uD835%uDE01%uD835%uDDFF%uD835%uDDFC%uD835%uDDF9%22%3B%0A%09%7D%2C%0A%09get%20_responseMsgID%28%29%20%7B%0A%09%09return%20%22CB%3APageCapture%3AResponse%3A%22%20+%20self.id.slice%2814%29%20+%20%22-%22%20+%20%24._randomID%3B%0A%09%7D%2C%0A%09get%20_captureAllMsgID%28%29%20%7B%0A%09%09return%20%22CB%3APageCapture%3ACaptureAll%3A%22%20+%20self.id.slice%2814%29%20+%20%22-%22%20+%20%24._randomID%3B%0A%09%7D%2C%0A%09get%20_capturePageMsgID%28%29%20%7B%0A%09%09return%20%22CB%3APageCapture%3ACapturePage%3A%22%20+%20self.id.slice%2814%29%20+%20%22-%22%20+%20%24._randomID%3B%0A%09%7D%2C%0A%09get%20_captureSelRegionMsgID%28%29%20%7B%0A%09%09return%20%22CB%3APageCapture%3ACaptureSelRegion%3A%22%20+%20self.id.slice%2814%29%20+%20%22-%22%20+%20%24._randomID%3B%0A%09%7D%2C%0A%09get%20_captureSelNodeMsgID%28%29%20%7B%0A%09%09return%20%22CB%3APageCapture%3ACaptureSelNode%3A%22%20+%20self.id.slice%2814%29%20+%20%22-%22%20+%20%24._randomID%3B%0A%09%7D%2C%0A%09get%20_cleanUpMsgID%28%29%20%7B%0A%09%09return%20%22CB%3APageCapture%3ACleanup%3A%22%20+%20self.id.slice%2814%29%20+%20%22-%22%20+%20%24._randomID%3B%0A%09%7D%2C%0A%09get%20_mm%28%29%20%7B%0A%09%09let%20mm%20%3D%20null%3B%0A%09%09try%20%7B%0A%09%09%09mm%20%3D%20typeof%20gBrowser%20%3D%3D%3D%20%22object%22%20%3F%0A%09%09%09%09gBrowser.selectedTab.linkedBrowser.messageManager%20%3A%20//%20Everything%20else.%0A%09%09%09%09getBrowser%28%29.messageManager%3B%20//%20Thunderbird.%20%25%24/%26%24%25%20you%21%21%21%21%0A%09%09%7D%20catch%20%28aErr%29%20%7B%7D%0A%09%09return%20mm%3B%0A%09%7D%2C%0A%7D%3B%0A%0Athis.PageCapture.Branch%20%3D%20%22CB.PageCapture.Id%22%20+%20self.id.slice%2820%29%20+%20%22.%22%3B%0A%0Athis.PageCapture.init%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%20%28%21event.target%20%26%26%20%21this.disabled%29%0A%09this.PageCapture.hotkeyPressed%28event%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BOptions%20%28Ctrl%20+%20Left%20Click%29%3A%0A%0A-%20Context%20menu%20for%20images%3A%0AIf%20enabled/checked%2C%20it%20will%20add%20a%20context%20menu%20for%20images%20that%2C%20when%20clicked%2C%20will%20copy%20to%20the%20clipboard%20the%20selected%20image%20in%20base64%20format.%0A%0A-%20Force%20to%20save%20images%3A%0AIf%20enabled/checked%2C%20all%20page%20capture%20actions%20will%20save%20the%20image%20to%20disk%20instead%20of%20loading%20them%20in%20a%20new%20tab.%20Even%20with%20this%20option%20set%20to%20false%2C%20images%20can%20be%20saved%20to%20disk%20if%20the%20Shift%20key%20is%20pressed%20while%20any%20capture%20action%20is%20performed.%20As%20a%20fails%20safe%2C%20images%20bigger%20than%205MB%20are%20forced%20to%20be%20saved%20to%20disk.%20Because%20Base64%20images%20that%20big%20will%20be%20hard%20to%20be%20loaded%20into%20a%20tab%20%28more%20than%205%20million%20characters%20%28approx.%29%20inside%20the%20URL%20bar%29.%0A%0A-%20Choose%20hotkey%20action%3A%0AIt%20allows%20you%20to%20choose%20the%20action%20to%20be%20performed%20when%20this%20button%20hotkey%20is%20activated.%0A%0A%5B%2C%5D%0A%0A/**%0A%20*%20%uD835%uDDD9%uD835%uDDE5%uD835%uDDE2%uD835%uDDE0%20%uD835%uDDDB%uD835%uDDD8%uD835%uDDE5%uD835%uDDD8%20%uD835%uDDD7%uD835%uDDE2%uD835%uDDEA%uD835%uDDE1%20%uD835%uDDD7%uD835%uDDE2%20%uD835%uDDE1%uD835%uDDE2%uD835%uDDE7%20%uD835%uDDE7%uD835%uDDE2%uD835%uDDE8%uD835%uDDD6%uD835%uDDDB%20%uD835%uDDD4%uD835%uDDE1%uD835%uDDEC%uD835%uDDE7%uD835%uDDDB%uD835%uDDDC%uD835%uDDE1%uD835%uDDDA%0A%20*/%0A%0A%3C%21--%25FrameScript%25--%3E%0A%28function%28aContext%29%20%7B%0A%09%22use%20sctrict%22%3B%0A%09var%20Ci%20%3D%20Components.interfaces%3B%0A%09var%20Cc%20%3D%20Components.classes%3B%0A%09var%20Cu%20%3D%20Components.utils%3B%0A%09let%20PageCapture%20%3D%20%7B%0A%09%09_forceSaveImages%3A%20null%2C%0A%09%09Init%3A%20function%28%29%20%7B%0A%09%09%09aContext.addMessageListener%28%22%25Capture_All_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.addMessageListener%28%22%25Capture_Page_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.addMessageListener%28%22%25Capture_Sel_Region_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.addMessageListener%28%22%25Capture_Sel_Node_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.addMessageListener%28%22%25Cleanup_ID%25%22%2C%20this%29%3B%0A%09%09%7D%2C%0A%0A%09%09unInit%3A%20function%28%29%20%7B%0A%09%09%09aContext.removeMessageListener%28%22%25Capture_All_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.removeMessageListener%28%22%25Capture_Page_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.removeMessageListener%28%22%25Capture_Sel_Region_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.removeMessageListener%28%22%25Capture_Sel_Node_MsgID%25%22%2C%20this%29%3B%0A%09%09%09aContext.removeMessageListener%28%22%25Cleanup_ID%25%22%2C%20this%29%3B%0A%09%09%7D%2C%0A%0A%09%09receiveMessage%3A%20function%28aMsg%29%20%7B%0A%09%09%09this._forceSaveImages%20%3D%20aMsg.data.SaveImage%3B%0A%09%09%09switch%20%28aMsg.name%29%20%7B%0A%09%09%09%09case%20%22%25Capture_All_MsgID%25%22%3A%0A%09%09%09%09%09this.WebScreenShot.captureAll%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22%25Capture_Page_MsgID%25%22%3A%0A%09%09%09%09%09this.WebScreenShot.capturePage%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22%25Capture_Sel_Region_MsgID%25%22%3A%0A%09%09%09%09%09WebScreenShotByClipping.init%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22%25Capture_Sel_Node_MsgID%25%22%3A%0A%09%09%09%09%09WebScreenShotByClick.init%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22%25Cleanup_MsgID%25%22%3A%0A%09%09%09%09%09this.unInit%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09WebScreenShot%3A%20%7B%0A%09%09%09capture%3A%20function%28win%2C%20x%2C%20y%2C%20width%2C%20height%2C%20isCopy%29%20%7B%0A%09%09%09%09var%20scrollbox%20%3D%20content.document.createElement%28%22scrollbox%22%29%3B%0A%09%09%09%09scrollbox.width%20%3D%20%221%22%3B%0A%09%09%09%09scrollbox.height%20%3D%20%221%22%3B%0A%09%09%09%09var%20canvas%20%3D%20content.document.createElementNS%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22canvas%22%29%3B%0A%09%09%09%09canvas.style.display%20%3D%20%22inline%22%3B%0A%09%09%09%09canvas.width%20%3D%20width%3B%0A%09%09%09%09canvas.height%20%3D%20height%3B%0A%09%09%09%09var%20ctx%20%3D%20canvas.getContext%28%222d%22%29%3B%0A%09%09%09%09ctx.clearRect%280%2C%200%2C%20width%2C%20height%29%3B%0A%09%09%09%09ctx.save%28%29%3B%0A%09%09%09%09ctx.scale%281.0%2C%201.0%29%3B%0A%09%09%09%09ctx.drawWindow%28win%2C%20x%2C%20y%2C%20width%2C%20height%2C%20%22rgb%28255%2C255%2C255%29%22%29%3B%0A%09%09%09%09ctx.restore%28%29%3B%0A%09%09%09%09var%20base64%20%3D%20canvas.toDataURL%28%22image/png%22%29%3B%0A%09%09%09%09if%20%28base64.length%20%3E%20parseInt%285000000%2C%2010%29%29%0A%09%09%09%09%09PageCapture._forceSaveImages%20%3D%20true%3B%0A%09%09%09%09sendAsyncMessage%28%22%25Response_ID%25%22%2C%20%7B%0A%09%09%09%09%09id%3A%20PageCapture._forceSaveImages%20%3F%20%22SaveImageToDisk%22%20%3A%20%22OpenImageOnTab%22%2C%0A%09%09%09%09%09image%3A%20base64%2C%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09this._forceSaveImages%20%3D%20false%3B%0A%09%09%09%7D%2C%0A%09%09%09captureAll%3A%20function%28%29%20%7B%0A%09%09%09%09var%20win%20%3D%20content%3B%0A%09%09%09%09PageCapture.WebScreenShot.capture%28win%2C%200%2C%200%2C%20win.innerWidth%20+%20win.scrollMaxX%2C%20win.innerHeight%20+%20win.scrollMaxY%29%3B%0A%09%09%09%7D%2C%0A%09%09%09capturePage%3A%20function%28%29%20%7B%0A%09%09%09%09var%20win%20%3D%20content%2C%0A%09%09%09%09%09doc%20%3D%20win.document%2C%0A%09%09%09%09%09body%20%3D%20doc.body%2C%0A%09%09%09%09%09html%20%3D%20doc.documentElement%3B%0A%09%09%09%09if%20%28%21body%29%20%7B%0A%09%09%09%09%09sendAsyncMessage%28%22%25Response_ID%25%22%2C%20%7B%0A%09%09%09%09%09%09id%3A%20%22NotPossible%22%2C%0A%09%09%09%09%09%7D%29%3B%0A%09%09%09%09%09return%20true%3B%0A%09%09%09%09%7D%0A%09%09%09%09var%20scrX%20%3D%20%28body.scrollLeft%20%7C%7C%20html.scrollLeft%29%20-%20html.clientLeft%3B%0A%09%09%09%09var%20scrY%20%3D%20%28body.scrollTop%20%7C%7C%20html.scrollTop%29%20-%20html.clientTop%3B%0A%09%09%09%09PageCapture.WebScreenShot.capture%28win%2C%20scrX%2C%20scrY%2C%20win.innerWidth%2C%20win.innerHeight%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%7D%3B%0A%0A%09var%20WebScreenShotByClipping%20%3D%20%7B%0A%09%09capture%3A%20PageCapture.WebScreenShot.capture%2C%0A%09%09handleEvent%3A%20function%28aE%29%20%7B%0A%09%09%09if%20%28aE.button%20%21%3D%3D%200%29%0A%09%09%09%09return%20false%3B%0A%09%09%09aE.preventDefault%28%29%3B%0A%09%09%09aE.stopPropagation%28%29%3B%0A%09%09%09switch%20%28aE.type%29%20%7B%0A%09%09%09%09case%20%22mousedown%22%3A%0A%09%09%09%09%09this.downX%20%3D%20aE.pageX%3B%0A%09%09%09%09%09this.downY%20%3D%20aE.pageY%3B%0A%09%09%09%09%09this.bs.left%20%3D%20this.downX%20+%20%22px%22%3B%0A%09%09%09%09%09this.bs.top%20%3D%20this.downY%20+%20%22px%22%3B%0A%09%09%09%09%09this.body.appendChild%28this.box%29%3B%0A%09%09%09%09%09this.flag%20%3D%20true%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22mousemove%22%3A%0A%09%09%09%09%09if%20%28%21this.flag%29%0A%09%09%09%09%09%09return%3B%0A%09%09%09%09%09this.moveX%20%3D%20aE.pageX%3B%0A%09%09%09%09%09this.moveY%20%3D%20aE.pageY%3B%0A%09%09%09%09%09if%20%28this.downX%20%3E%20this.moveX%29%0A%09%09%09%09%09%09this.bs.left%20%3D%20this.moveX%20+%20%22px%22%3B%0A%09%09%09%09%09if%20%28this.downY%20%3E%20this.moveY%29%0A%09%09%09%09%09%09this.bs.top%20%3D%20this.moveY%20+%20%22px%22%3B%0A%09%09%09%09%09this.bs.width%20%3D%20Math.abs%28this.moveX%20-%20this.downX%29%20+%20%22px%22%3B%0A%09%09%09%09%09this.bs.height%20%3D%20Math.abs%28this.moveY%20-%20this.downY%29%20+%20%22px%22%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22mouseup%22%3A%0A%09%09%09%09%09PageCapture._forceSaveImages%20%3D%20aE.shiftKey%3B%0A%09%09%09%09%09this.uninit%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09init%3A%20function%28%29%20%7B%0A%09%09%09this.win%20%3D%20content%3B%0A%09%09%09this.doc%20%3D%20this.win.document%3B%0A%09%09%09this.body%20%3D%20this.doc.body%3B%0A%09%09%09if%20%28%21%28this.body%20instanceof%20Ci.nsIDOMHTMLBodyElement%29%29%20%7B%0A%09%09%09%09sendAsyncMessage%28%22%25Response_ID%25%22%2C%20%7B%0A%09%09%09%09%09id%3A%20%22NotPossible%22%2C%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09return%20false%3B%0A%09%09%09%7D%0A%09%09%09this.flag%20%3D%20null%3B%0A%09%09%09this.box%20%3D%20this.doc.createElement%28%22div%22%29%3B%0A%09%09%09this.bs%20%3D%20this.box.style%3B%0A%09%09%09this.bs.border%20%3D%20%22%230f0%20dashed%202px%22%3B%0A%09%09%09this.bs.position%20%3D%20%22absolute%22%3B%0A%09%09%09this.bs.zIndex%20%3D%20%222147483647%22%3B%0A%09%09%09this.defaultCursor%20%3D%20content.getComputedStyle%28this.body%2C%20%22%22%29.cursor%3B%0A%09%09%09this.body.style.cursor%20%3D%20%22crosshair%22%3B%0A%09%09%09this.doc.addEventListener%28%22mousedown%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.addEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.addEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.addEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%7D%2C%0A%09%09uninit%3A%20function%28%29%20%7B%0A%09%09%09var%20pos%20%3D%20%5Bthis.win%2C%20parseInt%28this.bs.left%29%2C%20parseInt%28this.bs.top%29%2C%20parseInt%28this.bs.width%29%2C%20parseInt%28this.bs.height%29%5D%3B%0A%09%09%09this.doc.removeEventListener%28%22mousedown%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.removeEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.removeEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.body.style.cursor%20%3D%20this.defaultCursor%3B%0A%09%09%09this.body.removeChild%28this.box%29%3B%0A%09%09%09this.capture.apply%28this%2C%20pos%29%3B%0A%09%09%7D%2C%0A%09%7D%3B%0A%0A%09var%20WebScreenShotByClick%20%3D%20%7B%0A%09%09capture%3A%20PageCapture.WebScreenShot.capture%2C%0A%09%09getPosition%3A%20function%28%29%20%7B%0A%09%09%09var%20html%20%3D%20this.doc.documentElement%3B%0A%09%09%09var%20body%20%3D%20this.doc.body%3B%0A%09%09%09var%20rect%20%3D%20this.target.getBoundingClientRect%28%29%3B%0A%09%09%09if%20%28%21body%29%0A%09%09%09%09return%20false%3B%0A%09%09%09return%20%5B%0A%09%09%09%09this.win%2C%20Math.round%28rect.left%29%20+%20%28body.scrollLeft%20%7C%7C%20html.scrollLeft%29%20-%20html.clientLeft%2C%20Math.round%28rect.top%29%20+%20%28body.scrollTop%20%7C%7C%20html.scrollTop%29%20-%20html.clientTop%2C%20parseInt%28rect.width%29%2C%20parseInt%28rect.height%29%0A%09%09%09%5D%3B%0A%09%09%7D%2C%0A%09%09highlight%3A%20function%28%29%20%7B%0A%09%09%09this.orgStyle%20%3D%20this.target.hasAttribute%28%22style%22%29%20%3F%20this.target.style.cssText%20%3A%20false%3B%0A%09%09%09this.target.style.cssText%20+%3D%20%22outline%3A%20red%202px%20solid%3B%20outline-offset%3A%202px%3B%20-moz-outline-radius%3A%202px%3B%22%3B%0A%09%09%7D%2C%0A%09%09lowlight%3A%20function%28%29%20%7B%0A%09%09%09if%20%28this.orgStyle%29%0A%09%09%09%09this.target.style.cssText%20%3D%20this.orgStyle%3B%0A%09%09%09else%0A%09%09%09%09this.target.removeAttribute%28%22style%22%29%3B%0A%09%09%7D%2C%0A%09%09handleEvent%3A%20function%28aE%29%20%7B%0A%09%09%09switch%20%28aE.type%29%20%7B%0A%09%09%09%09case%20%22click%22%3A%0A%09%09%09%09%09if%20%28aE.button%20%21%3D%3D%200%29%0A%09%09%09%09%09%09return%3B%0A%09%09%09%09%09aE.preventDefault%28%29%3B%0A%09%09%09%09%09aE.stopPropagation%28%29%3B%0A%09%09%09%09%09this.lowlight%28%29%3B%0A%09%09%09%09%09var%20pos%20%3D%20this.getPosition%28%29%3B%0A%09%09%09%09%09if%20%28%21pos%29%20%7B%0A%09%09%09%09%09%09sendAsyncMessage%28%22%25Response_ID%25%22%2C%20%7B%0A%09%09%09%09%09%09%09id%3A%20%22NotPossible%22%2C%0A%09%09%09%09%09%09%7D%29%3B%0A%09%09%09%09%09%09this.uninit%28%29%3B%0A%09%09%09%09%09%09return%20true%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09PageCapture._forceSaveImages%20%3D%20aE.shiftKey%3B%0A%09%09%09%09%09this.capture.apply%28this%2C%20pos%29%3B%0A%09%09%09%09%09this.uninit%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09case%20%22mouseover%22%3A%0A%09%09%09%09%09if%20%28this.target%29%0A%09%09%09%09%09%09this.lowlight%28%29%3B%0A%09%09%09%09%09this.target%20%3D%20aE.target%3B%0A%09%09%09%09%09this.highlight%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09init%3A%20function%28%29%20%7B%0A%09%09%09this.win%20%3D%20content%3B%0A%09%09%09this.doc%20%3D%20content.document%3B%0A%09%09%09this.doc.addEventListener%28%22mouseover%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.addEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%7D%2C%0A%09%09uninit%3A%20function%28%29%20%7B%0A%09%09%09this.doc.removeEventListener%28%22mouseover%22%2C%20this%2C%20true%29%3B%0A%09%09%09this.doc.removeEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%7D%2C%0A%09%7D%3B%0A%09PageCapture.Init%28%29%3B%0A%7D%29%28this%29%3B%0A%3C%21--%25FrameScript%25--%3E%0A%0A%3C%21--%25AlertImg%25--%3Edata%3Aimage/png%3Bbase64%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%3C%21--%25AlertImg%25--%3E%0A%3C%21--%25ErrorImg%25--%3Edata%3Aimage/png%3Bbase64%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%3D%3D%3C%21--%25ErrorImg%25--%3E%0A%3C%21--%25WarningImg%25--%3Edata%3Aimage/png%3Bbase64%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%3D%3D%3C%21--%25WarningImg%25--%3E%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

coffeebreak
Moon Magic practitioner
Moon Magic practitioner
Posts: 2986
Joined: 2015-09-26, 04:51
Location: U.S.

Re: Customize taskbar needs screenshot feature as a choice

Unread post by coffeebreak » 2020-09-13, 04:32

Page Capture
For whoever wants to know the author/source for the Custom button suggested above...

The button AFAIK is by Odyseus, found here and here.

New Tobin Paradigm

Re: Customize taskbar needs screenshot feature as a choice

Unread post by New Tobin Paradigm » 2020-09-13, 06:39

letmeindude wrote:
2020-09-13, 00:15
I use a button for that[...]
You also use Windows XP thus everything you say, do, or suggest is automatically suspect. I SUGGEST no one listen to an invalid user.

coffeebreak
Moon Magic practitioner
Moon Magic practitioner
Posts: 2986
Joined: 2015-09-26, 04:51
Location: U.S.

Re: Customize taskbar needs screenshot feature as a choice

Unread post by coffeebreak » 2020-09-13, 07:21

New Tobin Paradigm wrote:
2020-09-13, 06:39
I SUGGEST no one listen to an invalid user.
Leaving aside the recommender's computing environment...

I've used the Page Capture custom button, and can attest that it does work.

coffeebreak
Moon Magic practitioner
Moon Magic practitioner
Posts: 2986
Joined: 2015-09-26, 04:51
Location: U.S.

Re: Customize taskbar needs screenshot feature as a choice

Unread post by coffeebreak » 2020-09-14, 16:45

context wrote:
2020-09-12, 16:59
taskbar
To clarify: By "taskbar", you actually mean the browser's status bar, correct?


context wrote:
2020-09-12, 22:09
the screenshot feature in the developer tools
context wrote:
2020-09-12, 16:59
But having to have the Developer Tools active on the desktop is cumbersome.
And to further clarify...
Are you speaking of the toolbar button with a "camera" icon that lives inside the devtools?
devtools-screenshot-button.png
Or are you speaking of the screenshot function available through the developer's toolbar?
gcli.png
gcli-screenshot.png
If the feature you mean is the first one, the toobar button with camera icon, please be aware that you can simply toggle it in and out of view (toggle the devtools) with the F12 key.
You do not have the required permissions to view the files attached to this post.

Michaell
Lunatic
Lunatic
Posts: 286
Joined: 2018-05-26, 18:13

Re: Customize taskbar needs screenshot feature as a choice

Unread post by Michaell » 2020-09-15, 16:25

The Page2Image button for PrefBar still works. Excellent quality, better than some separate extensions I've tried. There is a size limit; so really long pages will get cut off. I don't know how that's measured.

All his old Prefbar buttons may disappear later, but I checked and it is still available for now.
http://prefbar.tuxfamily.org/buttons.html
Of course, similar to Custom Buttons, you need the Prefbar extension installed. That's available in Classic Addons Archive. To make the best use, customize the displayed buttons to just the ones you want. Then if short enough they can be moved to another toolbar, so PB can be hidden. Or just use it's built-in menu button. And the text labels can be edited to be really short, like p2i for example.
Win10home(1709), PM33.1.0-portable as of Apr 23, '24

coffeebreak
Moon Magic practitioner
Moon Magic practitioner
Posts: 2986
Joined: 2015-09-26, 04:51
Location: U.S.

Re: Customize taskbar needs screenshot feature as a choice

Unread post by coffeebreak » 2020-09-15, 16:46

Michaell wrote:
2020-09-15, 16:25
Prefbar extension [...]. That's available in Classic Addons Archive.
Also available on PrefBar's site: http://prefbar.tuxfamily.org/archive.html

And please be aware that PrefBar (and Custom Buttons) do not target Pale Moon, so will need a PM application block added.

Michaell
Lunatic
Lunatic
Posts: 286
Joined: 2018-05-26, 18:13

Re: Customize taskbar needs screenshot feature as a choice

Unread post by Michaell » 2020-09-15, 17:19

Actually, the sort-of-forked/updated version of Custom Buttons does have the PM target. You can find it from the CB forum. The author was here but not treated nicely so I don't want to stir that up. (I think the link is in an old thread here, but search engine is probably quicker.)

And for those extra buttons for PrefBar, you need to download then use import from the PB Customize right click context menu. And Codefisher may have P2I as a button on his site if it is still functioning. His site would add PM target if you choose.
Win10home(1709), PM33.1.0-portable as of Apr 23, '24

coffeebreak
Moon Magic practitioner
Moon Magic practitioner
Posts: 2986
Joined: 2015-09-26, 04:51
Location: U.S.

Re: Customize taskbar needs screenshot feature as a choice

Unread post by coffeebreak » 2020-09-15, 17:58

Michaell wrote:
2020-09-15, 17:19
the sort-of-forked/updated version of Custom Buttons does have the PM target.
Off-topic:
That would be srazzano's version.
That is not the Custom Buttons recommended earlier in this thread (which I also use and would recommend to anyone).

For my part... I've tried srazzano's version in the past, thoroughly disliked it, and don't plan to discuss it here further.

People should be aware btw that srazzano has been banned from the Pale Moon Add-ons Site for good reason.

context
Fanatic
Fanatic
Posts: 212
Joined: 2012-07-22, 18:56
Location: USA Texas

Re: Customize taskbar needs screenshot feature as a choice

Unread post by context » 2020-09-20, 18:47

Upon checking this thread, I'm a bit surprised at the confusion about what I'm suggesting.

I'm adding this image as further clarification. And to reiterate: since the feature exists in PM, all that's needed is a button to access it.
PM Request.png
You do not have the required permissions to view the files attached to this post.

User avatar
RealityRipple
Astronaut
Astronaut
Posts: 666
Joined: 2018-05-17, 02:34
Location: Los Berros Canyon, California

Re: Customize taskbar needs screenshot feature as a choice

Unread post by RealityRipple » 2020-09-20, 18:57

The developer tools button calls code that only exists and functions while the developer tools is open. It's literally impossible to make a button call the exact same code when the developer tools aren't open.

User avatar
Moonchild
Pale Moon guru
Pale Moon guru
Posts: 35650
Joined: 2011-08-28, 17:27
Location: Motala, SE

Re: Customize taskbar needs screenshot feature as a choice

Unread post by Moonchild » 2020-09-20, 19:03

To clarify: The developer tools components are not available to the rest of the browser UI. This is because the developer tools are a super special snowflake that creates its entire structure and UI when the tools are opened. It would have been possible if the tools were normal static resources like everything else, but it's not, and it's really not within our capacity to completely rewrite the tools from the ground up in a normal way.
"Sometimes, the best way to get what you want is to be a good person." -- Louis Rossmann
"Seek wisdom, not knowledge. Knowledge is of the past; wisdom is of the future." -- Native American proverb
"Linux makes everything difficult." -- Lyceus Anubite

New Tobin Paradigm

Re: Customize taskbar needs screenshot feature as a choice

Unread post by New Tobin Paradigm » 2020-09-20, 19:09

There are a couple Firefox targeting screenshot extensions already and I think one for Pale Moon with more on the way. So use them.

User avatar
back2themoon
Moon Magic practitioner
Moon Magic practitioner
Posts: 2411
Joined: 2012-08-19, 20:32

Re: Customize taskbar needs screenshot feature as a choice

Unread post by back2themoon » 2020-09-21, 07:29

Doesn't the use of external tools (and Print Screen) reduce the image capture quality? Could be wrong, but it seems the internal tool provides the best possible quality. I wouldn't trade it for a Toolbar button. F12 is perfectly fine, unless you often need it right away. Also, on large scrolling captures external tools often result in broken "continuity" when joining the whole thing. Developer Tool solves that, too.

From what I'm reading here, extensions would also count as "external tools" since they wouldn't have access to the Developer Tools code. Or would they?

User avatar
RealityRipple
Astronaut
Astronaut
Posts: 666
Joined: 2018-05-17, 02:34
Location: Los Berros Canyon, California

Re: Customize taskbar needs screenshot feature as a choice

Unread post by RealityRipple » 2020-09-21, 07:49

For Print Screen, it depends on the OS. Windows takes a pixel-for-pixel shot and saves it to the clipboard, so there's absolutely zero loss. Unless you press the Windows Key and Print Screen Key at the same time, then it saves it to a Screenshots subfolder in your Pictures folder as a PNG. Linux usually launches a screen capture app that tends to have JPEG as the default save format. And... I don't know anything about Mac.

User avatar
Moonchild
Pale Moon guru
Pale Moon guru
Posts: 35650
Joined: 2011-08-28, 17:27
Location: Motala, SE

Re: Customize taskbar needs screenshot feature as a choice

Unread post by Moonchild » 2020-09-21, 09:52

back2themoon wrote:
2020-09-21, 07:29
Doesn't the use of external tools (and Print Screen) reduce the image capture quality? Could be wrong, but it seems the internal tool provides the best possible quality.
No it doesn't, and yes you are wrong.

Fireshot which I always use myself results in a full capture. See attach (in zip because the forum would resize it to the 4000 pixel max, reducing quality)

That by the way does have a toolbar button.
Might be a little heavy with its internal editor and annotation tool but usually that's what you want to do with screenshots anyway: clip/crop/annotate/etc.
You do not have the required permissions to view the files attached to this post.
"Sometimes, the best way to get what you want is to be a good person." -- Louis Rossmann
"Seek wisdom, not knowledge. Knowledge is of the past; wisdom is of the future." -- Native American proverb
"Linux makes everything difficult." -- Lyceus Anubite

User avatar
back2themoon
Moon Magic practitioner
Moon Magic practitioner
Posts: 2411
Joined: 2012-08-19, 20:32

Re: Customize taskbar needs screenshot feature as a choice

Unread post by back2themoon » 2020-09-21, 10:15

Compared your Fireshot screenshot with an internal one. Zoomed in. The internal looks notably better. The Fireshot is full of artefacts similar to these. You attached a .jpg though (not comparable to .png) and note I wasn't only talking about correctness of long captures.