Есть

такая вот кнопка

Выделить код

Код:

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%3EToolsBookmark%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAALAAAALoAAADnXBoAyVwaAMlcGgDJXBoAyVwaAMlcGgDJXBoAySVNAOoTXAD0D0cAxAAAACwAAAASAAAACgAAABYAAADbYGBg/8qXZP/Fkl//xZJf/8WSX//Fkl//xZJf/8WSX/8xhhP/K98a/xp0APMAAAAWAAAACgAAAAABAQEAAQEBzmJiYv/IlWL/vYpX/7+MWf+/jFn/v4xZ/1WNJP8xjBL/MYwR/z3iLP8efgDyDowAzA6NAJkBAQEAAQEBAAEBAclkZGT/mWYz/7F+S//Bjlv/s4BN/5lmM/8zlBL/UudB/1LnQf9S50H/UudB/1LnQf8QlQDMAQEBAAEBAQABAQHFZ2dn/3dekf+IYmL/qndE/4hiYv93XpH/Wpkm/zabE/81mhL/ZutV/yOOAPESnQDMEpwAmQEBAQABAQEAAQEBwWtra/94X5H/aGj//3hfkf9oaP//eF+R/8iVYv/IlWL/Np8S/3XuZP8llADxF50AABKdAAABAQEAAQEBAAEBAb5ubm7/emCS/2dn/P9jY/j/Z2f8/3pgkv/LmGX/y5hl/1mdJP87qBb/PoIB4VZrAQBMbgEAAQEBAAEBAQABAQG7cnJy/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/P9VVStmVVUrAFVVKwAEBAQABAQEAAQEBGgEBASKmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0BgZlNAQCZTQEAAAAAAAAAAADAAAAAwAAAAMAAAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%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%u041B%u041A%u041C%20....%0A%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%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%20%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%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20//if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20//%20%20%20%20%20var%20bar%20%3D%20document.getElementById%28%22PersonalToolbar%22%29%3B%0A%20%20%20%20//%20%20%20%20%20bar.collapsed%20%3D%20%21bar.collapsed%3B%0A%20%20%20%20%20//%20%20%20%20document.persist%28%22PersonalToolbar%22%2C%20%21bar.collapsed%29%3B%0A%20%20%20%20//%20%20%20%20%20%7D%0A%20%20%20%20%20%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%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%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.showBookmarksManager%28%27AllBookmarks%27%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%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%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%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


Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последню использовавшуюся подпапку?

emlen пишет

Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последню использовавшуюся подпапку?

Что значит в последнюю использовавшуюся подпапку?

bunda1 пишет
emlen пишет

Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последню использовавшуюся подпапку?

Что значит в последнюю использовавшуюся подпапку?

Имхо - в ту папку, куда заносилась закладка в предыдущий (т.е. в последний) раз.

difabor пишет

Имхо - в ту папку, куда заносилась закладка в предыдущий (т.е. в последний) раз.

Понял.

emlen пишет

Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последню использовавшуюся подпапку?

На скорую руку:

Выделить код

Код:

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%3EToolsBookmark%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAALAAAALoAAADnXBoAyVwaAMlcGgDJXBoAyVwaAMlcGgDJXBoAySVNAOoTXAD0D0cAxAAAACwAAAASAAAACgAAABYAAADbYGBg/8qXZP/Fkl//xZJf/8WSX//Fkl//xZJf/8WSX/8xhhP/K98a/xp0APMAAAAWAAAACgAAAAABAQEAAQEBzmJiYv/IlWL/vYpX/7+MWf+/jFn/v4xZ/1WNJP8xjBL/MYwR/z3iLP8efgDyDowAzA6NAJkBAQEAAQEBAAEBAclkZGT/mWYz/7F+S//Bjlv/s4BN/5lmM/8zlBL/UudB/1LnQf9S50H/UudB/1LnQf8QlQDMAQEBAAEBAQABAQHFZ2dn/3dekf+IYmL/qndE/4hiYv93XpH/Wpkm/zabE/81mhL/ZutV/yOOAPESnQDMEpwAmQEBAQABAQEAAQEBwWtra/94X5H/aGj//3hfkf9oaP//eF+R/8iVYv/IlWL/Np8S/3XuZP8llADxF50AABKdAAABAQEAAQEBAAEBAb5ubm7/emCS/2dn/P9jY/j/Z2f8/3pgkv/LmGX/y5hl/1mdJP87qBb/PoIB4VZrAQBMbgEAAQEBAAEBAQABAQG7cnJy/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/P9VVStmVVUrAFVVKwAEBAQABAQEAAQEBGgEBASKmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0BgZlNAQCZTQEAAAAAAAAAAADAAAAAwAAAAMAAAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%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%u041B%u041A%u041C%20....%0A%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20if%20%28%20%21lastUsedFolderId%20%29%20%7B%0A%20%20%20%20%20%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%20%20%20%20%20return%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%0A%20%20%20%20%20%20%20%20%20var%20title%20%3D%20gBrowser.mCurrentTab.label%3B%0A%20%20%20%20%20%20%20%20%20PlacesUtils.bookmarks.insertBookmark%28lastUsedFolderId%2C%20gBrowser.currentURI%2C%20lastBookIndex%2C%20title%29%3B%0A%0A%20%20%20%20%20%20%20%20%20var%20folder%20%3D%20PlacesUtils.getFolderContents%28lastUsedFolderId%29.root%3B%0A%20%20%20%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%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20%20%20%20%20%20%20.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%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%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%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20//if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20//%20%20%20%20%20var%20bar%20%3D%20document.getElementById%28%22PersonalToolbar%22%29%3B%0A%20%20%20%20//%20%20%20%20%20bar.collapsed%20%3D%20%21bar.collapsed%3B%0A%20%20%20%20%20//%20%20%20%20document.persist%28%22PersonalToolbar%22%2C%20%21bar.collapsed%29%3B%0A%20%20%20%20//%20%20%20%20%20%7D%0A%20%20%20%20%20%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%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%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.showBookmarksManager%28%27AllBookmarks%27%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0438%20%u043F%u043E%u043B%u0443%u0447%u0430%u0442%u044C%20id%20%u043F%u043E%u0441%u043B%u0435%u0434%u043D%u0435%u0439%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u043D%u044B%u0439%20%u043F%u0430%u043F%u043A%u0438%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0438%20index%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20..............%0Avar%20observer%20%3D%20%7B%0A%20%20onItemAdded%3A%20function%28id%2C%20folderId%2C%20index%29%20%7B%0A%20%20%20%20%20lastBookIndex%20%3D%20index%3B%0A%20%20%20%20%20lastUsedFolderId%20%3D%20folderId%3B%0A%20%20%7D%0A%7D%3B%0Avar%20lastBookIndex%3B%0Avar%20lastUsedFolderId%3B%0Avar%20bmsvc%20%3D%20Cc%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Ci.nsINavBookmarksService%29%3B%0Abmsvc.addObserver%28observer%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20bmsvc.removeObserver%28observer%29%20%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%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%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%20%20%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%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
bunda1 пишет
emlen пишет

Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последнюю использовавшуюся подпапку?

На скорую руку:

Теперь сохраняет без запроса в "Панель закладок" независимо от того какая подпапка использовалась в прошлый раз с выводом всплывающего сообщения. Можно как-то сделать чтобы было как в изначальном коде, т.е. чтобы был запрос куда сохранять, но изначально бы выбрана была та подпапка, в которую сохраняли в прошлый раз?

emlen пишет

Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последню использовавшуюся подпапку?

Custom Buttons • View topic - Bookmark to folder (single tab version)

voqabuhe пишет
emlen пишет

Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последню использовавшуюся подпапку?

Custom Buttons • View topic - Bookmark to folder (single tab version)

Спасибо за наводку, предложенная кнопочка интересная, но не совсем то, о чем я писал в предыдущем сообщении. Сохраняет в одну и ту же предварительно настроенную папку, а не предлагает варианты сохранения с изначально выбранной той папкой в которую сохраняли в прошлый раз..

emlen пишет

предлагает варианты сохранения с изначально выбранной той папкой в которую сохраняли в прошлый раз..

И в чём фишка?

это удобно:blush:

emlen пишет

Сохраняет в одну и ту же предварительно настроенную папку, а не предлагает варианты сохранения с изначально выбранной той папкой в которую сохраняли в прошлый раз..

Тогда ставь Add Bookmark Here ² :: Дополнения Firefox

voqabuhe, мне почему-то кажется, что предложенная Вами до этого кнопка в умелых руках несложно переделывается в то что я описывал, кто бы тока взялся из умельцев)

emlen пишет

это удобно:blush:

Ну а так: [CB]Двойным левым кликом добавить закладку в папку закладок. | Форум Mozilla Россия

bunda1
Ух ты, а я перетаскиванием занимался, да ещё не с первого раза попадёшь в ту папку в какую нужно. Есть только маленький нюанс, можно сделать чтобы добавлялось как при перетаскивании, в конец списка, а не в начало. А то ломается привычный порядок закладок.  Можно конечно потом и вручную перетаскивать, но лучше сразу, если если такое возможно конечно.

Прикольная тема, будет тоже полезной, но не исключает потребность в описанном мной механизме..

villa7 пишет

bunda1
Ух ты, а я перетаскиванием занимался, да ещё не с первого раза попадёшь в ту папку в какую нужно. Есть только маленький нюанс, можно сделать чтобы добавлялось как при перетаскивании, в конец списка, а не в начало.

Поменяй 0 на -1 в PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, docTitle );

16-11-2015 12:36:16
Кстати есть код который дополнительно двойному кликом на папке закладок даёт возможность добавить закладку сразу в нужное место длинным кликом на закладке рядом с который хочешь добавить новую закладку или двойным ПКМ удалить закладку:

Выделить код

Код:

// Управление закладками, от 25.10.2014. ................................ 
(function func() {
   // страницы где левый клик открывает закладку в текущей странице
   var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; 
   
   const background = true;      // открывать закладку в фоновой вкладке
   const nextToCurrent = false;  // открывать закладку рядом с текущей вкладкой
   const menuAutoClose = true;   // автоматически закрыть меню закладок при уходе курсора
   
   function handleClick(e) { 
      var target = e.originalTarget;
      var sidebar = target.ownerDocument.defaultView.top !== content 
                    && target.id == 'bookmarks-view-children';
                    
      //if ( target.localName == 'menuitem' ) LOG('Управление закладками   ' + target.getAttribute('targetURI'));

      if ( !sidebar && !target._placesNode ) return; // стоп, если не закладка, папка, разделитель 

      // получить закладку, адрес, папку и id закладки, другие переменные
      if ( sidebar ) {
           var tree = target.parentNode;
           var box = tree.treeBoxObject;
           var row = box.getRowAt(e.clientX, e.clientY); 
           var node = tree.view.nodeForTreeIndex(row);            
           }
      var node = sidebar ? node : target._placesNode,
      id = node.itemId, uri = node.uri, button = e.button, type = e.type,            
      isFolder = PlacesUtils.nodeIsContainer(node), isURI = PlacesUtils.nodeIsURI(node);

      // двойной клик добавляет закладку или удаляет закладку, разделитель ....
      if ( button !== 1 && type == 'mouseup' ) {                 
           if ( button == 0 && func.flag == true && isFolder ) {
                addBookmark(node, false);
                sidebar && tree.view.toggleOpenState(row);               
                }
           
           if ( button == 2 && func.flag == true && !isFolder ) {                     
                setTimeout(function() { 
                   target.ownerDocument.getElementById("placesContext").hidePopup()
                   try { PlacesUtils.bookmarks.removeItem(id) } catch(e) {};                   
                }, 0); 
                }
                                
           func.flag = true;
           setTimeout(function() func.flag = false, 400 );
           }
           
      if ( isFolder ) return;                                // стоп, если папка закладок
      if ( button == 0 ) window.clearTimeout( func.timer );  // сбросить таймер длинного клика           

      // блокировать действие по умолчанию для клика и отжатия ....
      if ( button !== 2 && /click|mouseup/.test(type) ) { 
           e.preventDefault(); e.stopPropagation();
           }
      
      // левый длинный клик добавляет текущую вкладку в закладки под нажатой закладкой ....
      if ( button == 0 && type == 'mousedown' ) {                      
           func.loadBook = true;       
           func.timer = setTimeout(function() {
               func.loadBook = false;
               addBookmark(node.parent, id);
           }, 400 );  
           }
           
      // левый клик открывает закладку в новой или текущей вкладке ....      
      if ( button == 0 && type == 'mouseup' && func.loadBook && isURI ) {
           ( uri.startsWith("javascript") || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) 
           ? gBrowser.loadURI( uri ) 
           : gBrowser.loadOneTab( uri, {relatedToCurrent: nextToCurrent, inBackground: background,
                                        referrerURI: null } );
           }       
    
      // средний клик открывает закладку в текущей вкладке ....
      if ( button == 1 && type == 'click' && isURI ) {             
           gBrowser.loadURI( uri );
           }           

      // автоматически закрыть все меню закладок при уходе курсора .... 
      var menu = target.parentNode;
      if ( !menuAutoClose || !menu || menu.localName !== 'menupopup' || type !== 'click' || button == 2 ) return;
                              
      menu.onmouseover = function() menu.f = true;
      menu.onmouseleave = function() { 
         menu.f = false;        
         setTimeout(function() {   
           if ( menu.f ) return;
           for ( var node = menu; node; node = node.parentNode )
                 node.nodeName == 'menupopup' && node.hidePopup();
           menu.onmouseleave = null;
         }, 500);    
      };
            
   };
   ["click", "dragstart", "mouseup", "mousedown"]
   .forEach(function(type) addEventListener(type, handleClick, true) );
   
   
   // добавить страницу в закладки в указанной папке ....
   function addBookmark(folder, id) {
      var title = gBrowser.mCurrentTab.label;
      var folderId = PlacesUtils.getConcreteItemId(folder);
      var index = id ? PlacesUtils.bookmarks.getItemIndex(id) + 1 : 0;
      var readOnlyFolder = PlacesUtils.nodeIsQuery(folder) ||
                           PlacesUtils.annotations.itemHasAnnotation(folderId, PlacesUtils.LMANNO_FEEDURI);
      if ( !readOnlyFolder )
           PlacesUtils.bookmarks.insertBookmark(folderId, gBrowser.currentURI, index, title);

      // всплывающая подсказка
      if ( id ) return;
      var al = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
      if ( readOnlyFolder ) {   
           al.showAlertNotification("chrome://global/skin/icons/error-16.png", folder.title, "Не поддерживается");
           return;
           }
      var icon = gBrowser.mCurrentTab.image || "chrome://global/skin/icons/information-16.png";
      al.showAlertNotification(icon, "Добавил в папку " + (folder.title || "(без заголовка)") + ":", title.slice(0, 100));
   };    
})();

bunda1
Присоединяюсь к

Ух ты, а я перетаскиванием занимался, да ещё не с первого раза попадёшь в ту папку в какую нужно.

Спасибо за кнопку.

bunda1
Блин, а как в этой кнопке что чуть выше дал,

// Управление закладками, от 25.10.2014. ...

сделать добавление закладки в конец списка по двойному ЛКМ по папке.

villa7 пишет

bunda1
Блин, а как в этой кнопке что чуть выше дал, сделать добавление закладки в конец списка по двойному ЛКМ по папке.

Поменяй 0 на -1 в var index = id ? PlacesUtils.bookmarks.getItemIndex(id) + 1 : 0;

bunda1
Ага, нормально. Нужная кнопка, облегчающая работу. Спасибо!

bunda1 пишет
emlen пишет

Как сделать, чтобы при нажатии на нее предлагалось сохранение не в папку панели закладок, а в последню использовавшуюся подпапку?

На скорую руку:

Выделить код

Код:

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%3EToolsBookmark%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAALAAAALoAAADnXBoAyVwaAMlcGgDJXBoAyVwaAMlcGgDJXBoAySVNAOoTXAD0D0cAxAAAACwAAAASAAAACgAAABYAAADbYGBg/8qXZP/Fkl//xZJf/8WSX//Fkl//xZJf/8WSX/8xhhP/K98a/xp0APMAAAAWAAAACgAAAAABAQEAAQEBzmJiYv/IlWL/vYpX/7+MWf+/jFn/v4xZ/1WNJP8xjBL/MYwR/z3iLP8efgDyDowAzA6NAJkBAQEAAQEBAAEBAclkZGT/mWYz/7F+S//Bjlv/s4BN/5lmM/8zlBL/UudB/1LnQf9S50H/UudB/1LnQf8QlQDMAQEBAAEBAQABAQHFZ2dn/3dekf+IYmL/qndE/4hiYv93XpH/Wpkm/zabE/81mhL/ZutV/yOOAPESnQDMEpwAmQEBAQABAQEAAQEBwWtra/94X5H/aGj//3hfkf9oaP//eF+R/8iVYv/IlWL/Np8S/3XuZP8llADxF50AABKdAAABAQEAAQEBAAEBAb5ubm7/emCS/2dn/P9jY/j/Z2f8/3pgkv/LmGX/y5hl/1mdJP87qBb/PoIB4VZrAQBMbgEAAQEBAAEBAQABAQG7cnJy/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/P9VVStmVVUrAFVVKwAEBAQABAQEAAQEBGgEBASKmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0Bq5lNAauZTQGrmU0BgZlNAQCZTQEAAAAAAAAAAADAAAAAwAAAAMAAAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%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%u041B%u041A%u041C%20....%0A%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20if%20%28%20%21lastUsedFolderId%20%29%20%7B%0A%20%20%20%20%20%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%20%20%20%20%20return%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%0A%20%20%20%20%20%20%20%20%20var%20title%20%3D%20gBrowser.mCurrentTab.label%3B%0A%20%20%20%20%20%20%20%20%20PlacesUtils.bookmarks.insertBookmark%28lastUsedFolderId%2C%20gBrowser.currentURI%2C%20lastBookIndex%2C%20title%29%3B%0A%0A%20%20%20%20%20%20%20%20%20var%20folder%20%3D%20PlacesUtils.getFolderContents%28lastUsedFolderId%29.root%3B%0A%20%20%20%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%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20%20%20%20%20%20%20.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%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%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%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20//if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20//%20%20%20%20%20var%20bar%20%3D%20document.getElementById%28%22PersonalToolbar%22%29%3B%0A%20%20%20%20//%20%20%20%20%20bar.collapsed%20%3D%20%21bar.collapsed%3B%0A%20%20%20%20%20//%20%20%20%20document.persist%28%22PersonalToolbar%22%2C%20%21bar.collapsed%29%3B%0A%20%20%20%20//%20%20%20%20%20%7D%0A%20%20%20%20%20%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%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%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.showBookmarksManager%28%27AllBookmarks%27%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0438%20%u043F%u043E%u043B%u0443%u0447%u0430%u0442%u044C%20id%20%u043F%u043E%u0441%u043B%u0435%u0434%u043D%u0435%u0439%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u043D%u044B%u0439%20%u043F%u0430%u043F%u043A%u0438%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0438%20index%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20..............%0Avar%20observer%20%3D%20%7B%0A%20%20onItemAdded%3A%20function%28id%2C%20folderId%2C%20index%29%20%7B%0A%20%20%20%20%20lastBookIndex%20%3D%20index%3B%0A%20%20%20%20%20lastUsedFolderId%20%3D%20folderId%3B%0A%20%20%7D%0A%7D%3B%0Avar%20lastBookIndex%3B%0Avar%20lastUsedFolderId%3B%0Avar%20bmsvc%20%3D%20Cc%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Ci.nsINavBookmarksService%29%3B%0Abmsvc.addObserver%28observer%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20bmsvc.removeObserver%28observer%29%20%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%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%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%20%20%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%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

А как сделать, чтобы если текущая страница уже есть в закладках - чтоб её оттуда удалять по тому же левому клику?

difabor, у меня ничего не получилось с ней(

04-01-2016 12:59:15
итог - пользуюсь конечным, чуть откорректированным вариантом (правая-добавить с диалогом, левый двойной - менеджер, левый - меню..) от Уважаемого нашего Дорогого bunda1 о ней узнал и получил, автор как я понимаю 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%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%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

Спасибо, emlen
У меня есть такая кнопка - в своё время Infocatcher мне очень помог добавить туда нужную мне функциональность.
Просто мне бы хотелось знать как удаляется закладка безотносительно кнопки.
По var bmkIds = PlacesUtils.bookmarks.getBookmarkIdsForURI( gBrowser.currentURI ); я могу понять или данная страница в закладках или нет.
И по for ( var i = 0; i < bmkIds.length; i++ ) {<удалить закладку по> bmkIds[i]}
Но я просто не знаю по какой команде удаляется закладка с известным bmkIds...

difabor пишет

Но я просто не знаю по какой команде удаляется закладка с известным bmkIds...

Выделить код

Код:

PlacesUtils.bookmarks.removeItem(id)

04-01-2016 19:30:34

difabor пишет

По var bmkIds = PlacesUtils.bookmarks.getBookmarkIdsForURI( gBrowser.currentURI ); я могу понять или данная страница в закладках или нет.

Можно короче:

Выделить код

Код:

BookmarkingUI._itemIds

04-01-2016 19:33:53

difabor пишет

И по for ( var i = 0; i < bmkIds.length; i++ ) {<удалить закладку по> bmkIds[i]}

Можно так:

Выделить код

Код:

for(var id of BookmarkingUI._itemIds) { удалить закладку };

Огромное спасибо!!!

bunda1 пишет
villa7 пишет

bunda1
Блин, а как в этой кнопке что чуть выше дал, сделать добавление закладки в конец списка по двойному ЛКМ по папке.

Поменяй 0 на -1 в var index = id ? PlacesUtils.bookmarks.getItemIndex(id) + 1 : 0;

Что-то с этой темой происходит.
Куда-то пропал конец темы: несколько постов тоже

difabor пишет

Просто мне бы хотелось знать как удаляется закладка безотносительно кнопки.

Выделить код

Код:

BookmarkingUI._itemIds.forEach((id,i)=> setTimeout(()=> PlacesUtils.bookmarks.removeItem(id), 10*i) );

04-01-2016 22:23:57

difabor пишет

Куда-то пропал конец темы: несколько постов тоже

Да что то глючит.

Есть такая функция md5 - для преобразования строки в хэш
Но эта функция не встроена в Custom Buttons, к сожалению.
Сама по себе она большая и требует ещё дополонительную функцию.
Кроме того там надо вместо str = this.utf8_encode(str); использовать str = utf8_encode(str);
Я повозился с этой функцией и получил работающий код:

скрытый текст

Выделить код

Код:

function utf8_encode ( str_data ) {    // Encodes an ISO-8859-1 string to UTF-8
    // 
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)

    str_data = str_data.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < str_data.length; n++) {
        var c = str_data.charCodeAt(n);
        if (c < 128) {
            utftext += String.fromCharCode(c);
        } else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        } else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }
    }

    return utftext;
}

function md5 ( str ) {    // Calculate the md5 hash of a string
    // 
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // + namespaced by: Michael White (http://crestidg.com)

    var RotateLeft = function(lValue, iShiftBits) {
            return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
        };

    var AddUnsigned = function(lX,lY) {
            var lX4,lY4,lX8,lY8,lResult;
            lX8 = (lX & 0x80000000);
            lY8 = (lY & 0x80000000);
            lX4 = (lX & 0x40000000);
            lY4 = (lY & 0x40000000);
            lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
            if (lX4 & lY4) {
                return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
            }
            if (lX4 | lY4) {
                if (lResult & 0x40000000) {
                    return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
                } else {
                    return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
                }
            } else {
                return (lResult ^ lX8 ^ lY8);
            }
        };

    var F = function(x,y,z) { return (x & y) | ((~x) & z); };
    var G = function(x,y,z) { return (x & z) | (y & (~z)); };
    var H = function(x,y,z) { return (x ^ y ^ z); };
    var I = function(x,y,z) { return (y ^ (x | (~z))); };

    var FF = function(a,b,c,d,x,s,ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        };

    var GG = function(a,b,c,d,x,s,ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        };

    var HH = function(a,b,c,d,x,s,ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        };

    var II = function(a,b,c,d,x,s,ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        };

    var ConvertToWordArray = function(str) {
            var lWordCount;
            var lMessageLength = str.length;
            var lNumberOfWords_temp1=lMessageLength + 8;
            var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
            var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
            var lWordArray=Array(lNumberOfWords-1);
            var lBytePosition = 0;
            var lByteCount = 0;
            while ( lByteCount < lMessageLength ) {
                lWordCount = (lByteCount-(lByteCount % 4))/4;
                lBytePosition = (lByteCount % 4)*8;
                lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
                lByteCount++;
            }
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
            lWordArray[lNumberOfWords-2] = lMessageLength<<3;
            lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
            return lWordArray;
        };

    var WordToHex = function(lValue) {
            var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
            for (lCount = 0;lCount<=3;lCount++) {
                lByte = (lValue>>>(lCount*8)) & 255;
                WordToHexValue_temp = "0" + lByte.toString(16);
                WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
            }
            return WordToHexValue;
        };

    var x=Array();
    var k,AA,BB,CC,DD,a,b,c,d;
    var S11=7, S12=12, S13=17, S14=22;
    var S21=5, S22=9 , S23=14, S24=20;
    var S31=4, S32=11, S33=16, S34=23;
    var S41=6, S42=10, S43=15, S44=21;

    str = utf8_encode(str);
    x = ConvertToWordArray(str);
    a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

    for (k=0;k<x.length;k+=16) {
        AA=a; BB=b; CC=c; DD=d;
        a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
        d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
        c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
        b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
        a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
        d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
        c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
        b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
        a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
        d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
        c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
        b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
        a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
        d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
        c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
        b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
        a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
        d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
        c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
        b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
        a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
        d=GG(d,a,b,c,x[k+10],S22,0x2441453);
        c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
        b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
        a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
        d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
        c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
        b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
        a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
        d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
        c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
        b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
        a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
        d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
        c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
        b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
        a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
        d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
        c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
        b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
        a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
        d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
        c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
        b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
        a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
        d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
        c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
        b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
        a=II(a,b,c,d,x[k+0], S41,0xF4292244);
        d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
        c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
        b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
        a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
        d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
        c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
        b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
        a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
        d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
        c=II(c,d,a,b,x[k+6], S43,0xA3014314);
        b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
        a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
        d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
        c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
        b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
        a=AddUnsigned(a,AA);
        b=AddUnsigned(b,BB);
        c=AddUnsigned(c,CC);
        d=AddUnsigned(d,DD);
    }

    var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

    return temp.toLowerCase();
}
alert( md5('Kevin van Zonneveld и Вася Пупкин')); //для проверки


Нельзя ли эту функцию вставить в Custom Buttons как built-in. Она довольно большая, чтобы каждый раз её писать и довольно универсальная.
P.S. Этот пост надо было бы написать в теме Custom Buttons, но она глючит. Поэтому я написал здесь.

difabor

Выделить код

Код:

function getHash(str, hashFunc) {
    var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
        .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    uc.charset = "UTF-8";
    var result = {};
    var data = uc.convertToByteArray(str, result);
    var ch = Components.classes["@mozilla.org/security/hash;1"]
        .createInstance(Components.interfaces.nsICryptoHash);
    ch.init(ch[hashFunc]);
    ch.update(data, data.length);
    var hash = ch.finish(false);
    return Array.map(
        hash,
        function(chr) {
            return ("0" + chr.charCodeAt(0).toString(16)).slice(-2);
        }
    ).join("");
}
alert(getHash("Проверка, test", "MD5"));

https://developer.mozilla.org/en-US/doc … #Constants

Большое спасибо!
Я искал этот md5, но видать не там :(
Что интересно, что скрипт, который я нашёл и провозился даёт тот же результат :)
Значит, я правильно исправил

А можно этот код использовать отдельно, без кнопки ToolsBookmark?

скрытый текст

Выделить код

Код:

// Отслеживать добавление закладок и получать id последней использованный папки закладок и index закладки ..............
var observer = {
  onItemAdded: function(id, folderId, index) {
     lastBookIndex = index;
     lastUsedFolderId = folderId;
  }
};
var lastBookIndex;
var lastUsedFolderId;
var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService);
bmsvc.addObserver(observer, false);
addDestructor(()=> bmsvc.removeObserver(observer) );


Чтобы при добавлении закладки, она добавлялась в ту папку, куда заносилась закладка в предыдущий (т.е. в последний) раз.

Stkvsky
Может это попробуй Добавить все открытие вкладки в папку закладок

bunda1
Дело в том что я использую дополнение "визуальные закладки"
которое при добавлении закладки делает скриншот страницы
Поэтому вынужден добавлять по одной и приходится каждый раз указывать папку