Страницы: 1
"Добавить закладку в папку" в контекстном меню на странице( Firefox 17 + )
Автор: bunda1
Версия: от 22.03.2018.
Описание: добавляет новый пункт Добавить как закладку в: [имя папки] в контекстном меню на странице как последний пункт, который добавляет страницу или ссылку в папку "Новая папка", если такая папка не существует код сам создаст папку на панели закладок.
Если нажать ПКМ на пункте откроется окошко для изменения папки добавления закладок, после вода названия новой папки соответственно поменяется пункт меню.
Использование: можно создать новую Custom Buttons кнопку или использовать уже существующую кнопку и положитъ код в вкладку инициализации.
// "Добавить как закладку в папку" в контекстном меню на странице, от 22.03.2018. .................. (()=> { var s = "CB.bookmarkFolderForSaving"; var contextMenu = document.getElementById("contentAreaContextMenu"); var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); // Создать новый пункт в контекстном меню на странице .... var menuitem = contextMenu.appendChild(document.createElement("menuitem")); menuitem.setAttribute("id", "context-addBookmark"); menuitem.setAttribute("label", "Добавить закладку в: " + getFolderName()); addDestructor(()=> menuitem.remove()); // Обрабатывать клики на пункте меню .... addEventListener("click", e=> { if ( e.button == 0 ) { // ЛКМ добавить закладку gContextMenu.onLink ? addBookmark(gContextMenu.getLinkURI(), gContextMenu.linkText(), gContextMenu.onLink) // на ссылке : addBookmark(gBrowser.selectedBrowser.webNavigation.currentURI, getDocTitle()); // на странице } if ( e.button == 2 ) { // ПКМ изменить папку для закладок contextMenu.hidePopup(); var val = custombuttons.promptBox(menuitem.label, 'Отмена вернёт значение по умолчанию'); var newFolder = val[0] ? val[1] : defaultFolder; cbu.setPrefs(s, convertFromUnicode("UTF-8", newFolder)); menuitem.setAttribute("label", "Добавить закладку в: " + newFolder); alertsService.showAlertNotification("chrome://global/skin/icons/information-16.png", newFolder, "Папка для добавления закладок"); setTimeout(()=> alertsService.closeAlert(), 3500); } }, false, menuitem); // Получить заголовк страницы или название вкладки .... function getDocTitle() { var docTitle = content.document.title || gBrowser.mCurrentTab.label; var docTitle = docTitle.replace(/[:.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " "); return docTitle.substring(0, 50); }; // Получить из 'about:config' название папки для добавления закладок .... function getFolderName() { var p = Services.prefs; try { return p.getStringPref ? p.getStringPref(s) : p.getComplexValue(s, Ci.nsISupportsString).data } catch(e) { return "Новая папка" }; // папка по умолчанию }; // Конвертировать текст в Unicode .... function convertFromUnicode(charset, str) { var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = charset; str = converter.ConvertFromUnicode(str); return str + converter.Finish(); }; // Получить Id нужной папки закладок .... function getBookFolderId(folderName, parentId = 3, res = false) { var parentFolder = PlacesUtils.getFolderContents(parentId).root; for ( var i = 0; i < parentFolder.childCount; i++ ) { var child = parentFolder.getChild(i); if ( child.title == folderName ) { res = child.itemId; break; } } return res; }; // Добавить текущую страницу или ссылку в папку закладок .... function addBookmark(url, label, link) { var folderName = getFolderName(); var folderId = getBookFolderId(folderName); !folderId && PlacesUtils.bookmarks.createFolder(3, folderName, -1); // создать папку если не существует PlacesUtils.bookmarks.insertBookmark(folderId, url, 0, label); var image = gBrowser.mCurrentTab.image || "chrome://global/skin/icons/information-16.png"; alertsService.showAlertNotification(image, label, 'Добавил закладку в папку: ' + folderName); setTimeout(()=> alertsService.closeAlert(), 3500); }; })();
За помощь с кнопкой спасибо Dumby и okkamas_knife
Отредактировано bunda1 (21-06-2013 23:24:58)
Отсутствует
Классная кнопка, спасиб!
Можно её как-то настроить так, чтобы сохранять закладки в «Меню закладок», а не в «Панель закладок» (и вообще без папки, да, я знаю, что так делает стандартный пункт меню, но он у меня глючит, видимо конфликт с каким-то дополнением, но лень разбираться)?
А то я привык сортировать закладки потом, а вначале кидать их, чтобы они на виду висели в меню, всякие темы в новостях, где я слежу за дискуссией, а если что-то важное, то потом сортирую в подпапки, а ненужное удаляю...
Отсутствует
Можно её как-то настроить так, чтобы сохранять закладки в «Меню закладок»
Наверно можно, попробуй
1. Заменить var rootFolder = bmsvc.toolbarFolder; на var rootFolder = bmsvc.placesRoot;
2. ПКМ на пункте меню, ввести «Меню закладок»
Отсутствует
bunda1
Спасибо. Интересное решение проблемы.
1. Заменить var rootFolder = bmsvc.toolbarFolder; на var rootFolder = bmsvc.placesRoot;
2. ПКМ на пункте меню, ввести «Меню закладок»
Для не корня можно ещё проще, заменив на bmsvc.bookmarksMenuFolder.
Отредактировано wolwerine (22-06-2013 21:30:01)
Отсутствует
Поломалась кнопочка, если не сложно, почините плиз.
Отсутствует
В Симанки работает, иконку присобачил...Надо правым кликом ID папки менять , а не название . Т.е не только на панели , в меню, к примеру...
Отсутствует
Т.е не только на панели , в меню, к примеру...
Вы о чем? 55, не работает, проверял на двух профилях.
Отредактировано Stkvsky (22-03-2018 16:57:06)
Отсутствует
Снова сломалась, будьте добры, почините пожалуйста если не сложно.
Отсутствует
Оперативненько! Ну, и иконку добавлю:
// Создать новый пункт в контекстном меню на странице .... var menuitem = contextMenu.appendChild(document.createElement("menuitem")); menuitem.setAttribute("id", "context-addBookmark"); menuitem.setAttribute("label", "Добавить закладку в: " + getFolderName()); menuitem.setAttribute("class", "menu-iconic"); menuitem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACD0lEQVR42oWTXUhTYRiAP89qziAYepG6TfAiyV1JsFojMJrVjf3dDOsmMoOwCwnSXLSJXgWDqAWBF7aGoFGGV0EUrL9FERoh1bQsqeiXfrzoB0N6es8528ncaC88fOfwnff53vN976eUUprafJk8lPIKS1XRkI8LRVayUVgmLBFsQklBwfhb8rAkRauSidQLDK49/zvqFKmqxBKcn4BzDzBGnU39BVZfTMOxQ6ZIXk6msdh7wUz+9IP/RraaLYYgfAUL73Fz8tJjs5rBh3B2HPrvQ/P+N8TvYJAVdBqCfRcxWH8aYm0dpCIRxvr6SG7bSWLrDsZ6e7ke7SESaiV61UoeFVoMwfYEBrGWNr6NjEAmY5JKmUxPw9QU35NJDq/ekBOcEqoNQSAOnh5Ih0IwPAwJsQ0MSP2DMDTEfDTKV7+f904nN12uBavr/SECZ6dZ1u11Aejqgu5u2ZAwv9vbmfP5mLXZeK0UrzSNGy53bnWXdYw6K47CEX8znwMB5oNBvtTX87G0lA+SmEueqazkYHWdLtgl1OVaybvwfPd41vLI42HGbicjiZPCy7IyntTUcKBqpZ58Iru61dZ6a64RwkJMmGi022dv1dbyrKKCp+XlpOW5yeH4KXPvhMbs3fgndJtDqDJ3VjX4NO3MqNs9J/xapWn3sv/dlJfcGr+rFbijunC5EBQ6hN2C27j6i+IP/uDMhPNYgHUAAAAASUVORK5CYII="); addDestructor(()=> menuitem.remove())
Отсутствует
Страницы: 1