Customize taskbar needs screenshot feature as a choice Topic is solved
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.
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.
-
- Fanatic
- Posts: 212
- Joined: 2012-07-22, 18:56
- Location: USA Texas
Customize taskbar needs screenshot feature as a choice
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!
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!
-
- Astronaut
- Posts: 666
- Joined: 2018-05-17, 02:34
- Location: Los Berros Canyon, California
-
- Fanatic
- Posts: 212
- Joined: 2012-07-22, 18:56
- Location: USA Texas
Re: Customize taskbar needs screenshot feature as a choice
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.
Re: Customize taskbar needs screenshot feature as a choice
I use a button for that, but you will need Custom Buttons extension.
Page Capture button code (Paste & Go it in the address bar after installing CB extension):
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
-
- Moon Magic practitioner
- Posts: 2986
- Joined: 2015-09-26, 04:51
- Location: U.S.
Re: Customize taskbar needs screenshot feature as a choice
You also use Windows XP thus everything you say, do, or suggest is automatically suspect. I SUGGEST no one listen to an invalid user.
-
- Moon Magic practitioner
- Posts: 2986
- Joined: 2015-09-26, 04:51
- Location: U.S.
Re: Customize taskbar needs screenshot feature as a choice
Leaving aside the recommender's computing environment...
I've used the Page Capture custom button, and can attest that it does work.
-
- Moon Magic practitioner
- Posts: 2986
- Joined: 2015-09-26, 04:51
- Location: U.S.
Re: Customize taskbar needs screenshot feature as a choice
To clarify: By "taskbar", you actually mean the browser's status bar, correct?
And to further clarify...
Are you speaking of the toolbar button with a "camera" icon that lives inside the devtools?
You do not have the required permissions to view the files attached to this post.
-
- Lunatic
- Posts: 286
- Joined: 2018-05-26, 18:13
Re: Customize taskbar needs screenshot feature as a choice
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.
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
-
- Moon Magic practitioner
- Posts: 2986
- Joined: 2015-09-26, 04:51
- Location: U.S.
Re: Customize taskbar needs screenshot feature as a choice
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.
-
- Lunatic
- Posts: 286
- Joined: 2018-05-26, 18:13
Re: Customize taskbar needs screenshot feature as a choice
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.
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
-
- Moon Magic practitioner
- Posts: 2986
- Joined: 2015-09-26, 04:51
- Location: U.S.
Re: Customize taskbar needs screenshot feature as a choice
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.
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.
-
- Fanatic
- Posts: 212
- Joined: 2012-07-22, 18:56
- Location: USA Texas
Re: Customize taskbar needs screenshot feature as a choice
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.
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.
You do not have the required permissions to view the files attached to this post.
-
- Astronaut
- Posts: 666
- Joined: 2018-05-17, 02:34
- Location: Los Berros Canyon, California
Re: Customize taskbar needs screenshot feature as a choice
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.
-
- Pale Moon guru
- Posts: 35650
- Joined: 2011-08-28, 17:27
- Location: Motala, SE
Re: Customize taskbar needs screenshot feature as a choice
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
"Seek wisdom, not knowledge. Knowledge is of the past; wisdom is of the future." -- Native American proverb
"Linux makes everything difficult." -- Lyceus Anubite
Re: Customize taskbar needs screenshot feature as a choice
There are a couple Firefox targeting screenshot extensions already and I think one for Pale Moon with more on the way. So use them.
-
- Moon Magic practitioner
- Posts: 2411
- Joined: 2012-08-19, 20:32
Re: Customize taskbar needs screenshot feature as a choice
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?
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?
Safe Mode / clean profile info: Help/Restart in Safe Mode
Information to include when asking for support - How to apply user agent overrides
How to auto-fill passwords
Windows 10 Pro x64
Information to include when asking for support - How to apply user agent overrides
How to auto-fill passwords
Windows 10 Pro x64
-
- Astronaut
- Posts: 666
- Joined: 2018-05-17, 02:34
- Location: Los Berros Canyon, California
Re: Customize taskbar needs screenshot feature as a choice
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.
-
- Pale Moon guru
- Posts: 35650
- Joined: 2011-08-28, 17:27
- Location: Motala, SE
Re: Customize taskbar needs screenshot feature as a choice
No it doesn't, and yes you are wrong.back2themoon wrote: ↑2020-09-21, 07:29Doesn'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.
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
"Seek wisdom, not knowledge. Knowledge is of the past; wisdom is of the future." -- Native American proverb
"Linux makes everything difficult." -- Lyceus Anubite
-
- Moon Magic practitioner
- Posts: 2411
- Joined: 2012-08-19, 20:32
Re: Customize taskbar needs screenshot feature as a choice
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.
Safe Mode / clean profile info: Help/Restart in Safe Mode
Information to include when asking for support - How to apply user agent overrides
How to auto-fill passwords
Windows 10 Pro x64
Information to include when asking for support - How to apply user agent overrides
How to auto-fill passwords
Windows 10 Pro x64