Кнопка "переключить proxy.Pac "... Как "self.tooltipText = val" впаять? Не переключатся , хоть тресни...
/*Initialization Code*/ var idbut=this.id; var urlbar = document.getElementById("page-action-buttons"); var button = document.getElementById(idbut); urlbar.insertBefore(button, urlbar.lastChild); this._handleClick =()=> { cbu.setPrefs(s, cbu.getPrefs(s) == "file:///D:/iceweasel/app/browser/Proxy.pac" ? "file:///D:/iceweasel/app/Proxy.pac" : "file:///D:/iceweasel/app/browser/Proxy.pac"); }; var s = "network.proxy.autoconfig_url"; var ps = Services.prefs; function toggleImage() { var val = cbu.getPrefs(s); var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon"); icon.src = cbu.getPrefs(s) == "file:///D:/iceweasel/app/Proxy.pac" ? self.image : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAIElEQVR42mNkoBAw/t0p/H+kG8DQ7DPiDQDqHjWAQgMAp7kcXcBx0C0AAAAASUVORK5CYII="; }; this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() }; toggleImage(); Services.prefs.addObserver( s, toggleImage, false ); addDestructor(function() { gPrefService.removeObserver( s, toggleImage, false ) }); var style = custombutton.buttonGetHelp(self).replace(/id/g, _id); var uri = makeURI('data:text/css,'+ encodeURIComponent(style)); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); this.tooltipText="Л: Сменить прокси";
Отсутствует
И не должно, потому что val у тебя отдает путь, а для переключения нужно что бы val отдавал true или false. Вот так:
function toggleImage() { var val = (cbu.getPrefs(s) == "file:///D:/iceweasel/app/Proxy.pac"); var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon"); icon.src = val ? self.image : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAIElEQVR42mNkoBAw/t0p/H+kG8DQ7DPiDQDqHjWAQgMAp7kcXcBx0C0AAAAASUVORK5CYII="; self.tooltipText = val ? 'Автопрокси' : 'Без прокси'; }; toggleImage(); Services.prefs.addObserver(s, toggleImage, false); addDestructor(()=> Services.prefs.removeObserver(s, toggleImage));
Отсутствует
bunda1
Теперь класс! Кнопка бледная была при запуске , малость допилил. Окончательный вариант. Url кнопки - сменить прокси.пак
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%u0410%u0432%u0442%u043E%20Proxy.pac%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/bmp%3Bbase64%2CQk22AwAAAAAAADYAAAAoAAAAEAAAAA4AAAABACAAAAAAAIADAAAAAAAAAAAAAAAAAAAAAAAAPkOm8ZpXFvJzGwDybycA8m4nAvJzHwDyyOHv8gAAffLL5/fyZgcA8nEsCfJpIQDyXgUA8oBBFfLIzb3ydnjA32l68/8zSvz/roqL/6xMCv+ePQD/pD8A//////8AALX//////5AdAP+UNgj/mz4H/+jBm///////X2ni/1xizf/67cz/wdX//zVJ7v9dT63/n00b/5ATAP/w////AACf//H///9qAAD/plck//Xlx/+ouv//Jjrt/1pInP+YUyD/kTQA/925k///////bH/9/yswzf/GilT//////wAAo//w////yoVC//////90h///O1f//6Z9hf+gQAD/fCcA/4MFAP9xAAD/pDwA////7/+ttfD/AADC/////v8AAKr/8vj5//////8UHNP/MjHC/7JIAP+GAAD/fwIA/2oBAP////////////b////z/P/////0////9P/h4ev/AAC2/8zM6f////L////0//////////////////n////p////AACr/wAAsf8AALP/AACy/wAAsv8AALT/AAC8/wAAvv8AALz/AAC0/wAAsv8AALL/AACz/wAAsf8AALf/AACG//n///////////////////////T////y/8zM6f8AALb/4eHr////9P////T/8/z///b//////////////9Dt//9/AgD/hgAA/7JIAP8yMcL/FBzT///////y+Pn/AACq/////v8AAML/rbXw////7/+kPAD/cQAA/4MFAP9kAAD/oEAA/6Z9hf87V///dIf////////KhUL/8P///wAAo///////xopU/yswzf9sf/3//////925k/+RNAD/YQwA/1pInP8mOu3/qLr///Xlx/+mVyT/agAA//H///8AAJ//8P///5ATAP+fTRv/XU+t/zVJ7v/B1f//+u3M/4NAEv9faeL//////+jBm/+bPgf/lDYI/5AdAP//////AAC1//////+kPwD/nj0A/6xMCv+uiov/M0r8/2l68//e483/yM298oBBFfJeBQDyaSEA8nEsCfJmBwDyy+f38gAAffLI4e/ycx8A8m4nAvJvJwDycxsA8ppXFvI+Q6bxPD6d8cjNvfKAQRXyXgUA8mkhAPJxLAnyZgcA8svn9/IAAH3yyOHv8nMfAPJuJwLybycA8nMbAPKaVxbyPkOm8Tw+nfE%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20idbut%3Dthis.id%3B%0Avar%20urlbar%20%3D%20document.getElementById%28%22page-action-buttons%22%29%3B%0Avar%20button%20%3D%20document.getElementById%28idbut%29%3B%0Aurlbar.insertBefore%28button%2C%20urlbar.lastChild%29%3B%0A%0Athis._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20cbu.setPrefs%28s%2C%20cbu.getPrefs%28s%29%20%3D%3D%20%22file%3A///D%3A/iceweasel/app/Proxy2.pac%22%20%3F%20%22file%3A///D%3A/iceweasel/app/Proxy1.pac%22%20%3A%20%22file%3A///D%3A/iceweasel/app/Proxy2.pac%22%29%3B%0A%7D%3B%0A%0Avar%20s%20%3D%20%22network.proxy.autoconfig_url%22%3B%0Avar%20ps%20%3D%20Services.prefs%3B%0A%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20var%20val%20%3D%20%28cbu.getPrefs%28s%29%20%3D%3D%20%22file%3A///D%3A/iceweasel/app/Proxy1.pac%22%29%3B%0A%20%20%20%0A%20%20%20var%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%20%20%20icon.src%20%3D%20val%20%3F%20self.image%20%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAIElEQVR42mNkoBAw/t0p/H+kG8DQ7DPiDQDqHjWAQgMAp7kcXcBx0C0AAAAASUVORK5CYII%3D%22%3B%20%0A%20%20%20%0A%20%20%20self.tooltipText%20%3D%20val%20%3F%20%27Proxy1.Pac%27%20%3A%20%27Proxy2.Pac%27%3B%20%0A%7D%3B%0AtoggleImage%28%29%3B%0AServices.prefs.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20Services.prefs.removeObserver%28s%2C%20toggleImage%29%29%3B%0Avar%20style%20%3D%20custombutton.buttonGetHelp%28self%29.replace%28/id/g%2C%20_id%29%3B%0Avar%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28style%29%29%3B%0Avar%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Asss.loadAndRegisterSheet%28uri%2C%200%29%3B%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%23id%20%7B%0Amargin-left%3A%201px%20%21important%3B%20%20%20%0A%20%0A%0A%29%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано anywho (08-06-2019 00:43:29)
Отсутствует
bunda1
Теперь класс! Кнопка бледная была при запуске , малость допилил. Окончательный вариант. Url кнопки - сменить прокси.пак
Там у тебя лишний код.
var idbut=this.id; var urlbar = document.getElementById("page-action-buttons"); var button = document.getElementById(idbut);
можно заменить на
var urlbar = document.getElementById("page-action-buttons"); var button = document.getElementById(_id);
и
вообще ненужен.
Отсутствует
Единственное пожелание, можно ли убрать из стандартного пункта поиска название движка по умолчанию и реакцию на эту кнопку?
Если для русской локали и название пункту
устанавливает только лиса, то вот вариант
(ss => { ss.setAttribute("closemenu", "none"); ss.BrowserSearch = {loadSearchFromContext() {}}; Object.defineProperty(ss, "label", { configurable: true, enumerable: true, get: () => ss.getAttribute("label"), set(val) { var {length} = Services.search.defaultEngine.name; ss.setAttribute("label", val = val.slice(0, -length)); return val; } }); addDestructor(() => { delete ss.label; delete ss.BrowserSearch; ss.removeAttribute("closemenu"); }); })(document.getElementById("context-searchselect"));
Нужна кнопка, а лучше пункт в меню вкладок, "Обновить другие вкладки".
Ну да, в FF 60 же нет multiselect tabs,
можно и без описания. Тогда по-минимуму
(menuitem => { menuitem.setAttribute("label", "Обновить другие вкладки"); menuitem.setAttribute("oncommand", "reloadOtherTabs();"); menuitem.reloadOtherTabs = () => { var tab = TabContextMenu.contextTab; for(var t of gBrowser.visibleTabs) if (t != tab) try { gBrowser.getBrowserForTab(t).reload(); } catch(ex) {} } document.getElementById("context_reloadAllTabs").after(menuitem); addDestructor(() => menuitem.remove()); })(document.createElementNS(xulns, "menuitem"));
Отсутствует
Друзья, возможно ли исправить кнопку "активация таба наведением мыши"?
Отредактировано bezuma (09-06-2019 12:32:26)
Отсутствует
проверьте пожалуйста у себя...... это кнопка реагирует на ПКМ?
https://imgur.com/zRIFZ8h
https://anonfile.com/Ua79acvdnd/CB_buttons_01.05.2019._5_18_16_html
а должно быть так
https://imgur.com/hpNUzJV
Отсутствует
Да, кнопка не реагирует на ПКМ. Замени в коде Инициализации:
на
Отсутствует
Dumby
У меня вопрос по поводу вашей кнопки "Отправить в youtube-dl" https://forum.mozilla-russia.org/viewto … 78#p765178
Юзер eddiezato предложил способ передачи ссылки с youtube-dl в Potplayer. http://forum.ru-board.com/topic.cgi?for … tart=760#5. Можно ли изменить код кнопки так, чтобы по нажатию кнопки в контекстном меню ссылки происходило ее копирование в clipboard, и запуск файла ярлыка, выполняющего отправку ссылки в Potplayer. (Там запускается powershell со скриптом, выбирает ссылку на видео, запускает youtube-dl и PotPlayer и передает ему ссылку).
Отредактировано Garalf (13-06-2019 19:36:13)
Отсутствует
Garalf
SMPlayer
Отредактировано Vitaliy V. (13-06-2019 14:00:24)
Отсутствует
Vitaliy V.
Спасибо за информацию. Буду пользоваться. Но как-то уже к Potу привык. А эту кнопочку поправить для спеца особого труда не составит, я думаю.
Отредактировано Garalf (13-06-2019 18:23:21)
Отсутствует
Garalf
Что тут за проблема? Есть три вида кнопок "в плеер" и Youtube.dll и даром не надо.
Тем более из буфера
/*CODE*/ var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath('C:\\Program Files\\Potplayer\\Potplayer.exe'); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var link = gClipboard.read(); var args = [link,"/play"]; process.init( file ); process.run( false, args, args.length );
Отсутствует
anywho
Дело в том, что некоторые ссылки с Youtube, переданные напрямую не воспроизводятся на Potplayer, например:
https://www.youtube.com/watch?v=i_M0BOx7Cok, а через Youtube-dl работают влет. Просто хочется упростить работу. Сейчас я сначала копирую ссылку в буфер, а затем запускаю выполнение скрипта (ярлыка) кнопкой Open with.... Поэтому возникла идея совместить это в одной кнопке Отправить в youtube-dl, заменив скачивание видео на перенос его в Potplayer.
зы А разве плохо, если будет еще одна кнопка типа Видео в плеер.
Отредактировано Garalf (13-06-2019 21:34:28)
Отсутствует
Как открывать на панели Закладок Журнал за текущий месяц? т.е добавить папку: Журнал за месяц?
Перетаскиваю на панель закладок папку журнала «Этот месяц» из Библиотеки. Через месяц папка становится пустой.
Подскажите кнопку: открывающую меню: "Журнал за этот месяц" - и всегда за текущий месяц.
Кнопка открытия журнала History в боковой панели не нужна. Удобнее открыть подменю: Журнал за месяц (неделю) из панели Закладок
Отсутствует
bunda1
Посмотрите этот код
(popup => addEventListener("popupshowing", { handleEvent(e) { if (e.target != popup || this.shouldHide) return; var menuitem = document.createElement("menuitem"); for(var args of Object.entries({ class: "menuitem-iconic", id: "context-sendlinktoytdl", label: "Отправить в youtube-dl", oncommand: "linkedObject.oncommand();", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAc0lEQVQ4jWNgGB7gvqdtwANP+y8PvOz/E4Pve9m/v+9pG4AwwMv+PLGakQw5DzcAm4Ifty//f5IQhtcQvAb8/fP1/++Pr/6/bKog3wAY/rBuKWUGfNq5kXwvvO5tJs8LP25f/v80O5G4QKQ4GilOSEMbAAAJoGH0pNGWEwAAAABJRU5ErkJggg==" })) menuitem.setAttribute(...args); menuitem.linkedObject = this; popup.insertBefore(menuitem, popup.querySelector("#context-sep-open")); addDestructor(() => menuitem.remove()); this.handleEvent = e => { if (e.target == popup) menuitem.hidden = this.shouldHide; } menuitem.onauxclick = e => { e.preventDefault(); var link = gContextMenu.linkURL; var fp = makeFilePicker(); fp.init(window, null, fp.modeGetFolder); fp.open(res => { if (res != fp.returnOK) return; fp.file.append("%(title)s.%(ext)s"); this.oncommand(fp.file.path, link); }); } }, get shouldHide() { return !(gContextMenu.onLink || gContextMenu.onPlainTextLink) || !/^https?:\/\//.test(gContextMenu.linkURL); }, args: ["--no-check-certificate", "--no-call-home", "-o"], oncommand(path = String.raw`D:\YouTube\%(title)s.%(ext)s`, link = gContextMenu.linkURL) { var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(FileUtils.File(String.raw`D:\YouTube\youtube-dl.exe`)); var args = this.args.concat(path, link); process.runwAsync(args, args.length); } }, false, popup || 1))(document.getElementById("contentAreaContextMenu"));
Отсутствует
Заделал кнопку "Скачать с youtube.dl.exe" Закачивает почти все , кроме HLS/TS , но в каталог браузера, а хочу в папку TUBE, где сам youtube.dl.exe....
/*Initialization Code*/ var path = 'D:\\tube\\youtube-dl.exe.lnk' var addToPlaylistKey = "/add"; var sysPlayerName = "youtube-dl.exe"; var openIn = "Скачать с "+sysPlayerName; var videoMoved = "Видео перенесено в "+sysPlayerName; var noFound = "Не найдено видео на странице, доступное для переноса в "+sysPlayerName; var Menu_n_TooltipTxts = [{ label: "Действие кнопки: Загрузить видео c "+sysPlayerName, radio: '', value: 'videotoplayer', tooltipTxt: 'Загрузить видео c '+sysPlayerName }, ]; var YoutubeID = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})(?:\W|$)/; if(!(cbu.getPrefs("CB.video")) || cbu.getPrefs("CB.video").length < 9) cbu.setPrefs("CB.video", "videotoplayer"); var tmp = '', tmpp = '', innerA = '<div style="display:block!important;color:#00ff00!important;width:250px!important;font:bold 16px serif!important;z-index:999!important;opacity:1!important;visibility: visible!important;', innerB = 'left:5px!important;position:absolute!important;height:auto!important;box-sizing:border-box!important;padding:5px!important;margin:5px!important;', stopPl = "javascript:(function(){v=document.getElementById('movie_player');if(v){v.stopVideo()}else{v=document.getElementsByTagName('video');if(v){v[0].src='';try{v[0].load()}catch(e){}};}})();", ytIMGouter = function(ytID) {return '<div width="100%"><br /><a target="_blank" href="https://www.youtube.com/watch?v=' + ytID + '"><img src="https://i.ytimg.com/vi/' + ytID + '/hqdefault.jpg"></a><br />' + innerA + 'background-color:black!important;position:relative!important;bottom:20px!important;"> ' + videoMoved + '</div><br /></div><br />'}, handlWin = function(currentWin) { tmp = ''; var elem = currentWin.document.getElementsByTagName('video'), currLoc = currentWin.location; if(elem.length > 0) { if(currLoc.hostname.indexOf('youtu') != -1 && (tmp = currLoc.toString().match(YoutubeID)) && tmp[1].length == 11) { play(cbu.getPrefs("CB.video") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>'; loadURI(stopPl); currentWin.document.getElementById('eow-title').appendChild(videoMovedbox); return true; }; for(i = 0; i < elem.length; i++) { if(((tmp = getSrc(elem[i].parentNode, currLoc)) && tmp.length > 2) || (i == 0 && currentWin.document.body.innerHTML.substring(0, 7) == '<video ' && (tmp = currLoc.toString()))) { videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:20px!important;background-color:black!important;">' + videoMoved + '</div>'; play(tmp); if(currLoc.hostname == 'www.youtube.com') { elem[i].parentNode.parentNode.appendChild(videoMovedbox); } else { elem[i].parentNode.appendChild(videoMovedbox); }; elem[i].src = ''; try { elem[i].load() } catch(e) {}; return true; } } }; currentWin._elems = currentWin.document.getElementsByTagName('iframe'); if(currentWin._elems.length > 0) { for(currentWin._iCounter = 0; currentWin._iCounter < currentWin._elems.length; currentWin._iCounter++) { if((currentWin._elems[currentWin._iCounter].src.indexOf('youtube.com') > -1) && (tmp = currentWin._elems[currentWin._iCounter].src.match(YoutubeID)) && (tmp[1].length == 11)) { play(cbu.getPrefs("CB.video") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); currentWin._elems[currentWin._iCounter].outerHTML = ytIMGouter(tmp[1]); return true; }; if(currentWin._elems[currentWin._iCounter].clientWidth > 80 && currentWin._elems[currentWin._iCounter].clientHeight > 40 && handlWin(currentWin._elems[currentWin._iCounter].contentWindow))return true; } }; elem = currentWin.document.getElementsByTagName('object'); currLoc = currentWin.location; if(elem.length == 0) { elem = currentWin.document.getElementsByTagName('embed') }; if(elem.length > 0) { for(i = 0; i < elem.length; i++) { if(elem[i].innerHTML.indexOf('youtu') != -1 && (tmp = elem[i].innerHTML.match(YoutubeID)) && tmp[1].length == 11) { play(cbu.getPrefs("CB.video") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); elem[i].outerHTML = ytIMGouter(tmp[1]); return true; } else { if(elem[i].clientWidth > 80 && elem[i].clientHeight > 40) { if(((tmp = getSrc(elem[i].parentNode, currLoc)) || (tmp = getLink(elem[i], currLoc))) && tmp.length > 2) { play(tmp); elem[i].outerHTML = innerA + 'background-color:black!important;bottom:20px!important;"> ' + videoMoved + '</div>'; return true; }; }; } }; }; return false; }; this.onclick = this.oncontextmenu = e => { if (e.target != this) return; if(e.button == 0) { if(cbu.getPrefs("CB.video").substring(0,6) == "videom"){ elem = content.document.getElementsByTagName('object'); if(elem.length == 0) { elem = content.document.getElementsByTagName('embed') }; resizeObjs(elem); resizeObjs(content.document.getElementsByTagName('iframe')); resizeObjs(content.document.getElementsByTagName('video')); } else { if(!handlWin(content))custombuttons.alertSlide1(noFound); } }; if(e.button == 1) gShowPopup(self); if(e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) { e.preventDefault(); menu.showPopup(self, -1, -1, "popup", "bottomleft", "topleft"); } }; this.oncontextmenu = e => e.target != this ? menu.hasAttribute("context") : e.ctrlKey || e.shiftKey || e.altKey || e.metaKey || ( e.detail != 1 ? menu.hidePopup() : !!menu.openPopup(this, "after_start") ); custombuttons.alertSlide1 = function(sTitle) { var as = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); as.showAlertNotification('chrome://global/skin/icons/information-16.png', "", sTitle, false, "", null); setTimeout(() => as.closeAlert(), 999); }; function resizeObjs(objs) { if(!objs) return; LEVELS = 3; dir = (cbu.getPrefs("CB.video") == "videomaximize") ? 1 : -1; for(i = 0; i < objs.length; i++) { var Width = new Array(LEVELS) var Height = new Array(LEVELS) Width[0] = objs[i].clientWidth; Height[0] = objs[i].clientHeight; if((Width[0] > (-20 * dir + 100)) && (Height[0] > (-20 * dir + 60))) { obj = objs[i]; for(var k = 1; ((k < LEVELS) && (obj.parentNode)); k++) { obj = obj.parentNode Width[k] = obj.clientWidth; Height[k] = obj.clientHeight; }; Width[0] = Width[0] + dir * (Width[0] / 5 | 0); Height[0] = Height[0] + dir * (Height[0] / 5 | 0); objs[i].style.width = Width[0] + "px"; objs[i].width = Width[0]; objs[i].style.height = Height[0] + "px"; objs[i].height = Height[0]; obj = objs[i]; for(var k = 1; ((k < LEVELS) && !(objs[i].tagName == 'IFRAME') && (obj.parentNode) && (Width[k]) && (Height[k]) && (Width[k] > (-20 * dir + 100)) && (Height[k] > (-20 * dir + 60))); k++) { obj = obj.parentNode Width[k] = Width[k] + dir * (Width[k] / 5 | 0); Height[k] = Height[k] + dir * (Height[k] / 5 | 0); obj.style.width = Width[k] + "px"; obj.width = Width[k]; obj.style.height = Height[k] + "px"; obj.height = Height[k]; } } }; }; function restProtHost(lnkR, curLoc) { if(lnkR.length==0)return ''; let tr = lnkR.replace(/^:\/\//, curLoc.protocol + "//"); if(!tr.match(/^https?:\/\//i)){ lnkR = tr.replace(/^\/+/, ''); if(lnkR.split('/')[0].split('?')[0].split('#')[0].toLowerCase().match(/^(?:[-a-z\d]+\.)+[a-z\d]{2,6}$/)){ tr = curLoc.protocol + '//' + lnkR; }else{ tr = curLoc.protocol + '//' + curLoc.host + "/" + lnkR; } }; return tr; }; function getSrc(vobj, currentLoc) { var t = '', tt = ''; if((((t = vobj.innerHTML.match(/<video.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*))/i)) && (t) && (tt = t[1] || t[2] || t[3]) && tt.indexOf('blob:') == -1 ) || ((t = vobj.innerHTML.match(/<source.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*)).*?\stype=['"]?video\//i)) && (t) && (tt = t[1] || t[2] || t[3]))) && tt.length > 2 && tt.indexOf('blob:') == -1 ) { if(tt.indexOf(".mp4/?") == -1) { tt = tt.replace(/&/g, "&") }; t = restProtHost(tt, currentLoc); return t; }; return ''; }; function getLink(obj, curLocation) { if(!obj || !obj.tagName) return ''; var flashvars = '', // src = '', q = obj.tagName.toLowerCase(); var getParam = function(e, n) { var v = '', r = new RegExp('^(' + n + ')$', 'i'), param = e.getElementsByTagName('param'); for(var igp = 0, p; p = param[igp]; igp++) { if(p.hasAttribute('name') && p.getAttribute('name').match(r)) { v = p.getAttribute('value'); break }; }; return v; }; if(q == 'object') { // src = obj.getAttribute('data') || obj.getAttribute('src') || getParam(obj, 'movie|data|src|code|filename|url') || (obj.getElementsByTagName('embed').length > 0 ? obj.getElementsByTagName('embed')[0].getAttribute('src') : ''); flashvars = getParam(obj, 'flashvars'); } else if(q == 'embed') { // src = obj.getAttribute('src'); flashvars = obj.getAttribute('flashvars'); } else return ''; if(!flashvars) return ''; // src = restProtHost(src, curLocation); var restPath = function(f, s) { return(f.substring(0, 4) == 'http') ? f : s.replace(/[#?].*$/, '').replace(/[^\/]*$/, f) }; function videoLinkExtract(fl) { //alert(fl); var linkArr = [], outLinks = [], jj = 0, lba = '', lbb = '', decodeURL = function(s) { try { return decodeURIComponent(s) } catch(e) { return unescape(s) } }; for(var ij = 0; ij < 3; ij++) { lba = lba + String.fromCharCode(parseInt((Math.random() * 15 + 1) + '', 10)); lbb = lbb + String.fromCharCode(parseInt((Math.random() * 15 + 16) + '', 10)); }; function pushWithMerit(lnk) { var merit = -11; if(lnk.match(/^https?:\/\//i)) merit = merit + 40; if(outLinks.length == 0) merit = merit + 1; if(lnk.match(/^\//)) merit = merit + 7; if(lnk.match(/^\/\//)) merit = merit + 30; if(lnk.match(/240p([^a-z]|$)/i)) merit = merit + 1; if(lnk.match(/[^a-z]240([^a-z0-9]|$)/i)) merit = merit + 1; if(lnk.match(/360p([^a-z]|$)/i)) merit = merit + 3; if(lnk.match(/[^a-z]360([^a-z0-9]|$)/i)) merit = merit + 3; if(lnk.match(/480p([^a-z]|$)/i)) merit = merit + 5; if(lnk.match(/[^a-z]480([^a-z0-9]|$)/i)) merit = merit + 5; if(lnk.match(/720p([^a-z]|$)/i)) merit = merit + 7; if(lnk.match(/[^a-z]720([^a-z0-9]|$)/i)) merit = merit + 7; if(lnk.match(/\.mp4([^a-z]|$)/i)) merit = merit + 8; if(lnk.match(/_hd([^a-z]|$)/i)) merit = merit + 6; if(lnk.match(/\.(jpg|xml)([^a-z]|$)/i)) merit = merit - 40; if(merit > 0) outLinks.push(merit + lba + lnk); Services.console.logStringMessage('merit:'+merit+' lnk->'+lnk); }; linkArr.push(fl); while(linkArr.length > jj && jj < 30) { var testPaths = []; testPaths = linkArr[jj].split(/(\.(?:flv|mp4|m3u8))/i); if(testPaths[testPaths.length - 1] == '') testPaths.pop(); for(k = 1; k < testPaths.length; k = k + 2) { if(testPaths[k - 1].indexOf(lba) > -1) { pref = testPaths[k - 1]; } else { var testAboutDom = testPaths[k - 1].toLowerCase().split(/(https?:\/\/)/); if(testAboutDom[testAboutDom.length - 1]=='') testAboutDom.pop(); var pTest = testAboutDom[testAboutDom.length - 1].split(/(\?[^\?]*?&)/); if(pTest.length>2){ pTest.pop(); pTest.pop(); }; testAboutDom[testAboutDom.length - 1] = pTest.join(''); pref = testPaths[k - 1].substring(testAboutDom.join('').lastIndexOf("&") + 1); }; t2 = pref.lastIndexOf(lbb); if(t2 > -1) { pref = pref.substring(t2 + 3); } else { t2 = pref.lastIndexOf('{"'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf('["'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf(',"'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.toLowerCase().lastIndexOf('"http://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('"https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',http://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(';http'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('*https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(' or '); if(t2 > -1) pref = pref.substring(t2 + 4); pref = pref.substring(pref.split('/')[0].toLowerCase().split('%2f')[0].lastIndexOf('=') + 1); } if(pref.length > 0) { if(pref.split('?')[0].toLowerCase().match(/%[2-3][0-9a-f]/)) { t2 = pref.indexOf('"') if(t2 > -1) pref = pref.substring(t2 + 1); suff = testPaths[k + 1] ? testPaths[k + 1].split('&')[0].split('"')[0].split(';')[0].split(/,http/i)[0] : ''; if((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if(testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if(t2 > -1) pref = pref.substring(t2 + 3) linkArr.push(decodeURL(pref + testPaths[k] + suff)); } else { testPaths[k + 1] = (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } else { suff = testPaths[k + 1] ? testPaths[k + 1].split(';')[0].split('"]')[0].split('"}')[0].split('",')[0].split(/,https?:\/\//i)[0].split('*https://')[0].split(' or ')[0] : ''; t2 = suff.indexOf('&'); if((t2 > -1) && (pref != testPaths[k - 1])) { if(t2 == 0) suff = ''; if(suff.charAt(0) != '?') suff = suff.split(/(&[^&]+=https?:\/\/)/i)[0]; }; if((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if(testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if(t2 > -1) pref = pref.substring(t2 + 3); pushWithMerit(pref + testPaths[k] + suff); } else { testPaths[k + 1] = lba + (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } } }; jj = jj + 1; }; if(outLinks.length == 0) return ''; function srt(a, b) { a = parseInt(a.substr(0, a.indexOf(lba)), 10); b = parseInt(b.substr(0, b.indexOf(lba)), 10); if(a < b) return 1; if(a > b) return -1; return 0 }; outLinks.sort(srt); outLinks[0] = outLinks[0].substr(outLinks[0].indexOf(lba) + 3) if(outLinks[0].indexOf('_hq.mp4/?time=') > 0) outLinks[0] = outLinks[0].replace(/&/g, '&'); return outLinks[0]; }; ol = videoLinkExtract(flashvars); if(!ol) return ''; // ol = ol.replace(/^:?\/\//, curLocation.protocol + "//"); // return restPath(ol, src); return restProtHost(ol, curLocation); }; var menu = self.appendChild(document.createElement("menupopup")); self.image = "moz-icon://file://" + path; var playerName = path.split("\\").pop().replace(".exe",""); self.label = "Скачать с " +sysPlayerName; setTimeout(() => { Menu_n_TooltipTxts.forEach((m) => { if("separator" in m) { menu.appendChild(document.createElement("menuseparator")); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); if("radio" in m) { mItem.setAttribute("type", "radio"); mItem.setAttribute('checked', cbu.getPrefs("CB.video") == m.value); if(cbu.getPrefs("CB.video") == m.value) { self.tooltipText = m.tooltipTxt; } mItem.onclick = () => { cbu.setPrefs("CB.video", m.value); tmp = (self.image == imgFlashToPlayer || self.image == imgFlashMinimize || self.image == imgFlashMaximize); if(m.value.substring(0,9)=='videotopl'){ self.image = tmp ? imgFlashToPlayer : imgHTML5ToPlayer; } else if(m.value=='videominimize') { self.image = tmp ? imgFlashMinimize : imgHTML5Minimize; } else self.image = tmp ? imgFlashMaximize : imgHTML5Maximize; self.tooltipText = m.tooltipTxt; }; } if("checkbox" in m) { mItem.setAttribute('type', 'checkbox'); mItem.setAttribute('checked', (self.image == imgFlashToPlayer || self.image == imgFlashMinimize || self.image == imgFlashMaximize )); mItem.onclick = function(e) { e.stopPropagation(); e.preventDefault(); if(e.button == 0) toggleFlash(); } } menu.appendChild(mItem); }); menu.onclick = function(e) { e.stopPropagation(); if(e.button > 0) e.preventDefault(); }; }, 100); var contextMenu = document.getElementById("contentAreaContextMenu"); var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-sep-open")); menuitem.setAttribute("label", "Скачать с " +sysPlayerName); menuitem.setAttribute("class", "menuitem-iconic"); menuitem.setAttribute("image", "moz-icon://file://" + path); menuitem.onclick = () => play(gContextMenu.linkURL); addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onLink, false, contextMenu); addDestructor(()=> menuitem.remove() ); var contextMenu = document.getElementById("contentAreaContextMenu"); var mItem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-copyvideourl")); mItem.setAttribute("label", openIn); mItem.onclick = () => { var vurl = gContextMenu.mediaURL, videoelem = gContextMenu.target; if(videoelem && videoelem.nodeName.toLowerCase() == 'video') { if(content.location.hostname.indexOf('youtu') != -1 && (tmp = content.location.toString().match(YoutubeID)) && tmp[1].length == 11) { play(vurl); videoMovedbox = content.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>'; loadURI(stopPl); content.document.getElementById('eow-title').appendChild(videoMovedbox); return; }; if(content.location.hostname == 'www.youtube.com') { videoelem.parentNode.parentNode.appendChild(videoMovedbox); } else { var inFrameHref = inFrameWin.location.href, found = false; if(inFrameWin.location.hostname == 'www.youtube.com' && (tmp = inFrameHref.match(YoutubeID)) && tmp[1].length == 11){//и значит во фрейме elem = inFrameWin.parent.document.getElementsByTagName('iframe'); if(elem.length > 0) { for(i = 0; i < elem.length; i++) { if(elem[i].contentWindow == inFrameWin) { elem[i].outerHTML = ytIMGouter(tmp[1]); found = true; break; }; }; }; if(!found)inFrameWin.document.body.innerHTML = ytIMGouter(tmp[1]); return; }; videoelem.parentNode.appendChild(videoMovedbox); }; videoelem.src = ''; try { videoelem.load() } catch(e) {}; } else play(vurl); }; addEventListener("popupshowing", () => { mItem.hidden = !gContextMenu.onVideo || !gContextMenu.mediaURL; mItem2.hidden = !gContextMenu.linkURL; mItem3.hidden = framItem.hidden || gContextMenu.target.ownerDocument.location.hostname.indexOf('youtube.com') == -1; }, false, contextMenu); addDestructor(() => {mItem.remove();mItem2.remove();mItem3.remove()}); function play(link) { var file = Services.dirsvc.get('CurProcD', Ci.nsIFile); var MozExeDir = file.path.split('\\').slice(0,-1).join('\\'); file.initWithPath(path); if(!file.exists()) { custombuttons.alertBox("File not found!", MozExeDir + Path); return; }; var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.run(false, [link, cbu.getPrefs("CB.video") == "videotoplaylist" ? addToPlaylistKey : ""], 2); };
Отсутствует