Bookmarks Folder 0.1.2 (2016-01-04)
Совместимость: 4.0+, 2.1+
Автор: Infocatcher
Описание:
Кнопка показывает содержимое любой папки с закладками.
СКМ или ЛКМ+любой модификатор – выбрать папку закладок
Скриншоты:
Установить:
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%3EBookmarks%20Folder%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhpJREFUeNqkUz1vE0EQfbO7ZweDUQgECptEFEih4ENJREsTaCkokBCigSIFDf8A0dKAhKyEhgaUNg1CpEFCokzg4gJkJAcjJJtggn2W75zL3S6zd84X0CCPdLq9nZn3Zt7MkTEGg5jAgKbK8zOLOgqvGh0nFyQkSKoykTjHX/ujqX9DhG2fssnnZ58BW1EaJCVWntw4yyCG6A8ATiIhIFTmExOdSQCM1py8ibDyEMYQnMI1TM4+5+b6yRZkG8i+lIJbujUhSUzx/bJKHKbLjgPsl4jWX/HFyySWGMTEGkHH75dukClc53iDjh9ezB/MWgB2xT6EM8RHaYvcYdasS+Wdi6DVsSzs4YnRfQipkHOcEuv2IAWgTUuHoB0g6TulQ22lgtGxERy/WQISkU36WL+TgTt3+5iyZSLy8Pmti+4vb1cv1mN86jSOFI5iq/qIq9ZJ6RZA5ooIxQSa7XBJWWa/vsbKAtP3FriduK+WRPy1BG14VSiTlp8AawYYR+vjKr6s914onjc69RoOF3kq3Sp0c4lDRQois3zau2usAzHT0CH8rLq48/jDYtJCu/ENxelL3EodlM1zqtgd4T5jAGcEfmMN3xvN16vzM56yQcFGC7lTJ4FeiwcxjL82cK9lh7Gx/B61H72FE6NM5s5d9nhgeR3FsEtldjbm32aLMiTak3ffjJWfXvFs5IVEsf8zu/duulsD/s6/BRgAq8u/ourCQ6kAAAAASUVORK5CYII%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/bookmarksFolder.js%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fid%3D57872%0A//%20https%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Bookmarks_Folder%0A%0A//%20Bookmarks%20Folder%20button%20for%20Custom%20Buttons%0A//%20%28code%20for%20%22initialization%22%20section%29%0A%0A//%20%28c%29%20Infocatcher%202011-2016%0A//%20version%200.1.2%20-%202016-01-04%0A%0A//%20Compatibility%3A%20Firefox%204.0+%2C%20SeaMonkey%202.1+%0A%0A//%20Icon%20by%20FatCow%20Web%20Hosting%3A%20http%3A//www.iconfinder.com/icondetails/36059/16/%0A%0A//%20Hidden%20feature%3A%20you%20can%20manually%20set%20extensions.custombuttons.button%26lt%3BN%26gt%3B.bookmarkFolder%0A//%20preference%20to%20any%20place%3A%20URI%20https%3A//developer.mozilla.org/en-US/docs/Places_query_URIs%0A//%20%28and%20press%20OK%20in%20button%20editor%20or%20reopen%20window%20or%20restart%20browser%29%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%09useFolderTitle%3A%20true%2C%0A%09//%20%22Select%20folder%22%20dialog%3A%0A%09dialogWidth%3A%20400%2C%0A%09dialogHeight%3A%20350%2C%0A%09dialogPersist%3A%20%22%22%20//%20Example%3A%20%22screenX%20screenY%20width%20height%22%0A%7D%3B%0A%0Afunction%20_localize%28s%2C%20key%29%20%7B%0A%09var%20strings%20%3D%20%7B%0A%09%09%22Select%20folder%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20%u043F%u0430%u043F%u043A%u0443%22%0A%09%09%7D%2C%0A%09%09%22Root%20folder%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041A%u043E%u0440%u043D%u0435%u0432%u0430%u044F%20%u043F%u0430%u043F%u043A%u0430%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%20Services.prefs%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%22@mozilla.org/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%29%20%7B%0A%09%09%09return%20strings%5Bs%5D%20%26amp%3B%26amp%3B%20strings%5Bs%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%0Afunction%20hasModifier%28e%29%20%7B%0A%09return%20e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%3B%0A%7D%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%21%3D%202%20%26amp%3B%26amp%3B%20%21this.bookmarks.initialized%29%0A%09%09this.bookmarks.init%28%29%3B%0A%09else%20if%28e.button%20%3D%3D%201%20%7C%7C%20e.button%20%3D%3D%200%20%26amp%3B%26amp%3B%20hasModifier%28e%29%29%0A%09%09this.bookmarks.changeFolder%28%29%3B%0A%7D%3B%0Athis.onmousedown%20%3D%20function%28e%29%20%7B%0A%09if%28e.target%20%3D%3D%20this%20%26amp%3B%26amp%3B%20e.button%20%3D%3D%200%20%26amp%3B%26amp%3B%20hasModifier%28e%29%29%0A%09%09e.preventDefault%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%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%0Athis.bookmarks%20%3D%20%7B%0A%09button%3A%20this%2C%0A%09get%20pref%28%29%20%7B%0A%09%09delete%20this.pref%3B%0A%09%09return%20this.pref%20%3D%20%22extensions.custombuttons.button%22%20+%20this.button.id.match%28/%5Cd*%24/%29%5B0%5D%20+%20%22.bookmarkFolder%22%3B%0A%09%7D%2C%0A%09get%20folder%28%29%20%7B%0A%09%09return%20this.getStringPref%28this.pref%2C%20%22%22%29%3B%0A%09%7D%2C%0A%09set%20folder%28val%29%20%7B%0A%09%09this.setStringPref%28this.pref%2C%20%22%22%20+%20val%29%3B%0A%09%7D%2C%0A%09get%20titlePref%28%29%20%7B%0A%09%09delete%20this.titlePref%3B%0A%09%09return%20this.titlePref%20%3D%20%22extensions.custombuttons.button%22%20+%20this.button.id.match%28/%5Cd*%24/%29%5B0%5D%20+%20%22.bookmarkFolderTitle%22%3B%0A%09%7D%2C%0A%09get%20folderTitle%28%29%20%7B%0A%09%09return%20this.getStringPref%28this.titlePref%2C%20%22%22%29%3B%0A%09%7D%2C%0A%09set%20folderTitle%28val%29%20%7B%0A%09%09this.setStringPref%28this.titlePref%2C%20val%29%3B%0A%09%7D%2C%0A%09initialized%3A%20false%2C%0A%09init%3A%20function%28%29%20%7B%0A%09%09var%20folder%20%3D%20this.folder%3B%0A%09%09if%28%21folder%29%20%7B%0A%09%09%09folder%20%3D%20this.selectFolder%28%29%3B%0A%09%09%09if%28%21folder%29%0A%09%09%09%09return%3B%0A%09%09%09this.folder%20%3D%20folder%3B%0A%09%09%7D%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09btn.setAttribute%28%22ondragenter%22%2C%20%22PlacesMenuDNDHandler.onDragEnter%28event%29%3B%22%29%3B%0A%09%09btn.setAttribute%28%22ondragover%22%2C%20%20%22PlacesMenuDNDHandler.onDragOver%28event%29%3B%22%29%3B%0A%09%09btn.setAttribute%28%22ondragexit%22%2C%20%20%22PlacesMenuDNDHandler.onDragExit%28event%29%3B%22%29%3B%0A%09%09//btn.setAttribute%28%22ondrop%22%2C%20%20%20%20%20%20%22PlacesMenuDNDHandler.onDrop%28event%29%3B%22%29%3B%0A%09%09btn.setAttribute%28%22ondrop%22%2C%20%20%20%20%20%20%22this.bookmarks.onDrop%28event%29%3B%22%29%3B%0A%09%09var%20mp%20%3D%20btn.getElementsByTagName%28%22menupopup%22%29%3B%0A%09%09mp.length%20%26amp%3B%26amp%3B%20mp%5B0%5D.parentNode.removeChild%28mp%5B0%5D%29%3B%0A%09%09mp%20%3D%20document.createElement%28%22menupopup%22%29%3B%0A%09%09mp.setAttribute%28%22context%22%2C%20%22placesContext%22%29%3B%0A%09%09mp.setAttribute%28%22placespopup%22%2C%20%22true%22%29%3B%0A%09%09var%20placeURI%20%3D%20folder.substr%280%2C%206%29%20%3D%3D%20%22place%3A%22%0A%09%09%09%3F%20folder%0A%09%09%09%3A%20%22place%3Afolder%3D%22%20+%20folder%20+%20%22%26amp%3BexcludeItems%3D0%26amp%3BexpandQueries%3D0%22%3B%0A%09%09placeURI%20%3D%20placeURI.replace%28/%22/g%2C%20%27%5C%5C%22%27%29%3B%0A%09%09mp.setAttribute%28%0A%09%09%09%22onpopupshowing%22%2C%0A%09%09%09%27this.parentNode.bookmarks.initMenu%28event%2C%20%22%27%20+%20placeURI%20+%20%27%22%29%3B%27%0A%09%09%29%3B%0A%09%09mp.setAttribute%28%22oncommand%22%2C%20%22BookmarksEventHandler.onCommand%28event%2C%20this.parentNode._placesView%29%3B%22%29%3B%0A%09%09mp.setAttribute%28%22onclick%22%2C%20%22BookmarksEventHandler.onClick%28event%2C%20this.parentNode._placesView%29%3B%22%29%3B%0A%09%09mp.setAttribute%28%22tooltip%22%2C%20%22bhTooltip%22%29%3B%0A%09%09mp.setAttribute%28%22popupsinherittooltip%22%2C%20%22true%22%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%09%09options.useFolderTitle%20%26amp%3B%26amp%3B%20setTimeout%28function%28_this%29%20%7B%0A%09%09%09_this.setButtonTitle%28%29%3B%0A%09%09%7D%2C%200%2C%20this%29%3B%0A%0A%09%09this.initialized%20%3D%20true%3B%0A%09%7D%2C%0A%09initMenu%3A%20function%28event%2C%20placeURI%29%20%7B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09if%28%22_placesView%22%20in%20btn%29%0A%09%09%09return%3B%0A%09%09btn._placesMenu%20%3D%20new%20PlacesMenu%28event%2C%20placeURI%29%3B%0A%09%09if%28options.useFolderTitle%29%0A%09%09%09this.setButtonTitle%28btn._placesView._resultNode%20%26amp%3B%26amp%3B%20btn._placesView._resultNode.title%29%3B%0A%09%09//%20Add%20%22Open%20All%20in%20Tabs%22%20menuitem%0A%09%09try%20%7B%0A%09%09%09btn._placesView._mayAddCommandsItems.call%28%7B%0A%09%09%09%09_rootElt%3A%20null%2C%0A%09%09%09%09__proto__%3A%20btn._placesView%0A%09%09%09%7D%2C%20btn.firstChild%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09PlacesViewBase.prototype._mayAddCommandsItems%28btn.firstChild%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09destroy%3A%20function%28%29%20%7B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09if%28%21%28%22_placesMenu%22%20in%20btn%29%29%0A%09%09%09return%3B%0A%09%09try%20%7B%0A%09%09%09btn._placesMenu.uninit%28%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%09delete%20btn._placesView%3B%0A%09%09delete%20btn._placesMenu%3B%0A%09%7D%2C%0A%09setButtonTitle%3A%20function%28title%29%20%7B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09if%28title%29%0A%09%09%09this.folderTitle%20%3D%20title%3B%0A%09%09else%0A%09%09%09title%20%3D%20this.folderTitle%3B%0A%09%09if%28title%29%0A%09%09%09btn.tooltipText%20%3D%20btn.label%20%3D%20title%3B%0A%09%7D%2C%0A%09initWithFolder%3A%20function%28folder%29%20%7B%0A%09%09this.destroy%28%29%3B%0A%09%09this.folder%20%3D%20folder%3B%0A%09%09var%20mp%20%3D%20this.button.firstChild%3B%0A%09%09mp.setAttribute%28%0A%09%09%09%22onpopupshowing%22%2C%0A%09%09%09mp.getAttribute%28%22onpopupshowing%22%29%0A%09%09%09%09.replace%28/%28place%3Afolder%3D%29%5Cw+/%2C%20%22%241%22%20+%20folder%29%0A%09%09%29%3B%0A%09%7D%2C%0A%09selectFolder%3A%20function%28%29%20%7B%0A%09%09var%20winType%20%3D%20this.button.id%20+%20%22%3Adialog%22%3B%0A%09%09var%20win%20%3D%20Services.wm.getMostRecentWindow%28winType%29%3B%0A%09%09if%28win%29%20%7B%0A%09%09%09win.focus%28%29%3B%0A%09%09%09return%20null%3B%0A%09%09%7D%0A%09%09//%20https%3A//developer.mozilla.org/en/Displaying_Places_information_using_views%0A%09%09var%20rootFolder%20%3D%20PlacesUIUtils.allBookmarksFolderId%3B%0A%09%09var%20placesOverlay%20%3D%20Services.appinfo.name%20%3D%3D%20%22SeaMonkey%22%0A%09%09%09%3F%20%27%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//communicator/skin/bookmarks/bookmarks.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//communicator/content/places/places.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxul-overlay%20href%3D%22chrome%3A//communicator/content/bookmarks/placesOverlay.xul%22%3F%26gt%3B%27%0A%09%09%09%3A%20%27%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//browser/content/places/places.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//browser/skin/places/places.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxul-overlay%20href%3D%22chrome%3A//browser/content/places/placesOverlay.xul%22%3F%26gt%3B%27%3B%0A%09%09//%20Note%3A%20%26lt%3Bproperty%20name%3D%22view%22%26gt%3B%20from%20chrome%3A//communicator/content/places/tree.xml%23places-tree%0A%09%09//%20are%20null%20sometimes.%0A%09%09//%20We%20are%20trying%20to%20re-apply%20binding%20as%20a%20workaround.%0A%09%09var%20persist%20%3D%20options.dialogPersist%3B%0A%09%09if%28persist%29%20%7B%0A%09%09%09persist%20%3D%20%27%5Cn%5C%0A%09%09%09%09persist%3D%22%27%20+%20persist%20+%20%27%22%27%3B%0A%09%09%7D%0A%09%09var%20winSrc%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%27%0A%09%09%09+%20placesOverlay%20+%20%27%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-dialog%22%20+%20%27%22%5Cn%5C%0A%09%09%09%09windowtype%3D%22%27%20+%20winType%20+%20%27%22%5Cn%5C%0A%09%09%09%09title%3D%22%27%20+%20_localize%28%22Select%20folder%22%29%20+%20%27%22%5Cn%5C%0A%09%09%09%09buttons%3D%22accept%2Ccancel%22%5Cn%5C%0A%09%09%09%09onload%3D%22init%28%29%3B%22%5Cn%5C%0A%09%09%09%09ondialogaccept%3D%22return%20dialogCallback%28%29%3B%22%5Cn%5C%0A%09%09%09%09width%3D%22%27%20+%20options.dialogWidth%20+%20%27%22%5Cn%5C%0A%09%09%09%09height%3D%22%27%20+%20options.dialogHeight%20+%20%27%22%27%20+%20persist%20+%20%27%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%22key-accept%22%20keycode%3D%22VK_RETURN%22%20modifiers%3D%22control%22%5Cn%5C%0A%09%09%09%09%09%09oncommand%3D%22document.documentElement.acceptDialog%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%3Btree%20id%3D%22tree%22%20type%3D%22places%22%5Cn%5C%0A%09%09%09%09%09place%3D%22place%3AexcludeItems%3D1%26amp%3Bamp%3BexcludeQueries%3D1%26amp%3Bamp%3Bfolder%3D%27%20+%20rootFolder%20+%20%27%22%5Cn%5C%0A%09%09%09%09%09hidecolumnpicker%3D%22true%22%20seltype%3D%22single%22%20flex%3D%221%22%5Cn%5C%0A%09%09%09%09%09onselect%3D%22onSelect%28%29%3B%22%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3Btreecols%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3Btreecol%20id%3D%22title%22%20flex%3D%221%22%20primary%3D%22true%22%20hideheader%3D%22true%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3B/treecols%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3Btreechildren%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3B/tree%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3Bcheckbox%20id%3D%22root%22%20label%3D%22%27%20+%20_localize%28%22Root%20folder%22%29%20+%20%27%22%20oncommand%3D%22onSelect%28%29%3B%22%20/%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%5BfolderId%2C%20rootFolder%2C%20callback%2C%20context%5D%20%3D%20window.arguments%3B%5Cn%5C%0A%09%09%09%09var%20tree%20%3D%20document.getElementById%28%22tree%22%29%3B%5Cn%5C%0A%09%09%09%09var%20root%20%3D%20document.getElementById%28%22root%22%29%3B%5Cn%5C%0A%09%09%09%09function%20init%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09if%28%21ensurePlacesBinding%28init%2C%20this%2C%20arguments%29%29%5Cn%5C%0A%09%09%09%09%09%09return%3B%5Cn%5C%0A%09%09%09%09%09if%28folderId%20%3D%3D%20rootFolder%29%5Cn%5C%0A%09%09%09%09%09%09root.checked%20%3D%20true%3B%5Cn%5C%0A%09%09%09%09%09else%20if%28folderId%20%21%3D%20undefined%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09tree.selectItems%28%5BfolderId%5D%29%3B%5Cn%5C%0A%09%09%09%09%09%09var%20i%20%3D%20tree.view.selection.currentIndex%3B%5Cn%5C%0A%09%09%09%09%09%09if%28i%20%21%3D%20-1%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09setTimeout%28function%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09%09tree.treeBoxObject.ensureRowIsVisible%28i%29%3B%5Cn%5C%0A%09%09%09%09%09%09%09%7D%2C%200%29%3B%5Cn%5C%0A%09%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09onSelect%28%29%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20onSelect%28dis%29%20%7B%5Cn%5C%0A%09%09%09%09%09if%28%21ensurePlacesBinding%28onSelect%2C%20this%2C%20arguments%29%29%5Cn%5C%0A%09%09%09%09%09%09return%3B%5Cn%5C%0A%09%09%09%09%09if%28%21arguments.length%29%5Cn%5C%0A%09%09%09%09%09%09dis%20%3D%20%21root.checked%20%26amp%3B%26amp%3B%20%21tree.view.selection.getRangeCount%28%29%3B%5Cn%5C%0A%09%09%09%09%09document.documentElement.getButton%28%22accept%22%29.disabled%20%3D%20dis%3B%5Cn%5C%0A%09%09%09%09%09disableTree%28root.checked%29%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20ensurePlacesBinding%28func%2C%20context%2C%20args%29%20%7B%5Cn%5C%0A%09%09%09%09%09if%28tree.view%20%26amp%3B%26amp%3B%20tree.selectItems%29%5Cn%5C%0A%09%09%09%09%09%09return%20true%3B%5Cn%5C%0A%09%09%09%09%09%5C//%20Try%20re-apply%20binding%2C%20hack%20for%20SeaMonkey%5Cn%5C%0A%09%09%09%09%09tree.removeAttribute%28%22type%22%29%3B%5Cn%5C%0A%09%09%09%09%09setTimeout%28function%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09tree.setAttribute%28%22type%22%2C%20%22places%22%29%3B%5Cn%5C%0A%09%09%09%09%09%09setTimeout%28function%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09func.apply%28context%2C%20args%29%3B%5Cn%5C%0A%09%09%09%09%09%09%7D%2C%200%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%2C%200%29%3B%5Cn%5C%0A%09%09%09%09%09return%20false%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20disableTree%28dis%29%20%7B%5Cn%5C%0A%09%09%09%09%09var%20treechildren%20%3D%20tree.getElementsByTagName%28%22treechildren%22%29%5B0%5D%3B%5Cn%5C%0A%09%09%09%09%09if%28dis%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09treechildren.style.opacity%20%3D%20%220.6%22%3B%5Cn%5C%0A%09%09%09%09%09%09tree.setAttribute%28%22disabled%22%2C%20%22true%22%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09else%20%7B%5Cn%5C%0A%09%09%09%09%09%09treechildren.style.opacity%20%3D%20%22%22%3B%5Cn%5C%0A%09%09%09%09%09%09tree.removeAttribute%28%22disabled%22%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%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%09if%28root.checked%29%5Cn%5C%0A%09%09%09%09%09%09var%20id%20%3D%20rootFolder%3B%5Cn%5C%0A%09%09%09%09%09else%20%7B%5Cn%5C%0A%09%09%09%09%09%09var%20view%20%3D%20tree.view%3B%5Cn%5C%0A%09%09%09%09%09%09var%20i%20%3D%20view.selection.currentIndex%3B%5Cn%5C%0A%09%09%09%09%09%09if%28i%20%3D%3D%20-1%29%5Cn%5C%0A%09%09%09%09%09%09%09return%20false%3B%5Cn%5C%0A%09%09%09%09%09%09var%20item%20%3D%20view.nodeForTreeIndex%28i%29%3B%5Cn%5C%0A%09%09%09%09%09%09if%28item%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09var%20id%20%3D%20/place%3Afolder%3D%28%5C%5Cw+%29/.test%28item.uri%29%5Cn%5C%0A%09%09%09%09%09%09%09%09%3F%20RegExp.%241%5Cn%5C%0A%09%09%09%09%09%09%09%09%3A%20item.itemId%3B%5Cn%5C%0A%09%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09callback.call%28context%2C%20id%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%09onSelect%28false%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%09%09var%20folder%3B%0A%09%09var%20callback%20%3D%20function%28folderId%29%20%7B%0A%09%09%09folder%20%3D%20folderId%3B%0A%09%09%7D%3B%0A%09%09var%20folderId%20%3D%20this.getFolderId%28this.folder%29%3B%0A%09%09window.openDialog%28%0A%09%09%09%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20encodeURIComponent%28winSrc.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%2Cmodal%22%2C%0A%09%09%09folderId%2C%20rootFolder%2C%20callback%2C%20this%0A%09%09%29%3B%0A%09%09if%28folder%20%26amp%3B%26amp%3B%20options.useFolderTitle%29%20setTimeout%28function%28btn%29%20%7B%0A%09%09%09var%20mp%20%3D%20btn.firstChild%3B%0A%09%09%09mp.collapsed%20%3D%20true%3B%0A%09%09%09btn.open%20%3D%20true%3B%0A%09%09%09btn.open%20%3D%20false%3B%0A%09%09%09mp.collapsed%20%3D%20false%3B%0A%09%09%7D%2C%20100%2C%20this.button%29%3B%0A%09%09return%20folder%3B%0A%09%7D%2C%0A%09changeFolder%3A%20function%28%29%20%7B%0A%09%09if%28%21this.initialized%29%20%7B%0A%09%09%09this.init%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09var%20folder%20%3D%20this.selectFolder%28%29%3B%0A%09%09if%28%21folder%29%0A%09%09%09return%3B%0A%09%09this.initWithFolder%28folder%29%3B%0A%0A%09%09var%20ws%20%3D%20Services.wm.getEnumerator%28%22navigator%3Abrowser%22%29%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%20%3D%3D%20window%29%0A%09%09%09%09continue%3B%0A%09%09%09let%20btn%20%3D%20w.document.getElementById%28this.button.id%29%3B%0A%09%09%09if%28btn%29%20%7B%0A%09%09%09%09btn.bookmarks.initWithFolder%28folder%29%3B%0A%09%09%09%09setTimeout%28function%28btn%2C%20_this%29%20%7B%0A%09%09%09%09%09btn.tooltipText%20%3D%20_this.button.tooltipText%3B%0A%09%09%09%09%7D%2C%20110%2C%20btn%2C%20this%29%3B%20//%20Will%20be%20updatetd%20after%20100ms%20in%20selectFolder%28%29%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%2C%0A%09getFolderId%3A%20function%28folder%29%20%7B%0A%09%09if%28/%5E%5Cd+%24/.test%28folder%29%29%0A%09%09%09return%20Number%28folder%29%3B%0A%09%09var%20bmsvc%20%3D%20Components.classes%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%09%09switch%28folder%29%20%7B%0A%09%09%09case%20%22BOOKMARKS_MENU%22%3A%20%20%20%20return%20bmsvc.bookmarksMenuFolder%3B%0A%09%09%09case%20%22TOOLBAR%22%3A%20%20%20%20%20%20%20%20%20%20%20return%20bmsvc.toolbarFolder%3B%0A%09%09%09case%20%22UNFILED_BOOKMARKS%22%3A%20return%20bmsvc.unfiledBookmarksFolder%3B%0A%09%09%7D%0A%09%09return%20undefined%3B%0A%09%7D%2C%0A%09placesDrop%3A%20function%28event%2C%20folder%29%20%7B%0A%09%09//%20Based%20on%20PlacesMenuDNDHandler.onDrop%28event%29%20function%0A%09%09try%20%7B%0A%09%09%20%20%20%20var%20ip%20%3D%20new%20InsertionPoint%28folder%2C%20PlacesUtils.bookmarks.DEFAULT_INDEX%2C%20Ci.nsITreeView.DROP_ON%29%3B%0A%09%09%20%20%20%20PlacesControllerDragHelper.onDrop%28ip%2C%20event.dataTransfer%29%3B%0A%09%09%20%20%20%20event.stopPropagation%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%28e%29%20%7B%0A%09%20%20%20%20%09Components.utils.reportError%28e%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%2C%0A%09onDrop%3A%20function%28e%29%20%7B%0A%09%09var%20folder%20%3D%20this.folder%3B%0A%09%09if%28e.target%20%21%3D%20this.button%20%7C%7C%20%21folder%29%20%7B%0A%09%09%09PlacesMenuDNDHandler.onDrop%28e%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09var%20folderId%20%3D%20this.getFolderId%28folder%29%3B%0A%09%09if%28folderId%29%0A%09%09%09this.placesDrop%28e%2C%20folderId%29%3B%0A%09%09else%0A%09%09%09PlacesMenuDNDHandler.onDrop%28e%29%3B%0A%09%7D%2C%0A%09getStringPref%3A%20function%28name%2C%20defaultVal%29%20%7B%0A%09%09try%20%7B%0A%09%09%09return%20Services.prefs.getComplexValue%28name%2C%20Components.interfaces.nsISupportsString%29.data%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%7D%0A%09%09return%20defaultVal%3B%0A%09%7D%2C%0A%09setStringPref%3A%20function%28name%2C%20val%29%20%7B%0A%09%09var%20ss%20%3D%20Components.interfaces.nsISupportsString%3B%0A%09%09var%20str%20%3D%20Components.classes%5B%22@mozilla.org/supports-string%3B1%22%5D%0A%09%09%09.createInstance%28ss%29%3B%0A%09%09str.data%20%3D%20val%3B%0A%09%09Services.prefs.setComplexValue%28name%2C%20ss%2C%20str%29%3B%0A%09%7D%0A%7D%3B%0A%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%0AsetTimeout%28function%28_this%29%20%7B%20//%20Don%27t%20show%20modal%20%22Select%20folder%22%20dialog%20during%20initialization%0A%09_this.bookmarks.init%28%29%3B%0A%7D%2C%200%2C%20this%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%09this.bookmarks.destroy%28%29%3B%0A%7D%3B%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%28%21event.target%20%26%26%20%21this.disabled%29%20//%20Button%27s%20hotkey%20pressed%0A%09this.open%20%3D%20true%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Исходный код, инициализация: bookmarksFolder.js
Отредактировано Infocatcher (04-01-2016 21:30:42)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Тестовая версия, будьте осторожны!
Отредактировано Infocatcher (20-05-2014 12:52:54)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
а где эта кнопка хранит название папки?
https://github.com/Infocatcher/Custom_B … der.js#L79
extensions.custombuttons.button%номер_кнопки%.bookmarkFolder
Там идентификатор.
и еще просьба - можно сделать чтоб тултип выводил навание выбранной папки( если возможно то дать возможность выбирать между просто именем папк и путём для нее типа "Разное" и "Программирование\Javascript\Разное"
Нууу... Никто не мешает переименовывать кнопку.
Путь сложно, а вот имя выбранной папки, вроде, доступно без дополнительных действий.
зы сделал иконку точнее отображающую смысл кнопки
Так а чего там дорисовывать, если результат ведет себя как обычная папка с закладками?
А можно сделать, чтобы после растягивания окна выбора папки, оно при повторном открытие сохраняла выбранный размер.
Если не беспокоит вздутие localstore.rdf в профиле, можно добавить
<dialog xmlns="' + xulns + '"\n\
...
width="400"\n\
height="350"\n\
persist="width height">\n\
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Если не беспокоит вздутие localstore.rdf в профиле, можно добавить
<dialog xmlns="' + xulns + '"\n\
...
width="400"\n\
height="350"\n\
persist="width height">\n\
Да вздутие не беспокоит, только можно подробнее, что туда надо вдуть, а то я понимаю это только набросок.
Отсутствует
voqabuhe
Ну да, вместо многоточия там другие атрибуты остаться должны.
Найти:
Заменить на:
Добавлено 27-01-2013 22:38:41
В принципе, от вздутия можно создавать в виде data: ссылки только основную часть окна, а все содержимое добавлять туда программно, но это куда менее удобно.
Отредактировано Infocatcher (27-01-2013 22:38:41)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Bookmarks Folder 0.1.1pre (2013-01-27) (осторожно, это тестовая версия!)
[+] Добавлена настройка "useFolderTitle" для использования имени папки в качестве названия и всплывающей подсказки кнопки.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Bookmarks Folder 0.1.1 (2014-05-20)
0.1.1pre (2013-01-27)
[+] Добавлена настройка «useFolderTitle» для использования имени папки в качестве названия и всплывающей подсказки кнопки.
0.1.1pre2 (2013-02-11)
[+] Добавлена настройка «showLabel» для принудительного отображения/скрытия подписи кнопки.
0.1.1 (2014-05-20)
[+] Добавлены настройки для задания размера диалога выбора папки и отключенная по умолчанию настройка «dialogPersist» для запоминания размера/положения диалога.
[x] Исправлено определение выбранной локали в Linux (#20).
[x] Исправлено добавление пункта «Открыть всё во вкладках» в Firefox 29+.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Здравствуйте! А можно сюда на двойной клик по кнопке еще вот
SeaMonkey 2.39 forever
Отсутствует
emlen
Можно дописать
this.ondblclick = function(e) { if(e.target == this && e.button == 0) PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.toolbarFolderId); };
перед
Только меню при этом будет открываться, конечно.
Но иначе будет открытие с задержкой (и сложнее делать).
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Bookmarks Folder 0.1.2 (2016-01-04)
[x] Исправлено автоматическое открытие меню (и закрытие соседних) в Firefox 36+ (#28).
[+] Добавлена поддержка расширения Vertical Toolbar (#32).
[x] Исправлена совместимость с будущими версиями Firefox без Application.* API (#36).
Отредактировано Infocatcher (04-01-2016 21:31:49)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Только меню при этом будет открываться, конечно.
К сожалению это не единственная проблема - на двойной клик по папочкам назначено добавление закладок и теперь
при попытке добавить закладку в папку одновременно происходит и вызов того кода..
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%3E%u0417%u0430%u043A%u043B%u0430%u0434%u043E%u0447%u043A%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAALAAAALoAAADnXBoAyVwaAMlcGgDJXBoAyVwaAMlcGgDJXBoAyVwaAMlcGgDJRhQApAAAACwAAAASAAAACgAAABYAAADbYGBg/8qXZP/Fkl//xZJf/8WSX//Fkl//xZJf/8WSX//Fkl//ypdk/2gkAMMAAAAWAAAACgAAAAABAQEAAQEBzmJiYv/IlWL/vYpX/7+MWf+/jFn/v4xZ/7+MWf+/jFn/vYpX/8iVYv91MAG9WSUBAAAAAAABAQEAAQEBAAEBAclkZGT/mWYz/7F+S//Bjlv/s4BN/5lmM//Bjlv/wY5b/76LWP/Kl2T/ezQBuns0AQBdKAEAAQEBAAEBAQABAQHFZ2dn/3dekf+IYmL/qndE/4hiYv93XpH/xJFe/8SRXv+/jFn/zZpn/343Abh+NwEAfjcBAAEBAQABAQEAAQEBwWtra/94X5H/aGj//3hfkf9oaP//eF+R/8iVYv/IlWL/v4xZ/9Gea/+COgG3gjoBAII6AQABAQEAAQEBAAEBAb5ubm7/emCS/2dn/P9jY/j/Z2f8/3pgkv/LmGX/y5hl/7+MWf/UoW7/hj0BtYY9AQCGPQEAAQEBAAEBAQABAQG7cnJy/3xik/9nZ/n/Xl7z/2dn+f98YpP/z5xp/8+caf+/jFn/2KVy/4lAAbOJQAEAiUABAAEBAQABAQEAAQEBuHV1df9+ZZT/bGz6/2Nj9f9sbPr/fmWU/9KfbP/Sn2z/votY/9uodf+NQwGyjUMBAI1DAQABAQEAAQEBAAEBAbV5eXn/gGeV/3Bw+/9nZ/f/cHD7/4Bnlf/Wo3D/1qNw/76LWP/frHn/kEUBsJBFAQCQRQEAAQEBAAEBAQABAQGyfHx8/4Npl/91df3/bGz6/3V1/f+DaZf/47B9/+Owff+8iVb/4q98/5JIAa+SSAEAkkgBAAEBAQABAQEAAQEBsH5+fv+Fa5j/eXn+/3Bw/P95ef7/hWuY/7uIVf+7iFX/u4hV/+Sxfv+VSgGtlUoBAJVKAQABAQEAAQEBAAEBAa6AgID/h22Z/319//90dP7/fX3//4dtmf/lsn//5bJ//+Wyf//qt4T/l0wBrJdMAQCXTAEAAQEBAAEBAQABAQGsVVVV/4hvmf+EhP//f3///4SE//+Ib5n/u4hV/7uIVf+7iFX/u4hV/5lNAauZTQEAmU0BAAQEBAAEBAQABAQEiry8q/9hYcv/Q0PX/0VF2v9ISN3/cHDf/+jo4v/v7+z/9/f0//z8/P9VVStmVVUrAFVVKwAEBAQABAQEAAQEBGgEBASKmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0BgZlNAQCZTQEAAAAAAAAAAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3Eif%20%28%20this.hasAttribute%28%22initialized%22%29%20%29%20return%3B%0A%0A//%20http%3A//infocatcher.ucoz.net/js/cb/bookmarksFolder.js%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fid%3D57872%0A//%20https%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Bookmarks_Folder%0A%0A//%20Bookmarks%20Folder%20button%20for%20Custom%20Buttons%0A//%20%28code%20for%20%22initialization%22%20section%29%0A%0A//%20%28c%29%20Infocatcher%202011-2014%0A//%20version%200.1.1%20-%202014-05-20%0A%0A//%20Compatibility%3A%20Firefox%204.0+%2C%20SeaMonkey%202.1+%0A%0A//%20Icon%20by%20FatCow%20Web%20Hosting%3A%20http%3A//www.iconfinder.com/icondetails/36059/16/%0A%0A//%20Hidden%20feature%3A%20you%20can%20manually%20set%20extensions.custombuttons.button%26lt%3BN%26gt%3B.bookmarkFolder%0A//%20preference%20to%20any%20place%3A%20URI%20https%3A//developer.mozilla.org/en-US/docs/Places_query_URIs%0A//%20%28and%20press%20OK%20in%20button%20editor%20or%20reopen%20window%20or%20restart%20browser%29%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%09useFolderTitle%3A%20true%2C%0A%09//%20%22Select%20folder%22%20dialog%3A%0A%09dialogWidth%3A%20400%2C%0A%09dialogHeight%3A%20350%2C%0A%09dialogPersist%3A%20%22%22%20//%20Example%3A%20%22screenX%20screenY%20width%20height%22%0A%7D%3B%0A%0Afunction%20_localize%28s%2C%20key%29%20%7B%0A%09var%20strings%20%3D%20%7B%0A%09%09%22Select%20folder%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20%u043F%u0430%u043F%u043A%u0443%22%0A%09%09%7D%2C%0A%09%09%22Root%20folder%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041A%u043E%u0440%u043D%u0435%u0432%u0430%u044F%20%u043F%u0430%u043F%u043A%u0430%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%20Services.prefs%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%22@mozilla.org/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%29%20%7B%0A%09%09%09return%20strings%5Bs%5D%20%26amp%3B%26amp%3B%20strings%5Bs%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%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0A//this.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%5C%0A//%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5CnCtrl-%u041B%3A%20%u0421%u043A%u0440%u044B%u0442%u044C/%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5C%0A%20%20//%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%3B%0A%0A/*%0Athis.ondblclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20if%28e.target%20%3D%3D%20this%20%26amp%3B%26amp%3B%20e.button%20%3D%3D%200%29%0A%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20PlacesCommandHook.showBookmarksManager%28%27AllBookmarks%27%29%3B%0A%20%20%20%20%20%20%20%20%0A%7D%3B%0A*/%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%09if%28e.target%20%21%3D%20this%29%0A%09%09return%3B%0A%09%0A%09%0A%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26amp%3B%26amp%3B%20%21e.ctrlKey%20%26amp%3B%26amp%3B%20%21e.shiftKey%20%26amp%3B%26amp%3B%20%21e.altKey%20%26amp%3B%26amp%3B%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20PlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.toolbarFolderId%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%7D%09%09%0A%09%09%0A%09%09%0A%09%09%0A%09if%28e.button%20%21%3D%202%20%26amp%3B%26amp%3B%20%21this.bookmarks.initialized%29%0A%09%09this.bookmarks.init%28%29%3B%0A%09else%20if%28e.button%20%3D%3D%201%20%7C%7C%20e.button%20%3D%3D%200%20%26amp%3B%26amp%3B%20%28e.shiftKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%29%29%0A%09%09this.bookmarks.changeFolder%28%29%3B%0A%09else%20if%28e.button%20%3D%3D%201%20%7C%7C%20e.button%20%3D%3D%200%20%26amp%3B%26amp%3B%20%28e.ctrlKey%29%29%0A%09%09var%20bar%20%3D%20document.getElementById%28%22PersonalToolbar%22%29%3B%0A%20%20%20%20%20%20%20%20%20%09bar.collapsed%20%3D%20%21bar.collapsed%3B%0A%20%20%20%20%20%20%20%20%20%09document.persist%28%22PersonalToolbar%22%2C%20%21bar.collapsed%29%3B%09%09%0A%7D%3B%0Athis.onmousedown%20%3D%20function%28e%29%20%7B%0A%09if%28e.target%20%3D%3D%20this%20%26amp%3B%26amp%3B%20e.button%20%3D%3D%200%20%26amp%3B%26amp%3B%20%28e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%29%29%0A%09%09e.preventDefault%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%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%26amp%3B%26amp%3B%20node.boxObject%20instanceof%20Components.interfaces.nsIMenuBoxObject%0A%09%09%09%09%26amp%3B%26amp%3B%20node.open%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%0Athis.bookmarks%20%3D%20%7B%0A%09button%3A%20this%2C%0A%09get%20pref%28%29%20%7B%0A%09%09delete%20this.pref%3B%0A%09%09return%20this.pref%20%3D%20%22extensions.custombuttons.button%22%20+%20this.button.id.match%28/%5Cd*%24/%29%5B0%5D%20+%20%22.bookmarkFolder%22%3B%0A%09%7D%2C%0A%09get%20folder%28%29%20%7B%0A%09%09return%20Application.prefs.getValue%28this.pref%2C%20%22%22%29%3B%0A%09%7D%2C%0A%09set%20folder%28val%29%20%7B%0A%09%09Application.prefs.setValue%28this.pref%2C%20String%28val%29%29%3B%0A%09%7D%2C%0A%09get%20titlePref%28%29%20%7B%0A%09%09delete%20this.titlePref%3B%0A%09%09return%20this.titlePref%20%3D%20%22extensions.custombuttons.button%22%20+%20this.button.id.match%28/%5Cd*%24/%29%5B0%5D%20+%20%22.bookmarkFolderTitle%22%3B%0A%09%7D%2C%0A%09get%20folderTitle%28%29%20%7B%0A%09%09return%20Application.prefs.getValue%28this.titlePref%2C%20%22%22%29%3B%0A%09%7D%2C%0A%09set%20folderTitle%28val%29%20%7B%0A%09%09Application.prefs.setValue%28this.titlePref%2C%20val%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%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%09%7D%2C%0A%09initialized%3A%20false%2C%0A%09init%3A%20function%28%29%20%7B%0A%09%09var%20folder%20%3D%20this.folder%3B%0A%09%09if%28%21folder%29%20%7B%0A%09%09%09folder%20%3D%20this.selectFolder%28%29%3B%0A%09%09%09if%28%21folder%29%0A%09%09%09%09return%3B%0A%09%09%09this.folder%20%3D%20folder%3B%0A%09%09%7D%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09btn.setAttribute%28%22ondragenter%22%2C%20%22PlacesMenuDNDHandler.onDragEnter%28event%29%3B%22%29%3B%0A%09%09btn.setAttribute%28%22ondragover%22%2C%20%20%22PlacesMenuDNDHandler.onDragOver%28event%29%3B%22%29%3B%0A%09%09btn.setAttribute%28%22ondragexit%22%2C%20%20%22PlacesMenuDNDHandler.onDragExit%28event%29%3B%22%29%3B%0A%09//btn.setAttribute%28%22onmouseleave%22%2C%20%22this.mo%20%3D%20false%3B%20setTimeout%28function%28mp%29%20%7B%20if%20%28%20%21mp.mo%20%29%20mp.hidePopup%28%29%20%7D%2C%20200%2C%20this%29%22%29%3B%0A%20%20%20%20%20%20%20%20//btn.setAttribute%28%22onmouseover%22%2C%20%22this.mo%20%3D%20true%22%29%3B%0A%09%09//btn.setAttribute%28%22ondrop%22%2C%20%20%20%20%20%20%22PlacesMenuDNDHandler.onDrop%28event%29%3B%22%29%3B%0A%09%09btn.setAttribute%28%22ondrop%22%2C%20%20%20%20%20%20%22this.bookmarks.onDrop%28event%29%3B%22%29%3B%0A%09%09var%20mp%20%3D%20btn.getElementsByTagName%28%22menupopup%22%29%3B%0A%09%09mp.length%20%26amp%3B%26amp%3B%20mp%5B0%5D.parentNode.removeChild%28mp%5B0%5D%29%3B%0A%09%09mp%20%3D%20document.createElement%28%22menupopup%22%29%3B%0A%09%09mp.setAttribute%28%22context%22%2C%20%22placesContext%22%29%3B%0A%09%09mp.setAttribute%28%22placespopup%22%2C%20%22true%22%29%3B%0A%09%09var%20placeURI%20%3D%20folder.substr%280%2C%206%29%20%3D%3D%20%22place%3A%22%0A%09%09%09%3F%20folder%0A%09%09%09%3A%20%22place%3Afolder%3D%22%20+%20folder%20+%20%22%26amp%3BexcludeItems%3D0%26amp%3BexpandQueries%3D0%22%3B%0A%09%09placeURI%20%3D%20placeURI.replace%28/%22/g%2C%20%27%5C%5C%22%27%29%3B%0A%09%09mp.setAttribute%28%0A%09%09%09%22onpopupshowing%22%2C%0A%09%09%09%27this.parentNode.bookmarks.initMenu%28event%2C%20%22%27%20+%20placeURI%20+%20%27%22%29%3B%27%0A%09%09%29%3B%0A%09%09mp.setAttribute%28%22oncommand%22%2C%20%22BookmarksEventHandler.onCommand%28event%2C%20this.parentNode._placesView%29%3B%22%29%3B%0A%09%09mp.setAttribute%28%22onclick%22%2C%20%22BookmarksEventHandler.onClick%28event%2C%20this.parentNode._placesView%29%3B%22%29%3B%0A%09%09mp.setAttribute%28%22tooltip%22%2C%20%22bhTooltip%22%29%3B%0A%09%09mp.setAttribute%28%22popupsinherittooltip%22%2C%20%22true%22%29%3B%0A%09%09btn.appendChild%28mp%29%3B%0A%09%09options.useFolderTitle%20%26amp%3B%26amp%3B%20setTimeout%28function%28_this%29%20%7B%0A%09%09%09_this.setButtonTitle%28%29%3B%0A%09%09%7D%2C%200%2C%20this%29%3B%0A%0A%09%09this.initialized%20%3D%20true%3B%0A%09%7D%2C%0A%09initMenu%3A%20function%28event%2C%20placeURI%29%20%7B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09if%28%22_placesView%22%20in%20btn%29%0A%09%09%09return%3B%0A%09%09btn._placesMenu%20%3D%20new%20PlacesMenu%28event%2C%20placeURI%29%3B%0A%09%09if%28options.useFolderTitle%29%0A%09%09%09this.setButtonTitle%28btn._placesView._resultNode%20%26amp%3B%26amp%3B%20btn._placesView._resultNode.title%29%3B%0A%09%09//%20Add%20%22Open%20All%20in%20Tabs%22%20menuitem%0A%09%09try%20%7B%0A%09%09%09btn._placesView._mayAddCommandsItems.call%28%7B%0A%09%09%09%09_rootElt%3A%20null%2C%0A%09%09%09%09__proto__%3A%20btn._placesView%0A%09%09%09%7D%2C%20btn.firstChild%29%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%0A%09%09%09PlacesViewBase.prototype._mayAddCommandsItems%28btn.firstChild%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09destroy%3A%20function%28%29%20%7B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09if%28%21%28%22_placesMenu%22%20in%20btn%29%29%0A%09%09%09return%3B%0A%09%09try%20%7B%0A%09%09%09btn._placesMenu.uninit%28%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%09delete%20btn._placesView%3B%0A%09%09delete%20btn._placesMenu%3B%0A%09%7D%2C%0A%09setButtonTitle%3A%20function%28title%29%20%7B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09if%28title%29%0A%09%09%09this.folderTitle%20%3D%20title%3B%0A%09%09else%0A%09%09%09title%20%3D%20this.folderTitle%3B%0A%09%09if%28title%29%0A%09%09%09btn.tooltipText%20%3D%20btn.label%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5CnCtrl-%u041B%3A%20%u0421%u043A%u0440%u044B%u0442%u044C/%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%3B//title%3B%0A%09%7D%2C%0A%09initWithFolder%3A%20function%28folder%29%20%7B%0A%09%09this.destroy%28%29%3B%0A%09%09this.folder%20%3D%20folder%3B%0A%09%09var%20mp%20%3D%20this.button.firstChild%3B%0A%09%09mp.setAttribute%28%0A%09%09%09%22onpopupshowing%22%2C%0A%09%09%09mp.getAttribute%28%22onpopupshowing%22%29%0A%09%09%09%09.replace%28/%28place%3Afolder%3D%29%5Cw+/%2C%20%22%241%22%20+%20folder%29%0A%09%09%29%3B%0A%09%7D%2C%0A%09selectFolder%3A%20function%28%29%20%7B%0A%09%09var%20winType%20%3D%20this.button.id%20+%20%22%3Adialog%22%3B%0A%09%09var%20win%20%3D%20this.wm.getMostRecentWindow%28winType%29%3B%0A%09%09if%28win%29%20%7B%0A%09%09%09win.focus%28%29%3B%0A%09%09%09return%20null%3B%0A%09%09%7D%0A%09%09//%20https%3A//developer.mozilla.org/en/Displaying_Places_information_using_views%0A%09%09var%20rootFolder%20%3D%20PlacesUIUtils.allBookmarksFolderId%3B%0A%09%09var%20placesOverlay%20%3D%20Application.name%20%3D%3D%20%22SeaMonkey%22%0A%09%09%09%3F%20%27%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//communicator/skin/bookmarks/bookmarks.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//communicator/content/places/places.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxul-overlay%20href%3D%22chrome%3A//communicator/content/bookmarks/placesOverlay.xul%22%3F%26gt%3B%27%0A%09%09%09%3A%20%27%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//browser/content/places/places.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//browser/skin/places/places.css%22%3F%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B%3Fxul-overlay%20href%3D%22chrome%3A//browser/content/places/placesOverlay.xul%22%3F%26gt%3B%27%3B%0A%09%09//%20Note%3A%20%26lt%3Bproperty%20name%3D%22view%22%26gt%3B%20from%20chrome%3A//communicator/content/places/tree.xml%23places-tree%0A%09%09//%20are%20null%20sometimes.%0A%09%09//%20We%20are%20trying%20to%20re-apply%20binding%20as%20a%20workaround.%0A%09%09var%20persist%20%3D%20options.dialogPersist%3B%0A%09%09if%28persist%29%20%7B%0A%09%09%09persist%20%3D%20%27%5Cn%5C%0A%09%09%09%09persist%3D%22%27%20+%20persist%20+%20%27%22%27%3B%0A%09%09%7D%0A%09%09var%20winSrc%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%27%0A%09%09%09+%20placesOverlay%20+%20%27%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-dialog%22%20+%20%27%22%5Cn%5C%0A%09%09%09%09windowtype%3D%22%27%20+%20winType%20+%20%27%22%5Cn%5C%0A%09%09%09%09title%3D%22%27%20+%20_localize%28%22Select%20folder%22%29%20+%20%27%22%5Cn%5C%0A%09%09%09%09buttons%3D%22accept%2Ccancel%22%5Cn%5C%0A%09%09%09%09onload%3D%22init%28%29%3B%22%5Cn%5C%0A%09%09%09%09ondialogaccept%3D%22return%20dialogCallback%28%29%3B%22%5Cn%5C%0A%09%09%09%09width%3D%22%27%20+%20options.dialogWidth%20+%20%27%22%5Cn%5C%0A%09%09%09%09height%3D%22%27%20+%20options.dialogHeight%20+%20%27%22%27%20+%20persist%20+%20%27%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%22key-accept%22%20keycode%3D%22VK_RETURN%22%20modifiers%3D%22control%22%5Cn%5C%0A%09%09%09%09%09%09oncommand%3D%22document.documentElement.acceptDialog%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%3Btree%20id%3D%22tree%22%20type%3D%22places%22%5Cn%5C%0A%09%09%09%09%09place%3D%22place%3AexcludeItems%3D1%26amp%3Bamp%3BexcludeQueries%3D1%26amp%3Bamp%3Bfolder%3D%27%20+%20rootFolder%20+%20%27%22%5Cn%5C%0A%09%09%09%09%09hidecolumnpicker%3D%22true%22%20seltype%3D%22single%22%20flex%3D%221%22%5Cn%5C%0A%09%09%09%09%09onselect%3D%22onSelect%28%29%3B%22%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3Btreecols%26gt%3B%5Cn%5C%0A%09%09%09%09%09%09%26lt%3Btreecol%20id%3D%22title%22%20flex%3D%221%22%20primary%3D%22true%22%20hideheader%3D%22true%22%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3B/treecols%26gt%3B%5Cn%5C%0A%09%09%09%09%09%26lt%3Btreechildren%20/%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3B/tree%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3Bcheckbox%20id%3D%22root%22%20label%3D%22%27%20+%20_localize%28%22Root%20folder%22%29%20+%20%27%22%20oncommand%3D%22onSelect%28%29%3B%22%20/%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%5BfolderId%2C%20rootFolder%2C%20callback%2C%20context%5D%20%3D%20window.arguments%3B%5Cn%5C%0A%09%09%09%09var%20tree%20%3D%20document.getElementById%28%22tree%22%29%3B%5Cn%5C%0A%09%09%09%09var%20root%20%3D%20document.getElementById%28%22root%22%29%3B%5Cn%5C%0A%09%09%09%09function%20init%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09if%28%21ensurePlacesBinding%28init%2C%20this%2C%20arguments%29%29%5Cn%5C%0A%09%09%09%09%09%09return%3B%5Cn%5C%0A%09%09%09%09%09if%28folderId%20%3D%3D%20rootFolder%29%5Cn%5C%0A%09%09%09%09%09%09root.checked%20%3D%20true%3B%5Cn%5C%0A%09%09%09%09%09else%20if%28folderId%20%21%3D%20undefined%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09tree.selectItems%28%5BfolderId%5D%29%3B%5Cn%5C%0A%09%09%09%09%09%09var%20i%20%3D%20tree.view.selection.currentIndex%3B%5Cn%5C%0A%09%09%09%09%09%09if%28i%20%21%3D%20-1%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09setTimeout%28function%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09%09tree.treeBoxObject.ensureRowIsVisible%28i%29%3B%5Cn%5C%0A%09%09%09%09%09%09%09%7D%2C%200%29%3B%5Cn%5C%0A%09%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09onSelect%28%29%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20onSelect%28dis%29%20%7B%5Cn%5C%0A%09%09%09%09%09if%28%21ensurePlacesBinding%28onSelect%2C%20this%2C%20arguments%29%29%5Cn%5C%0A%09%09%09%09%09%09return%3B%5Cn%5C%0A%09%09%09%09%09if%28%21arguments.length%29%5Cn%5C%0A%09%09%09%09%09%09dis%20%3D%20%21root.checked%20%26amp%3B%26amp%3B%20%21tree.view.selection.getRangeCount%28%29%3B%5Cn%5C%0A%09%09%09%09%09document.documentElement.getButton%28%22accept%22%29.disabled%20%3D%20dis%3B%5Cn%5C%0A%09%09%09%09%09disableTree%28root.checked%29%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20ensurePlacesBinding%28func%2C%20context%2C%20args%29%20%7B%5Cn%5C%0A%09%09%09%09%09if%28tree.view%20%26amp%3B%26amp%3B%20tree.selectItems%29%5Cn%5C%0A%09%09%09%09%09%09return%20true%3B%5Cn%5C%0A%09%09%09%09%09%5C//%20Try%20re-apply%20binding%2C%20hack%20for%20SeaMonkey%5Cn%5C%0A%09%09%09%09%09tree.removeAttribute%28%22type%22%29%3B%5Cn%5C%0A%09%09%09%09%09setTimeout%28function%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09tree.setAttribute%28%22type%22%2C%20%22places%22%29%3B%5Cn%5C%0A%09%09%09%09%09%09setTimeout%28function%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09func.apply%28context%2C%20args%29%3B%5Cn%5C%0A%09%09%09%09%09%09%7D%2C%200%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%2C%200%29%3B%5Cn%5C%0A%09%09%09%09%09return%20false%3B%5Cn%5C%0A%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09function%20disableTree%28dis%29%20%7B%5Cn%5C%0A%09%09%09%09%09var%20treechildren%20%3D%20tree.getElementsByTagName%28%22treechildren%22%29%5B0%5D%3B%5Cn%5C%0A%09%09%09%09%09if%28dis%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09treechildren.style.opacity%20%3D%20%220.6%22%3B%5Cn%5C%0A%09%09%09%09%09%09tree.setAttribute%28%22disabled%22%2C%20%22true%22%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09else%20%7B%5Cn%5C%0A%09%09%09%09%09%09treechildren.style.opacity%20%3D%20%22%22%3B%5Cn%5C%0A%09%09%09%09%09%09tree.removeAttribute%28%22disabled%22%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%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%09if%28root.checked%29%5Cn%5C%0A%09%09%09%09%09%09var%20id%20%3D%20rootFolder%3B%5Cn%5C%0A%09%09%09%09%09else%20%7B%5Cn%5C%0A%09%09%09%09%09%09var%20view%20%3D%20tree.view%3B%5Cn%5C%0A%09%09%09%09%09%09var%20i%20%3D%20view.selection.currentIndex%3B%5Cn%5C%0A%09%09%09%09%09%09if%28i%20%3D%3D%20-1%29%5Cn%5C%0A%09%09%09%09%09%09%09return%20false%3B%5Cn%5C%0A%09%09%09%09%09%09var%20item%20%3D%20view.nodeForTreeIndex%28i%29%3B%5Cn%5C%0A%09%09%09%09%09%09if%28item%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09%09var%20id%20%3D%20/place%3Afolder%3D%28%5C%5Cw+%29/.test%28item.uri%29%5Cn%5C%0A%09%09%09%09%09%09%09%09%3F%20RegExp.%241%5Cn%5C%0A%09%09%09%09%09%09%09%09%3A%20item.itemId%3B%5Cn%5C%0A%09%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%09callback.call%28context%2C%20id%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%09onSelect%28false%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%09%09var%20folder%3B%0A%09%09var%20callback%20%3D%20function%28folderId%29%20%7B%0A%09%09%09folder%20%3D%20folderId%3B%0A%09%09%7D%3B%0A%09%09var%20folderId%20%3D%20this.getFolderId%28this.folder%29%3B%0A%09%09window.openDialog%28%0A%09%09%09%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20encodeURIComponent%28winSrc.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%2Cmodal%22%2C%0A%09%09%09folderId%2C%20rootFolder%2C%20callback%2C%20this%0A%09%09%29%3B%0A%09%09if%28folder%20%26amp%3B%26amp%3B%20options.useFolderTitle%29%20setTimeout%28function%28btn%29%20%7B%0A%09%09%09var%20mp%20%3D%20btn.firstChild%3B%0A%09%09%09mp.collapsed%20%3D%20true%3B%0A%09%09%09btn.open%20%3D%20true%3B%0A%09%09%09btn.open%20%3D%20false%3B%0A%09%09%09mp.collapsed%20%3D%20false%3B%0A%09%09%7D%2C%20100%2C%20this.button%29%3B%0A%09%09return%20folder%3B%0A%09%7D%2C%0A%09changeFolder%3A%20function%28%29%20%7B%0A%09%09if%28%21this.initialized%29%20%7B%0A%09%09%09this.init%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09var%20folder%20%3D%20this.selectFolder%28%29%3B%0A%09%09if%28%21folder%29%0A%09%09%09return%3B%0A%09%09this.initWithFolder%28folder%29%3B%0A%0A%09%09var%20ws%20%3D%20this.wm.getEnumerator%28%22navigator%3Abrowser%22%29%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%20%3D%3D%20window%29%0A%09%09%09%09continue%3B%0A%09%09%09let%20btn%20%3D%20w.document.getElementById%28this.button.id%29%3B%0A%09%09%09btn%20%26amp%3B%26amp%3B%20btn.bookmarks.initWithFolder%28folder%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09getFolderId%3A%20function%28folder%29%20%7B%0A%09%09if%28/%5E%5Cd+%24/.test%28folder%29%29%0A%09%09%09return%20Number%28folder%29%3B%0A%09%09var%20bmsvc%20%3D%20Components.classes%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%09%09switch%28folder%29%20%7B%0A%09%09%09case%20%22BOOKMARKS_MENU%22%3A%20%20%20%20return%20bmsvc.bookmarksMenuFolder%3B%0A%09%09%09case%20%22TOOLBAR%22%3A%20%20%20%20%20%20%20%20%20%20%20return%20bmsvc.toolbarFolder%3B%0A%09%09%09case%20%22UNFILED_BOOKMARKS%22%3A%20return%20bmsvc.unfiledBookmarksFolder%3B%0A%09%09%7D%0A%09%09return%20undefined%3B%0A%09%7D%2C%0A%09placesDrop%3A%20function%28event%2C%20folder%29%20%7B%0A%09%09//%20Based%20on%20PlacesMenuDNDHandler.onDrop%28event%29%20function%0A%09%09try%20%7B%0A%09%09%20%20%20%20var%20ip%20%3D%20new%20InsertionPoint%28folder%2C%20PlacesUtils.bookmarks.DEFAULT_INDEX%2C%20Ci.nsITreeView.DROP_ON%29%3B%0A%09%09%20%20%20%20PlacesControllerDragHelper.onDrop%28ip%2C%20event.dataTransfer%29%3B%0A%09%09%20%20%20%20event.stopPropagation%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%28e%29%20%7B%0A%09%20%20%20%20%09Components.utils.reportError%28e%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%2C%0A%09onDrop%3A%20function%28e%29%20%7B%0A%09%09var%20folder%20%3D%20this.folder%3B%0A%09%09if%28e.target%20%21%3D%20this.button%20%7C%7C%20%21folder%29%20%7B%0A%09%09%09PlacesMenuDNDHandler.onDrop%28e%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09var%20folderId%20%3D%20this.getFolderId%28folder%29%3B%0A%09%09if%28folderId%29%0A%09%09%09this.placesDrop%28e%2C%20folderId%29%3B%0A%09%09else%0A%09%09%09PlacesMenuDNDHandler.onDrop%28e%29%3B%0A%09%7D%0A%7D%3B%0A%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%0AsetTimeout%28function%28_this%29%20%7B%20//%20Don%27t%20show%20modal%20%22Select%20folder%22%20dialog%20during%20initialization%0A%09_this.bookmarks.init%28%29%3B%0A%7D%2C%200%2C%20this%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%09this.bookmarks.destroy%28%29%3B%0A%7D%3B%0A%0A%0A%0A//%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%2C%20%u043E%u0442%2025.10.2014.%20................................%20%0A%28function%20func%28%29%20%7B%0A%20%20%20//%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0433%u0434%u0435%20%u043B%u0435%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20var%20current%20%3D%20%5B%22about%3Anewtab%22%2C%20%22about%3Ablank%22%2C%20%22chrome%3A//browser/content/bookmarks/bookmarksPanel.xul%22%5D%3B%20%0A%20%20%20%0A%20%20%20const%20background%20%3D%20true%3B%20%20%20%20%20%20//%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u0444%u043E%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%0A%20%20%20const%20nextToCurrent%20%3D%20false%3B%20%20//%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u0440%u044F%u0434%u043E%u043C%20%u0441%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u043E%u0439%0A%20%20%20const%20menuAutoClose%20%3D%20true%3B%20%20%20//%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u043F%u0440%u0438%20%u0443%u0445%u043E%u0434%u0435%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%0A%20%20%20%0A%20%20%20function%20handleClick%28e%29%20%7B%20%0A%20%20%20%20%20%20var%20target%20%3D%20e.originalTarget%3B%0A%20%20%20%20%20%20var%20sidebar%20%3D%20target.ownerDocument.defaultView.top%20%21%3D%3D%20content%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26amp%3B%26amp%3B%20target.id%20%3D%3D%20%27bookmarks-view-children%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20//if%20%28%20target.localName%20%3D%3D%20%27menuitem%27%20%29%20LOG%28%27%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%20%20%20%27%20+%20target.getAttribute%28%27targetURI%27%29%29%3B%0A%0A%20%20%20%20%20%20if%20%28%20%21sidebar%20%26amp%3B%26amp%3B%20%21target._placesNode%20%29%20return%3B%20//%20%u0441%u0442%u043E%u043F%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%2C%20%u043F%u0430%u043F%u043A%u0430%2C%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%20%0A%0A%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%2C%20%u0430%u0434%u0440%u0435%u0441%2C%20%u043F%u0430%u043F%u043A%u0443%20%u0438%20id%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%2C%20%u0434%u0440%u0443%u0433%u0438%u0435%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%0A%20%20%20%20%20%20if%20%28%20sidebar%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20tree%20%3D%20target.parentNode%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20box%20%3D%20tree.treeBoxObject%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20row%20%3D%20box.getRowAt%28e.clientX%2C%20e.clientY%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20var%20node%20%3D%20tree.view.nodeForTreeIndex%28row%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20var%20node%20%3D%20sidebar%20%3F%20node%20%3A%20target._placesNode%2C%0A%20%20%20%20%20%20id%20%3D%20node.itemId%2C%20uri%20%3D%20node.uri%2C%20button%20%3D%20e.button%2C%20type%20%3D%20e.type%2C%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20isFolder%20%3D%20PlacesUtils.nodeIsContainer%28node%29%2C%20isURI%20%3D%20PlacesUtils.nodeIsURI%28node%29%3B%0A%0A%20%20%20%20%20%20//%20%u0434%u0432%u043E%u0439%u043D%u043E%u0439%20%u043A%u043B%u0438%u043A%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u0438%u043B%u0438%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%2C%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%20....%0A%20%20%20%20%20%20if%20%28%20button%20%21%3D%3D%201%20%26amp%3B%26amp%3B%20type%20%3D%3D%20%27mouseup%27%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20button%20%3D%3D%200%20%26amp%3B%26amp%3B%20func.flag%20%3D%3D%20true%20%26amp%3B%26amp%3B%20isFolder%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20addBookmark%28node%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sidebar%20%26amp%3B%26amp%3B%20tree.view.toggleOpenState%28row%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20button%20%3D%3D%202%20%26amp%3B%26amp%3B%20func.flag%20%3D%3D%20true%20%26amp%3B%26amp%3B%20%21isFolder%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20target.ownerDocument.getElementById%28%22placesContext%22%29.hidePopup%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20PlacesUtils.bookmarks.removeItem%28id%29%20%7D%20catch%28e%29%20%7B%7D%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%200%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20func.flag%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20func.flag%20%3D%20false%2C%20400%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20isFolder%20%29%20return%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0441%u0442%u043E%u043F%2C%20%u0435%u0441%u043B%u0438%20%u043F%u0430%u043F%u043A%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0A%20%20%20%20%20%20if%20%28%20button%20%3D%3D%200%20%29%20window.clearTimeout%28%20func.timer%20%29%3B%20%20//%20%u0441%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u0434%u043B%u0438%u043D%u043D%u043E%u0433%u043E%20%u043A%u043B%u0438%u043A%u0430%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20//%20%u0431%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u043E%20%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%20%u0434%u043B%u044F%20%u043A%u043B%u0438%u043A%u0430%20%u0438%20%u043E%u0442%u0436%u0430%u0442%u0438%u044F%20....%0A%20%20%20%20%20%20if%20%28%20button%20%21%3D%3D%202%20%26amp%3B%26amp%3B%20/click%7Cmouseup/.test%28type%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u043B%u0435%u0432%u044B%u0439%20%u0434%u043B%u0438%u043D%u043D%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u043F%u043E%u0434%20%u043D%u0430%u0436%u0430%u0442%u043E%u0439%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u043E%u0439%20....%0A%20%20%20%20%20%20if%20%28%20button%20%3D%3D%200%20%26amp%3B%26amp%3B%20type%20%3D%3D%20%27mousedown%27%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20func.loadBook%20%3D%20true%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20func.timer%20%3D%20setTimeout%28function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20func.loadBook%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20addBookmark%28node.parent%2C%20id%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20400%20%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u043B%u0435%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20....%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20button%20%3D%3D%200%20%26amp%3B%26amp%3B%20type%20%3D%3D%20%27mouseup%27%20%26amp%3B%26amp%3B%20func.loadBook%20%26amp%3B%26amp%3B%20isURI%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%28%20uri.startsWith%28%22javascript%22%29%20%7C%7C%20current.indexOf%28content.location.href%29%20%21%3D%3D%20-1%20%7C%7C%20e.ctrlKey%20%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%3F%20gBrowser.loadURI%28%20uri%20%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%3A%20gBrowser.loadOneTab%28%20uri%2C%20%7BrelatedToCurrent%3A%20nextToCurrent%2C%20inBackground%3A%20background%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20referrerURI%3A%20null%20%7D%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20//%20%u0441%u0440%u0435%u0434%u043D%u0438%u0439%20%u043A%u043B%u0438%u043A%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20....%0A%20%20%20%20%20%20if%20%28%20button%20%3D%3D%201%20%26amp%3B%26amp%3B%20type%20%3D%3D%20%27click%27%20%26amp%3B%26amp%3B%20isURI%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadURI%28%20uri%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20//%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u043C%u0435%u043D%u044E%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u043F%u0440%u0438%20%u0443%u0445%u043E%u0434%u0435%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20....%20%0A%20%20%20%20%20%20var%20menu%20%3D%20target.parentNode%3B%0A%20%20%20%20%20%20if%20%28%20%21menuAutoClose%20%7C%7C%20%21menu%20%7C%7C%20menu.localName%20%21%3D%3D%20%27menupopup%27%20%7C%7C%20type%20%21%3D%3D%20%27click%27%20%7C%7C%20button%20%3D%3D%202%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20menu.onmouseover%20%3D%20function%28%29%20menu.f%20%3D%20true%3B%0A%20%20%20%20%20%20menu.onmouseleave%20%3D%20function%28%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20menu.f%20%3D%20false%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20menu.f%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20node%20%3D%20menu%3B%20node%3B%20node%20%3D%20node.parentNode%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20node.nodeName%20%3D%3D%20%27menupopup%27%20%26amp%3B%26amp%3B%20node.hidePopup%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20menu.onmouseleave%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%7D%2C%20500%29%3B%20%20%20%20%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%3B%0A%20%20%20%5B%22click%22%2C%20%22dragstart%22%2C%20%22mouseup%22%2C%20%22mousedown%22%5D%0A%20%20%20.forEach%28function%28type%29%20addEventListener%28type%2C%20handleClick%2C%20true%29%20%29%3B%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u0434%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%20%u0432%20%u0443%u043A%u0430%u0437%u0430%u043D%u043D%u043E%u0439%20%u043F%u0430%u043F%u043A%u0435%20....%0A%20%20%20function%20addBookmark%28folder%2C%20id%29%20%7B%0A%20%20%20%20%20%20var%20title%20%3D%20gBrowser.mCurrentTab.label%3B%0A%20%20%20%20%20%20var%20folderId%20%3D%20PlacesUtils.getConcreteItemId%28folder%29%3B%0A%20%20%20%20%20%20var%20index%20%3D%20id%20%3F%20PlacesUtils.bookmarks.getItemIndex%28id%29%20+%201%20%3A%200%3B%0A%20%20%20%20%20%20var%20readOnlyFolder%20%3D%20PlacesUtils.nodeIsQuery%28folder%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20PlacesUtils.annotations.itemHasAnnotation%28folderId%2C%20PlacesUtils.LMANNO_FEEDURI%29%3B%0A%20%20%20%20%20%20if%20%28%20%21readOnlyFolder%20%29%0A%20%20%20%20%20%20%20%20%20%20%20PlacesUtils.bookmarks.insertBookmark%28folderId%2C%20gBrowser.currentURI%2C%20index%2C%20title%29%3B%0A%0A%20%20%20%20%20%20//%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%0A%20%20%20%20%20%20if%20%28%20id%20%29%20return%3B%0A%20%20%20%20%20%20var%20al%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20%20if%20%28%20readOnlyFolder%20%29%20%7B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20al.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20folder.title%2C%20%22%u041D%u0435%20%u043F%u043E%u0434%u0434%u0435%u0440%u0436%u0438%u0432%u0430%u0435%u0442%u0441%u044F%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20var%20icon%20%3D%20gBrowser.mCurrentTab.image%20%7C%7C%20%22chrome%3A//global/skin/icons/information-16.png%22%3B%0A%20%20%20%20%20%20al.showAlertNotification%28icon%2C%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%22%20+%20%28folder.title%20%7C%7C%20%22%28%u0431%u0435%u0437%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043A%u0430%29%22%29%20+%20%22%3A%22%2C%20title.slice%280%2C%20100%29%29%3B%0A%20%20%20%7D%3B%20%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043D%u043E%u0432%u044B%u0439%20%u043F%u0443%u043D%u043A%u0442%20%22%u0412%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u0432%u0441%u0435%u0445%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%20%u0432%20%u043C%u0435%u043D%u044E%20%22%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0438%22%2C%20%u043E%u0442%2002.08.2014.%20................................%0A%28function%28%29%20%7B%0A%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u043E%u0432%u044B%u0439%20%u043F%u0443%u043D%u043A%u0442%20%u0432%20%u043C%u0435%u043D%u044E%20....%0A%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%20%20%20%0A%20%20%20menuitem.setAttribute%28%22label%22%2C%20%22%u0412%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u0432%u0441%u0435%u0445%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%29%3B%0A%20%20%20var%20sep%20%3D%20document.getElementById%28%22organizeBookmarksSeparator%22%29%3B%20%0A%20%20%20sep.parentNode.insertBefore%28%20menuitem%2C%20sep%20%29%3B%20%20%20%0A%20%20%20addDestructor%28function%28%29%20%7B%20sep.parentNode.removeChild%28%20menuitem%20%29%20%7D%29%3B%0A%20%20%20addEventListener%28%22click%22%2C%20function%28%29%20chooseBookmarks%281%29%2C%20false%2C%20menuitem%20%29%3B%20//%20%u0435%u0441%u043B%u0438%20%u043A%u043B%u0438%u043A%20%u043D%u0430%20%u043F%u0443%u043D%u043A%u0442%u0435%20%u043C%u0435%u043D%u044E%20%20%20%20%20%0A%20%20%20%0A%0A%20%20%20//%20%u041F%u0435%u0440%u0435%u0431%u0440%u0430%u0442%u044C%20%u0432%u0441%u0435%20http%28s%29%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20....%20%0A%20%20%20function%20chooseBookmarks%28%20id%20%29%20%7B%0A%20%20%20%20%20%20var%20folder%20%3D%20PlacesUtils.getFolderContents%28%20id%20%29.root%3B%0A%20%20%20%0A%20%20%20%20%20%20folder.QueryInterface%28Ci.nsINavHistoryContainerResultNode%29%3B%0A%20%20%20%20%20%20folder.containerOpen%20%3D%20true%3B%0A%0A%20%20%20%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%26lt%3B%20folder.childCount%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20child%20%3D%20folder.getChild%28i%29%3B%0A%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20PlacesUtils.nodeIsFolder%28%20child%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F%20chooseBookmarks%28%20child.itemId%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%3A%20child.uri.startsWith%28%22http%22%29%20%26amp%3B%26amp%3B%20child.icon%20%3D%3D%20%27%27%20%26amp%3B%26amp%3B%20getSiteFavicon%28%20child.uri%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20folder.containerOpen%20%3D%20false%3B%0A%20%20%20%7D%3B%0A%0A%0A%20%20%20//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u043A%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%20%u0441%20%u043E%u0434%u0438%u043D%u0430%u043A%u043E%u0432%u044B%u043C%u0438%20%u0430%u0434%u0440%u0435%u0441%u0430%u043C%u0438%20....%20%20%0A%20%20%20function%20setBookFavicon%28%20faviconURI%2C%20siteURI%20%29%20%7B%0A%20%20%20%20%20%20var%20iconURI%20%3D%20Services.io.newURI%28%20faviconURI%2C%20null%2C%20null%29%3B%0A%20%20%20%20%20%20var%20bookmarkURI%20%3D%20Services.io.newURI%28%20siteURI%2C%20null%2C%20null%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20faviconService%20%3D%20Cc%5B%22@mozilla.org/browser/favicon-service%3B1%22%5D.getService%28Ci.mozIAsyncFavicons%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20faviconService.setAndFetchFaviconForPage%28%0A%20%20%20%20%20%20%20%20%20bookmarkURI%2C%0A%20%20%20%20%20%20%20%20%20iconURI%2C%0A%20%20%20%20%20%20%20%20%20false%2C%0A%20%20%20%20%20%20%20%20%20faviconService.FAVICON_LOAD_NON_PRIVATE%0A%20%20%20%20%20%20%29%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0443%20%u0438%u043A%u043E%u043D%u043A%u0438%20....%20%0A%20%20%20function%20getSiteFavicon%28%20siteURI%20%29%20%7B%0A%20%20%20%20%20%20var%20hostURI%20%3D%20%22http%3A//%22%20+%20siteURI.split%28/%5C/+/g%29%5B1%5D%20+%20%22/%22%3B%0A%20%20%20%20%20%20var%20faviconURI%20%3D%20hostURI%20+%20%22favicon.ico%22%3B%20%20//%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u043A%u043E%u043D%u043A%u0438%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u0438%u0437%20%u0441%u0430%u0439%u0442%u0430%0A%0A%20%20%20%20%20%20if%20%28%20getSiteFavicon%5BsiteURI%5D%20%29%20return%3B%20%20%20%20%20//%20%u0441%u0442%u043E%u043F%20%u0435%u0441%u043B%u0438%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%20%u0441%20%u0442%u0430%u043A%u0438%u043C%20%u0430%u0434%u0440%u0435%u0441%u043E%u043C%20%u0443%u0436%u0435%20%u0431%u044B%u043B%u0430%0A%20%20%20%20%20%20getSiteFavicon%5BsiteURI%5D%20%3D%20true%3B%20%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u0438%u0437%20%u0434%u043E%u043A%u0443%u043C%u0435%u043D%u0442%u0430%20%u0441%u0430%u0439%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%0A%20%20%20%20%20%20var%20xhr%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%20%20%20%20%20%20xhr.open%28%22GET%22%2C%20siteURI%2C%20true%29%3B%0A%20%20%20%20%20%20xhr.responseType%20%3D%20%22document%22%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20xhr.onload%20%3D%20xhr.onerror%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20xhr.responseXML%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20doc%20%21%3D%3D%20null%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20links%20%3D%20doc.getElementsByTagName%28%22link%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B...links%5D.forEach%28function%28link%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20/%28%3F%3A%5E%7C%5Cs%29icon%28%3F%3A%5Cs%7C%24%29/.test%28link.rel.toLowerCase%28%29%29%20%29%20faviconURI%20%3D%20link.href%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20setBookFavicon%28%20faviconURI%2C%20siteURI%20%29%3B%20%20//%20%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0443%20%u0438%u043A%u043E%u043D%u043A%u0438%20%20%20%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20xhr.send%28%29%3B%0A%20%20%20%7D%3B%20%20%20%0A%20%20%20%20%20%0A%7D%29%28%29%3B%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.bookmarks.initialized%29%0A%09%09this.open%20%3D%20%21this.open%3B%0A%09else%0A%09%09this.bookmarks.init%28%29%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
SeaMonkey 2.39 forever
Отсутствует
emlen
Хм, «e.target == this» должно выполняться только при двойном клике по самой кнопке.
А в кнопке выше потеряны скобки:
this.ondblclick = function(e) { if(e.target == this && e.button == 0) e.preventDefault(); PlacesCommandHook.showBookmarksManager('AllBookmarks'); };
=>
this.ondblclick = function(e) { if(e.target == this && e.button == 0) { e.preventDefault(); PlacesCommandHook.showBookmarksManager('AllBookmarks'); } };
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Уважаемый Infocatcher,
у меня к Вам вопросы по закладкам:
Ваша кнопка перебирая в назначенном фолдере закладки (menuitem'ы) и подфолдеры получает Title закладок и их URL, а также Title подфолдеров.
1. А как получить Description закладки (если он есть) и другие реквизиты закладки (метки,краткое имя (shotnname), открывать ли в сайдбаре) ) а также Description фолдера (если он есть)?
2. Кроме того: сами закладки - это менюитемы (menuitem[0],menuitem[1]...menuitem[length-1]), а вот подфолдеры - уже не менюитемы (поскольку они подменю), но какое ключевое слово для них вместо menuitem[0],menuitem[1]... - я не знаю...
Вопрос 1 к Вашей кнопке отношения не имеет, конечно, но я надеюсь, раз Title и URLы Вы извлекали, то сможете просветить меня как извлекаются остальные реквизиты...
Спасибо
Добавлено 05-01-2016 20:46:30
Что-то тема глючит...
Я пытаюсь прорваться...
Добавлено 05-01-2016 20:48:58
Что-то глючит. Пытаюсь прорваться
Отредактировано difabor (05-01-2016 20:48:58)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
difabor
Кнопка почти ничего не делает сама, закладки выводят встроенные функции.
Пример насчет получения свойств закладок есть в Places' Tooltips.
Внутри там menu > menupopup > menuitem для вложенных меню, посмотреть можно в DOM Inspector, также может пригодиться кнопка Attributes Inspector.
Добавлено 06-01-2016 00:21:38
Вот пример насчет получения описания:
// Тут надо получить ссылку на menuitem или menu закладки/папки var placesNode = document.getElementById("PlacesToolbarItems") // Для примера, внутри панели закладок .getElementsByAttribute("label", "Что-то там")[0]; // Поиск по названию var node = placesNode._placesNode || placesNode.node; var itemId = node.itemId; var descr = PlacesUIUtils.getItemDescription(itemId); alert(descr);
Отредактировано Infocatcher (06-01-2016 00:21:38)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
difabor
Кнопка почти ничего не делает сама, закладки выводят встроенные функции.
Пример насчет получения свойств закладок есть в Places' Tooltips.
Внутри там menu > menupopup > menuitem для вложенных меню, посмотреть можно в DOM Inspector, также может пригодиться кнопка Attributes Inspector
Спасибо.
Я правильно понял, что чтобы можно было пользоваться Вашей кнопкой Attributes Inspector, нужно также установить дополнение DOM Inspector?
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
difabor
Можно DOM Inspector не ставить, кнопка и без него работает, только, конечно, «Клик средней кнопкой мыши или левой с зажатым Ctrl открывает DOM Inspector» работать не будет. Ну, и с DOM Inspector'ом удобнее: он покажет структуру в виде дерева, а не только информацию об узле под курсором и возможностью навигации выше/ниже/влево/вправо.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
difabor
Можно DOM Inspector не ставить, кнопка и без него работает, только, конечно, «Клик средней кнопкой мыши или левой с зажатым Ctrl открывает DOM Inspector» работать не будет. Ну, и с DOM Inspector'ом удобнее: он покажет структуру в виде дерева, а не только информацию об узле под курсором и возможностью навигации выше/ниже/влево/вправо.
Большое спасибо.
Я установил Вашу кнопку - пока пытаюсь понять, что показывают всплывающие подсказки.
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Уважаемый Infocatcher,
мне кажется я нашёл принципиальный путь как назначить одной СВ Bookmarks Folder неограниченное количество фолдеров.
1. СВ Bookmarks Folder записывает фолдер ИД и его название в about:config.
2. Если в about:config подменять фолдер ИД на другое значение и затем дистанционно перезаписывать кнопку СВ Bookmarks Folder, то она будет брать уже подмененный фолдер ИД
3. Я ещё не знаю как дистанционно переписывать кнопку, но была такая кнопка CB Button Utility, которая отключала/включала другие кнопки, записывая return() (или добавляя "//" перед ним) в эти кнопки, тем самым отключая/включая их.
4. Но это немного тяжеловесно. Нельзя ли как-то, чтобы по левому клику Bookmarks Folder использовал не добытый ранее фолдер ИД, а получал его каждый раз из about:config? Я понимаю, что для конкретной кнопки Bookmarks Folder это крайне нерационально, но можно ли как-то изменить её код, чтобы это было возможно, хоть и крайне нерационально? Речь ведь не идёт о штатной СВ Bookmarks Folder, речь идёт о её частной модификации для реализации других целей
Отредактировано difabor (13-08-2017 06:14:05)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Не нашёл тему, поэтому здесь. Есть рабочая Bookmarks Folder для 74?
Рабочей нет, все поломано.
С исправлением для чтения настроек где-то до Firefox 60 можно задать папку вручную через about:config, в более новых – сломали старый код, позволявший выводить содержимое папок с закладками.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
А планируется рабочая, надеяться можно, или это уже сломали окончательно?
Так это заранее не угадать.
На первый взгляд, вывод содержимого папок еще живой, появился после исправлений: https://github.com/Infocatcher/Custom_B … sFolder.js
Но вот с диалогом выбора папки беда: data-ссылки открываться не желают, окно браузера заблокирует невидимым модальным окном.
Тем не менее, если папка задана вручную через about:config, то ее содержимое выводится.
Например, для кнопки с id = custombuttons-button9:
extensions.custombuttons.button9.bookmarkFolder = place:parent=toolbar_____
С place-ссылками тоже непрозрачно, но можно потыкать из консоли:
document.querySelector('.bookmark-item[container="true"][label="Mozilla Firefox"]') ._placesNode.uri // place:parent=f0XqJ5VafI2k – и тут у каждого будет свое document.getElementById("bookmarksMenuPopup") ._placesNode.uri // place:parent=menu________ document.querySelector('.bookmark-item[container="true"][label="Bookmarks Toolbar"]') ._placesView._place // place:parent=toolbar_____
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует