Прошел по ссылке, поменял код, все осталось по прежнему(((
// Сохранять изображение без запроса в указанную папку из контекстного меню, от 21.02.2016. ............... ((contextMenu, saveimage) => { var mItem = contextMenu.insertBefore(document.createElement("menuitem"), saveimage); mItem.setAttribute("label", "Сохранить в папку: " + getPath().split("\\").pop()); addEventListener("popupshowing", e=> mItem.hidden = saveimage.hidden, false, contextMenu); addDestructor(()=> mItem.remove() ); mItem.onclick =e=> { if ( e.button ) { setPath(); return; } var run = cbu.getPrefs("browser.download.folderList"); var use = cbu.getPrefs("browser.download.useDownloadDir"); try { var dir = gPrefService.getComplexValue("browser.download.dir", Ci.nsISupportsString).data } catch(e) { var dir = Services.downloads.defaultDownloadsDirectory.path; }; cbu.setPrefs("browser.download.folderList", 2); cbu.setPrefs("browser.download.useDownloadDir", true); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", getPath()) ); saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document); cbu.setPrefs("browser.download.folderList", run); cbu.setPrefs("browser.download.useDownloadDir", use); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", dir) ); } function setPath() { var fp = window.makeFilePicker(); fp.init( window, "Укажите путь к папке для сохранения изображений", fp.modeGetFolder ); fp.open( result => result == fp.returnOK && cbu.setPrefs("CB.pathToImageFolder", convertFromUnicode("UTF-8", fp.file.path)) || mItem.setAttribute("label", "Сохранить в папку: " + getPath().split("\\").pop()) ); }; function getPath() { try { return gPrefService.getComplexValue("CB.pathToImageFolder", Ci.nsISupportsString).data; } catch(e) { return 'C:\\qwerty'; }; }; })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-saveimage"));
Добавлено 19-02-2016 23:36:33
emlen
Не подтверждаю, после выбора папки меняется и название, попробуйте на чистом профиле.
У него SeaMonkey.
Отредактировано bunda1 (19-02-2016 23:36:33)
Отсутствует
bunda1, очень Вам благодарен, что не оставляете без внимания "фаната симанки" И конечно же заработало, спасибо!
Добавлено 20-02-2016 00:25:22
Dumby, попробовал код, доволен как слон, лепота!!! спасиб еще раз!
Отредактировано emlen (20-02-2016 00:25:22)
SeaMonkey 2.39 forever
Отсутствует
Dumby, вот эта штука:
для чего нужна? И может есть какой метод извлечения из ури доменного имени, или хотябы из ури в урл для
var chkpoint='/'; var arrayOfStrings = urllink.split(chkpoint); var site=arrayOfStrings[2];
, чтобы все производные страницы из журнала вычищать тем самым предыдущим рекомендованным Вами методом "removePagesFromHost", а -то остаются "хвосты" к примеру от страниц ВК..? В идеале наверное даже не в этом цикле их чистить, а сначала закрывать все, а потом из закрытых брать все ссылки с историей вкладок и удалять из журнала.. Тока это все так сложно...
Добавлено 20-02-2016 01:07:02
Кнопка "Undo Close Tab" не меняет свое визуальное состояние после выполнения удаления закрытых вкладок из другой кнопки, пока не наведешь на нее мышь, есть какие-то трюки, чтобы она становилась неактивной после зачистки? К примеру, когда эта зачистка идет из кнопки закрывающей все табы после сохранения их адресов в папку, она почему-то сама очищается... видимо реагирует на какой-то ивент при закрытии вкладки или что-то типа того.. а если просто нужно зачистить "закрытые" ничего не закрывая из текущих?
Отредактировано emlen (20-02-2016 02:22:18)
SeaMonkey 2.39 forever
Отсутствует
emlen
для чего нужна?
Ну, не то чтобы нужна, но ведь сам просил
чтоб Speed Start страницы закрывались без занесения в закладки.
И может есть какой метод извлечения из ури доменного имени, или хотябы из ури в урл
У ури есть свойства. Если нужен base domain, используй Services.eTLD.
В идеале наверное даже не в этом цикле их чистить, а сначала закрывать все, а потом из закрытых брать все ссылки с историей вкладок и удалять из журнала..
Только не забудь посетить адрес
about:config?filter=browser.sessionstore.max_tabs_undo;
Отсутствует
Только не забудь посетить адрес
about:config?filter=browser.sessionstore.max_tabs_undo;
ага, то есть тоже не панацея, что какие-то адреса от "замораживаемой" сессии не проскользнут? А по временному интервалу не получится запрос на удаление истории сформировать в контексте текущей задачи?
SeaMonkey 2.39 forever
Отсутствует
bunda1,
замечательная кнопка получилась!
Работает и на Firefox, и на Palemoon.
Расширение удалил. Спасибо.
Отсутствует
И встречный вопрос, можно сделать подобное множественным меню? чтобы был выбор из нескольких папок..
Не нужные папки из меню можно удалять по СКМ или ПКМ на папке, пункты меню можно перемещать верх или вниз прокруткой колёсика мыши на пункте меню, для добавления новых папок в меню есть специальный пункт меню:
// Сохранять изображение без запроса в установленные папки, из контекстного меню, от 22.02.2016. ............... ((contextMenu, saveimage) => { var s = "CB.allPathsToImageFolders"; var defaultDownFolder = Services.downloads.defaultDownloadsDirectory.path; var menu = contextMenu.insertBefore(document.createElement("menu"), saveimage); menu.setAttribute("label", "Сохранить в папку:"); addEventListener("popupshowing", e=> menu.hidden = saveimage.hidden, false, contextMenu); addDestructor(()=> menu.remove() ); var menuPopup = menu.appendChild( document.createElement("menupopup") ); menuPopup.setAttribute('style', 'overflow: scroll'); function setItemsToMenuPopup() { menuPopup.textContent = ""; getPaths().split(",").forEach(path=> { var mItem = document.createElement("menuitem"); mItem.setAttribute("tooltiptext", path ); mItem.setAttribute("label", path.split("\\").pop() ); mItem.onwheel =e=> moveMenuItem(e, path); mItem.onclick =e=> e.button ? deleteFolder(path) : downloadToFolder(path); menuPopup.appendChild( mItem ); }); var sep = menuPopup.appendChild( document.createElement("menuseparator") ); var mItem = menuPopup.appendChild( document.createElement("menuitem") ); mItem.setAttribute("label", "Добавить папку"); mItem.onclick =e=> setPaths(); }; setItemsToMenuPopup(); function downloadToFolder(path) { var run = cbu.getPrefs("browser.download.folderList"); var use = cbu.getPrefs("browser.download.useDownloadDir"); try { var dir = Services.prefs.getComplexValue("browser.download.dir", Ci.nsISupportsString).data } catch(e) { var dir = defaultDownFolder }; cbu.setPrefs("browser.download.folderList", 2); cbu.setPrefs("browser.download.useDownloadDir", true); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", path) ); saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document); cbu.setPrefs("browser.download.folderList", run); cbu.setPrefs("browser.download.useDownloadDir", use); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", dir) ); }; function deleteFolder(path) { var paths = getPaths().split(",").filter(el=> { return (el !== path) }); cbu.setPrefs(s, convertFromUnicode("UTF-8", (paths.length ? paths : defaultDownFolder))); setItemsToMenuPopup(); }; function moveMenuItem(e, path) { var arr = getPaths().split(","); var pathPos = arr.indexOf(path); var index = (e.deltaY < 0 ? -1 : 1); if ( (pathPos == 0 && index == -1) || (pathPos+1 == arr.length && index == 1)) return; arr[pathPos] = arr[pathPos + index]; arr[pathPos + index] = path; cbu.setPrefs(s, convertFromUnicode("UTF-8", arr)); setItemsToMenuPopup(); }; function setPaths() { var fp = window.makeFilePicker(); fp.init( window, "Укажите путь к папке для сохранения изображений", fp.modeGetFolder ); if ( fp.show() == fp.returnCancel ) return; cbu.setPrefs(s, convertFromUnicode("UTF-8", getPaths() + "," + fp.file.path)); setItemsToMenuPopup(); }; function getPaths() { try { return Services.prefs.getComplexValue(s, Ci.nsISupportsString).data; } catch(e) { return defaultDownFolder }; }; })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-saveimage"));
Отсутствует
Вопрос знающим людям: как добавить перетаскивание к пунктам контекстного меню на странице?
Хм, ну если коротко, то это довольно нетривиально.
Вот пример:
https://github.com/Infocatcher/Custom_B … #L254-L257
И там далее реализация:
https://github.com/Infocatcher/Custom_B … s.js#L1710
Можно искать документацию насчет event.dataTransfer.
Отредактировано Infocatcher (22-02-2016 19:01:04)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Хм, ну если коротко, то это довольно нетривиально.
Мда, сложновато, наверно поищу обходный путь - попробую передвигать пункты меню по меню колёсикам мыши, как то так:
mItem.onwheel =e=> moveMenuItem(e, path); function moveMenuItem(e, path) { e.deltaY < 0 ? true : false .....
Спасибо
Добавлено 22-02-2016 19:12:08
Мастер bunda1, Вы великолепны!
Спасибо, приятно когда благодарят
Отредактировано bunda1 (22-02-2016 19:12:08)
Отсутствует
emlen
Добавил возможность перемещать пункты меню по меню верх или вниз прокруткой колёсика мыши на пункте меню: Сохранять изображение без запроса в установленные папки
Отсутствует
emlen
Добавил возможность перемещать пункты меню по меню верх или вниз прокруткой колёсика мыши на пункте меню: Сохранять изображение без запроса в установленные папки
А если само меню требует скроллинга?
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Любители обмазываться e10s'ом тестирования могут попробовать версию с работающими custombutton:// ссылками при включенном мультипроцессном режиме:
http://custombuttons.sourceforge.net/forum/viewtopic.php?p=11477#p11477
Отредактировано Infocatcher (23-02-2016 01:55:58)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Всех волшебников кнопок С Праздником!
Мучался, мучался с последними версиями лиса и плюнул. Достал меня этот Астралис со своим мультяшным интерфейсом, постоянной анимацией при переключениях на настройки, аж браузер весь корежит.
Решил вернутся на провереные 16-28,пока не осстановился конкретно. Но не хватает функции одной. Проверенные расширения для текстовых ссылок, либо перестали работать, либо не ставятся на старые версии. Есть тут кнопка http://forum.mozilla-russia.org/viewtop … 97#p562297, все хорошо но работает только по клику на нее. Нельзя ли поправить код, так что бы работала постоянно, делая текстовые ссылки кликабельными и выделяя ее цветным фоном (к примеру желтым). Что бы не кликать ее постоянно.
Буду признателен за помощь.
Отсутствует
А если само меню требует скроллинга?
Отсутствует
difabor пишетА если само меню требует скроллинга?
Да, я понимаю, но что делать, если и меню большое и надо ещё и менюитемы двигать (перемещать)?
У меня есть идея на этот счёт, но не знаю, может это и бред...
Если Х-координата начала меню и ширина меню известны (а этого несложно добиться), то известно и то - в левой или правой половине менюитема делается вращение колёсиком.
Тогда левую половину - отдать под стандартный скроллинг, а правую, через event.preventDefault() и (возможно) event.stopPropagation() - перемещать менюитемы Вашей функцией.
Но если это бред - не ругайте меня сильно
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Да, я понимаю, но что делать, если и меню большое и надо ещё и менюитемы двигать (перемещать)?
Спасибо, я об этом не подумал. Можно сделать Ctrl+скрол или там ПКМ+скрол, вобщем надо ещё подумать.
Отсутствует
["Rox Player", "C:\\Users\\Home\\AppData\\Local\\ROX Player\\roxplayer.exe", "rox:"], //http://roxplayer.com/
Смотрим торрент видео в плеере ROX с возможностью перемотки - только видео
Параметры запуска не обязательные - "rox:"
Открывает по ссылке из браузера магнитики и торрент ссылки:
Отсутствует
Вопрос к знающим: где-то я читал, что использовать eval(...) нежелательно.
Он что, сильно влияет на производительность или жрёт память?
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Смотрим торрент видео в плеере ROX с возможностью перемотки - только видео .....
А можно подробнее, куда этот код вставлять? Создал кнопку, вставил код в инициализацию, пути поправил на свои. Пункта меню нет. Что не так?
Отсутствует
fokanik пишет: Смотрим торрент видео в плеере ROX с возможностью перемотки - только видео .....А можно подробнее, куда этот код вставлять? Создал кнопку, вставил код в инициализацию, пути поправил на свои. Пункта меню нет. Что не так?
if ( this.hasAttribute("initialized") ) return; this.setAttribute("context", ""); this.tooltipText="PotPlayer --->\n<--- SMPlayer"; var id = "context-bookmarklink"; // Место врезки this.onclick = function(e) { if ( e.button == 0 ) Play(array[0][1], "-add-to-playlist", "href"); // ПКМ if ( e.button == 1 ) gShowPopup(this); // Редактировать кнопку if ( e.button == 2 ) Play(array[1][1], "/add", "href"); // ЛКМ } var contextMenu = document.getElementById("contentAreaContextMenu"); var sepOpen = document.getElementById(id); var array = [ ["SMPlayer", "C:\\Program Files\\SMPlayer\\smplayer.exe", "-add-to-playlist" ], //http://smplayer.sourceforge.net/ ["PotPlayer", "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe", "/add" ], //https://potplayer.daum.net/?lang=ru ["Video Lan", "C:\\Program Files\\VideoLan\\vlc\\vlc.exe", "-AddToPlaylist" ], //http://www.videolan.org/vlc/ ["Rox Player", "C:\\Users\\Home\\AppData\\Local\\ROX Player\\roxplayer.exe", "rox:"], //http://roxplayer.com/ ["Download Master", "P:\\PortableApps\\PortableApps\\Download Master Portable\\dmaster.exe", ""], ["separator"] ] array.forEach(function(m) { if (m == "separator") { contextMenu.insertBefore(document.createElement("menuseparator"), sepOpen); return; }; var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), sepOpen); menuitem.id = "open-in"; var label = m[0], path = m[1], param = m[2]; menuitem.setAttribute("label", label); menuitem.setAttribute("class", "menuitem-iconic"); menuitem.setAttribute("image", "moz-icon://file://" + path); menuitem.onclick =()=> Play(path, param, ""); }); addDestructor(function() { [...contextMenu.childNodes].forEach(function(el) { if (el.id == "open-in") contextMenu.removeChild(el); }) }); function Play(path, param, link){ var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath(path); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); if (link == "href" || !gContextMenu.onLink) process.run(false, [content.location.href, param], 2); else process.run(false, [gContextMenu.getLinkURL(), param], 2); }
Меню кнопки по - скм (дальше думаю разберетесь сами).
Еще в плеере путь - куда файлы загружаются измените и можно будет фильмы после просмотра вытаскивать из кэша:
А можно подробнее, куда этот код вставлять? - в инициализацию, а потом еще нужно браузер перезапустить, чтоб все заработало - если путь к программе верен иконка должна появиться.
Отредактировано fokanik (23-02-2016 22:41:14)
Отсутствует