-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathsessionBookmarks.html
More file actions
35 lines (33 loc) · 128 KB
/
sessionBookmarks.html
File metadata and controls
35 lines (33 loc) · 128 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE HTML>
<meta charset="utf-8"/>
<title>Session Bookmarks [0.2.2pre7 - 2016-11-29]</title>
<body>
<a href="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%3ESession%20Bookmarks%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AkKDA8j52BgOAAAAnBJREFUOMvFk0tIlGEUhp/z/Z+lMjOkhRROOWMFipcpM6OLSUYtkwiJIlqa7WrZok2totrZYG7aBC2tRUU3Baks0XKa0WLEIiqm7OJlnBln5p//azFiEEHtOnDg8HLOec8V/rfIq+69Nx0702acXB5QFmLpcOBkf/0/JRjtajaBzmuQtfOIZfGi6yhiaUTkd3dEKZRe9qa+81E1gDaOA9k0mehFjBEKyg/R0Hkd1GKwSF7z8aA1oeDxqvDVfVvqTjwY0QCYBOgiBAt76i5wGwFECSbnkIonEQAxLCs/DMYQT2aagBENArkkqqAQxEL4xew4OQYff2UqXUbcWgOAZ7ifEmcNKwtiwVfde8/lE0gaRJGaTeX7ztPxeCiHXbaPzXVbWV9ZCcDk20mi0ShmdTHO4PlVWpSAPcfEQIjE9NzSuL7jZWHdAVqad+N2uxl9+ZTa2joq1pZRWuJiYOAp2UT5qEYUydg7lIbG0zcglwOEO/desLHCR5HLg21gLBKhqiYAGIpcJfh9Ph6+9s1rEUU89h6PtxoSb3G+3cegmIgW09y6n6wjSyvM2wJK8Fb4mbcL/VqUMPv5I97GFrBjyHI3giKTWSDrqKWWwpEI4cgZEMX2Xa1s27FnIZvNOhoRUj9mKPavhYUZxFoBCOu8NuPjETZU1fFs4CGnzl5YLESRS6cJj40n0+l0nzZG4kprd+jqFYzjYBbLLUx4GP5SgMtVSn3DTpLzqaVbmp2ddoaHnqcymUyvAJsA60933t7efqwm0HCkvnEn1YEmAF6HhgiPPDFfPn24FAwGL8vfnqWjo6MNOAi0LkJ9QG9PT88tgJ+Roe0R7DS0ZwAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E//%20http%3A//infocatcher.ucoz.net/js/cb/sessionBookmarks.js%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fid%3D57871%0A//%20https%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks%0A%0A//%20Session%20Bookmarks%20button%20for%20Custom%20Buttons%0A//%20%28code%20for%20%22initialization%22%20section%29%0A%0A//%20%28c%29%20Infocatcher%202011-2016%0A//%20version%200.2.2pre7%20-%202016-11-29%0A%0A//%20Usage%3A%0A//%20%20%20Use%20middle-click%20or%20left+click%20with%20any%20modifier%20to%20add%20current%20tab%0A//%20%20%20Drag%20and%20drop%20any%20tab%20to%20add%20new%20bookmark%0A%0A//%20Compatibility%3A%20Firefox%203.0+%2C%20SeaMonkey%202.0+%0A%0A//%20Icon%20by%20FatCow%20Web%20Hosting%3A%20http%3A//www.iconfinder.com/icondetails/36059/16/%0A//%20+%20Diagona%20Icons%20http%3A//www.iconfinder.com/icondetails/14111/10/087_icon%0A%0Avar%20options%20%3D%20%7B%0A%09hideDropMarker%3A%20true%2C%20//%20Hide%20%22v%22%20after%20button%27s%20icon%0A%09showLabel%3A%20undefined%2C%20//%20Set%20to%20true/false%20to%20force%20show/hide%20button%27s%20label%0A%09addToEnd%3A%20true%2C%20//%20Add%20to%20end%20of%20list%20by%20default%0A%09loadInBackground%3A%20false%2C%20//%20Load%20tabs%20in%20background%0A%09leftClickCloseMenu%3A%20true%2C%20//%20Close%20menu%20after%20left-click%0A%09middleClickCloseMenu%3A%201%2C%0A%09//%20After%20middle-click%3A%0A%09//%200%20-%20always%20stay%20menu%20open%0A%09//%201%20-%20close%20only%20after%20click%20without%20modifiers%0A%09//%202%20-%20always%20close%0A%09invertLoadBehavior%3A%20false%2C%20//%20true%20%3D%26gt%3B%20left-click%20open%20bookmark%20in%20new%20tab%0A%09checkDuplicates%3A%20true%2C%20//%20Forbid%20duplicates%0A%09checkDuplicatesSession%3A%20true%2C%20//%20Also%20compare%20session%20data%0A%09allowToggleBookmark%3A%20false%2C%20//%20Remove%20already%20added%20bookmark%20using%20middle-click%20on%20button%0A%09deleteAfterOpen%3A%20false%2C%20//%20Delete%20opened%20bookmarks%0A%09removeAddedTab%3A%20false%2C%20//%20Remove%20tab%20after%20bookmark%20will%20be%20added%0A%09replaceCurrentTab%3A%20false%2C%20//%20Replace%20current%20tab%20with%20new%20one%20%28and%20preserve%20position%29%0A%09//%20Workaround%2C%20use%20only%20in%20case%20of%20problems%20with%20%22open%20in%20current%20tab%22%20feature%0A%09itemInPageContextMenu%3A%20false%2C%20//%20Show%20%22Session%20Bookmark%20This%20Page%22%20item%20in%20page%20context%20menu%0A%09showNotifications%3A%201%2C%20//%20Show%20notifications%20like%20%22Bookmark%20added%22%0A%09//%200%20-%20don%27t%20show%0A%09//%201%20-%20show%20only%20if%20menu%20is%20closed%0A%09//%202%20-%20always%20show%0A%09notificationHideDelay%3A%201700%2C%0A%0A%09preloadBookmarks%3A%20-1%2C%0A%09//%200%20%20%20%20-%20disable%20preload%20feature%20%28load%20bookmarks%20only%20after%20menu%20opening%29%0A%09//%20-1%20%20%20-%20preload%20on%20mouseover%0A%09//%201..N%20-%20preload%20after%20this%20time%20%28in%20ms%29%0A%0A%09useSessions%3A%20true%2C%20//%20Save%20and%20restore%20session%20data%0A%09saveTabHistory%3A%20true%2C%20//%20Only%20for%20%22useSessions%3A%20true%22%0A%09//%20Save%20back/forward%20history%20of%20tab%0A%09saveTabPinnedState%3A%20false%2C%0A%09reloadSessions%3A%20true%2C%20//%20Only%20for%20%22useSessions%3A%20true%22%0A%09//%20Ignore%20cache%20during%20session%20restore%20%28otherwise%20may%20be%20opened%20obsolete%20cached%20version%20of%20page%29%0A%0A%09undoLimit%3A%2010%20//%20Max%20length%20of%20undo/redo%20history%0A%7D%3B%0Avar%20_debug%20%3D%20false%3B%20//%20Show%20debug%20messages%20in%20error/browser%20console%0A%0Afunction%20_localize%28s%2C%20key%29%20%7B%0A%09var%20strings%20%3D%20%7B%0A%09%09%22Bookmark%20All%20Tabs%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%22%0A%09%09%7D%2C%0A%09%09bookmarkAllTabsKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u043B%22%0A%09%09%7D%2C%0A%0A%09%09%22Update%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%22%0A%09%09%7D%2C%0A%09%09updateKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u043D%22%0A%09%09%7D%2C%0A%09%09%22Update%20Location%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%22%0A%09%09%7D%2C%0A%09%09updateLocationKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0430%22%0A%09%09%7D%2C%0A%09%09%22Delete%20All%20Bookmarks%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%22%0A%09%09%7D%2C%0A%09%09deleteAllKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0432%22%0A%09%09%7D%2C%0A%0A%09%09%22Sort%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0421%u043E%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%22%0A%09%09%7D%2C%0A%09%09sortKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0421%22%0A%09%09%7D%2C%0A%09%09%22By%20Name%2C%20A%26gt%3BZ%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041F%u043E%20%u0438%u043C%u0435%u043D%u0438%2C%20%u0410%26gt%3B%u042F%22%0A%09%09%7D%2C%0A%09%09sortByNameAZKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0438%22%0A%09%09%7D%2C%0A%09%09%22By%20Name%2C%20Z%26gt%3BA%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041F%u043E%20%u0438%u043C%u0435%u043D%u0438%2C%20%u042F%26gt%3B%u0410%22%0A%09%09%7D%2C%0A%09%09sortByNameZAKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0438%22%0A%09%09%7D%2C%0A%09%09%22By%20Base%20Domain%2C%20Host%20and%20Name%2C%20A%26gt%3BZ%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041F%u043E%20%u0431%u0430%u0437%u043E%u0432%u043E%u043C%u0443%20%u0434%u043E%u043C%u0435%u043D%u0443%2C%20%u0445%u043E%u0441%u0442%u0443%20%u0438%20%u0438%u043C%u0435%u043D%u0438%2C%20%u0410%26gt%3B%u042F%22%0A%09%09%7D%2C%0A%09%09sortByBaseDomainHostNameAZKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0431%22%0A%09%09%7D%2C%0A%09%09%22By%20Base%20Domain%2C%20Host%20and%20Name%2C%20Z%26gt%3BA%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041F%u043E%20%u0431%u0430%u0437%u043E%u0432%u043E%u043C%u0443%20%u0434%u043E%u043C%u0435%u043D%u0443%2C%20%u0445%u043E%u0441%u0442%u0443%20%u0438%20%u0438%u043C%u0435%u043D%u0438%2C%20%u042F%26gt%3B%u0410%22%0A%09%09%7D%2C%0A%09%09sortByBaseDomainHostNameZAKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0431%22%0A%09%09%7D%2C%0A%09%09%22By%20Host%20and%20Name%2C%20A%26gt%3BZ%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041F%u043E%20%u0445%u043E%u0441%u0442%u0443%20%u0438%20%u0438%u043C%u0435%u043D%u0438%2C%20%u0410%26gt%3B%u042F%22%0A%09%09%7D%2C%0A%09%09sortByHostNameAZKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0445%22%0A%09%09%7D%2C%0A%09%09%22By%20Host%20and%20Name%2C%20Z%26gt%3BA%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041F%u043E%20%u0445%u043E%u0441%u0442%u0443%20%u0438%20%u0438%u043C%u0435%u043D%u0438%2C%20%u042F%26gt%3B%u0410%22%0A%09%09%7D%2C%0A%09%09sortByHostNameZAKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0445%22%0A%09%09%7D%2C%0A%0A%09%09%22Button%20Menu%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%22%0A%09%09%7D%2C%0A%09%09buttonMenuKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u041C%22%0A%09%09%7D%2C%0A%0A%09%09%22Session%20Bookmark%20This%20Page%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438-%u0441%u0435%u0441%u0441%u0438%u0438%22%0A%09%09%7D%2C%0A%09%09%22Button%3A%20%25S%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041A%u043D%u043E%u043F%u043A%u0430%3A%20%25S%22%0A%09%09%7D%2C%0A%09%09pageContextItemKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0441%22%0A%09%09%7D%2C%0A%0A%09%09%22Bookmark%20added%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0430%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0430%22%0A%09%09%7D%2C%0A%09%09%22Bookmarks%20added%3A%20%25S%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u044B%3A%20%25S%22%0A%09%09%7D%2C%0A%09%09%22Bookmark%20already%20exists%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0430%20%u0443%u0436%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%22%0A%09%09%7D%2C%0A%09%09%22Bookmark%20removed%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0430%20%u0443%u0434%u0430%u043B%u0435%u043D%u0430%22%0A%09%09%7D%2C%0A%0A%09%09%22Session%20Bookmark%20Properties%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0421%u0432%u043E%u0439%u0441%u0442%u0432%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438-%u0441%u0435%u0441%u0441%u0438%u0438%22%0A%09%09%7D%2C%0A%09%09%22Warning%21%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0412%u043D%u0438%u043C%u0430%u043D%u0438%u0435%21%22%0A%09%09%7D%2C%0A%09%09%22After%20location%20change%20all%20session%20data%20will%20be%20lost%21%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041F%u043E%u0441%u043B%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u0432%u0441%u044F%20%u0438%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%20%u0441%u0435%u0441%u0441%u0438%u0438%20%u0431%u0443%u0434%u0435%u0442%20%u043F%u043E%u0442%u0435%u0440%u044F%u043D%u0430%21%22%0A%09%09%7D%2C%0A%09%09%22Icon%3A%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0418%u043A%u043E%u043D%u043A%u0430%3A%22%0A%09%09%7D%2C%0A%09%09iconKey%3A%20%7B%0A%09%09%09ru%3A%20%22%u0418%22%0A%09%09%7D%0A%09%7D%3B%0A%09var%20locale%20%3D%20%28function%28%29%20%7B%0A%09%09var%20prefs%20%3D%20%22Services%22%20in%20window%20%26amp%3B%26amp%3B%20Services.prefs%0A%09%09%09%7C%7C%20Components.classes%5B%[email protected]/preferences-service%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIPrefBranch%29%3B%0A%09%09if%28%21prefs.getBoolPref%28%22intl.locale.matchOS%22%29%29%20%7B%0A%09%09%09var%20locale%20%3D%20prefs.getCharPref%28%22general.useragent.locale%22%29%3B%0A%09%09%09if%28locale.substr%280%2C%209%29%20%21%3D%20%22chrome%3A//%22%29%0A%09%09%09%09return%20locale%3B%0A%09%09%7D%0A%09%09return%20Components.classes%5B%[email protected]/chrome/chrome-registry%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIXULChromeRegistry%29%0A%09%09%09.getSelectedLocale%28%22global%22%29%3B%0A%09%7D%29%28%29.match%28/%5E%5Ba-z%5D*/%29%5B0%5D%3B%0A%09_localize%20%3D%20%21locale%20%7C%7C%20locale%20%3D%3D%20%22en%22%0A%09%09%3F%20function%28s%29%20%7B%0A%09%09%09return%20s%3B%0A%09%09%7D%0A%09%09%3A%20function%28s%2C%20key%29%20%7B%0A%09%09%09if%28%21key%29%0A%09%09%09%09key%20%3D%20s%3B%0A%09%09%09return%20strings%5Bkey%5D%20%26amp%3B%26amp%3B%20strings%5Bkey%5D%5Blocale%5D%20%7C%7C%20s%3B%0A%09%09%7D%3B%0A%09return%20_localize.apply%28this%2C%20arguments%29%3B%0A%7D%0A%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%09if%28e.target%20%21%3D%20this%29%0A%09%09return%3B%0A%09if%28e.button%20%3D%3D%201%20%7C%7C%20e.button%20%3D%3D%200%20%26amp%3B%26amp%3B%20this.bookmarks.hasModifier%28e%29%29%0A%09%09this.bookmarks.addBookmark%28%29%3B%0A%7D%3B%0Athis.onmouseover%20%3D%20function%28e%29%20%7B%0A%09if%28e.target%20%21%3D%20this%29%0A%09%09return%3B%0A%09var%20preload%20%3D%20this.bookmarks.options.preloadBookmarks%3B%0A%09if%28%0A%09%09preload%20%3D%3D%20-1%0A%09%09%26amp%3B%26amp%3B%20this.bookmarks.mp%0A%09%09%26amp%3B%26amp%3B%20this.bookmarks.mp.hasAttribute%28%22onpopupshowing%22%29%0A%09%29%0A%09%09this.bookmarks.loadDelayed%28%29%3B%0A%09if%28this.disabled%29%0A%09%09return%3B%0A%09Array.some%28%0A%09%09this.parentNode.getElementsByTagName%28%22*%22%29%2C%0A%09%09function%28node%29%20%7B%0A%09%09%09if%28%0A%09%09%09%09node%20%21%3D%20this%0A%09%09%09%09%26amp%3B%26amp%3B%20node.namespaceURI%20%3D%3D%20xulns%0A%09%09%09%09%26amp%3B%26amp%3B%20node.boxObject%0A%09%09%09%09//%20See%20https%3A//github.com/Infocatcher/Custom_Buttons/issues/28%0A%09%09%09%09//%26amp%3B%26amp%3B%20node.boxObject%20instanceof%20Components.interfaces.nsIMenuBoxObject%0A%09%09%09%09%26amp%3B%26amp%3B%20%22open%22%20in%20node%0A%09%09%09%09%26amp%3B%26amp%3B%20node.open%0A%09%09%09%09%26amp%3B%26amp%3B%20node.getElementsByTagName%28%22menupopup%22%29.length%0A%09%09%09%29%20%7B%0A%09%09%09%09node.open%20%3D%20false%3B%0A%09%09%09%09this.open%20%3D%20true%3B%0A%09%09%09%09return%20true%3B%0A%09%09%09%7D%0A%09%09%09return%20false%3B%0A%09%09%7D%2C%0A%09%09this%0A%09%29%3B%0A%7D%3B%0Aif%28%21this.hasOwnProperty%28%22defaultContextId%22%29%29%0A%09this.defaultContextId%20%3D%20this.getAttribute%28%22context%22%29%20%7C%7C%20%22custombuttons-contextpopup%22%3B%0Athis.onmousedown%20%3D%20function%28e%29%20%7B%0A%09if%28e.target%20%21%3D%20this%20%7C%7C%20e.button%20%21%3D%202%29%0A%09%09return%3B%0A%09var%20showCbMenu%20%3D%20e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%3B%0A%09if%28%21showCbMenu%29%0A%09%09this.bookmarks.addContextMenu%28%29%3B%0A%09this.setAttribute%28%22context%22%2C%20showCbMenu%20%3F%20this.defaultContextId%20%3A%20this.bookmarks.cmId%29%3B%0A%7D%3B%0Aif%28%22ondragstart%22%20in%20window%29%0A%09this.setAttribute%28%22ondragstart%22%2C%20%22return%20this.bookmarks.handleDragStart%28event%29%3B%22%29%3B%0Aelse%0A%09this.setAttribute%28%22ondraggesture%22%2C%20%22return%20this.bookmarks.handleDragStart%28event%29%3B%22%29%3B%0Athis.setAttribute%28%22ondragover%22%2C%20%22return%20this.bookmarks.handleDragOver%28event%29%3B%22%29%3B%0Athis.setAttribute%28%22ondragexit%22%2C%20%22return%20this.bookmarks.handleDragExit%28event%29%3B%22%29%3B%0Aif%28%22ondrop%22%20in%20window%29%0A%09this.setAttribute%28%22ondrop%22%2C%20%22return%20this.bookmarks.handleDrop%28event%29%3B%22%29%3B%0Aelse%0A%09this.setAttribute%28%22ondragdrop%22%2C%20%22return%20this.bookmarks.handleDrop%28event%29%3B%22%29%3B%0A%0Athis.bookmarks%20%3D%20%7B%0A%09button%3A%20this%2C%0A%09options%3A%20options%2C%0A%09errPrefix%3A%20%22%5BCustom%20Buttons%20%3A%3A%20Session%20Bookmarks%5D%3A%20%22%2C%0A%0A%09get%20openAllLabel%28%29%20%7B%0A%09%09var%20sb%20%3D%20this.%24%28%22bundle_browser%22%29%20%7C%7C%20this.%24%28%22bundle_navigator%22%29%3B%0A%09%09if%28sb%29%20try%20%7B%0A%09%09%09var%20label%20%3D%20sb.getString%28%22menuOpenAllInTabs.label%22%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%7D%0A%09%09delete%20this.openAllLabel%3B%0A%09%09return%20this.openAllLabel%20%3D%20label%20%7C%7C%20%22Open%20All%20in%20Tabs%22%3B%0A%09%7D%2C%0A%09getAttr%3A%20function%28attr%2C%20id%2C%20defaultVal%29%20%7B%0A%09%09var%20node%20%3D%20this.%24%28id%29%3B%0A%09%09return%20node%20%26amp%3B%26amp%3B%20node.getAttribute%28attr%29%20%7C%7C%20defaultVal%3B%0A%09%7D%2C%0A%09getLabel%3A%20function%28id%2C%20defaultVal%29%20%7B%0A%09%09return%20this.getAttr%28%22label%22%2C%20id%2C%20defaultVal%29%3B%0A%09%7D%2C%0A%09getAccesskey%3A%20function%28id%2C%20defaultVal%29%20%7B%0A%09%09return%20this.getAttr%28%22accesskey%22%2C%20id%2C%20defaultVal%29%3B%0A%09%7D%2C%0A%0A%09get%20ss%28%29%20%7B%0A%09%09delete%20this.ss%3B%0A%09%09return%20this.ss%20%3D%20%28%0A%09%09%09Components.classes%5B%[email protected]/browser/sessionstore%3B1%22%5D%0A%09%09%09%7C%7C%20Components.classes%5B%[email protected]/suite/sessionstore%3B1%22%5D%0A%09%09%29.getService%28Components.interfaces.nsISessionStore%29%3B%0A%09%7D%2C%0A%09get%20ios%28%29%20%7B%0A%09%09delete%20this.ios%3B%0A%09%09return%20this.ios%20%3D%20Components.classes%5B%[email protected]/network/io-service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIIOService%29%3B%0A%09%7D%2C%0A%09get%20tld%28%29%20%7B%0A%09%09delete%20this.tld%3B%0A%09%09return%20this.tld%20%3D%20Components.classes%5B%[email protected]/network/effective-tld-service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIEffectiveTLDService%29%3B%0A%09%7D%2C%0A%09get%20wm%28%29%20%7B%0A%09%09delete%20this.wm%3B%0A%09%09return%20this.wm%20%3D%20Components.classes%5B%[email protected]/appshell/window-mediator%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%09%7D%2C%0A%09get%20btnNum%28%29%20%7B%0A%09%09delete%20this.btnNum%3B%0A%09%09return%20this.btnNum%20%3D%20this.button.id.match%28/%5Cd*%24/%29%5B0%5D%3B%0A%09%7D%2C%0A%09get%20file%28%29%20%7B%0A%09%09var%20file%20%3D%20Components.classes%5B%[email protected]/file/directory_service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIProperties%29%0A%09%09%09.get%28%22ProfD%22%2C%20Components.interfaces.nsILocalFile%20%7C%7C%20Components.interfaces.nsIFile%29%3B%0A%09%09file.append%28%22custombuttons%22%29%3B%0A%09%09file.append%28%22bookmarks-%22%20+%20this.btnNum%20+%20%22.txt%22%29%3B%0A%09%09file.QueryInterface%28Components.interfaces.nsILocalFile%20%7C%7C%20Components.interfaces.nsIFile%29%3B%0A%09%09this.ensureFilePermissions%28file%2C%20this.PERMS_FILE_OWNER_WRITE%29%3B%0A%09%09delete%20this.file%3B%0A%09%09return%20this.file%20%3D%20file%3B%0A%09%7D%2C%0A%09get%20backupFile%28%29%20%7B%0A%09%09var%20file%20%3D%20this.file.clone%28%29%3B%0A%09%09file.leafName%20+%3D%20%22.bak%22%3B%0A%09%09file.QueryInterface%28Components.interfaces.nsILocalFile%20%7C%7C%20Components.interfaces.nsIFile%29%3B%0A%09%09this.ensureFilePermissions%28file%2C%20this.PERMS_FILE_OWNER_WRITE%29%3B%0A%09%09delete%20this.backupFile%3B%0A%09%09return%20this.backupFile%20%3D%20file%3B%0A%09%7D%2C%0A%09%24%3A%20function%28id%29%20%7B%0A%09%09return%20document.getElementById%28id%29%3B%0A%09%7D%2C%0A%0A%09initProxy%3A%20function%28%29%20%7B%0A%09%09//%20Trick%3A%20wait%20for%20XBL%20binding%20tor%20%5Btype%3D%22menu%22%5D%0A%09%09_log%28%22initProxy%28%29%22%29%3B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09if%28%22__initTimer%22%20in%20btn%29%0A%09%09%09clearTimeout%28btn.__initTimer%29%3B%0A%09%09if%28btn.type%20%3D%3D%20%22menu%22%29%20%7B%0A%09%09%09_log%28%22initProxy%28%29%3A%20menu%22%29%3B%0A%09%09%09this.init%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09//%20This%20behavior%20may%20be%20changed%20%28fixed%3F%29%20later%2C%20so%20will%20initialize%20anyway%20after%20small%20delay%0A%09%09btn.__initTimer%20%3D%20setTimeout%28function%28_this%29%20%7B%0A%09%09%09_log%28%22initProxy%28%29%20-%26gt%3B%20fallback%20timer%22%29%3B%0A%09%09%09if%28btn.type%20%3D%3D%20%22menu%22%29%0A%09%09%09%09_this.init%28%29%3B%0A%09%09%7D%2C%20500%2C%20this%29%3B%0A%09%7D%2C%0A%09init%3A%20function%28%29%20%7B%0A%09%09_log%28%22init%28%29%22%29%3B%0A%09%09window.addEventListener%28%22drop%22%2C%20this%2C%20true%29%3B%0A%09%09setTimeout%28function%28_this%29%20%7B%0A%09%09%09_this.delayedInit%28%29%3B%0A%09%09%7D%2C%200%2C%20this%29%3B%0A%09%7D%2C%0A%09delayedInit%3A%20function%28%29%20%7B%0A%09%09_log%28%22delayedInit%28%29%22%29%3B%0A%09%09this.initIds%28%29%3B%0A%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09var%20mps%20%3D%20btn.getElementsByTagName%28%22menupopup%22%29%3B%0A%09%09mps.length%20%26amp%3B%26amp%3B%20mps%5B0%5D.parentNode.removeChild%28mps%5B0%5D%29%3B%20//%20Hack%20for%20SeaMonkey%0A%09%09var%20mp%20%3D%20this.mp%20%3D%20this.createElement%28%22menupopup%22%2C%20%7B%0A%09%09%09context%3A%20%20%20%20%20%20%20%20this.cmId%2C%0A%09%09%09oncommand%3A%20%20%20%20%20%20%22this.parentNode.bookmarks.openBookmark%28event%29%3B%22%2C%0A%09%09%09onclick%3A%20%20%20%20%20%20%20%20%22this.parentNode.bookmarks.openBookmark%28event%29%3B%22%2C%0A%09%09%09onpopupshowing%3A%20%22this.parentNode.bookmarks.load%28%29%3B%22%2C%0A%09%09%09onpopuphidden%3A%20%20%22this.parentNode.bookmarks.checkUnsaved%28%29%3B%22%0A%09%09%7D%29%3B%0A%09%09mp.addEventListener%28%22DOMMenuItemActive%22%2C%20%20%20this%2C%20false%29%3B%0A%09%09mp.addEventListener%28%22DOMMenuItemInactive%22%2C%20this%2C%20false%29%3B%0A%09%09var%20tb%20%3D%20btn.parentNode%3B%0A%09%09if%28tb.getAttribute%28%22orient%22%29%20%3D%3D%20%22vertical%22%29%20%7B%0A%09%09%09//%20https%3A//addons.mozilla.org/firefox/addon/vertical-toolbar/%0A%09%09%09var%20isRight%20%3D%20tb.parentNode.getAttribute%28%22placement%22%29%20%3D%3D%20%22right%22%3B%0A%09%09%09mp.setAttribute%28%22position%22%2C%20isRight%20%3F%20%22start_before%22%20%3A%20%22end_before%22%29%3B%0A%09%09%7D%0A%09%09btn.appendChild%28mp%29%3B%0A%0A%09%09if%28this.options.itemInPageContextMenu%29%20setTimeout%28function%28_this%29%20%7B%0A%09%09%09_this.initPageContextMenu%28%29%3B%0A%09%09%7D%2C%2050%2C%20this%29%3B%0A%0A%09%09var%20preload%20%3D%20this.options.preloadBookmarks%3B%0A%09%09if%28preload%20%26gt%3B%200%29%20setTimeout%28function%28_this%29%20%7B%0A%09%09%09if%28_this.mp.hasAttribute%28%22onpopupshowing%22%29%29%0A%09%09%09%09_this.load%28%29%3B%0A%09%09%7D%2C%20preload%2C%20this%29%3B%0A%0A%09%09if%28this.noBookmarks%28%29%29%0A%09%09%09btn.disabled%20%3D%20true%3B%0A%09%7D%2C%0A%09loadDelayed%3A%20function%28callback%29%20%7B%0A%09%09setTimeout%28function%28_this%29%20%7B%0A%09%09%09_this.load%28callback%29%3B%0A%09%09%7D%2C%200%2C%20this%29%3B%0A%09%7D%2C%0A%09load%3A%20function%28callback%29%20%7B%0A%09%09_log%28%22load%28%29%22%29%3B%0A%09%09var%20mp%20%3D%20this.mp%3B%0A%09%09if%28mp.hasAttribute%28%22onpopupshowing%22%29%29%20%7B%0A%09%09%09//%20Already%20called%20listener%20can%27t%20be%20removed%20without%20this%0A%09%09%09mp.setAttribute%28%22onpopupshowing%22%2C%20%22%22%29%3B%0A%09%09%09mp.removeAttribute%28%22onpopupshowing%22%29%3B%0A%09%09%7D%0A%09%09var%20file%20%3D%20this.file%3B%0A%09%09if%28file.exists%28%29%29%20%7B%0A%09%09%09this.readFromFileAsync%28file%2C%20function%28data%29%20%7B%0A%09%09%09%09this.loadData%28data%29%3B%0A%09%09%09%09callback%20%26amp%3B%26amp%3B%20callback%28%29%3B%0A%09%09%09%7D%2C%20this%29%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09this.loadData%28%22%22%29%3B%0A%09%09%09callback%20%26amp%3B%26amp%3B%20callback%28%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09ensureLoaded%3A%20function%28callback%2C%20context%2C%20args%29%20%7B%0A%09%09if%28this._loaded%29%0A%09%09%09return%20callback.apply%28context%2C%20args%29%3B%0A%09%09return%20this.load%28function%28%29%20%7B%0A%09%09%09callback.apply%28context%2C%20args%29%3B%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%0A%09_label%3A%20%20%20%22label%3A%20%20%20%22%2C%0A%09_uri%3A%20%20%20%20%20%22uri%3A%20%20%20%20%20%22%2C%0A%09_icon%3A%20%20%20%20%22icon%3A%20%20%20%20%22%2C%0A%09_session%3A%20%22session%3A%20%22%2C%0A%09_sep%3A%20%20%20%20%20%22separator%22%2C%0A%0A%09_loaded%3A%20false%2C%0A%09loadData%3A%20function%28data%29%20%7B%0A%09%09this._loaded%20%3D%20true%3B%0A%09%09this.addContextMenu%28%29%3B%0A%0A%09%09var%20mp%20%3D%20this.mp%3B%0A%09%09if%28mp.hasChildNodes%28%29%29%20%7B%0A%09%09%09_log%28%22loadData%28%29%3A%20menupopup%20isn%27t%20empty%21%22%29%3B%0A%09%09%09mp.textContent%20%3D%20%22%22%3B%0A%09%09%7D%0A%09%09var%20typeOffset%20%3D%20this._label.length%3B%0A%09%09data.split%28%22%5Cn%5Cn%22%29.forEach%28function%28section%2C%20i%29%20%7B%0A%09%09%09if%28%21section%29%0A%09%09%09%09return%3B%0A%09%09%09var%20label%2C%20uri%2C%20icon%2C%20ssData%2C%20isSep%3B%0A%09%09%09section.split%28%22%5Cn%22%29.forEach%28function%28line%2C%20i%29%20%7B%0A%09%09%09%09if%28%21line%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09var%20type%20%3D%20line.substr%280%2C%20typeOffset%29%3B%0A%09%09%09%09line%20%3D%20line.substr%28typeOffset%29%3B%0A%09%09%09%09switch%28type%29%20%7B%0A%09%09%09%09%09case%20this._label%3A%20%20%20label%20%20%3D%20line%3B%20break%3B%0A%09%09%09%09%09case%20this._uri%3A%20%20%20%20%20uri%20%20%20%20%3D%20line%3B%20break%3B%0A%09%09%09%09%09case%20this._icon%3A%20%20%20%20icon%20%20%20%3D%20line%3B%20break%3B%0A%09%09%09%09%09case%20this._session%3A%20ssData%20%3D%20line%3B%20break%3B%0A%09%09%09%09%09case%20this._sep%3A%20%20%20%20%20isSep%20%20%3D%20true%3B%20return%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%2C%20this%29%3B%0A%09%09%09if%28isSep%29%0A%09%09%09%09mp.appendChild%28this.getSeparator%28%29%29%3B%0A%09%09%09else%0A%09%09%09%09mp.appendChild%28this.getMenuitem%28label%2C%20uri%2C%20icon%2C%20ssData%29%29%3B%0A%09%09%7D%2C%20this%29%3B%0A%09%09var%20sep%20%3D%20this.createElement%28%22menuseparator%22%2C%20%7B%0A%09%09%09id%3A%20this.sepId%0A%09%09%7D%29%3B%0A%09%09mp.appendChild%28sep%29%3B%0A%09%09var%20openAll%20%3D%20this.createElement%28%22menuitem%22%2C%20%7B%0A%09%09%09id%3A%20%20%20%20this.openAllId%2C%0A%09%09%09label%3A%20this.openAllLabel%0A%09%09%7D%29%3B%0A%09%09mp.appendChild%28openAll%29%3B%0A%0A%09%09this.onBookmarksChanged%28%29%3B%0A%09%7D%2C%0A%09destroy%3A%20function%28force%29%20%7B%0A%09%09_log%28%22destroy%28%22%20+%20force%20+%20%22%29%22%29%3B%0A%09%09if%28this.mp%29%20%7B%0A%09%09%09this.mp.removeEventListener%28%22DOMMenuItemActive%22%2C%20%20%20this%2C%20false%29%3B%0A%09%09%09this.mp.removeEventListener%28%22DOMMenuItemInactive%22%2C%20this%2C%20false%29%3B%0A%09%09%09if%28%21force%29%0A%09%09%09%09this.closePropertiesWindows%28%29%3B%0A%09%09%7D%0A%09%09if%28force%29%20%7B%0A%09%09%09this.closeAllPropertiesWindows%28%29%3B%0A%09%09%09this.markInsertionPoint%28false%29%3B%0A%09%09%7D%0A%09%09if%28this.options.itemInPageContextMenu%29%0A%09%09%09this.destroyPageContextMenu%28force%29%3B%0A%09%09window.removeEventListener%28%22drop%22%2C%20this%2C%20true%29%3B%0A%09%7D%2C%0A%09handleEvent%3A%20function%28e%29%20%7B%0A%09%09var%20type%20%3D%20e.type%3B%0A%09%09if%28type%20%3D%3D%20%22popupshowing%22%20%26amp%3B%26amp%3B%20e.target%20%3D%3D%20e.currentTarget%29%0A%09%09%09this.updatePageContextItemVisibility%28%29%3B%0A%09%09else%20if%28type%20%3D%3D%20%22drop%22%29%0A%09%09%09this.handleBookmarkDrop%28e%29%3B%0A%09%09else%20if%28type%20%3D%3D%20%22DOMMenuItemActive%22%20%7C%7C%20type%20%3D%3D%20%22DOMMenuItemInactive%22%29%0A%09%09%09this.showLink%28e%29%3B%0A%09%7D%2C%0A%0A%09initIds%3A%20function%28%29%20%7B%0A%09%09this.initIds%20%3D%20function%28%29%20%7B%7D%3B%0A%09%09var%20shortcuts%20%3D%20%7B%0A%09%09%09//%20Bookmarks%20menu%0A%09%09%09cmId%3A%20%20%20%20%20%20%20%20%20%20%22-context%22%2C%0A%09%09%09sepId%3A%20%20%20%20%20%20%20%20%20%22-separator%22%2C%0A%09%09%09openAllId%3A%20%20%20%20%20%22-openAll%22%2C%0A%0A%09%09%09//%20Bookmarks%20context%20menu%0A%09%09%09addBookmarkId%3A%20%22-addBookmark%22%2C%0A%09%09%09addSepId%3A%20%20%20%20%20%20%22-addSeparator%22%2C%0A%0A%09%09%09bmAllSepId%3A%20%20%20%20%22-separator-bookmarkAllTabs%22%2C%0A%09%09%09bmAllId%3A%20%20%20%20%20%20%20%22-bookmarkAllTabs%22%2C%0A%0A%09%09%09updateSepId%3A%20%20%20%22-separator-update%22%2C%0A%09%09%09updateId%3A%20%20%20%20%20%20%22-update%22%2C%0A%09%09%09updateURIId%3A%20%20%20%22-updateURI%22%2C%0A%0A%09%09%09deleteSepId%3A%20%20%20%22-separator-delete%22%2C%0A%09%09%09deleteId%3A%20%20%20%20%20%20%22-delete%22%2C%0A%09%09%09deleteAllId%3A%20%20%20%22-deleteAll%22%2C%0A%0A%09%09%09sortSepId%3A%20%20%20%20%20%22-separator-sort%22%2C%0A%09%09%09sortId%3A%20%20%20%20%20%20%20%20%22-sort%22%2C%0A%0A%09%09%09undoId%3A%20%20%20%20%20%20%20%20%22-undo%22%2C%0A%09%09%09redoId%3A%20%20%20%20%20%20%20%20%22-redo%22%2C%0A%0A%09%09%09propsSepId%3A%20%20%20%20%22-separator-properties%22%2C%0A%09%09%09propsId%3A%20%20%20%20%20%20%20%22-properties%22%2C%0A%0A%09%09%09btnMenuSepId%3A%20%20%22-separator-buttonMenu%22%2C%0A%09%09%09btnMenuId%3A%20%20%20%20%20%22-buttonMenu%22%2C%0A%09%09%09__proto__%3A%20null%0A%09%09%7D%3B%0A%09%09var%20btnId%20%3D%20this.button.id%3B%0A%09%09for%28var%20p%20in%20shortcuts%29%0A%09%09%09this%5Bp%5D%20%3D%20btnId%20+%20shortcuts%5Bp%5D%3B%0A%09%7D%2C%0A%09addContextMenu%3A%20function%28%29%20%7B%0A%09%09_log%28%22addContextMenu%28%29%22%29%3B%0A%09%09this.addContextMenu%20%3D%20function%28%29%20%7B%7D%3B%0A%0A%09%09var%20cm%20%3D%20this.%24%28this.cmId%29%3B%0A%09%09cm%20%26amp%3B%26amp%3B%20cm.parentNode.removeChild%28cm%29%3B%0A%09%09cm%20%3D%20this.cm%20%3D%20this.parseXULFromString%28%27%5C%0A%09%09%09%26lt%3Bmenupopup%20xmlns%3D%22%27%20+%20xulns%20+%20%27%22%5C%0A%09%09%09%09id%3D%22%27%20+%20this.cmId%20+%20%27%22%5C%0A%09%09%09%09onpopupshowing%3D%22%5C%0A%09%09%09%09%09if%28event.target%20%21%3D%20this%29%5C%0A%09%09%09%09%09%09return%20true%3B%5C%0A%09%09%09%09%09document.popupNode%20%3D%20this.parentNode.triggerNode%20%7C%7C%20document.popupNode%3B%5C%0A%09%09%09%09%09return%20this.bookmarks.initContextMenu%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%29%3B%22%5C%0A%09%09%09%09onpopuphidden%3D%22if%28event.target%20%3D%3D%20this%29%20document.popupNode%20%3D%20null%3B%22%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.addBookmarkId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.addBookmark%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20this.getLabel%28%22placesContext_new%3Abookmark%22%2C%20%22New%20Bookmark%22%29.replace%28/%u2026%24/%2C%20%22%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20this.getAccesskey%28%22placesContext_new%3Abookmark%22%2C%20%22B%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.addSepId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.addSeparator%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20this.getLabel%28%22placesContext_new%3Aseparator%22%2C%20%22New%20Separator%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20this.getAccesskey%28%22placesContext_new%3Aseparator%22%2C%20%22S%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%5C%0A%09%09%09%09%26lt%3Bmenuseparator%20id%3D%22%27%20+%20this.bmAllSepId%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.bmAllId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.bookmarkAllTabs%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22Bookmark%20All%20Tabs%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22T%22%2C%20%22bookmarkAllTabsKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%5C%0A%09%09%09%09%26lt%3Bmenuseparator%20id%3D%22%27%20+%20this.updateSepId%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.updateId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.updateBookmark%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22Update%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22p%22%2C%20%22updateKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.updateURIId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.updateBookmark%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%2C%20true%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22Update%20Location%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22L%22%2C%20%22updateLocationKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%5C%0A%09%09%09%09%26lt%3Bmenuseparator%20id%3D%22%27%20+%20this.deleteSepId%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.deleteId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.deleteBookmark%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20this.getLabel%28%22placesContext_delete%22%2C%20%22Delete%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20this.getAccesskey%28%22placesContext_delete%22%2C%20%22D%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.deleteAllId%20+%20%27%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.deleteAllBookmarks%28%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22Delete%20All%20Bookmarks%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22A%22%2C%20%22deleteAllKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%5C%0A%09%09%09%09%26lt%3Bmenuseparator%20id%3D%22%27%20+%20this.sortSepId%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenu%20id%3D%22%27%20+%20this.sortId%20+%20%27%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22Sort%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22S%22%2C%20%22sortKey%22%29%20+%20%27%22%26gt%3B%5C%0A%09%09%09%09%09%26lt%3Bmenupopup%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuitem%5C%0A%09%09%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09%09%09oncommand%3D%22this.parentNode.parentNode.parentNode.bookmarks.sortBookmarks%28%5B%5C%27name%5C%27%5D%29%3B%22%5C%0A%09%09%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22By%20Name%2C%20A%26gt%3BZ%22%29%20+%20%27%22%5C%0A%09%09%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22N%22%2C%20%22sortByNameAZKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuitem%5C%0A%09%09%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09%09%09oncommand%3D%22this.parentNode.parentNode.parentNode.bookmarks.sortBookmarks%28%5B%5C%27name%5C%27%5D%2C%20true%29%3B%22%5C%0A%09%09%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22By%20Name%2C%20Z%26gt%3BA%22%29%20+%20%27%22%5C%0A%09%09%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22N%22%2C%20%22sortByNameZAKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuseparator%20/%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuitem%5C%0A%09%09%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09%09%09oncommand%3D%22this.parentNode.parentNode.parentNode.bookmarks.sortBookmarks%28%5B%5C%27baseDomain%5C%27%2C%20%5C%27host%5C%27%2C%20%5C%27name%5C%27%5D%29%3B%22%5C%0A%09%09%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22By%20Base%20Domain%2C%20Host%20and%20Name%2C%20A%26gt%3BZ%22%29%20+%20%27%22%5C%0A%09%09%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22B%22%2C%20%22sortByBaseDomainHostNameAZKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuitem%5C%0A%09%09%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09%09%09oncommand%3D%22this.parentNode.parentNode.parentNode.bookmarks.sortBookmarks%28%5B%5C%27baseDomain%5C%27%2C%20%5C%27host%5C%27%2C%20%5C%27name%5C%27%5D%2C%20true%29%3B%22%5C%0A%09%09%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22By%20Base%20Domain%2C%20Host%20and%20Name%2C%20Z%26gt%3BA%22%29%20+%20%27%22%5C%0A%09%09%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22B%22%2C%20%22sortByBaseDomainHostNameZAKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuseparator%20/%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuitem%5C%0A%09%09%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09%09%09oncommand%3D%22this.parentNode.parentNode.parentNode.bookmarks.sortBookmarks%28%5B%5C%27host%5C%27%2C%20%5C%27name%5C%27%5D%29%3B%22%5C%0A%09%09%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22By%20Host%20and%20Name%2C%20A%26gt%3BZ%22%29%20+%20%27%22%5C%0A%09%09%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22H%22%2C%20%22sortByHostNameAZKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%09%09%26lt%3Bmenuitem%5C%0A%09%09%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09%09%09oncommand%3D%22this.parentNode.parentNode.parentNode.bookmarks.sortBookmarks%28%5B%5C%27host%5C%27%2C%20%5C%27name%5C%27%5D%2C%20true%29%3B%22%5C%0A%09%09%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22By%20Host%20and%20Name%2C%20Z%26gt%3BA%22%29%20+%20%27%22%5C%0A%09%09%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22H%22%2C%20%22sortByHostNameZAKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%09%26lt%3B/menupopup%26gt%3B%5C%0A%09%09%09%09%26lt%3B/menu%26gt%3B%5C%0A%09%09%09%09%5C%0A%09%09%09%09%26lt%3Bmenuseparator%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.undoId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.undo%28%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20this.getLabel%28%22menu_undo%22%2C%20this.getLabel%28%22cmd_undo%22%2C%20%22Undo%22%29%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20this.getAccesskey%28%22menu_undo%22%2C%20%22U%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.redoId%20+%20%27%22%5C%0A%09%09%09%09%09closemenu%3D%22single%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.redo%28%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20this.getLabel%28%22menu_redo%22%2C%20this.getLabel%28%22cmd_redo%22%2C%20%22Redo%22%29%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20this.getAccesskey%28%22menu_redo%22%2C%20%22R%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%5C%0A%09%09%09%09%26lt%3Bmenuseparator%20id%3D%22%27%20+%20this.propsSepId%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenuitem%20id%3D%22%27%20+%20this.propsId%20+%20%27%22%5C%0A%09%09%09%09%09oncommand%3D%22this.parentNode.bookmarks.properties%28this.parentNode.triggerNode%20%7C%7C%20document.popupNode%29%3B%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20this.getLabel%28%22placesContext_show%3Ainfo%22%2C%20%22Properties%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20this.getAccesskey%28%22placesContext_show%3Ainfo%22%2C%20%22i%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%5C%0A%09%09%09%09%26lt%3Bmenuseparator%20id%3D%22%27%20+%20this.btnMenuSepId%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%09%26lt%3Bmenu%20id%3D%22%27%20+%20this.btnMenuId%20+%20%27%22%5C%0A%09%09%09%09%09label%3D%22%27%20+%20_localize%28%22Button%20Menu%22%29%20+%20%27%22%5C%0A%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22M%22%2C%20%22buttonMenuKey%22%29%20+%20%27%22%20/%26gt%3B%5C%0A%09%09%09%26lt%3B/menupopup%26gt%3B%27%0A%09%09%29%3B%0A%0A%09%09var%20cbPopup%20%3D%20this.%24%28this.button.defaultContextId%29%3B%0A%09%09if%28%21cbPopup%29%0A%09%09%09Components.utils.reportError%28this.errPrefix%20+%20%22cb%20menu%20not%20found%22%29%3B%0A%09%09else%20%7B%0A%09%09%09cbPopup%20%3D%20cbPopup.cloneNode%28true%29%3B%0A%09%09%09let%20id%20%3D%20%22-%22%20+%20this.btnNum%20+%20%22-cloned%22%3B%0A%09%09%09cbPopup.id%20+%3D%20id%3B%0A%09%09%09Array.slice%28cbPopup.getElementsByAttribute%28%22id%22%2C%20%22*%22%29%29.forEach%28function%28node%29%20%7B%0A%09%09%09%09node.id%20+%3D%20id%3B%0A%09%09%09%7D%29%3B%0A%09%09%09let%20menu%20%3D%20cm.lastChild%3B%0A%09%09%09menu.appendChild%28cbPopup%29%3B%0A%09%09%7D%0A%0A%09%09cm.bookmarks%20%3D%20this%3B%0A%09%09this.%24%28%22mainPopupSet%22%29.appendChild%28cm%29%3B%0A%09%7D%2C%0A%0A%09_hasPageContextItem%3A%20false%2C%0A%09get%20pageContextItem%28%29%20%7B%0A%09%09this._hasPageContextItem%20%3D%20true%3B%0A%09%09var%20cbId%20%3D%20%22sessionBookmarksPageContextItem%22%3B%0A%09%09var%20btnId%20%3D%20this.button.id%3B%0A%09%09Array.slice%28document.getElementsByAttribute%28%22cb_buttonId%22%2C%20btnId%29%29.forEach%28function%28mi%29%20%7B%0A%09%09%09mi.parentNode.removeChild%28mi%29%3B%0A%09%09%7D%29%3B%0A%09%09var%20mi%20%3D%20this.createElement%28%22menuitem%22%2C%20%7B%0A%09%09%09label%3A%20_localize%28%22Session%20Bookmark%20This%20Page%22%29%2C%0A%09%09%09accesskey%3A%20_localize%28%22S%22%2C%20%22pageContextItemKey%22%29%2C%0A%09%09%09tooltiptext%3A%20_localize%28%22Button%3A%20%25S%22%29%0A%09%09%09%09.replace%28%22%25S%22%2C%20this.button.tooltipText%20%7C%7C%20this.button.label%29%2C%0A%09%09%09oncommand%3A%20%22this._bookmarks.addBookmark%28%29%3B%22%2C%0A%09%09%09cb_id%3A%20cbId%2C%0A%09%09%09cb_buttonId%3A%20btnId%0A%09%09%7D%29%3B%0A%09%09mi._bookmarks%20%3D%20this%3B%0A%09%09var%20insPoint%20%3D%20this.bmItem.parentNode.localName%20%3D%3D%20%22menugroup%22%0A%09%09%09%3F%20this.%24%28%22context-savepage%22%29%20%7C%7C%20this.bmItem.parentNode.nextSibling%0A%09%09%09%3A%20this.bmItem.nextSibling%3B%0A%09%09while%28insPoint%20%26amp%3B%26amp%3B%20insPoint.getAttribute%28%22cb_id%22%29%20%3D%3D%20cbId%29%0A%09%09%09insPoint%20%3D%20insPoint.nextSibling%3B%0A%09%09this.bmPopup.insertBefore%28mi%2C%20insPoint%29%3B%0A%09%09delete%20this.pageContextItem%3B%0A%09%09return%20this.pageContextItem%20%3D%20mi%3B%0A%09%7D%2C%0A%09initPageContextMenu%3A%20function%28%29%20%7B%0A%09%09var%20bmItem%20%3D%20this.bmItem%20%3D%20this.%24%28%22context-bookmarkpage%22%29%3B%0A%09%09if%28%21bmItem%29%0A%09%09%09return%3B%0A%09%09_log%28%22initPageContextMenu%28%29%22%29%3B%0A%09%09var%20bmPopup%20%3D%20bmItem.parentNode%3B%0A%09%09if%28bmPopup.localName%20%3D%3D%20%22menugroup%22%29%0A%09%09%09bmPopup%20%3D%20bmPopup.parentNode%3B%0A%09%09this.bmPopup%20%3D%20bmPopup%3B%0A%09%09bmPopup.addEventListener%28%22popupshowing%22%2C%20this%2C%20true%29%3B%0A%09%7D%2C%0A%09destroyPageContextMenu%3A%20function%28force%29%20%7B%0A%09%09_log%28%22destroyPageContextMenu%28%29%22%29%3B%0A%09%09this.bmPopup.removeEventListener%28%22popupshowing%22%2C%20this%2C%20true%29%3B%0A%09%09if%28force%20%26amp%3B%26amp%3B%20this._hasPageContextItem%20%26amp%3B%26amp%3B%20this.pageContextItem.parentNode%29%0A%09%09%09this.bmPopup.removeChild%28this.pageContextItem%29%3B%0A%09%7D%2C%0A%09updatePageContextItemVisibility%3A%20function%28%29%20%7B%0A%09%09var%20hidden%20%3D%20this.bmItem.hidden%3B%0A%09%09if%28%0A%09%09%09%21hidden%0A%09%09%09%26amp%3B%26amp%3B%20gContextMenu%0A%09%09%09%26amp%3B%26amp%3B%20gContextMenu.target%0A%09%09%09%26amp%3B%26amp%3B%20gContextMenu.target.ownerDocument.defaultView.top%20%21%3D%20content%0A%09%09%29%0A%09%09%09hidden%20%3D%20true%3B%0A%09%09this.pageContextItem.hidden%20%3D%20hidden%3B%0A%09%7D%2C%0A%0A%09reload%3A%20function%28data%29%20%7B%0A%09%09this.mp.textContent%20%3D%20%22%22%3B%0A%09%09this._undoStorage.length%20%3D%200%3B%0A%09%09this._undoPos%20%3D%20undefined%3B%0A%09%09if%28data%20%3D%3D%20undefined%29%0A%09%09%09this.init%28%29%3B%0A%09%09else%0A%09%09%09this.loadData%28data%29%3B%0A%09%7D%2C%0A%09unsaved%3A%20false%2C%0A%09_saveInProgress%3A%20false%2C%0A%09_changed%3A%20false%2C%0A%09save%3A%20function%28%29%20%7B%0A%09%09if%28this._saveInProgress%29%20%7B%0A%09%09%09this._changed%20%3D%20true%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09this._saveInProgress%20%3D%20true%3B%0A%09%09this._changed%20%3D%20false%3B%0A%0A%09%09var%20data%20%3D%20%5B%5D%3B%0A%09%09Array.forEach%28%0A%09%09%09this.mp.getElementsByAttribute%28%22cb_bookmarkItem%22%2C%20%22*%22%29%2C%0A%09%09%09function%28mi%29%20%7B%0A%09%09%09%09if%28mi.localName%20%3D%3D%20%22menuseparator%22%29%20%7B%0A%09%09%09%09%09data.push%28this._sep%29%3B%0A%09%09%09%09%09return%3B%0A%09%09%09%09%7D%0A%09%09%09%09var%20section%20%3D%20%5B%0A%09%09%09%09%09this._label%20+%20this.escapeString%28mi.getAttribute%28%22label%22%29%29%2C%0A%09%09%09%09%09this._uri%20%20%20+%20this.escapeString%28mi.getAttribute%28%22cb_uri%22%29%29%0A%09%09%09%09%5D%3B%0A%09%09%09%09var%20icon%20%20%20%3D%20mi.getAttribute%28%22image%22%29%3B%0A%09%09%09%09var%20ssData%20%3D%20mi.getAttribute%28%22cb_ssData%22%29%3B%0A%09%09%09%09icon%20%20%20%26amp%3B%26amp%3B%20section.push%28this._icon%20%20%20%20+%20this.escapeString%28icon%29%29%3B%0A%09%09%09%09ssData%20%26amp%3B%26amp%3B%20section.push%28this._session%20+%20this.escapeString%28ssData%29%29%3B%0A%09%09%09%09data.push%28section.join%28%22%5Cn%22%29%29%3B%0A%09%09%09%7D%2C%0A%09%09%09this%0A%09%09%29%3B%0A%09%09this.copyFileAsync%28this.file%2C%20this.backupFile%2C%20function%28status%29%20%7B%0A%09%09%09if%28%21Components.isSuccessCode%28status%29%29%0A%09%09%09%09Components.utils.reportError%28this.errPrefix%20+%20%22copyFileAsync%28%29%20failed%22%29%3B%0A%09%09%09//%20Backup%20failed%3F%20But%20we%20still%20can%20try%20save%20user%20data.%0A%09%09%09this.writeToFileAsync%28data.join%28%22%5Cn%5Cn%22%29%2C%20this.file%2C%20function%28status%2C%20data%29%20%7B%0A%09%09%09%09if%28%21Components.isSuccessCode%28status%29%29%0A%09%09%09%09%09Components.utils.reportError%28this.errPrefix%20+%20%22writeToFileAsync%28%29%20failed%22%29%3B%0A%09%09%09%09else%20%7B%0A%09%09%09%09%09//%20Private%20windows%20in%20SeaMonkey%20doesn%27t%20have%20%22windowtype%22%0A%09%09%09%09%09let%20isSeaMonkey%20%3D%20this.appName%20%3D%3D%20%22SeaMonkey%22%3B%0A%09%09%09%09%09let%20ws%20%3D%20this.wm.getEnumerator%28isSeaMonkey%20%3F%20null%20%3A%20%22navigator%3Abrowser%22%29%3B%0A%09%09%09%09%09while%28ws.hasMoreElements%28%29%29%20%7B%0A%09%09%09%09%09%09let%20w%20%3D%20ws.getNext%28%29%3B%0A%09%09%09%09%09%09if%28w%20%3D%3D%20window%29%0A%09%09%09%09%09%09%09continue%3B%0A%09%09%09%09%09%09let%20btn%20%3D%20w.document.getElementById%28this.button.id%29%3B%0A%09%09%09%09%09%09if%28btn%20%26amp%3B%26amp%3B%20btn.bookmarks%29%20w.setTimeout%28function%28btn%29%20%7B%0A%09%09%09%09%09%09%09btn.bookmarks.reload%28data%29%3B%0A%09%09%09%09%09%09%7D%2C%200%2C%20btn%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%09this._saveInProgress%20%3D%20false%3B%0A%09%09%09%09if%28this._changed%29%20setTimeout%28function%28_this%29%20%7B%0A%09%09%09%09%09_this.save%28%29%3B%0A%09%09%09%09%7D%2C%200%2C%20this%29%3B%0A%09%09%09%7D%2C%20this%29%3B%0A%09%09%7D%2C%20this%29%3B%0A%09%09this.unsaved%20%3D%20false%3B%0A%09%7D%2C%0A%09scheduleSave%3A%20function%28%29%20%7B%0A%09%09if%28this.button.open%20%7C%7C%20this.button.getAttribute%28%22open%22%29%20%3D%3D%20%22true%22%29%0A%09%09%09this.unsaved%20%3D%20true%3B%0A%09%09else%0A%09%09%09this.save%28%29%3B%0A%09%7D%2C%0A%09checkUnsaved%3A%20function%28%29%20%7B%0A%09%09this.unsaved%20%26amp%3B%26amp%3B%20this.save%28%29%3B%0A%09%7D%2C%0A%09getMenuitem%3A%20function%28label%2C%20uri%2C%20icon%2C%20ssData%29%20%7B%0A%09%09if%28%21ssData%29%0A%09%09%09ssData%20%3D%20%22%22%3B%0A%09%09var%20mi%20%3D%20this.createElement%28%22menuitem%22%2C%20%7B%0A%09%09%09%22class%22%3A%20%22menuitem-iconic%20bookmark-item%20menuitem-with-favicon%22%2C%0A%09%09%09closemenu%3A%20this.options.leftClickCloseMenu%20%3F%20%22auto%22%20%3A%20%22none%22%2C%0A%09%09%09label%3A%20label%20%7C%7C%20%22%22%2C%0A%09%09%09cb_uri%3A%20uri%20%7C%7C%20%22%22%2C%0A%09%09%09cb_ssData%3A%20ssData%2C%0A%09%09%09tooltiptext%3A%20this.decodeURI%28uri%20%7C%7C%20%22%22%29%2C%0A%09%09%09image%3A%20icon%20%7C%7C%20%22%22%2C%0A%09%09%09cb_bookmarkItem%3A%20%22true%22%0A%09%09%7D%29%3B%0A%09%09//%20Faster%20way%20to%20check%20for%20%22privateTab-isPrivate%22%20in%20JSON.parse%28ssData%29.attributes%0A%09%09if%28ssData.indexOf%28%27%22privateTab-isPrivate%22%3A%22true%22%27%29%20%26gt%3B%200%29%0A%09%09%09mi.setAttribute%28%22privateTab-isPrivate%22%2C%20%22true%22%29%3B%0A%09%09return%20mi%3B%0A%09%7D%2C%0A%09decodeURI%3A%20function%28uri%29%20%7B%0A%09%09if%28uri%29%20try%20%7B%0A%09%09%09return%20losslessDecodeURI%28makeURI%28uri%29%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%09%09return%20uri%3B%0A%09%7D%2C%0A%09getSeparator%3A%20function%28%29%20%7B%0A%09%09return%20this.createElement%28%22menuseparator%22%2C%20%7B%0A%09%09%09cb_bookmarkItem%3A%20%22true%22%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09tabData%3A%20function%28o%29%20%7B%0A%09%09if%28o%29%20for%28var%20p%20in%20o%29%20if%28o.hasOwnProperty%28p%29%29%0A%09%09%09this%5Bp%5D%20%3D%20o%5Bp%5D%3B%0A%09%7D%2C%0A%09getTabData%3A%20function%28tab%29%20%7B%0A%09%09if%28tab%20instanceof%20this.tabData%29%0A%09%09%09return%20tab%3B%0A%09%09if%28%21tab%29%0A%09%09%09tab%20%3D%20gBrowser.selectedTab%3B%0A%09%09if%28this.options.useSessions%29%20%7B%0A%09%09%09var%20ssData%20%3D%20this.getTabState%28tab%29%3B%0A%09%09%09if%28%22JSON%22%20in%20window%29%20try%20%7B%0A%09%09%09%09let%20data%20%3D%20JSON.parse%28ssData%29%3B%0A%09%09%09%09if%28%21this.options.saveTabHistory%29%20%7B%0A%09%09%09%09%09data.entries%20%3D%20%5Bdata.entries%5Bdata.index%20-%201%5D%5D%3B%0A%09%09%09%09%09data.index%20%3D%201%3B%0A%09%09%09%09%7D%0A%09%09%09%09this.cleanupSessionData%28data%29%3B%0A%09%09%09%09ssData%20%3D%20JSON.stringify%28data%29%3B%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%0A%09%09%09%09Components.utils.reportError%28this.errPrefix%20+%20%22getTabData%3A%20session%20data%20tweaks%20failed%22%29%3B%0A%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09return%20new%20this.tabData%28%7B%0A%09%09%09label%3A%20%20tab.label%2C%0A%09%09%09uri%3A%20%20%20%20tab.linkedBrowser%20%26amp%3B%26amp%3B%20tab.linkedBrowser.currentURI.spec%2C%0A%09%09%09icon%3A%20%20%20this.cachedIcon%28tab.image%29%2C%0A%09%09%09ssData%3A%20ssData%2C%0A%09%09%09tab%3A%20%20%20%20tab%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09getTabState%3A%20function%28tab%29%20%7B%0A%09%09this.cleanupTabStateCache%28tab%29%3B%0A%09%09return%20this.ss.getTabState%28tab%29%3B%0A%09%7D%2C%0A%09cleanupTabStateCache%3A%20function%28tab%29%20%7B%0A%09%09//%20Inspired%20by%20code%20from%20UnloadTab%20extension%0A%09%09//%20https%3A//addons.mozilla.org/files/compare/233879...223485/file/chrome/content/unloadtab.js%23L928%0A%09%09//%20Try%20flush%20cached%20data%20for%20tab%20to%20get%20correct%20scroll%20position%0A%09%09var%20scope%20%3D%20this.ssTabCacheScope%3B%0A%09%09if%28scope%20%26amp%3B%26amp%3B%20%22TabStateCache%22%20in%20scope%20%26amp%3B%26amp%3B%20%22delete%22%20in%20scope.TabStateCache%29%20try%20%7B%0A%09%09%09scope.TabStateCache.delete%28tab%29%3B%0A%09%09%09return%20true%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%09%09_log%28%22clearTabStateCache%28%29%20failed%21%22%29%3B%0A%09%09return%20false%3B%0A%09%7D%2C%0A%09get%20ssTabCacheScope%28%29%20%7B%0A%09%09var%20scope%3B%0A%09%09try%20%7B%20//%20Firefox%2028+%0A%09%09%09scope%20%3D%20Components.utils.import%28%22resource%3A///modules/sessionstore/TabStateCache.jsm%22%2C%20%7B%7D%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%7D%0A%09%09if%28%21scope%20%7C%7C%20%21%28%22TabStateCache%22%20in%20scope%29%29%20try%20%7B%0A%09%09%09scope%20%3D%20Components.utils.import%28%22resource%3A///modules/sessionstore/SessionStore.jsm%22%2C%20%7B%7D%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%7D%0A%09%09if%28scope%20%26amp%3B%26amp%3B%20%21%28%22TabStateCache%22%20in%20scope%29%29%0A%09%09%09scope%20%3D%20null%3B%0A%09%09delete%20this.ssTabCacheScope%3B%0A%09%09return%20this.ssTabCacheScope%20%3D%20scope%3B%0A%09%7D%2C%0A%09cleanupSessionData%3A%20function%28data%29%20%7B%0A%09%09if%28%21data%29%0A%09%09%09return%3B%0A%09%09//_log%28%22cleanupSessionData%3A%5Cn%22%20+%20JSON.stringify%28data%2C%20null%2C%20%22%20%20%22%29%29%3B%0A%09%09if%28%21this.options.saveTabPinnedState%29%0A%09%09%09delete%20data.pinned%3B%0A%09%09if%28%22extData%22%20in%20data%29%20%7B%0A%09%09%09let%20extData%20%3D%20data.extData%3B%0A%09%09%09if%28extData%20%26amp%3B%26amp%3B%20typeof%20extData%20%3D%3D%20%22object%22%29%20%7B%0A%09%09%09%09//%20Built-in%20Panorama%0A%09%09%09%09delete%20extData%5B%22tabview-tab%22%5D%3B%0A%0A%09%09%09%09//%20Tree%20Style%20Tab%20https%3A//addons.mozilla.org/firefox/addon/tree-style-tab/%0A%09%09%09%09delete%20extData%5B%22treestyletab-id%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-children%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-parent%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-ancestors%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-nest%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-insert-before%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-insert-after%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-closed-set-id%22%5D%3B%0A%0A%09%09%09%09delete%20extData%5B%22treestyletab-id-new%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-id-restoring%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22treestyletab-children-restoring%22%5D%3B%0A%0A%09%09%09%09delete%20extData%5B%22treestyletab-collapsed%22%5D%3B%0A%0A%09%09%09%09//%20Tab%20Utilities%20https%3A//addons.mozilla.org/firefox/addon/tab-utilities/%0A%09%09%09%09delete%20extData.group%3B%0A%09%09%09%09delete%20extData%5B%22group-color%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22group-collapsed%22%5D%3B%0A%09%09%09%09delete%20extData%5B%22group-counter%22%5D%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09if%28%22attributes%22%20in%20data%29%20%7B%0A%09%09%09let%20attrs%20%3D%20data.attributes%3B%0A%09%09%09if%28attrs%20%26amp%3B%26amp%3B%20typeof%20attrs%20%3D%3D%20%22object%22%29%20%7B%0A%09%09%09%09//%20TabKit%202nd%20Edition%20https%3A//addons.mozilla.org/firefox/addon/tabkit-2nd-edition/%0A%09%09%09%09delete%20attrs.tabid%3B%0A%09%09%09%09delete%20attrs.possibleparent%3B%0A%09%09%09%09delete%20attrs.outoforder%3B%0A%09%09%09%09delete%20attrs.uriKey%3B%0A%09%09%09%09delete%20attrs.groupid%3B%0A%09%09%09%09delete%20attrs.openerGroup%3B%0A%09%09%09%09delete%20attrs.uriGroup%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%2C%0A%09getItemByTabData%3A%20function%28td%2C%20checkSession%29%20%7B%0A%09%09var%20mis%20%3D%20this.mp.getElementsByAttribute%28%22cb_uri%22%2C%20td.uri%29%3B%0A%09%09var%20mi%20%3D%20mis.length%20%26amp%3B%26amp%3B%20mis%5B0%5D%3B%0A%09%09if%28%0A%09%09%09mi%0A%09%09%09%26amp%3B%26amp%3B%20mi.getAttribute%28%22label%22%29%20%3D%3D%20td.label%0A%09%09%09%26amp%3B%26amp%3B%20mi.getAttribute%28%22image%22%29%20%3D%3D%20td.icon%0A%09%09%09%26amp%3B%26amp%3B%20%28%0A%09%09%09%09%21checkSession%0A%09%09%09%09%7C%7C%20%21this.options.useSessions%0A%09%09%09%09%7C%7C%20mi.getAttribute%28%22cb_ssData%22%29%20%3D%3D%20td.ssData%0A%09%09%09%29%0A%09%09%29%0A%09%09%09return%20mi%3B%0A%09%09return%20null%3B%0A%09%7D%2C%0A%09addBookmark%3A%20function%28%29%20%7B%0A%09%09return%20this.ensureLoaded%28this._addBookmark%2C%20this%2C%20arguments%29%3B%0A%09%7D%2C%0A%09_addBookmark%3A%20function%28insPoint%2C%20tab%2C%20undoBuffer%29%20%7B%0A%09%09var%20canToggle%20%3D%20this.options.allowToggleBookmark%0A%09%09%09%26amp%3B%26amp%3B%20%28%21insPoint%20%7C%7C%20insPoint%20%3D%3D%20this.button%29%3B%0A%09%09var%20td%20%3D%20this.getTabData%28tab%29%3B%0A%09%09if%28canToggle%20%7C%7C%20this.options.checkDuplicates%29%20%7B%0A%09%09%09let%20checkSession%20%3D%20canToggle%0A%09%09%09%09%3F%20false%0A%09%09%09%09%3A%20this.options.checkDuplicatesSession%3B%0A%09%09%09let%20mi%20%3D%20this.getItemByTabData%28td%2C%20checkSession%29%3B%0A%09%09%09if%28mi%29%20%7B%0A%09%09%09%09if%28canToggle%29%20%7B%0A%09%09%09%09%09this.blink%28this.button%2C%200.05%29%3B%0A%09%09%09%09%09this.notify%28_localize%28%22Bookmark%20removed%22%29%29%3B%0A%09%09%09%09%09this.deleteBookmark%28mi%29%3B%0A%09%09%09%09%09return%20null%3B%0A%09%09%09%09%7D%0A%09%09%09%09this.blink%28mi%2C%200.5%29%3B%0A%09%09%09%09this.notify%28_localize%28%22Bookmark%20already%20exists%22%29%29%3B%0A%09%09%09%09return%20null%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09var%20mi%20%3D%20this.getMenuitem%28td.label%2C%20td.uri%2C%20td.icon%2C%20td.ssData%29%3B%0A%09%09this.mp.insertBefore%28mi%2C%20this.correctInsPoint%28insPoint%29%29%3B%0A%09%09var%20undo%20%3D%20%7B%20action%3A%20%22remove%22%2C%20mi%3A%20mi%2C%20pn%3A%20mi.parentNode%2C%20ns%3A%20mi.nextSibling%20%7D%3B%0A%09%09if%28undoBuffer%29%0A%09%09%09undoBuffer.push%28undo%29%3B%0A%09%09else%20%7B%0A%09%09%09this.addUndo%28undo%29%3B%0A%09%09%09this.onBookmarksChanged%28true%29%3B%0A%09%09%09this.blink%28%29%3B%0A%09%09%09this.notify%28_localize%28%22Bookmark%20added%22%29%29%3B%0A%09%09%09this.scheduleSave%28%29%3B%0A%09%09%7D%0A%09%09if%28this.options.removeAddedTab%29%20setTimeout%28function%28%29%20%7B%0A%09%09%09var%20tab%20%3D%20td.tab%3B%0A%09%09%09if%28%21tab.parentNode%29%20//%20Already%20closed%3F%0A%09%09%09%09return%3B%0A%09%09%09//%20Browser%20may%20be%20closed%20with%20last%20tab%2C%20so%20will%20add%20new%20empty%20tab%0A%09%09%09var%20tabs%20%3D%20gBrowser.visibleTabs%20%7C%7C%20gBrowser.tabs%20%7C%7C%20gBrowser.tabContainer.childNodes%3B%0A%09%09%09if%28tabs.length%20%26lt%3B%3D%201%29%0A%09%09%09%09BrowserOpenTab%28%29%3B%0A%09%09%09gBrowser.removeTab%28tab%29%3B%0A%09%09%7D%2C%200%29%3B%0A%09%09return%20mi%3B%0A%09%7D%2C%0A%09addSeparator%3A%20function%28insPoint%29%20%7B%0A%09%09var%20sep%20%3D%20this.getSeparator%28%29%3B%0A%09%09this.mp.insertBefore%28sep%2C%20this.correctInsPoint%28insPoint%29%29%3B%0A%09%09this.addUndo%28%7B%20action%3A%20%22remove%22%2C%20mi%3A%20sep%2C%20pn%3A%20sep.parentNode%2C%20ns%3A%20sep.nextSibling%20%7D%29%3B%0A%09%09this.scheduleSave%28%29%3B%0A%09%09return%20sep%3B%0A%09%7D%2C%0A%09bookmarkAllTabs%3A%20function%28%29%20%7B%0A%09%09return%20this.ensureLoaded%28this._bookmarkAllTabs%2C%20this%2C%20arguments%29%3B%0A%09%7D%2C%0A%09_bookmarkAllTabs%3A%20function%28insPoint%29%20%7B%0A%09%09var%20undo%20%3D%20%5B%5D%3B%0A%09%09var%20tabs%20%3D%20gBrowser.visibleTabs%20%7C%7C%20gBrowser.tabs%20%7C%7C%20gBrowser.tabContainer.childNodes%3B%0A%09%09Array.forEach%28tabs%2C%20function%28tab%29%20%7B%0A%09%09%09var%20mi%20%3D%20this._addBookmark%28insPoint%2C%20tab%2C%20undo%29%3B%0A%09%09%09if%28mi%29%0A%09%09%09%09insPoint%20%3D%20mi.nextSibling%3B%0A%09%09%7D%2C%20this%29%3B%0A%09%09if%28%21undo.length%29%0A%09%09%09return%3B%0A%09%09this.addUndo%28%7B%20action%3A%20%22removes%22%2C%20actions%3A%20undo.reverse%28%29%20%7D%29%3B%0A%09%09this.onBookmarksChanged%28true%29%3B%0A%09%09this.blink%28%29%3B%0A%09%09this.notify%28_localize%28%22Bookmarks%20added%3A%20%25S%22%29.replace%28%22%25S%22%2C%20undo.length%29%29%3B%0A%09%09this.scheduleSave%28%29%3B%0A%09%7D%2C%0A%09correctInsPoint%3A%20function%28insPoint%29%20%7B%0A%09%09if%28%21insPoint%20%7C%7C%20insPoint.parentNode%20%21%3D%20this.mp%29%0A%09%09%09return%20this.defaultInsPoint%3B%0A%09%09if%28insPoint.id%20%3D%3D%20this.openAllId%29%0A%09%09%09return%20this.%24%28this.sepId%29%3B%0A%09%09return%20insPoint%3B%0A%09%7D%2C%0A%09get%20defaultInsPoint%28%29%20%7B%0A%09%09return%20this.options.addToEnd%0A%09%09%09%3F%20this.%24%28this.sepId%29%0A%09%09%09%3A%20this.mp.firstChild%3B%0A%09%7D%2C%0A%09updateBookmark%3A%20function%28mi%2C%20onlyURI%29%20%7B%0A%09%09var%20oldAttrs%20%3D%20this.getAttributes%28mi%29%3B%0A%09%09var%20td%20%3D%20this.getTabData%28%29%3B%0A%09%09mi.setAttribute%28%22cb_uri%22%2C%20%20%20%20%20%20td.uri%29%3B%0A%09%09mi.setAttribute%28%22tooltiptext%22%2C%20td.uri%29%3B%0A%09%09mi.setAttribute%28%22cb_ssData%22%2C%20%20%20td.ssData%20%7C%7C%20%22%22%29%3B%0A%09%09if%28%21onlyURI%29%20%7B%0A%09%09%09mi.setAttribute%28%22label%22%2C%20td.label%29%3B%0A%09%09%09mi.setAttribute%28%22image%22%2C%20td.icon%29%3B%0A%09%09%7D%0A%09%09var%20newAttrs%20%3D%20this.getAttributes%28mi%29%3B%0A%09%09this.addUndo%28%7B%20action%3A%20%22attrs%22%2C%20mi%3A%20mi%2C%20oldAttrs%3A%20oldAttrs%2C%20newAttrs%3A%20newAttrs%20%7D%29%3B%0A%09%09this.scheduleSave%28%29%3B%0A%09%7D%2C%0A%09cachedIcon%3A%20function%28src%29%20%7B%0A%09%09src%20%3D%20src.replace%28/%5B%26amp%3B%23%5D-moz-resolution%3D%5Cd+%2C%5Cd+%24/%2C%20%22%22%29%3B%20//%20Firefox%2022.0a1%0A%09%09if%28%0A%09%09%09%21/%5Ehttps%3F%3A/.test%28src%29%0A%09%09%09//%20IDN%2C%20see%20https%3A//bugzilla.mozilla.org/show_bug.cgi%3Fid%3D311045%0A%09%09%09%7C%7C%20/%5Ehttps%3F%3A%5C/%5C/%5B%5E.%3A%5C/%5D+%5C.%5B%5Ea-z0-9-%5D+%28%3F%3A%5C/%7C%24%29/.test%28src%29%0A%09%09%09%7C%7C%20this.appName%20%3D%3D%20%22SeaMonkey%22%20%26amp%3B%26amp%3B%20this.appVersion%20%26lt%3B%3D%202%0A%09%09%09%7C%7C%20this.appName%20%3D%3D%20%22Firefox%22%20%20%20%26amp%3B%26amp%3B%20this.appVersion%20%26lt%3B%3D%203.5%0A%09%09%29%0A%09%09%09return%20src%3B%0A%09%09return%20%22moz-anno%3Afavicon%3A%22%20+%20src%3B%20//%20https%3A//bugzilla.mozilla.org/show_bug.cgi%3Fid%3D467828%0A%09%7D%2C%0A%09rawIcon%3A%20function%28src%29%20%7B%0A%09%09return%20src.replace%28/%5Emoz-anno%3Afavicon%3A/%2C%20%22%22%29%3B%0A%09%7D%2C%0A%09blink%3A%20function%28node%2C%20opacity%29%20%7B%0A%09%09if%28%21node%29%0A%09%09%09node%20%3D%20this.button%3B%0A%09%09var%20stl%20%3D%20node.style%3B%0A%09%09var%20transition%20%3D%20%22transition%22%20in%20stl%20%26amp%3B%26amp%3B%20%22transition%22%0A%09%09%09%7C%7C%20%22MozTransition%22%20in%20stl%20%26amp%3B%26amp%3B%20%22MozTransition%22%3B%0A%09%09stl%5Btransition%5D%20%3D%20%22opacity%200.1s%20ease-in%22%3B%0A%09%09stl.opacity%20%3D%20opacity%20%7C%7C%200.72%3B%0A%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09stl.opacity%20%3D%20%22%22%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09stl%5Btransition%5D%20%3D%20%22%22%3B%0A%09%09%09%7D%2C%20150%29%3B%0A%09%09%7D%2C%20250%29%3B%0A%09%7D%2C%0A%09notify%3A%20function%28msg%29%20%7B%0A%09%09if%28%0A%09%09%09%21this.options.showNotifications%0A%09%09%09%7C%7C%20this.options.showNotifications%20%3D%3D%201%20%26amp%3B%26amp%3B%20this.button.open%0A%09%09%29%0A%09%09%09return%3B%0A%09%09if%28%22_notifyTip%22%20in%20this%29%0A%09%09%09this._notifyTip.hidePopup%28%29%3B%0A%09%09var%20tip%20%3D%20this._notifyTip%20%3D%20this.createElement%28%22tooltip%22%2C%20%7B%0A%09%09%09%22class%22%3A%20%22sessionBookmarks-notifyTip%22%2C%0A%09%09%09label%3A%20msg%2C%0A%09%09%09onmouseover%3A%20%22this.hidePopup%28%29%3B%22%0A%09%09%7D%29%3B%0A%09%09var%20stl%20%3D%20tip.style%3B%0A%09%09stl.opacity%20%3D%200.6%3B%0A%09%09document.documentElement.appendChild%28tip%29%3B%0A%0A%09%09tip.openPopup%28this.button%2C%20%22end_after%22%29%3B%0A%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09var%20transition%20%3D%20%22transition%22%20in%20stl%20%26amp%3B%26amp%3B%20%22transition%22%0A%09%09%09%09%7C%7C%20%22MozTransition%22%20in%20stl%20%26amp%3B%26amp%3B%20%22MozTransition%22%3B%0A%09%09%09stl%5Btransition%5D%20%3D%20%22opacity%200.15s%20ease-in%22%3B%0A%09%09%09stl.opacity%20%3D%20%22%22%3B%0A%09%09%7D%2C%200%29%3B%0A%09%09setTimeout%28function%28_this%29%20%7B%0A%09%09%09tip.hidePopup%28%29%3B%0A%09%09%09tip.parentNode.removeChild%28tip%29%3B%0A%09%09%09delete%20_this._notifyTip%3B%0A%09%09%7D%2C%20this.options.notificationHideDelay%2C%20this%29%3B%0A%09%7D%2C%0A%09openBookmark%3A%20function%28e%29%20%7B%0A%09%09var%20mi%20%3D%20e.target%3B%0A%09%09if%28mi.id%20%3D%3D%20this.openAllId%29%20%7B%0A%09%09%09if%28e.type%20%3D%3D%20%22command%22%29%0A%09%09%09%09this.openAllBookmarks%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09if%28e.type%20%3D%3D%20%22click%22%20%26amp%3B%26amp%3B%20e.button%20%21%3D%201%29%0A%09%09%09return%3B%0A%09%09var%20uri%20%3D%20mi.getAttribute%28%22cb_uri%22%29%3B%0A%09%09if%28%21uri%29%20//%20Separator%3F%0A%09%09%09return%3B%0A%0A%09%09var%20loadInNewTab%20%3D%20this.options.invertLoadBehavior%0A%09%09%09%3F%20e.type%20%3D%3D%20%22command%22%20%7C%7C%20e.shiftKey%0A%09%09%09%3A%20e.type%20%3D%3D%20%22click%22%20%7C%7C%20this.hasModifier%28e%29%3B%0A%0A%09%09if%28loadInNewTab%29%20%7B%0A%09%09%09var%20tab%20%3D%20gBrowser.addTab%28this.options.useSessions%20%3F%20%22about%3Ablank%22%20%3A%20uri%29%3B%0A%09%09%09if%28%21%28this.options.loadInBackground%20%5E%20e.shiftKey%29%29%0A%09%09%09%09gBrowser.selectedTab%20%3D%20tab%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09if%28%21this.options.useSessions%29%0A%09%09%09%09loadURI%28uri%29%3B%0A%09%09%09var%20tab%20%3D%20gBrowser.selectedTab%3B%0A%09%09%09var%20mergeHistory%20%3D%20true%3B%0A%09%09%7D%0A%0A%09%09if%28%0A%09%09%09e.type%20%3D%3D%20%22click%22%0A%09%09%09%26amp%3B%26amp%3B%20%28%0A%09%09%09%09this.options.middleClickCloseMenu%20%3D%3D%201%20%26amp%3B%26amp%3B%20%21this.hasModifier%28e%29%0A%09%09%09%09%7C%7C%20this.options.middleClickCloseMenu%20%3D%3D%202%0A%09%09%09%29%0A%09%09%29%0A%09%09%09closeMenus%28mi%29%3B%0A%0A%09%09if%28tab%20%26amp%3B%26amp%3B%20this.options.useSessions%29%0A%09%09%09this.setTabSession%28tab%2C%20mi.getAttribute%28%22cb_ssData%22%29%2C%20uri%2C%20mergeHistory%29%3B%0A%0A%09%09if%28this.options.deleteAfterOpen%29%0A%09%09%09this.deleteBookmark%28mi%29%3B%0A%09%7D%2C%0A%09openAllBookmarks%3A%20function%28%29%20%7B%0A%09%09var%20mis%20%3D%20this.mp.getElementsByAttribute%28%22cb_uri%22%2C%20%22*%22%29%3B%0A%09%09if%28%0A%09%09%09%22PlacesUIUtils%22%20in%20window%0A%09%09%09%26amp%3B%26amp%3B%20%22_confirmOpenInTabs%22%20in%20PlacesUIUtils%0A%09%09%09%26amp%3B%26amp%3B%20mis.length%0A%09%09%29%20try%20%7B%0A%09%09%09if%28%21PlacesUIUtils._confirmOpenInTabs%28mis.length%2C%20window%29%29%0A%09%09%09%09return%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%09%09Array.forEach%28%0A%09%09%09mis%2C%0A%09%09%09function%28mi%29%20%7B%0A%09%09%09%09var%20uri%20%3D%20mi.getAttribute%28%22cb_uri%22%29%3B%0A%09%09%09%09var%20tab%20%3D%20gBrowser.addTab%28this.options.useSessions%20%3F%20%22about%3Ablank%22%20%3A%20uri%29%3B%0A%09%09%09%09if%28this.options.useSessions%29%0A%09%09%09%09%09this.setTabSession%28tab%2C%20mi.getAttribute%28%22cb_ssData%22%29%2C%20uri%2C%20false%2C%20true%29%3B%0A%09%09%09%7D%2C%0A%09%09%09this%0A%09%09%29%3B%0A%09%09if%28this.options.deleteAfterOpen%29%0A%09%09%09this.deleteAllBookmarks%28%29%3B%0A%09%7D%2C%0A%09setTabSession%3A%20function%28tab%2C%20ssData%2C%20uri%2C%20mergeHistory%2C%20disableForceLoad%2C%20_isPrivate%29%20%7B%0A%09%09var%20data%3B%0A%09%09var%20browser%20%3D%20tab.linkedBrowser%3B%0A%09%09if%28ssData%20%26amp%3B%26amp%3B%20%22JSON%22%20in%20window%29%20try%20%7B%0A%09%09%09//%20For%20better%20compatibility%20with%20Private%20Tab%20extension%0A%09%09%09let%20privateAttr%20%3D%20%22privateTab-isPrivate%22%3B%0A%09%09%09let%20isPrivate%20%3D%20_isPrivate%20%7C%7C%20false%3B%0A%09%09%09if%28_isPrivate%20%3D%3D%3D%20undefined%29%20try%20%7B%0A%09%09%09%09let%20contentWindow%20%3D%20%28browser.contentWindow%20%7C%7C%20browser.contentWindowAsCPOW%29%0A%09%09%09%09%09.QueryInterface%28Components.interfaces.nsIDOMWindow%29%3B%20//%20Ensure%20initialized%0A%09%09%09%09isPrivate%20%3D%20%22PrivateBrowsingUtils%22%20in%20window%0A%09%09%09%09%09%26amp%3B%26amp%3B%20PrivateBrowsingUtils.isWindowPrivate%28contentWindow%29%0A%09%09%09%09%09%7C%7C%20tab.hasAttribute%28privateAttr%29%3B%0A%09%09%09%7D%0A%09%09%09catch%28e2%29%20%7B%0A%09%09%09%09if%28String.indexOf%28e2%2C%20%22.QueryInterface%20is%20not%20a%20function%22%29%20%3D%3D%20-1%29%0A%09%09%09%09%09Components.utils.reportError%28e2%29%3B%0A%09%09%09%09//%20Looks%20like%20e10s%2C%20will%20wait%20for%20remote%20frame%20initialization%0A%09%09%09%09//%20Note%3A%20we%20can%27t%20unload%20frame%20script%20due%20to%20https%3A//bugzilla.mozilla.org/show_bug.cgi%3Fid%3D1051238%0A%09%09%09%09let%20data%20%3D%20%27%5C%0A%09%09%09%09%09var%20privacyContext%20%3D%20docShell.QueryInterface%28Components.interfaces.nsILoadContext%29%3B%5Cn%5C%0A%09%09%09%09%09var%20isPrivate%20%3D%20privacyContext.usePrivateBrowsing%20%7C%7C%20false%3B%5Cn%5C%0A%09%09%09%09%09sendAsyncMessage%28%22CB%3ASessionBookmarks%3AFrameReady%22%2C%20%7B%20isPrivate%3A%20isPrivate%20%7D%29%3B%27%3B%0A%09%09%09%09let%20feedback%20%3D%20function%28msg%29%20%7B%0A%09%09%09%09%09mm.removeMessageListener%28%22CB%3ASessionBookmarks%3AFrameReady%22%2C%20feedback%29%3B%0A%09%09%09%09%09var%20isPrivate%20%3D%20msg.data.isPrivate%3B%0A%09%09%09%09%09this.setTabSession%28tab%2C%20ssData%2C%20uri%2C%20mergeHistory%2C%20disableForceLoad%2C%20isPrivate%29%3B%0A%09%09%09%09%7D.bind%28this%29%3B%0A%09%09%09%09let%20mm%20%3D%20browser.messageManager%3B%0A%09%09%09%09mm.addMessageListener%28%22CB%3ASessionBookmarks%3AFrameReady%22%2C%20feedback%29%3B%0A%09%09%09%09mm.loadFrameScript%28%22data%3Aapplication/javascript%2C%22%20+%20encodeURIComponent%28data%29%2C%20false%29%3B%0A%09%09%09%09return%3B%0A%09%09%09%7D%0A%09%09%09data%20%3D%20JSON.parse%28ssData%29%3B%0A%09%09%09if%28isPrivate%29%20%7B%0A%09%09%09%09if%28%21data.attributes%29%0A%09%09%09%09%09data.attributes%20%3D%20%7B%7D%3B%0A%09%09%09%09data.attributes%5BprivateAttr%5D%20%3D%20%22true%22%3B%0A%09%09%09%7D%0A%09%09%09if%28mergeHistory%29%20%7B%0A%09%09%09%09let%20oldData%20%3D%20JSON.parse%28this.getTabState%28gBrowser.selectedTab%29%29%3B%0A%09%09%09%09let%20tabHistory%20%3D%20oldData.entries.slice%280%2C%20oldData.index%29%3B%0A%09%09%09%09if%28tabHistory%5BtabHistory.length%20-%201%5D.url%20%3D%3D%20%22about%3Ablank%22%29%0A%09%09%09%09%09tabHistory.pop%28%29%3B%0A%09%09%09%09if%28%21data.entries.length%29%20//%20We%20can%20get%20object%20here%0A%09%09%09%09%09data.entries%20%3D%20%5Bdata.entries%5D%3B%0A%09%09%09%09if%28tabHistory.length%29%20%7B%0A%09%09%09%09%09let%20docshellID%20%3D%20tabHistory%5B0%5D.docshellID%3B%0A%09%09%09%09%09data.entries.forEach%28function%28entry%29%20%7B%0A%09%09%09%09%09%09entry.docshellID%20%3D%20docshellID%3B%0A%09%09%09%09%09%7D%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09data.entries%20%3D%20tabHistory.concat%28data.entries%29%3B%0A%09%09%09%09data.index%20+%3D%20tabHistory.length%3B%0A%09%09%09%09if%28this.options.replaceCurrentTab%20%26amp%3B%26amp%3B%20tab.selected%29%20%7B%0A%09%09%09%09%09let%20blankTab%20%3D%20gBrowser.addTab%28%22about%3Ablank%22%2C%20%7B%20skipAnimation%3A%20true%20%7D%29%3B%0A%09%09%09%09%09blankTab.linkedBrowser.stop%28%29%3B%0A%09%09%09%09%09gBrowser.moveTabTo%28blankTab%2C%20gBrowser.tabContainer.selectedIndex%20+%201%29%3B%0A%09%09%09%09%09gBrowser.selectedTab%20%3D%20blankTab%3B%0A%09%09%09%09%09gBrowser.removeTab%28tab%2C%20%7B%20animate%3A%20false%20%7D%29%3B%0A%09%09%09%09%09tab%20%3D%20blankTab%3B%0A%09%09%09%09%09browser%20%3D%20tab.linkedBrowser%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09this.cleanupSessionData%28data%29%3B%20//%20Only%20for%20already%20saved%20unwanted%20data...%0A%09%09%09ssData%20%3D%20JSON.stringify%28data%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28this.errPrefix%20+%20%22setTabSession%3A%20can%27t%20parse%20session%20data%22%29%3B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%09%09function%20fallback%28%29%20%7B%0A%09%09%09uri%20%26amp%3B%26amp%3B%20browser.loadURI%28uri%29%3B%0A%09%09%7D%0A%09%09if%28%21ssData%29%20%7B%0A%09%09%09fallback%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09//%20Note%3A%20we%20always%20use%20progress%20listener%20to%20test%20%26lt%3Bxul%3Abrowser%26gt%3B%0A%09%09var%20progressListener%20%3D%20this.progressListener%3B%0A%09%09progressListener.enabled%20%3D%20this.options.reloadSessions%20%26amp%3B%26amp%3B%20%21this.ios.offline%3B%0A%09%09var%20stopTime%20%3D%20Date.now%28%29%20+%201e3%3B%0A%09%09var%20_this%20%3D%20this%3B%0A%09%09%28function%20trySetSession%28%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09browser.addProgressListener%28progressListener%29%3B%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%0A%09%09%09%09_info%28%22setTabSession%3A%20addProgressListener%28%29%20failed%2C%20error%3A%5Cn%22%20+%20e%29%3B%0A%09%09%09%09if%28Date.now%28%29%20%26lt%3B%20stopTime%29%0A%09%09%09%09%09setTimeout%28trySetSession%2C%205%29%3B%0A%09%09%09%09else%20%7B%0A%09%09%09%09%09Components.utils.reportError%28_this.errPrefix%20+%20%22setTabSession%3A%20addProgressListener%28%29%20failed%22%29%3B%0A%09%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%09%09fallback%28%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09return%3B%0A%09%09%09%7D%0A%09%09%09try%20%7B%0A%09%09%09%09var%20entriesCount%20%3D%20data%20%26amp%3B%26amp%3B%20data.entries%20%26amp%3B%26amp%3B%20data.entries.length%3B%0A%09%09%09%09if%28entriesCount%29%20%7B%0A%09%09%09%09%09var%20sh%20%3D%20browser.sessionHistory%0A%09%09%09%09%09%09.QueryInterface%28Components.interfaces.nsISHistory%29%3B%0A%09%09%09%09%09var%20maxLength%20%3D%20sh.maxLength%3B%0A%09%09%09%09%09if%28entriesCount%20%26gt%3B%20maxLength%29%20%7B%0A%09%09%09%09%09%09_log%28%22Override%20nsISHistory.maxLength%3A%20%22%20+%20maxLength%20+%20%22%20-%26gt%3B%20%22%20+%20entriesCount%29%3B%0A%09%09%09%09%09%09sh.maxLength%20%3D%20entriesCount%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%09_this.ss.setTabState%28tab%2C%20ssData%29%3B%0A%09%09%09%09if%28%0A%09%09%09%09%09%21disableForceLoad%0A%09%09%09%09%09%26amp%3B%26amp%3B%20%21tab.selected%20//%20Selected%20tab%20will%20be%20loaded%20automatically%0A%09%09%09%09%09%26amp%3B%26amp%3B%20%28%0A%09%09%09%09%09%09tab.getAttribute%28%22pending%22%29%20%3D%3D%20%22true%22%20//%20Gecko%20%26gt%3B%3D%209.0%0A%09%09%09%09%09%09%7C%7C%20%28browser.contentDocument%20%7C%7C%20browser.contentDocumentAsCPOW%29.readyState%20%3D%3D%20%22uninitialized%22%0A%09%09%09%09%09%09//%20%7C%7C%20browser.__SS_restoreState%20%3D%3D%201%0A%09%09%09%09%09%29%0A%09%09%09%09%29%20%7B%0A%09%09%09%09%09if%28_this.platformVersion%20%26gt%3B%3D%2041%29%20%7B%0A%09%09%09%09%09%09//%20Workaround%20to%20correctly%20restore%20pending%20tab%0A%09%09%09%09%09%09//%20See%20https%3A//github.com/Infocatcher/Custom_Buttons/issues/39%0A%09%09%09%09%09%09let%20selTab%20%3D%20gBrowser.selectedTab%3B%0A%09%09%09%09%09%09gBrowser.selectedTab%20%3D%20tab%3B%0A%09%09%09%09%09%09gBrowser.selectedTab%20%3D%20selTab%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09else%20%7B%0A%09%09%09%09%09%09browser.reload%28%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09//%20Show%20%22Connecting%u2026%22%20instead%20of%20%22New%20Tab%22%0A%09%09%09%09%09//%20%28disable%20browser.sessionstore.restore_on_demand%20to%20see%20this%20bug%29%0A%09%09%09%09%09gBrowser.setTabTitleLoading%20%26amp%3B%26amp%3B%20gBrowser.setTabTitleLoading%28tab%29%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%0A%09%09%09%09Components.utils.reportError%28_this.errPrefix%20+%20%22setTabSession%3A%20setTabState%28%29%20failed%22%29%3B%0A%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%09fallback%28%29%3B%0A%09%09%09%7D%0A%09%09%09finally%20%7B%0A%09%09%09%09if%28entriesCount%20%26amp%3B%26amp%3B%20sh.maxLength%20%21%3D%20maxLength%29%20setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09_log%28%22Restore%20nsISHistory.maxLength%3A%20%22%20+%20sh.maxLength%20+%20%22%20-%26gt%3B%20%22%20+%20maxLength%29%3B%0A%09%09%09%09%09sh.maxLength%20%3D%20maxLength%3B%0A%09%09%09%09%7D%2C%20100%29%3B%0A%09%09%09%7D%0A%09%09%7D%29%28%29%3B%0A%09%7D%2C%0A%09progressListener%3A%20%7B%20//%20Based%20on%20code%20of%20Session%20Manager%200.7.5%0A%09%09enabled%3A%20true%2C%0A%09%09QueryInterface%3A%20function%28aIID%29%20%7B%0A%09%09%09if%28%0A%09%09%09%09aIID.equals%28Components.interfaces.nsIWebProgressListener%29%0A%09%09%09%09%7C%7C%20aIID.equals%28Components.interfaces.nsISupportsWeakReference%29%0A%09%09%09%09%7C%7C%20aIID.equals%28Components.interfaces.nsISupports%29%0A%09%09%09%29%0A%09%09%09%09return%20this%3B%0A%09%09%09throw%20Components.results.NS_NOINTERFACE%3B%0A%09%09%7D%2C%0A%09%09onStateChange%3A%20function%28aWebProgress%2C%20aRequest%2C%20aFlag%2C%20aStatus%29%20%7B%0A%09%09%09if%28%21this.enabled%29%0A%09%09%09%09return%3B%0A%09%09%09try%20%7B%0A%09%09%09%09if%28aRequest.name%20%3D%3D%20%22about%3Ablank%22%29%0A%09%09%09%09%09return%3B%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%20//%20view-source%3A%20protocol%0A%09%09%09%09if%28e.name%20%21%3D%20%22NS_ERROR_NOT_IMPLEMENTED%22%29%0A%09%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%7D%0A%09%09%09var%20wpl%20%3D%20Components.interfaces.nsIWebProgressListener%3B%0A%09%09%09if%28aFlag%20%26amp%3B%20wpl.STATE_START%29%20//%20Force%20load%20to%20bypass%20cache%0A%09%09%09%09aRequest.loadFlags%20%7C%3D%20aRequest.LOAD_BYPASS_CACHE%3B%0A%09%09%09else%20if%28aFlag%20%26amp%3B%20wpl.STATE_STOP%20%26amp%3B%26amp%3B%20aFlag%20%26amp%3B%20wpl.STATE_IS_NETWORK%29%20%7B%0A%09%09%09%09let%20ceh%20%3D%20aWebProgress.chromeEventHandler%3B%0A%09%09%09%09ceh.removeProgressListener%20%26amp%3B%26amp%3B%20ceh.removeProgressListener%28this%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09onLocationChange%3A%20function%28aProgress%2C%20aRequest%2C%20aURI%29%20%7B%7D%2C%0A%09%09onProgressChange%3A%20function%28aWebProgress%2C%20aRequest%2C%20curSelf%2C%20maxSelf%2C%20curTot%2C%20maxTot%29%20%7B%7D%2C%0A%09%09onStatusChange%3A%20%20%20function%28aWebProgress%2C%20aRequest%2C%20aStatus%2C%20aMessage%29%20%7B%7D%2C%0A%09%09onSecurityChange%3A%20function%28aWebProgress%2C%20aRequest%2C%20aState%29%20%7B%7D%0A%09%7D%2C%0A%09deleteBookmark%3A%20function%28mi%29%20%7B%0A%09%09this.addUndo%28%7B%20action%3A%20%22add%22%2C%20mi%3A%20mi%2C%20pn%3A%20mi.parentNode%2C%20ns%3A%20mi.nextSibling%20%7D%29%3B%0A%09%09mi.parentNode.removeChild%28mi%29%3B%0A%09%09this.closePropertiesWindow%28mi%29%3B%0A%09%09this.onBookmarksChanged%28%29%3B%0A%09%09this.scheduleSave%28%29%3B%0A%09%7D%2C%0A%09deleteAllBookmarks%3A%20function%28%29%20%7B%0A%09%09var%20undo%20%3D%20%5B%5D%3B%0A%09%09Array.slice%28this.mp.getElementsByAttribute%28%22cb_bookmarkItem%22%2C%20%22*%22%29%29.forEach%28function%28mi%29%20%7B%0A%09%09%09undo.push%28%7B%20action%3A%20%22add%22%2C%20mi%3A%20mi%2C%20pn%3A%20mi.parentNode%2C%20ns%3A%20mi.nextSibling%20%7D%29%3B%0A%09%09%09mi.parentNode.removeChild%28mi%29%3B%0A%09%09%7D%29%3B%0A%09%09this.closeAllPropertiesWindows%28%29%3B%0A%09%09this.addUndo%28%7B%20action%3A%20%22adds%22%2C%20actions%3A%20undo.reverse%28%29%20%7D%29%3B%0A%09%09this.save%28%29%3B%0A%09%09this.onBookmarksChanged%28false%29%3B%0A%09%7D%2C%0A%09_undoStorage%3A%20%5B%5D%2C%0A%09_undoPos%3A%20undefined%2C%0A%09addUndo%3A%20function%28o%29%20%7B%0A%09%09var%20us%20%3D%20this._undoStorage%3B%0A%09%09if%28this._undoPos%20%21%3D%20undefined%29%20%7B%0A%09%09%09us.length%20%3D%20this._undoPos%20+%201%3B%0A%09%09%09this._undoPos%20%3D%20undefined%3B%0A%09%09%7D%0A%09%09us.push%28o%29%3B%0A%09%09if%28us.length%20%26gt%3B%20this.options.undoLimit%29%0A%09%09%09us.shift%28%29%3B%0A%09%7D%2C%0A%09undo%3A%20function%28check%29%20%7B%0A%09%09return%20this.undoRedo%28-1%2C%20check%29%3B%0A%09%7D%2C%0A%09redo%3A%20function%28check%29%20%7B%0A%09%09return%20this.undoRedo%281%2C%20check%29%3B%0A%09%7D%2C%0A%09undoRedo%3A%20function%28action%2C%20check%29%20%7B%0A%09%09var%20us%20%3D%20this._undoStorage%3B%0A%09%09if%28%21us.length%29%0A%09%09%09return%20false%3B%0A%09%09var%20redo%20%3D%20action%20%26gt%3B%200%3B%0A%09%09var%20pos%3B%0A%09%09if%28this._undoPos%20%3D%3D%20undefined%29%20%7B%0A%09%09%09if%28redo%29%0A%09%09%09%09return%20false%3B%0A%09%09%09pos%20%3D%20us.length%20-%201%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09if%28redo%29%0A%09%09%09%09pos%20%3D%20this._undoPos%20+%201%3B%0A%09%09%09else%0A%09%09%09%09pos%20%3D%20this._undoPos%3B%0A%09%09%7D%0A%09%09if%28pos%20%26lt%3B%200%20%7C%7C%20pos%20%26gt%3B%3D%20us.length%29%0A%09%09%09return%20false%3B%0A%09%09if%28check%29%0A%09%09%09return%20true%3B%0A%09%09this.undoRedoAction%28us%5Bpos%5D%2C%20redo%29%3B%0A%09%09this._undoPos%20%3D%20redo%20%3F%20pos%20%3A%20pos%20-%201%3B%0A%09%09this.onBookmarksChanged%28%29%3B%0A%09%09this.scheduleSave%28%29%3B%0A%09%09return%20true%3B%0A%09%7D%2C%0A%09undoRedoAction%3A%20function%28o%2C%20invert%29%20%7B%0A%09%09var%20action%20%3D%20o.action%3B%0A%09%09if%28invert%29%20%7B%0A%09%09%09if%28action%20%3D%3D%20%22remove%22%29%0A%09%09%09%09action%20%3D%20%22add%22%3B%0A%09%09%09else%20if%28action%20%3D%3D%20%22add%22%29%0A%09%09%09%09action%20%3D%20%22remove%22%3B%0A%09%09%7D%0A%09%09try%20%7B%0A%09%09%09if%28action%20%3D%3D%20%22remove%22%29%20%7B%0A%09%09%09%09o.pn.removeChild%28o.mi%29%3B%0A%09%09%09%09this.closePropertiesWindow%28o.mi%29%3B%0A%09%09%09%7D%0A%09%09%09else%20if%28action%20%3D%3D%20%22add%22%29%0A%09%09%09%09o.pn.insertBefore%28o.mi%2C%20o.ns%29%3B%0A%09%09%09else%20if%28action%20%3D%3D%20%22attrs%22%29%20%7B%0A%09%09%09%09let%20mi%20%3D%20o.mi%3B%0A%09%09%09%09Array.slice%28mi.attributes%29.forEach%28function%28attr%29%20%7B%0A%09%09%09%09%09mi.removeAttributeNS%28attr.namespaceURI%2C%20attr.name%29%3B%0A%09%09%09%09%7D%29%3B%0A%09%09%09%09%28invert%20%3F%20o.newAttrs%20%3A%20o.oldAttrs%29.forEach%28function%28attr%29%20%7B%0A%09%09%09%09%09mi.setAttributeNS%28attr.namespaceURI%2C%20attr.name%2C%20attr.value%29%3B%0A%09%09%09%09%7D%29%3B%0A%09%09%09%7D%0A%09%09%09else%20if%28action%20%3D%3D%20%22move%22%29%0A%09%09%09%09o.mi.parentNode.insertBefore%28o.mi%2C%20invert%20%3F%20o.newPos%20%3A%20o.oldPos%29%3B%0A%09%09%09else%20if%28%0A%09%09%09%09action%20%3D%3D%20%22adds%22%0A%09%09%09%09%7C%7C%20action%20%3D%3D%20%22moves%22%0A%09%09%09%09%7C%7C%20action%20%3D%3D%20%22removes%22%0A%09%09%09%29%20%7B%0A%09%09%09%09let%20actions%20%3D%20o.actions%3B%0A%09%09%09%09if%28invert%29%0A%09%09%09%09%09actions%20%3D%20o.actions.slice%28%29.reverse%28%29%3B%0A%09%09%09%09actions.forEach%28function%28o%29%20%7B%0A%09%09%09%09%09this.undoRedoAction%28o%2C%20invert%29%3B%0A%09%09%09%09%7D%2C%20this%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28%0A%09%09%09%09this.errPrefix%20+%20%22undoRedoAction%20failed%22%0A%09%09%09%09+%20%22%5CnData%3A%20%22%20+%20uneval%28o%29%20+%20%22%5CnIndert%3A%20%22%20+%20invert%0A%09%09%09%29%3B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09getAttributes%3A%20function%28node%29%20%7B%0A%09%09return%20Array.slice%28node.attributes%29.map%28function%28attr%29%20%7B%0A%09%09%09return%20%7B%20//%20Simple%20way%20to%20get%20immutable%20copy%0A%09%09%09%09namespaceURI%3A%20attr.namespaceURI%2C%0A%09%09%09%09name%3A%20%20%20%20%20%20%20%20%20attr.name%2C%0A%09%09%09%09value%3A%20%20%20%20%20%20%20%20attr.value%0A%09%09%09%7D%3B%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09properties%3A%20function%28mi%29%20%7B%0A%09%09var%20win%20%3D%20this.getPropertiesWindow%28mi%29%3B%0A%09%09if%28win%29%20%7B%0A%09%09%09win.focus%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09//%20See%20chrome%3A//browser/content/places/editBookmarkOverlay.xul%0A%09%09var%20bookmarksDTD%20%3D%20this.appName%20%3D%3D%20%22SeaMonkey%22%0A%09%09%09%3F%20%22chrome%3A//communicator/locale/bookmarks/editBookmarkOverlay.dtd%22%0A%09%09%09%3A%20%22chrome%3A//browser/locale/places/editBookmarkOverlay.dtd%22%3B%0A%09%09var%20dialog%20%3D%20%27%5C%0A%09%09%09%26lt%3B%3Fxml%20version%3D%221.0%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%20type%3D%22text/css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%21DOCTYPE%20dialog%20SYSTEM%20%22%27%20+%20bookmarksDTD%20+%20%27%22%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3Bdialog%20xmlns%3D%22%27%20+%20xulns%20+%20%27%22%5Cn%5C%0A%09%09%09%09id%3D%22%27%20+%20this.button.id%20+%20%22-propertiesDialog%22%20+%20%27%22%5Cn%5C%0A%09%09%09%09windowtype%3D%22%27%20+%20this.button.id%20+%20%22%3ApropertiesDialog%22%20+%20%27%22%5Cn%5C%0A%09%09%09%09title%3D%22%27%20+%20_localize%28%22Session%20Bookmark%20Properties%22%29%20+%20%27%22%5Cn%5C%0A%09%09%09%09buttons%3D%22accept%2Ccancel%22%5Cn%5C%0A%09%09%09%09ondialogaccept%3D%22return%20dialogCallback%28%29%3B%22%5Cn%5C%0A%09%09%09%09width%3D%22460%22%5Cn%5C%0A%09%09%09%09persist%3D%22screenX%20screenY%20width%20height%22%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3Bgrid%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3Bcolumns%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3Bcolumn%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3Bcolumn%20flex%3D%221%22%20style%3D%22min-width%3A%20160px%3B%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3B/columns%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3Brows%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%26lt%3Blabel%20control%3D%22label%22%5Cn%5C%0A%09%09%09%09%09%09%09%09value%3D%22%26amp%3BeditBookmarkOverlay.name.label%3B%22%5Cn%5C%0A%09%09%09%09%09%09%09%09accesskey%3D%22%26amp%3BeditBookmarkOverlay.name.accesskey%3B%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%26lt%3Btextbox%20id%3D%22label%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3B/row%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%26lt%3Bbox%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%09%26lt%3Blabel%20control%3D%22uri%22%5Cn%5C%0A%09%09%09%09%09%09%09%09%09value%3D%22%26amp%3BeditBookmarkOverlay.location.label%3B%22%5Cn%5C%0A%09%09%09%09%09%09%09%09%09accesskey%3D%22%26amp%3BeditBookmarkOverlay.location.accesskey%3B%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%26lt%3B/box%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%26lt%3Btextbox%20id%3D%22uri%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3B/row%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%26lt%3Blabel%20control%3D%22icon%22%5Cn%5C%0A%09%09%09%09%09%09%09%09value%3D%22%27%20+%20_localize%28%22Icon%3A%22%29%20+%20%27%22%5Cn%5C%0A%09%09%09%09%09%09%09%09accesskey%3D%22%27%20+%20_localize%28%22I%22%2C%20%22iconKey%22%29%20+%20%27%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%09%26lt%3Btextbox%20id%3D%22icon%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3B/row%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3B/rows%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3B/grid%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3Bkeyset%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3Bkey%20id%3D%22save%22%20key%3D%22s%22%20modifiers%3D%22control%22%20oncommand%3D%22dialogCallback%28%29%3B%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3B/keyset%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3Bscript%20type%3D%22application/javascript%22%26gt%3B%26lt%3B%21%5BCDATA%5B%5Cn%5C%0A%09%09%09%09var%20%5Bmi%2C%20bookmarks%2C%20_localize%5D%20%3D%20window.arguments%3B%5Cn%5C%0A%09%09%09%09window.onload%20%3D%20function%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%5C//%20Don%5C%27t%20use%20saved%20height%5Cn%5C%0A%09%09%09%09%09document.documentElement.removeAttribute%28%22height%22%29%3B%5Cn%5C%0A%09%09%09%09%09window.sizeToContent%28%29%3B%5Cn%5C%0A%09%09%09%09%7D%3B%5Cn%5C%0A%09%09%09%09function%20init%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%24%28%22label%22%29.value%20%3D%20mi.getAttribute%28%22label%22%29%3B%5Cn%5C%0A%09%09%09%09%09%24%28%22uri%22%29.value%20%3D%20mi.getAttribute%28%22cb_uri%22%29%3B%5Cn%5C%0A%09%09%09%09%09%24%28%22icon%22%29.value%20%3D%20bookmarks.rawIcon%28mi.getAttribute%28%22image%22%29%29%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20%24%28id%29%20%7B%5Cn%5C%0A%09%09%09%09%09return%20document.getElementById%28id%29%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20dialogCallback%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09var%20label%20%3D%20%24%28%22label%22%29.value%3B%5Cn%5C%0A%09%09%09%09%09var%20uri%20%20%20%3D%20%24%28%22uri%22%29.value%3B%5Cn%5C%0A%09%09%09%09%09var%20icon%20%20%3D%20%24%28%22icon%22%29.value%3B%5Cn%5C%0A%09%09%09%09%09var%20oldUri%20%3D%20mi.getAttribute%28%22cb_uri%22%29%3B%5Cn%5C%0A%09%09%09%09%09if%28%5Cn%5C%0A%09%09%09%09%09%09uri%20%3D%3D%20oldUri%5Cn%5C%0A%09%09%09%09%09%09%26amp%3B%26amp%3B%20label%20%3D%3D%20mi.getAttribute%28%22label%22%29%5Cn%5C%0A%09%09%09%09%09%09%26amp%3B%26amp%3B%20icon%20%3D%3D%20bookmarks.rawIcon%28mi.getAttribute%28%22image%22%29%29%5Cn%5C%0A%09%09%09%09%09%29%5Cn%5C%0A%09%09%09%09%09%09return%20true%3B%5Cn%5C%0A%09%09%09%09%09var%20oldAttrs%20%3D%20bookmarks.getAttributes%28mi%29%3B%5Cn%5C%0A%09%09%09%09%09mi.setAttribute%28%22label%22%2C%20label%29%3B%5Cn%5C%0A%09%09%09%09%09if%28uri%20%21%3D%20oldUri%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09if%28%5Cn%5C%0A%09%09%09%09%09%09%09mi.getAttribute%28%22cb_ssData%22%29%5Cn%5C%0A%09%09%09%09%09%09%09%26amp%3B%26amp%3B%20%21Components.classes%5B%[email protected]/embedcomp/prompt-service%3B1%22%5D%5Cn%5C%0A%09%09%09%09%09%09%09%09.getService%28Components.interfaces.nsIPromptService%29%5Cn%5C%0A%09%09%09%09%09%09%09%09.confirm%28%5Cn%5C%0A%09%09%09%09%09%09%09%09%09window%2C%5Cn%5C%0A%09%09%09%09%09%09%09%09%09_localize%28%22Warning%21%22%29%2C%5Cn%5C%0A%09%09%09%09%09%09%09%09%09_localize%28%22After%20location%20change%20all%20session%20data%20will%20be%20lost%21%22%29%5Cn%5C%0A%09%09%09%09%09%09%09%09%29%5Cn%5C%0A%09%09%09%09%09%09%29%5Cn%5C%0A%09%09%09%09%09%09%09return%20false%3B%5Cn%5C%0A%09%09%09%09%09%09mi.setAttribute%28%22cb_uri%22%2C%20uri%29%3B%5Cn%5C%0A%09%09%09%09%09%09mi.setAttribute%28%22tooltiptext%22%2C%20uri%29%3B%5Cn%5C%0A%09%09%09%09%09%09mi.setAttribute%28%22cb_ssData%22%2C%20%22%22%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09mi.setAttribute%28%22image%22%2C%20bookmarks.cachedIcon%28icon%29%29%3B%5Cn%5C%0A%09%09%09%09%09var%20newAttrs%20%3D%20bookmarks.getAttributes%28mi%29%3B%5Cn%5C%0A%09%09%09%09%09bookmarks.addUndo%28%7B%20action%3A%20%22attrs%22%2C%20mi%3A%20mi%2C%20oldAttrs%3A%20oldAttrs%2C%20newAttrs%3A%20newAttrs%20%7D%29%3B%5Cn%5C%0A%09%09%09%09%09bookmarks.save%28%29%3B%5Cn%5C%0A%09%09%09%09%09return%20true%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09init%28%29%3B%5Cn%5C%0A%09%09%09%09%5D%5D%26gt%3B%26lt%3B/script%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B/dialog%26gt%3B%27%3B%0A%0A%09%09window.openDialog%28%0A%09%09%09%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20encodeURIComponent%28dialog.replace%28/%5E%5Cs+/%2C%20%22%22%29%29%2C%0A%09%09%09%22_blank%22%2C%0A%09%09%09%22chrome%2Call%2Cresizable%2Ccenterscreen%2Cdependent%22%2C%0A%09%09%09mi%2C%20this%2C%20_localize%0A%09%09%29%3B%0A%09%7D%2C%0A%09get%20propertiesWindows%28%29%20%7B%0A%09%09return%20this.wm.getEnumerator%28this.button.id%20+%20%22%3ApropertiesDialog%22%29%3B%0A%09%7D%2C%0A%09getPropertiesWindow%3A%20function%28mi%29%20%7B%0A%09%09var%20ws%20%3D%20this.propertiesWindows%3B%0A%09%09while%28ws.hasMoreElements%28%29%29%20%7B%0A%09%09%09let%20w%20%3D%20ws.getNext%28%29%3B%0A%09%09%09if%28w.mi%20%3D%3D%20mi%29%0A%09%09%09%09return%20w%3B%0A%09%09%7D%0A%09%09return%20null%3B%0A%09%7D%2C%0A%09closePropertiesWindow%3A%20function%28mi%29%20%7B%0A%09%09var%20w%20%3D%20this.getPropertiesWindow%28mi%29%3B%0A%09%09w%20%26amp%3B%26amp%3B%20w.close%28%29%3B%0A%09%7D%2C%0A%09closePropertiesWindows%3A%20function%28%29%20%7B%0A%09%09var%20mis%20%3D%20Array.slice%28this.mp.getElementsByAttribute%28%22cb_uri%22%2C%20%22*%22%29%29%3B%0A%09%09var%20ws%20%3D%20this.propertiesWindows%3B%0A%09%09while%28ws.hasMoreElements%28%29%29%20%7B%0A%09%09%09let%20w%20%3D%20ws.getNext%28%29%3B%0A%09%09%09if%28mis.indexOf%28w.mi%29%20%21%3D%20-1%29%0A%09%09%09%09w.close%28%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09closeAllPropertiesWindows%3A%20function%28%29%20%7B%0A%09%09var%20ws%20%3D%20this.propertiesWindows%3B%0A%09%09while%28ws.hasMoreElements%28%29%29%0A%09%09%09ws.getNext%28%29.close%28%29%3B%0A%09%7D%2C%0A%09onBookmarksChanged%3A%20function%28hasBookmarks%29%20%7B%0A%09%09if%28hasBookmarks%20%3D%3D%3D%20undefined%29%0A%09%09%09hasBookmarks%20%3D%20this.mp.getElementsByAttribute%28%22cb_uri%22%2C%20%22*%22%29.length%20%26gt%3B%200%3B%0A%09%09this.button.disabled%20%3D%0A%09%09%09this.%24%28this.sepId%29.hidden%20%3D%0A%09%09%09this.%24%28this.openAllId%29.hidden%20%3D%0A%09%09%09this.%24%28this.deleteAllId%29.disabled%20%3D%0A%09%09%09this.%24%28this.sortId%29.disabled%20%3D%20%21hasBookmarks%3B%0A%09%09if%28%21hasBookmarks%29%0A%09%09%09this.mp.hidePopup%28%29%3B%0A%09%09this.noBookmarks%28%21hasBookmarks%29%3B%0A%09%7D%2C%0A%09noBookmarks%3A%20function%28isEmpty%29%20%7B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09var%20key%20%3D%20%22_cbSessionBookmarks%23%22%20+%20this.btnNum%20+%20%22_noBookmarks%22%3B%0A%09%09var%20attr%20%3D%20%22cb_sessionBookmarks_noBookmarks%22%3B%0A%09%09//%20Note%3A%20we%20use%20global%20window%5Bkey%5D%20to%20save%20state%2C%20if%20button%20was%20edited%0A%09%09//%20Also%20persist%28%29%20may%20save%20empty%20attribute%2C%20so%20we%20can%27t%20use%20hasAttribute%28%29%20check%0A%09%09if%28isEmpty%20%3D%3D%3D%20undefined%29%0A%09%09%09return%20key%20in%20window%20%7C%7C%20btn.getAttribute%28attr%29%20%3D%3D%20%22true%22%3B%0A%09%09_log%28%22noBookmarks%28%22%20+%20isEmpty%20+%20%22%29%22%29%3B%0A%09%09if%28isEmpty%29%20%7B%0A%09%09%09window%5Bkey%5D%20%3D%20true%3B%0A%09%09%09btn.setAttribute%28attr%2C%20%22true%22%29%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09delete%20window%5Bkey%5D%3B%0A%09%09%09btn.removeAttribute%28attr%29%3B%0A%09%09%7D%0A%09%09document.persist%28btn.id%2C%20attr%29%3B%0A%09%09return%20isEmpty%3B%0A%09%7D%2C%0A%09initContextMenu%3A%20function%28mi%29%20%7B%0A%09%09var%20isBtn%20%3D%20mi%20%3D%3D%20this.button%3B%0A%09%09var%20isEditable%20%3D%20mi.getAttribute%28%22cb_bookmarkItem%22%29%20%3D%3D%20%22true%22%3B%0A%09%09var%20isBookmark%20%3D%20isEditable%20%26amp%3B%26amp%3B%20mi.hasAttribute%28%22cb_uri%22%29%3B%0A%09%09this.%24%28this.deleteId%29.hidden%20%3D%20%21isEditable%3B%0A%09%09this.%24%28this.updateSepId%29.hidden%20%3D%20this.%24%28this.updateId%29.hidden%20%3D%20this.%24%28this.updateURIId%29.hidden%20%3D%20%21isBookmark%3B%0A%09%09this.%24%28this.addSepId%29.hidden%20%3D%20isBtn%3B%0A%09%09this.%24%28this.undoId%29.disabled%20%3D%20%21this.undo%28true%29%3B%0A%09%09this.%24%28this.redoId%29.disabled%20%3D%20%21this.redo%28true%29%3B%0A%09%09this.%24%28this.propsSepId%29.hidden%20%3D%20this.%24%28this.propsId%29.hidden%20%3D%20%21isBookmark%3B%0A%09%09this.%24%28this.btnMenuSepId%29.hidden%20%3D%20this.%24%28this.btnMenuId%29.hidden%20%3D%20%21isBtn%3B%0A%09%09return%20true%3B%0A%09%7D%2C%0A%09dragDataNS%3A%20%22text/x-moz-custombuttons-sessionbookmarks-%22%2C%0A%09_closeMenuTimeout%3A%200%2C%0A%09_openMenuTimeout%3A%200%2C%0A%09_openMenuDelay%3A%20350%2C%0A%09_closeMenuDelay%3A%20350%2C%0A%09_sourceNode%3A%20null%2C%0A%09get%20_btnId%28%29%20%7B%0A%09%09delete%20this._btnId%3B%0A%09%09return%20this._btnId%20%3D%20Math.random%28%29.toFixed%2814%29.substr%282%29%20+%20%22-%22%20+%20this.btnNum%3B%0A%09%7D%2C%0A%09handleDragStart%3A%20function%28e%29%20%7B%0A%09%09var%20mi%20%3D%20e.target%3B%0A%09%09if%28%21mi.hasAttribute%28%22cb_bookmarkItem%22%29%29%0A%09%09%09return%3B%0A%09%09var%20dragNS%20%3D%20this.dragDataNS%3B%0A%09%09var%20dt%20%3D%20e.dataTransfer%3B%0A%09%09dt.mozSetDataAt%28dragNS%20+%20%22buttonId%22%2C%20this._btnId%2C%200%29%3B%0A%09%09if%28mi.localName%20%3D%3D%20%22menuseparator%22%29%20%7B%0A%09%09%09//dt.mozSetDataAt%28%22text/unicode%22%2C%20%20%20%20%20%22--------------------%22%2C%200%29%3B%0A%09%09%09//dt.mozSetDataAt%28%22text/html%22%2C%20%20%20%20%20%20%20%20%22%26lt%3Bhr%26gt%3B%22%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28dragNS%20+%20%22tagname%22%2C%20%22menuseparator%22%2C%20%20%20%20%20%20%20%200%29%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09let%20label%20%20%3D%20mi.getAttribute%28%22label%22%29%3B%0A%09%09%09let%20uri%20%20%20%20%3D%20mi.getAttribute%28%22cb_uri%22%29%3B%0A%09%09%09let%20icon%20%20%20%3D%20mi.getAttribute%28%22image%22%29%3B%0A%09%09%09let%20ssData%20%3D%20mi.getAttribute%28%22cb_ssData%22%29%3B%0A%0A%09%09%09let%20link%20%3D%20%27%26lt%3Ba%20href%3D%22%27%20+%20this.encodeHTML%28uri%29%20+%20%27%22%26gt%3B%27%20+%20this.encodeHTML%28label%29%20+%20%27%26lt%3B/a%26gt%3B%27%3B%0A%09%09%09dt.mozSetDataAt%28%22text/unicode%22%2C%20%20%20%20%20%20%20%20uri%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28%22text/html%22%2C%20%20%20%20%20%20%20%20%20%20%20link%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28%22text/x-moz-url%22%2C%20%20%20%20%20%20uri%20+%20%22%5Cn%22%20+%20label%2C%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28%22text/x-moz-url-data%22%2C%20uri%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28%22text/x-moz-url-desc%22%2C%20label%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3B%0A%0A%09%09%09dt.mozSetDataAt%28dragNS%20+%20%22tagname%22%2C%20%22menuitem%22%2C%200%29%3B%0A%09%09%09dt.mozSetDataAt%28dragNS%20+%20%22label%22%2C%20%20%20label%2C%20%20%20%20%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28dragNS%20+%20%22uri%22%2C%20%20%20%20%20uri%2C%20%20%20%20%20%20%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28dragNS%20+%20%22icon%22%2C%20%20%20%20icon%2C%20%20%20%20%20%20%200%29%3B%0A%09%09%09dt.mozSetDataAt%28dragNS%20+%20%22ssData%22%2C%20%20ssData%2C%20%20%20%20%200%29%3B%0A%09%09%7D%0A%09%09dt.effectAllowed%20%3D%20%22all%22%3B%0A%09%09dt.addElement%28mi%29%3B%0A%09%09if%28%21%28%22mozSourceNode%22%20in%20dt%29%29%0A%09%09%09this._sourceNode%20%3D%20mi%3B%0A%09%09e.stopPropagation%28%29%3B%0A%09%7D%2C%0A%09handleDragOver%3A%20function%28e%29%20%7B%0A%09%09var%20dt%20%3D%20e.dataTransfer%3B%0A%09%09var%20types%20%3D%20dt.types%3B%0A%09%09if%28%0A%09%09%09%21types.contains%28%22application/x-moz-tabbrowser-tab%22%29%0A%09%09%09%26amp%3B%26amp%3B%20%21types.contains%28this.dragDataNS%20+%20%22tagname%22%29%0A%09%09%09%26amp%3B%26amp%3B%20%28%20//%20Firefox%208+%20%28https%3A//bugzilla.mozilla.org/show_bug.cgi%3Fid%3D674732%29%0A%09%09%09%09%21%28%0A%09%09%09%09%09types.contains%28%22text/x-moz-url%22%29%0A%09%09%09%09%09%7C%7C%20types.contains%28%22text/x-moz-text-internal%22%29%20//%20Firefox%2050+%0A%09%09%09%09%29%0A%09%09%09%09%7C%7C%20%21%28%22mozSourceNode%22%20in%20dt%29%0A%09%09%09%09%7C%7C%20%21this.getTabFromChild%28dt.mozSourceNode%29%0A%09%09%09%29%0A%09%09%29%0A%09%09%09return%20null%3B%0A%09%09clearTimeout%28this._closeMenuTimeout%29%3B%0A%09%09if%28e.target%20%3D%3D%20this.button%20%26amp%3B%26amp%3B%20%21this.button.open%29%20%7B%0A%09%09%09this._openMenuTimeout%20%3D%20setTimeout%28function%28btn%29%20%7B%0A%09%09%09%09btn.open%20%3D%20true%3B%0A%09%09%09%7D%2C%20this._openMenuDelay%2C%20this.button%29%3B%0A%09%09%7D%0A%09%09var%20insPoint%20%3D%20this.getInsertionPoint%28e%29%3B%0A%09%09if%28insPoint%20%26amp%3B%26amp%3B%20insPoint.getAttributeNS%28%22urn%3Acustombuttons%3Anamespace%22%2C%20%22cb_dragOver%22%29%20%21%3D%20%22after%22%29%20%7B%0A%09%09%09this.markInsertionPoint%28true%29%3B%0A%09%09%09this.clearHighlight%28%29%3B%0A%09%09%09if%28insPoint.previousSibling%29%0A%09%09%09%09insPoint.previousSibling.setAttributeNS%28%22urn%3Acustombuttons%3Anamespace%22%2C%20%22cb_dragOver%22%2C%20%22before%22%29%3B%0A%09%09%09insPoint.setAttributeNS%28%22urn%3Acustombuttons%3Anamespace%22%2C%20%22cb_dragOver%22%2C%20%22after%22%29%3B%0A%09%09%7D%0A%09%09e.preventDefault%28%29%3B%0A%09%09e.stopPropagation%28%29%3B%0A%09%09return%20dt.effectAllowed%20%3D%20dt.dropEffect%20%3D%20%22link%22%3B%0A%09%7D%2C%0A%09handleDragExit%3A%20function%28e%29%20%7B%0A%09%09clearTimeout%28this._openMenuTimeout%29%3B%0A%09%09this._closeMenuTimeout%20%3D%20setTimeout%28this.bind%28function%28%29%20%7B%0A%09%09%09this.button.open%20%3D%20false%3B%0A%09%09%09this._sourceNode%20%3D%20null%3B%0A%09%09%09//this.markInsertionPoint%28false%29%3B%0A%09%09%09this.clearHighlight%28%29%3B%0A%09%09%7D%2C%20this%29%2C%20this._closeMenuDelay%29%3B%0A%09%7D%2C%0A%09handleDrop%3A%20function%28e%29%20%7B%0A%09%09this.markInsertionPoint%28false%29%3B%0A%09%09this.clearHighlight%28%29%3B%0A%09%09var%20dt%20%3D%20e.dataTransfer%3B%0A%09%09var%20types%20%3D%20dt.types%3B%0A%09%09//var%20uri%20%3D%20dt.mozGetDataAt%28%22text/x-moz-text-internal%22%2C%200%29%3B%0A%09%09var%20tab%3B%0A%09%09if%28types.contains%28%22application/x-moz-tabbrowser-tab%22%29%29%20%7B%0A%09%09%09let%20insPoint%20%3D%20this.getInsertionPoint%28e%29%3B%0A%09%09%09for%28let%20i%20%3D%20dt.mozItemCount%20-%201%3B%20i%20%26gt%3B%3D%200%3B%20--i%29%20%7B%0A%09%09%09%09tab%20%3D%20dt.mozGetDataAt%28TAB_DROP_TYPE%2C%20i%29%3B%0A%09%09%09%09tab%20%26amp%3B%26amp%3B%20this.addBookmark%28insPoint%2C%20tab%29%3B%0A%09%09%09%7D%0A%09%09%09clearTimeout%28this._closeMenuTimeout%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09if%28%0A%09%09%09%28%0A%09%09%09%09types.contains%28%22text/x-moz-url%22%29%0A%09%09%09%09%7C%7C%20types.contains%28%22text/x-moz-text-internal%22%29%20//%20Firefox%2050+%0A%09%09%09%29%0A%09%09%09%26amp%3B%26amp%3B%20%22mozSourceNode%22%20in%20dt%0A%09%09%09%26amp%3B%26amp%3B%20%28tab%20%3D%20this.getTabFromChild%28dt.mozSourceNode%29%29%0A%09%09%29%20%7B%20//%20Firefox%208%0A%09%09%09this.addBookmark%28this.getInsertionPoint%28e%29%2C%20tab%29%3B%0A%09%09%09clearTimeout%28this._closeMenuTimeout%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09if%28%21types.contains%28this.dragDataNS%20+%20%22tagname%22%29%29%0A%09%09%09return%3B%0A%09%09clearTimeout%28this._closeMenuTimeout%29%3B%0A%09%09var%20mi%20%3D%20%22mozSourceNode%22%20in%20dt%0A%09%09%09%3F%20dt.mozSourceNode%0A%09%09%09%3A%20this._sourceNode%3B%0A%09%09this._sourceNode%20%3D%20null%3B%0A%09%09var%20insPoint%20%3D%20this.getInsertionPoint%28e%29%3B%0A%09%09if%28%21mi%20/*%20old%20Firefox%20w/o%20dt.mozSourceNode%20*/%20%7C%7C%20mi.parentNode%20%21%3D%20this.mp%29%20%7B%0A%09%09%09let%20dragNS%20%3D%20this.dragDataNS%3B%0A%09%09%09mi%20%26amp%3B%26amp%3B%20mi.parentNode%20%26amp%3B%26amp%3B%20mi.parentNode.parentNode.bookmarks.deleteBookmark%28mi%29%3B%20//%7E%20todo%3A%20use%20global%20_sourceNode%20%3F%0A%09%09%09if%28dt.mozGetDataAt%28dragNS%20+%20%22tagname%22%2C%200%29%20%3D%3D%20%22menuseparator%22%29%20%7B%0A%09%09%09%09this.addSeparator%28insPoint%29%3B%0A%09%09%09%09return%3B%0A%09%09%09%7D%0A%09%09%09let%20td%20%3D%20new%20this.tabData%28%7B%0A%09%09%09%09label%3A%20%20dt.mozGetDataAt%28dragNS%20+%20%22label%22%2C%20%200%29%2C%0A%09%09%09%09uri%3A%20%20%20%20dt.mozGetDataAt%28dragNS%20+%20%22uri%22%2C%20%20%20%200%29%2C%0A%09%09%09%09icon%3A%20%20%20dt.mozGetDataAt%28dragNS%20+%20%22icon%22%2C%20%20%200%29%2C%0A%09%09%09%09ssData%3A%20dt.mozGetDataAt%28dragNS%20+%20%22ssData%22%2C%200%29%0A%09%09%09%7D%29%3B%0A%09%09%09this.addBookmark%28insPoint%2C%20td%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09if%28insPoint%20%3D%3D%20mi%29%0A%09%09%09return%3B%0A%09%09this.addUndo%28%7B%20action%3A%20%22move%22%2C%20mi%3A%20mi%2C%20oldPos%3A%20mi.nextSibling%2C%20newPos%3A%20insPoint%20%7D%29%3B%0A%09%09this.mp.insertBefore%28mi%2C%20insPoint%29%3B%0A%09%09this.scheduleSave%28%29%3B%0A%09%7D%2C%0A%09getInsertionPoint%3A%20function%28e%29%20%7B%0A%09%09var%20trg%20%3D%20e.target%3B%0A%09%09if%28trg%20%3D%3D%20this.button%29%0A%09%09%09return%20this.defaultInsPoint%3B%0A%09%09if%28trg%20%3D%3D%20this.mp%20%7C%7C%20trg.id%20%3D%3D%20this.sepId%20%7C%7C%20trg.id%20%3D%3D%20this.openAllId%29%0A%09%09%09return%20this.%24%28this.sepId%29%3B%0A%09%09var%20bo%20%3D%20trg.boxObject%3B%0A%09%09if%28e.screenY%20-%20bo.screenY%20%26lt%3B%20bo.height/2%29%0A%09%09%09return%20trg%3B%0A%09%09return%20trg.nextSibling%3B%0A%09%7D%2C%0A%09getTabFromChild%3A%20function%28node%29%20%7B%0A%09%09for%28%3B%20node%20%26amp%3B%26amp%3B%20%22className%22%20in%20node%3B%20node%20%3D%20node.parentNode%29%0A%09%09%09if%28/%28%3F%3A%5E%7C%5Cs%29tabbrowser-tab%28%3F%3A%5Cs%7C%24%29/.test%28node.className%29%29%0A%09%09%09%09return%20node%3B%0A%09%09return%20null%3B%0A%09%7D%2C%0A%09clearHighlight%3A%20function%28%29%20%7B%0A%09%09Array.slice%28%0A%09%09%09this.mp.getElementsByAttributeNS%28%22urn%3Acustombuttons%3Anamespace%22%2C%20%22cb_dragOver%22%2C%20%22*%22%29%0A%09%09%29.forEach%28function%28node%29%20%7B%0A%09%09%09node.removeAttributeNS%28%22urn%3Acustombuttons%3Anamespace%22%2C%20%22cb_dragOver%22%29%3B%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09_hasDNDStyles%3A%20false%2C%0A%09markInsertionPoint%3A%20function%28add%29%20%7B%0A%09%09if%28this._hasDNDStyles%20%5E%20%21add%29%0A%09%09%09return%3B%0A%09%09this._hasDNDStyles%20%3D%20add%3B%0A%09%09var%20cssStr%20%3D%20%27%5C%0A%09%09%09/*%20Only%20for%20Firefox%204.0+%20*/%5Cn%5C%0A%09%09%09@namespace%20url%28%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%29%3B%5Cn%5C%0A%09%09%09@namespace%20cb%20url%28%22urn%3Acustombuttons%3Anamespace%22%29%3B%5Cn%5C%0A%09%09%09@-moz-document%20url%28%22%25windowURL%25%22%29%20%7B%5Cn%5C%0A%09%09%09%09%5Bcb_bookmarkItem%5D%5Bcb%7Ccb_dragOver%3D%22before%22%5D%20%26gt%3B%20label%20%7B%5Cn%5C%0A%09%09%09%09%09border-bottom%3A%202px%20solid%20graytext%20%21important%3B%5Cn%5C%0A%09%09%09%09%09margin-bottom%3A%20-2px%20%21important%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%5Bcb_bookmarkItem%5D%5Bcb%7Ccb_dragOver%3D%22after%22%5D%20%26gt%3B%20label%20%7B%5Cn%5C%0A%09%09%09%09%09border-top%3A%202px%20solid%20graytext%20%21important%3B%5Cn%5C%0A%09%09%09%09%09margin-top%3A%20-2px%20%21important%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09menuitem%5Bcb_bookmarkItem%5D%5Bcb%7Ccb_dragOver%3D%22before%22%5D%20+%20%5Bcb_bookmarkItem%5D%5Bcb%7Ccb_dragOver%3D%22after%22%5D%20%26gt%3B%20label%20%7B%5Cn%5C%0A%09%09%09%09%09border-top-color%3A%20transparent%20%21important%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%7D%27%0A%09%09%09.replace%28/%25windowURL%25/g%2C%20window.location.href%29%3B%0A%09%09var%20sss%20%3D%20Components.classes%5B%[email protected]/content/style-sheet-service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%09%09var%20cssURI%20%3D%20this.ios.newURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28cssStr%29%2C%20null%2C%20null%29%3B%0A%09%09var%20has%20%3D%20sss.sheetRegistered%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09%09if%28add%20%26amp%3B%26amp%3B%20%21has%29%0A%09%09%09sss.loadAndRegisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09%09else%20if%28%21add%20%26amp%3B%26amp%3B%20has%29%0A%09%09%09sss.unregisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09%7D%2C%0A%09handleBookmarkDrop%3A%20function%28e%29%20%7B%0A%09%09var%20dt%20%3D%20e.dataTransfer%3B%0A%09%09var%20dragNS%20%3D%20this.dragDataNS%3B%0A%09%09if%28%0A%09%09%09%21dt.types.contains%28dragNS%20+%20%22uri%22%29%0A%09%09%09%7C%7C%20dt.mozGetDataAt%28dragNS%20+%20%22buttonId%22%2C%200%29%20%21%3D%20this._btnId%0A%09%09%29%0A%09%09%09return%3B%0A%0A%09%09var%20tab%2C%20tabs%3B%0A%09%09if%28e.view.top%20%3D%3D%20window%29%20%7B%0A%09%09%09let%20trg%20%3D%20e.originalTarget%3B%0A%09%09%09for%28%3B%20trg%3B%20trg%20%3D%20trg.parentNode%29%20%7B%0A%09%09%09%09if%28/%28%3F%3A%5E%7C%5Cs%29tabbrowser-tabs%3F%28%3F%3A%5Cs%7C%24%29/.test%28trg.className%29%29%20%7B%0A%09%09%09%09%09if%28trg.localName%20%3D%3D%20%22tabs%22%29%0A%09%09%09%09%09%09tabs%20%3D%20trg%3B%0A%09%09%09%09%09else%20%7B%0A%09%09%09%09%09%09tab%20%3D%20trg%3B%0A%09%09%09%09%09%09tabs%20%3D%20trg.parentNode%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09else%20if%28e.view.top%20%3D%3D%20content%29%20%7B%0A%09%09%09let%20trg%20%3D%20e.target%3B%0A%09%09%09//if%28trg%20instanceof%20HTMLTextAreaElement%20%7C%7C%20trg.contentEditable%20%3D%3D%20%22true%22%29%0A%09%09%09//%09return%3B%0A%09%09%09//if%28trg%20instanceof%20HTMLInputElement%29%20try%20%7B%0A%09%09%09//%09if%28typeof%20trg.selectionStart%20%3D%3D%20%22number%22%29%0A%09%09%09//%09%09return%3B%0A%09%09%09//%7D%0A%09%09%09//catch%28e%29%20%7B%0A%09%09%09//%7D%0A%09%09%09let%20cs%20%3D%20trg.ownerDocument.defaultView.getComputedStyle%28trg%2C%20null%29%3B%0A%09%09%09let%20userModify%20%3D%20%22userModify%22%20in%20cs%20%3F%20cs.userModify%20%3A%20cs.MozUserModify%3B%0A%09%09%09if%28userModify%20%3D%3D%20%22read-write%22%29%0A%09%09%09%09return%3B%0A%09%09%09tab%20%3D%20gBrowser.selectedTab%3B%0A%09%09%09tabs%20%3D%20gBrowser.tabContainer%3B%0A%09%09%7D%0A%0A%09%09if%28%21tabs%29%0A%09%09%09return%3B%0A%0A%09%09var%20ssData%20%3D%20dt.mozGetDataAt%28dragNS%20+%20%22ssData%22%2C%200%29%3B%0A%09%09var%20uri%20%20%20%20%3D%20dt.mozGetDataAt%28dragNS%20+%20%22uri%22%2C%20%20%20%200%29%3B%0A%0A%09%09var%20_this%20%3D%20this%3B%0A%09%09function%20tabOpen%28e%29%20%7B%0A%09%09%09e.currentTarget.removeEventListener%28e.type%2C%20tabOpen%2C%20true%29%3B%0A%09%09%09clearTimeout%28timer%29%3B%0A%09%09%09var%20tab%20%3D%20e.target%3B%0A%09%09%09_this.setTabSession%28tab%2C%20ssData%2C%20uri%29%3B%0A%09%09%09_log%28e.type%20+%20%22%20%3D%26gt%3B%20setTabSession%28%29%22%29%3B%0A%09%09%7D%0A%09%09tabs.addEventListener%28%22TabOpen%22%2C%20tabOpen%2C%20true%29%3B%0A%09%09var%20timer%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%09%09tabs.removeEventListener%28%22TabOpen%22%2C%20tabOpen%2C%20true%29%3B%0A%09%09%09if%28tab%29%20%7B%0A%09%09%09%09_this.setTabSession%28tab%2C%20ssData%2C%20uri%2C%20true%29%3B%0A%09%09%09%09_log%28%22setTimeout%20%3D%26gt%3B%20to%20TabOpen%20%3D%26gt%3B%20setTabSession%28%29%20for%20current%20tab%22%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%200%29%3B%0A%09%7D%2C%0A%09sortBookmarks%3A%20function%28sortOrder%2C%20reverse%29%20%7B%0A%09%09//%20sortOrder%3A%20array%20of%20strings%2C%20possible%20values%3A%0A%09%09//%20%22name%22%2C%20%22uri%22%2C%20%22host%22%2C%20%22baseDomain%22%20%28see%20sortBookmarksNodes%28%29%29%0A%09%09//%20Example%3A%20sortBookmarks%28%5B%22baseDomain%22%2C%20%22host%22%2C%20%22name%22%5D%29%0A%09%09//%20We%20sort%20separately%20each%20%22section%22%20between%20menuseparator%27s%0A%09%09//%20%28just%20like%20built-in%20Sort%20By%20Name%20for%20bookmarks%29%0A%09%09var%20sections%20%3D%20%5B%5B%5D%5D%3B%0A%09%09var%20section%20%3D%20sections%5B0%5D%3B%0A%09%09var%20chs%20%3D%20this.mp.childNodes%3B%0A%09%09for%28var%20i%20%3D%200%2C%20l%20%3D%20chs.length%3B%20i%20%26lt%3B%20l%3B%20++i%29%20%7B%0A%09%09%09let%20ch%20%3D%20chs%5Bi%5D%3B%0A%09%09%09if%28ch.hasAttribute%28%22cb_uri%22%29%29%0A%09%09%09%09section.push%28ch%29%3B%0A%09%09%09else%20if%28ch.localName%20%3D%3D%20%22menuseparator%22%29%20%7B%0A%09%09%09%09if%28ch.id%20%3D%3D%20this.sepId%29%0A%09%09%09%09%09break%3B%0A%09%09%09%09sections.push%28section%20%3D%20%5B%5D%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09var%20undo%20%3D%20%5B%5D%3B%0A%09%09sections.forEach%28function%28section%29%20%7B%0A%09%09%09this.sortBookmarksNodes%28section%2C%20sortOrder%2C%20reverse%2C%20undo%29%3B%0A%09%09%7D%2C%20this%29%3B%0A%09%09this.addUndo%28%7B%20action%3A%20%22moves%22%2C%20actions%3A%20undo.reverse%28%29%20%7D%29%3B%0A%09%09this.cm.hidePopup%28%29%3B%0A%09%09this.scheduleSave%28%29%3B%0A%09%7D%2C%0A%09sortBookmarksNodes%3A%20function%28bookmarksNodes%2C%20sortOrder%2C%20reverse%2C%20undo%29%20%7B%0A%09%09if%28%21bookmarksNodes.length%29%0A%09%09%09return%3B%0A%0A%09%09var%20insPoint%20%3D%20bookmarksNodes%5BbookmarksNodes.length%20-%201%5D.nextSibling%3B%0A%09%09var%20sort%20%3D%20%7B%0A%09%09%09name%3A%20false%2C%0A%09%09%09uri%3A%20false%2C%0A%09%09%09host%3A%20false%2C%0A%09%09%09baseDomain%3A%20false%2C%0A%09%09%09__proto__%3A%20null%0A%09%09%7D%3B%0A%09%09sortOrder.forEach%28function%28s%29%20%7B%0A%09%09%09sort%5Bs%5D%20%3D%20true%3B%0A%09%09%7D%29%3B%0A%0A%09%09var%20df%20%3D%20document.createDocumentFragment%28%29%3B%0A%09%09var%20greaterThan%20%3D%20reverse%20%3F%20-1%20%3A%201%3B%0A%09%09var%20bookmarks%20%3D%20bookmarksNodes%0A%09%09%09.map%28function%28mi%29%20%7B%0A%09%09%09%09var%20bm%20%3D%20%7B%7D%3B%0A%09%09%09%09if%28sort.uri%20%7C%7C%20sort.host%20%7C%7C%20sort.baseDomain%29%0A%09%09%09%09%09bm.uri%20%3D%20mi.getAttribute%28%22cb_uri%22%29%3B%0A%09%09%09%09if%28sort.name%29%0A%09%09%09%09%09bm.name%20%3D%20mi.getAttribute%28%22label%22%29%3B%0A%09%09%09%09if%28sort.host%20%7C%7C%20sort.baseDomain%29%20try%20%7B%0A%09%09%09%09%09let%20u%20%3D%20this.ios.newURI%28bm.uri%2C%20null%2C%20null%29%3B%0A%09%09%09%09%09if%28sort.host%29%0A%09%09%09%09%09%09bm.host%20%3D%20u.host%3B%0A%09%09%09%09%09if%28sort.baseDomain%29%0A%09%09%09%09%09%09bm.baseDomain%20%3D%20this.tld.getBaseDomain%28u%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09catch%28e%29%20%7B%0A%09%09%09%09%09//Components.utils.reportError%28e%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09return%20%7B%0A%09%09%09%09%09mi%3A%20mi%2C%0A%09%09%09%09%09key%3A%20sortOrder.map%28function%28s%29%20%7B%0A%09%09%09%09%09%09return%20bm%5Bs%5D%3B%0A%09%09%09%09%09%7D%29.join%28%22%5Cn%22%29%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%2C%20this%29%0A%09%09%09.sort%28function%28bm1%2C%20bm2%29%20%7B%0A%09%09%09%09var%20s1%20%3D%20bm1.key%3B%0A%09%09%09%09var%20s2%20%3D%20bm2.key%3B%0A%09%09%09%09return%20s1%20%3D%3D%20s2%20%3F%200%20%3A%20s1%20%26gt%3B%20s2%20%3F%20greaterThan%20%3A%20-greaterThan%3B%0A%09%09%09%7D%29%0A%09%09%09.forEach%28function%28bm%29%20%7B%0A%09%09%09%09var%20mi%20%3D%20bm.mi%3B%0A%09%09%09%09undo%20%26amp%3B%26amp%3B%20undo.push%28%7B%20action%3A%20%22move%22%2C%20mi%3A%20mi%2C%20oldPos%3A%20mi.nextSibling%2C%20newPos%3A%20insPoint%20%7D%29%3B%0A%09%09%09%09//this.mp.insertBefore%28mi%2C%20insPoint%29%3B%0A%09%09%09%09df.appendChild%28mi%29%3B%0A%09%09%09%7D%2C%20this%29%3B%0A%09%09this.mp.insertBefore%28df%2C%20insPoint%29%3B%0A%09%7D%2C%0A%09showLink%3A%20function%28e%29%20%7B%0A%09%09if%28%21%28%22XULBrowserWindow%22%20in%20window%29%29%0A%09%09%09return%3B%0A%09%09if%28e.type%20%3D%3D%20%22DOMMenuItemActive%22%29%0A%09%09%09XULBrowserWindow.setOverLink%28e.target.getAttribute%28%22tooltiptext%22%29%20%7C%7C%20%22%22%2C%20null%29%3B%0A%09%09else%20if%28e.type%20%3D%3D%20%22DOMMenuItemInactive%22%29%0A%09%09%09XULBrowserWindow.setOverLink%28%22%22%2C%20null%29%3B%0A%09%7D%2C%0A%09get%20appInfo%28%29%20%7B%0A%09%09delete%20this.appInfo%3B%0A%09%09return%20this.appInfo%20%3D%20Components.classes%5B%[email protected]/xre/app-info%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIXULAppInfo%29%3B%0A%09%7D%2C%0A%09get%20appVersion%28%29%20%7B%0A%09%09delete%20this.appVersion%3B%0A%09%09return%20this.appVersion%20%3D%20parseFloat%28this.appInfo.version%29%3B%0A%09%7D%2C%0A%09get%20platformVersion%28%29%20%7B%0A%09%09delete%20this.platformVersion%3B%0A%09%09return%20this.platformVersion%20%3D%20parseFloat%28this.appInfo.platformVersion%29%3B%0A%09%7D%2C%0A%09get%20appName%28%29%20%7B%0A%09%09delete%20this.appName%3B%0A%09%09return%20this.appName%20%3D%20this.appInfo.name%3B%0A%09%7D%2C%0A%09hasModifier%3A%20function%28e%29%20%7B%0A%09%09return%20e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%3B%0A%09%7D%2C%0A%09escapeString%3A%20function%28s%29%20%7B%0A%09%09return%20s.replace%28/%5Cn/g%2C%20%22%5Cr%22%29%3B%0A%09%7D%2C%0A%0A%09PERMS_FILE_READ%3A%20%20%20%20%20%20%20%20parseInt%28%220444%22%2C%208%29%2C%0A%09PERMS_FILE_WRITE%3A%20%20%20%20%20%20%20parseInt%28%220644%22%2C%208%29%2C%0A%09PERMS_FILE_OWNER_WRITE%3A%20parseInt%28%220600%22%2C%208%29%2C%0A%09get%20textEncoder%28%29%20%7B%0A%09%09delete%20this.textEncoder%3B%0A%09%09if%28%22TextEncoder%22%20in%20window%29%20//%20Firefox%2018+%0A%09%09%09return%20this.textEncoder%20%3D%20new%20TextEncoder%28%29%3B%0A%09%09return%20this.textEncoder%20%3D%20null%3B%0A%09%7D%2C%0A%09writeToFileAsync%3A%20function%28str%2C%20file%2C%20callback%2C%20context%29%20%7B%0A%09%09var%20encoder%20%3D%20this.textEncoder%3B%0A%09%09if%28encoder%20%26amp%3B%26amp%3B%20this.platformVersion%20%26gt%3B%3D%2020%29%20try%20%7B%0A%09%09%09var%20%7BOS%7D%20%3D%20Components.utils.import%28%22resource%3A//gre/modules/osfile.jsm%22%2C%20%7B%7D%29%3B%0A%09%09%09var%20onFailure%20%3D%20function%28err%29%20%7B%0A%09%09%09%09callback%20%26amp%3B%26amp%3B%20callback.call%28context%2C%20Components.results.NS_ERROR_FAILURE%29%3B%0A%09%09%09%7D%3B%0A%09%09%09try%20%7B%0A%09%09%09%09var%20arr%20%3D%20encoder.encode%28str%29%3B%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%0A%09%09%09%09onFailure%28e%29%3B%0A%09%09%09%09return%3B%0A%09%09%09%7D%0A%09%09%09var%20options%20%3D%20%7B%0A%09%09%09%09tmpPath%3A%20file.path%20+%20%22.tmp%22%0A%09%09%09%7D%3B%0A%09%09%09OS.File.writeAtomic%28file.path%2C%20arr%2C%20options%29.then%28%0A%09%09%09%09function%20onSuccess%28%29%20%7B%0A%09%09%09%09%09callback%20%26amp%3B%26amp%3B%20callback.call%28context%2C%20Components.results.NS_OK%2C%20str%29%3B%0A%09%09%09%09%7D%2C%0A%09%09%09%09onFailure%0A%09%09%09%29.then%28null%2C%20onFailure%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09OS%20%26amp%3B%26amp%3B%20Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%0A%09%09try%20%7B%0A%09%09%09Components.utils.import%28%22resource%3A//gre/modules/NetUtil.jsm%22%29%3B%0A%09%09%09Components.utils.import%28%22resource%3A//gre/modules/FileUtils.jsm%22%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09this.writeToFileAsync%20%3D%20function%28str%2C%20file%2C%20callback%2C%20context%29%20%7B%0A%09%09%09%09var%20status%20%3D%20Components.results.NS_ERROR_FILE_ACCESS_DENIED%3B%0A%09%09%09%09try%20%7B%0A%09%09%09%09%09this.writeToFile%28str%2C%20file%29%3B%0A%09%09%09%09%09status%20%3D%20Components.results.NS_OK%3B%0A%09%09%09%09%7D%0A%09%09%09%09catch%28e%29%20%7B%0A%09%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09callback%20%26amp%3B%26amp%3B%20callback.call%28context%2C%20status%2C%20str%29%3B%0A%09%09%09%7D%3B%0A%09%09%09this.writeToFileAsync.apply%28this%2C%20arguments%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09var%20ostream%20%3D%20FileUtils.openSafeFileOutputStream%28file%29%3B%0A%09%09var%20uc%20%3D%20this.unicodeConverter%28%22UTF-8%22%29%3B%0A%09%09var%20istream%20%3D%20uc.convertToInputStream%28str%29%3B%0A%09%09NetUtil.asyncCopy%28istream%2C%20ostream%2C%20callback%20%26amp%3B%26amp%3B%20function%28status%29%20%7B%0A%09%09%09callback.call%28context%2C%20status%2C%20str%29%3B%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09writeToFile%3A%20function%28str%2C%20file%29%20%7B%0A%09%09var%20fos%20%3D%20Components.classes%5B%[email protected]/network/file-output-stream%3B1%22%5D%0A%09%09%09.createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0A%09%09fos.init%28file%2C%200x02%20%7C%200x08%20%7C%200x20%2C%20this.PERMS_FILE_WRITE%2C%200%29%3B%0A%09%09var%20cos%20%3D%20Components.classes%5B%[email protected]/intl/converter-output-stream%3B1%22%5D%0A%09%09%09.createInstance%28Components.interfaces.nsIConverterOutputStream%29%3B%0A%09%09cos.init%28fos%2C%20%22UTF-8%22%2C%200%2C%200%29%3B%0A%09%09cos.writeString%28str%29%3B%0A%09%09cos.close%28%29%3B%20//%20this%20closes%20fos%0A%09%7D%2C%0A%09get%20textDecoder%28%29%20%7B%0A%09%09delete%20this.textDecoder%3B%0A%09%09if%28%22TextDecoder%22%20in%20window%29%20//%20Firefox%2018+%0A%09%09%09return%20this.textDecoder%20%3D%20new%20TextDecoder%28%29%3B%0A%09%09return%20this.textDecoder%20%3D%20null%3B%0A%09%7D%2C%0A%09readFromFileAsync%3A%20function%28file%2C%20callback%2C%20context%29%20%7B%0A%09%09var%20decoder%20%3D%20this.textDecoder%3B%0A%09%09if%28decoder%20%26amp%3B%26amp%3B%20this.platformVersion%20%26gt%3B%3D%2020%29%20try%20%7B%0A%09%09%09var%20%7BOS%7D%20%3D%20Components.utils.import%28%22resource%3A//gre/modules/osfile.jsm%22%2C%20%7B%7D%29%3B%0A%09%09%09var%20onFailure%20%3D%20function%28err%29%20%7B%0A%09%09%09%09callback.call%28context%2C%20%22%22%2C%20Components.results.NS_ERROR_FAILURE%29%3B%0A%09%09%09%7D%3B%0A%09%09%09OS.File.read%28file.path%29.then%28%0A%09%09%09%09function%20onSuccess%28arr%29%20%7B%0A%09%09%09%09%09var%20data%20%3D%20decoder.decode%28arr%29%3B%0A%09%09%09%09%09callback.call%28context%2C%20data%2C%20Components.results.NS_OK%29%3B%0A%09%09%09%09%7D%2C%0A%09%09%09%09onFailure%0A%09%09%09%29.then%28null%2C%20onFailure%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09OS%20%26amp%3B%26amp%3B%20Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%0A%09%09try%20%7B%0A%09%09%09Components.utils.import%28%22resource%3A//gre/modules/NetUtil.jsm%22%29%3B%0A%09%09%09if%28%21%28%22newChannel%22%20in%20NetUtil%29%29%0A%09%09%09%09throw%20%22Firefox%203.6%22%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09this.readFromFileAsync%20%3D%20function%28file%2C%20callback%2C%20context%29%20%7B%0A%09%09%09%09var%20status%20%3D%20Components.results.NS_ERROR_FILE_ACCESS_DENIED%3B%0A%09%09%09%09try%20%7B%0A%09%09%09%09%09var%20data%20%3D%20this.readFromFile%28file%29%3B%0A%09%09%09%09%09status%20%3D%20Components.results.NS_OK%3B%0A%09%09%09%09%7D%0A%09%09%09%09catch%28e%29%20%7B%0A%09%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09callback.call%28context%2C%20data%2C%20status%29%3B%0A%09%09%09%7D%3B%0A%09%09%09this.readFromFileAsync.apply%28this%2C%20arguments%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09NetUtil.asyncFetch%28file%2C%20this.bind%28function%28istream%2C%20status%29%20%7B%0A%09%09%09var%20data%20%3D%20%22%22%3B%0A%09%09%09if%28Components.isSuccessCode%28status%29%29%20%7B%0A%09%09%09%09try%20%7B%20//%20Firefox%207.0a1%20throws%20after%20istream.available%28%29%20on%20empty%20files%0A%09%09%09%09%09data%20%3D%20NetUtil.readInputStreamToString%28%0A%09%09%09%09%09%09istream%2C%0A%09%09%09%09%09%09istream.available%28%29%2C%0A%09%09%09%09%09%09%7B%20charset%3A%20%22UTF-8%22%2C%20replacement%3A%20%22%5Cufffd%22%20%7D%20//%20Only%20Gecko%2011.0+%0A%09%09%09%09%09%29%3B%0A%09%09%09%09%09if%28NetUtil.readInputStreamToString.length%20%26lt%3B%203%29%0A%09%09%09%09%09%09data%20%3D%20this.convertToUnicode%28data%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09catch%28e%29%20%7B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09callback.call%28context%2C%20data%2C%20status%29%3B%0A%09%09%7D%2C%20this%29%29%3B%0A%09%7D%2C%0A%09readFromFile%3A%20function%28file%29%20%7B%0A%09%09var%20fis%20%3D%20Components.classes%5B%[email protected]/network/file-input-stream%3B1%22%5D%0A%09%09%09.createInstance%28Components.interfaces.nsIFileInputStream%29%3B%0A%09%09fis.init%28file%2C%200x01%2C%20this.PERMS_FILE_READ%2C%200%29%3B%0A%09%09var%20sis%20%3D%20Components.classes%5B%[email protected]/scriptableinputstream%3B1%22%5D%0A%09%09%09.createInstance%28Components.interfaces.nsIScriptableInputStream%29%3B%0A%09%09sis.init%28fis%29%3B%0A%09%09var%20str%20%3D%20sis.read%28fis.available%28%29%29%3B%0A%09%09sis.close%28%29%3B%0A%09%09fis.close%28%29%3B%0A%09%09return%20this.convertToUnicode%28str%29%3B%0A%09%7D%2C%0A%09convertToUnicode%3A%20function%28str%29%20%7B%0A%09%09var%20uc%20%3D%20this.unicodeConverter%28%22UTF-8%22%29%3B%0A%09%09try%20%7B%0A%09%09%09return%20uc.ConvertToUnicode%28str%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%09%09return%20str%3B%0A%09%7D%2C%0A%09unicodeConverter%3A%20function%28charset%29%20%7B%0A%09%09var%20uc%20%3D%20Components.classes%5B%[email protected]/intl/scriptableunicodeconverter%22%5D%0A%09%09%09.createInstance%28Components.interfaces.nsIScriptableUnicodeConverter%29%3B%0A%09%09uc.charset%20%3D%20charset%3B%0A%09%09return%20uc%3B%0A%09%7D%2C%0A%09copyFileAsync%3A%20function%28file%2C%20newFile%2C%20callback%2C%20context%29%20%7B%0A%09%09if%28this.platformVersion%20%26gt%3B%3D%2020%29%20try%20%7B%0A%09%09%09var%20%7BOS%7D%20%3D%20Components.utils.import%28%22resource%3A//gre/modules/osfile.jsm%22%2C%20%7B%7D%29%3B%0A%09%09%09var%20onFailure%20%3D%20function%28err%29%20%7B%0A%09%09%09%09callback.call%28context%2C%20Components.results.NS_ERROR_FILE_COPY_OR_MOVE_FAILED%29%3B%0A%09%09%09%7D%3B%0A%09%09%09OS.File.copy%28file.path%2C%20newFile.path%29.then%28%0A%09%09%09%09function%20onSuccess%28%29%20%7B%0A%09%09%09%09%09callback.call%28context%2C%20Components.results.NS_OK%29%3B%0A%09%09%09%09%7D%2C%0A%09%09%09%09onFailure%0A%09%09%09%29.then%28null%2C%20onFailure%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09OS%20%26amp%3B%26amp%3B%20Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%0A%09%09try%20%7B%0A%09%09%09Components.utils.import%28%22resource%3A//gre/modules/NetUtil.jsm%22%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09this.copyFileAsync%20%3D%20function%28file%2C%20newFile%2C%20callback%2C%20context%29%20%7B%0A%09%09%09%09var%20status%20%3D%20Components.results.NS_ERROR_FILE_COPY_OR_MOVE_FAILED%3B%0A%09%09%09%09try%20%7B%0A%09%09%09%09%09if%28newFile.exists%28%29%29%0A%09%09%09%09%09%09newFile.remove%28true%29%3B%0A%09%09%09%09%09file.copyTo%28newFile.parent%2C%20newFile.leafName%29%3B%0A%09%09%09%09%09status%20%3D%20Components.results.NS_OK%3B%0A%09%09%09%09%7D%0A%09%09%09%09catch%28e%29%20%7B%0A%09%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09callback.call%28context%2C%20status%29%3B%0A%09%09%09%7D%3B%0A%09%09%09this.copyFileAsync.apply%28this%2C%20arguments%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09try%20%7B%0A%09%09%09var%20fis%20%3D%20Components.classes%5B%[email protected]/network/file-input-stream%3B1%22%5D%0A%09%09%09%09.createInstance%28Components.interfaces.nsIFileInputStream%29%3B%0A%09%09%09fis.init%28file%2C%200x01%2C%20this.PERMS_FILE_READ%2C%200%29%3B%0A%09%09%09var%20fos%20%3D%20Components.classes%5B%[email protected]/network/file-output-stream%3B1%22%5D%0A%09%09%09%09.createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0A%09%09%09fos.init%28newFile%2C%200x02%20%7C%200x08%20%7C%200x20%2C%20this.PERMS_FILE_WRITE%2C%200%29%3B%0A%0A%09%09%09NetUtil.asyncCopy%28fis%2C%20fos%2C%20function%28status%29%20%7B%0A%09%09%09%09callback.call%28context%2C%20status%29%3B%0A%09%09%09%7D%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09callback.call%28context%2C%20Components.results.NS_ERROR_FILE_ACCESS_DENIED%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09ensureFilePermissions%3A%20function%28file%2C%20mask%29%20%7B%0A%09%09try%20%7B%0A%09%09%09if%28file.exists%28%29%20%26amp%3B%26amp%3B%20%21%28file.permissions%20%26amp%3B%20mask%29%29%0A%09%09%09%09file.permissions%20%7C%3D%20mask%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09bind%3A%20function%28func%2C%20context%2C%20args%29%20%7B%0A%09%09return%20function%28%29%20%7B%0A%09%09%09return%20func.apply%28context%2C%20args%20%7C%7C%20arguments%29%3B%0A%09%09%7D%3B%0A%09%7D%2C%0A%09createElement%3A%20function%28name%2C%20attrs%29%20%7B%0A%09%09var%20node%20%3D%20document.createElement%28name%29%3B%0A%09%09if%28attrs%29%20for%28var%20attrName%20in%20attrs%29%20if%28attrs.hasOwnProperty%28attrName%29%29%0A%09%09%09node.setAttribute%28attrName%2C%20attrs%5BattrName%5D%29%3B%0A%09%09return%20node%3B%0A%09%7D%2C%0A%09parseXULFromString%3A%20function%28xul%29%20%7B%0A%09%09xul%20%3D%20xul.replace%28/%26gt%3B%5Cs+%26lt%3B/g%2C%20%22%26gt%3B%26lt%3B%22%29%3B%0A%09%09return%20new%20DOMParser%28%29.parseFromString%28xul%2C%20%22application/xml%22%29.documentElement%3B%0A%09%7D%2C%0A%09encodeHTML%3A%20function%28s%29%20%7B%0A%09%09return%20s.replace%28/%26amp%3B/g%2C%20%22%26amp%3Bamp%3B%22%29%0A%09%09%09.replace%28/%26lt%3B/g%2C%20%22%26amp%3Blt%3B%22%29%0A%09%09%09.replace%28/%26gt%3B/g%2C%20%22%26amp%3Bgt%3B%22%29%0A%09%09%09.replace%28/%22/g%2C%20%22%26amp%3Bquot%3B%22%29%3B%0A%09%7D%0A%7D%3B%0A_log%28%22init%22%29%3B%0Athis.bookmarks.initProxy%28%29%3B%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%0A%09if%28reason%20%3D%3D%20%22constructor%22%29%0A%09%09return%3B%20//%20Changed%20XBL%20binding%2C%20ignore%0A%09_log%28%22destroy%3A%20%22%20+%20reason%29%3B%0A%09this.bookmarks.destroy%28reason%20%3D%3D%20%22update%22%20%7C%7C%20reason%20%3D%3D%20%22delete%22%29%3B%0A%09if%28reason%20%3D%3D%20%22delete%22%29%0A%09%09this.bookmarks.noBookmarks%28false%29%3B%0A%7D%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Aif%28options.hideDropMarker%20%7C%7C%20options.showLabel%20%21%3D%20undefined%29%20%7B%0A%09let%20btn%20%3D%20this%3B%0A%09let%20doc%20%3D%20btn.ownerDocument%3B%0A%09let%20stopTime%20%3D%20Date.now%28%29%20+%20500%3B%0A%09setTimeout%28function%20tweakButton%28%29%20%7B%20//%20Wait%20for%20menu%20XBL%20binding%0A%09%09var%20dm%20%3D%20options.hideDropMarker%0A%09%09%09%26amp%3B%26amp%3B%20doc.getAnonymousElementByAttribute%28btn%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%09%09var%20lb%20%3D%20options.showLabel%20%21%3D%20undefined%0A%09%09%09%26amp%3B%26amp%3B%20doc.getAnonymousElementByAttribute%28btn%2C%20%22class%22%2C%20%22toolbarbutton-text%22%29%3B%0A%09%09if%28dm%29%20%7B%0A%09%09%09dm.hidden%20%3D%20true%3B%0A%09%09%09//%20Hack%20for%20Firefox%2019%20and%20large%20icons%0A%09%09%09let%20icon%20%3D%20doc.getAnonymousElementByAttribute%28btn%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%09%09%09if%28icon%29%20%7B%0A%09%09%09%09let%20s%20%3D%20doc.defaultView.getComputedStyle%28icon%2C%20null%29%3B%0A%09%09%09%09if%28s.paddingRight%20%21%3D%20s.paddingLeft%29%0A%09%09%09%09%09icon.style.paddingLeft%20%3D%20icon.style.paddingRight%20%3D%20s.paddingLeft%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09if%28lb%29%0A%09%09%09lb.style.display%20%3D%20options.showLabel%20%3F%20%22-moz-box%22%20%3A%20%22none%22%3B%0A%09%09if%28%21dm%20%26amp%3B%26amp%3B%20%21lb%20%26amp%3B%26amp%3B%20Date.now%28%29%20%26lt%3B%20stopTime%29%0A%09%09%09setTimeout%28tweakButton%2C%2010%29%3B%0A%09%7D%2C%200%29%3B%0A%7D%0A%0Afunction%20_info%28s%29%20%7B%0A%09var%20id%20%3D%20self.id.match%28/%5Cd*%24/%29%5B0%5D%3B%0A%09var%20cs%20%3D%20Components.classes%5B%[email protected]/consoleservice%3B1%22%5D%0A%09%09.getService%28Components.interfaces.nsIConsoleService%29%3B%0A%09function%20ts%28%29%20%7B%0A%09%09var%20d%20%3D%20new%20Date%28%29%3B%0A%09%09var%20ms%20%3D%20d.getMilliseconds%28%29%3B%0A%09%09return%20d.toLocaleFormat%28%22%25M%3A%25S%3A%22%29%20+%20%22000%22.substr%28String%28ms%29.length%29%20+%20ms%3B%0A%09%7D%0A%09_info%20%3D%20function%28s%29%20%7B%0A%09%09cs.logStringMessage%28%22%5BSession%20Bookmarks%20%23%22%20+%20id%20+%20%22%5D%3A%20%22%20+%20ts%28%29%20+%20%22%20%22%20+%20s%29%3B%0A%09%7D%3B%0A%09return%20_info.apply%28this%2C%20arguments%29%3B%0A%7D%0Afunction%20_log%28s%29%20%7B%0A%09_debug%20%26amp%3B%26amp%3B%20_info%28s%29%3B%0A%7D%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%28%21event.target%29%20%7B%20//%20Button%27s%20hotkey%20pressed%0A%09if%28this.disabled%29%0A%09%09this.bookmarks.addBookmark%28%29%3B%0A%09else%0A%09%09this.open%20%3D%20%21this.open%3B%0A%7D%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%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E"
>Install</a>
| <a href="https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks">Source</a>
| <a href="https://github.com/Infocatcher/Custom_Buttons#usage">Instructions</a>
<script type="text/javascript">
var a = document.getElementsByTagName("a")[0];
a.title = document.title;
if(/%3Cimage%3E%3C%21%5BCDATA%5B(data%3A\S+)%5D%5D%3E%3C\/image%3E/.test(a.href)) {
var icon = decodeURIComponent(RegExp.$1);
var img = document.createElement("img");
img.src = icon;
img.alt = "";
img.style.verticalAlign = "middle";
img.style.marginRight = "4px";
img.style.border = "none";
a.insertBefore(img, a.firstChild);
var link = document.createElement("link");
link.rel = "shortcut icon";
link.href = icon;
document.documentElement.insertBefore(link, document.documentElement.firstChild);
}
</script>
<script type="text/javascript" src="https://infocatcher.github.io/Custom_Buttons/viewCustomButton.js"></script>
<script type="text/javascript">
if("viewCustomButtonCode" in window) setTimeout(function() {
viewCustomButtonCode(a.href);
}, 0);
</script>
</body>