nfmzkvmx
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код для секции "Инициализация" Код: (async () => { 'use strict'; let filePath = '', // Путь к запускаемому файлу, в виде: C:\\example-dir\\hstart.exe // или OS.Path.join(OS.Constants.Path.profileDir, 'example-dir', 'hstart.exe') - чтобы получить путь к файлу в заданной папке профиля браузера // Если путь к запускаемому файлу не задан, то файл будет создан по пути: %BROWSERPROFILE%\tools\example.bat // из текста во вкладке Справка этой кнопки, // с заменой в нем %dlFilePath% и %dlFileName% на полученный путь и название загруженного файла dlFilePath, dlFileName, args = [], // аргументы запуска, примеры: // ["%dlFilePath%", "%dlFileName%"] // ["/ELEVATE", "/NOUAC", "/NOCONSOLE", "example.exe \"%dlFilePath%\" \"%dlFileName%\""] // %dlFilePath% и %dlFileName% - будут заменены на полученные путь и имя загруженного файла convertToUnicode = false; // Создать фвйл из текста вкладки Справка в UTF-8 или, если false, с конвертацией в CP-1251 const o = {// https://github.com/Infocatcher/Private_Tab/issues/228#issuecomment-238963363 get windows() { return (function*() { const ws = Services.wm.getEnumerator("navigator:browser"); while(ws.hasMoreElements()) yield ws.getNext(); })() } }, isHndlr = () => [...o.windows].some(win => win.dlHndlr), convertFromUnicode = (chr, str) => { const converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = chr; return converter.ConvertFromUnicode(str); }, writeToFile = async (str, path) => { if (convertToUnicode) { const enc = new TextEncoder(), arr = enc.encode(str); return OS.File.writeAtomic(path, arr); } else return custombuttonsUtils.writeFile(path, convertFromUnicode('CP1251', str)); }, openFile = async (path) => { if (path && await exists(path)) { const file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile), process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(path); process.init(file); const argss = args.map(el => { if (el.indexOf('%dlFilePath%') != -1) el = el.replace('%dlFilePath%', dlFilePath); if (el.indexOf('%dlFileName%') != -1) el = el.replace('%dlFileName%', dlFileName); return convertFromUnicode('CP1251', el) }); process.run(false, argss, argss.length); } else { path = await createFile(); const file = new FileUtils.File(path); file.launch(); } }, exists = async (path) => OS.File.exists(path), makePath = (arr) => OS.Path.join(...arr), createFile = async () => { // Создаем директорию и файл в папке профиля браузера, если путь выше не задан const profDir = OS.Constants.Path.profileDir, dirName = 'tools', // название папки fileName = 'example.bat', // название и расширение файла pathToDir = makePath([profDir, dirName]), pathToFile = makePath([profDir, dirName, fileName]), // Берем текст файла из вкладки Справка и меняем в нем %dlFilePath% и %dlFileName% на полученный путь и название загруженного файла ---> fileText = this.Help.replace('%dlFilePath%', dlFilePath).replace('%dlFileName%', dlFileName); !(await exists(pathToDir)) && await OS.File.makeDir(pathToDir); // Создать директорию, если не существует await writeToFile(fileText, pathToFile); // Создать файл return pathToFile }, // хендлер на загрузках ---> listener = dl => { if (!dl.succeeded) return; dlFilePath = dl.target.path; dlFileName = dl.target.path.match(/[^\\]+$/)[0]; list.remove(dl); // Запускаем файл при успешном окончании загрузки файла ---> openFile(filePath); }, list = await Downloads.getList(Downloads.ALL), view = { onDownloadChanged: listener }, pref = 'CB.handle-download-end', // Название параметра в about:config, в которую записывается состояние кнопки // Обсервер на параметре about:config, вкл./выкл. листенер на загрузках и состояние кнопки ---> obs = this.obs = async () => { const val = cbu.getPrefs(pref), icon = this.ownerDocument.getAnonymousElementByAttribute(self, 'class', 'toolbarbutton-icon'); icon.style.filter = val ? '' : 'grayscale(1) opacity(.6)'; // регистрируем / удаляем листенер на загрузках ---> if (val && !isHndlr()) { list.addView(view); window.dlHndlr = true; } else if (!val) { list.removeView(view); delete window.dlHndlr; } }; cbu.isPref(pref, false); obs(); // Создать параметр, если не существует this._handleClick = () => cbu.setPrefs(pref, !cbu.getPrefs(pref)); // переключаем параметр about:config по клику на кнопке Services.prefs.addObserver(pref, obs, false); // зарегистрировать обсервер addDestructor(reason=> { list.removeView(view); if (!Services.startup.shuttingDown && reason == 'destructor' && window.dlHndlr) { delete window.dlHndlr; const win = [...o.windows].find(win => win != window); win && win.document.getElementById(this.id).obs(); } else delete window.dlHndlr; Services.prefs.removeObserver(pref, obs)}); // удалить обсервер, листенер и параметр в about:config при удалении или переинициализации кнопки })(); | Или готовая кнопка (выделить и вставить и перейти в адресной строке): Код: 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%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAnAAAAJwBXTUFigAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGmSURBVDiNlZM9iBNRFIW/+eFl1aAjMqZJ4a5tyKYIgekSGd0kBBYiCIKdllZGTaGdKCyiW+wKip2CpBMWkipgPSkkCdiHKEKmSKEjrCQzz0InKDvj6IHb3HfudzkXniKlBMCyrCemaW4LIdaIkOu6x4QQ7/v9/sU/HqSUZDKZ9Var9cnzPBlXnU5HNhqNwLbtF1JKwlIBNE3bLBaLZ6M2/y7btpVcLne9UqncDntq0lCodDpNt9tlNptp0+l0J5vNbgLo/wool8tYlgVAr9cL2u32OjCKBARBwOs3Lzn8/g2AtdQJrl29QSqVAkDXdRl6IwGe53Hw7jn5yxMAPhyco77VxDTNI97YCMdPqpgbCwDSp7TYaEeOOB6PqW9f4Mz5r6ve6Y0vNK/UGA6HyYB8Pk+1egmpLFY9yYJqbYtCoZAMALjffoT4XGPiGEwcA/1jnXt3H0ZGiL3BzoN9bt76GWP/6V6cLR6gqirPdl8BoCjK/wOSBleLAHzfHzmO4ya6f8lxHNf3/RGAEn7nUqn02DCMphAi9bfh5XJ5OJ/P3w4GgzsAPwBhYp+Hqdg5YwAAAABJRU5ErkJggg%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%28async%20%28%29%20%3D%3E%20%7B%0A%20%20%20%20%27use%20strict%27%3B%0A%20%20%20%20let%20filePath%20%3D%20%27%27%2C%20//%20%u041F%u0443%u0442%u044C%20%u043A%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%u043E%u043C%u0443%20%u0444%u0430%u0439%u043B%u0443%2C%20%u0432%20%u0432%u0438%u0434%u0435%3A%20C%3A%5C%5Cexample-dir%5C%5Chstart.exe%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%u0438%u043B%u0438%20OS.Path.join%28OS.Constants.Path.profileDir%2C%20%27example-dir%27%2C%20%27hstart.exe%27%29%20-%20%u0447%u0442%u043E%u0431%u044B%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u043A%20%u0444%u0430%u0439%u043B%u0443%20%u0432%20%u0437%u0430%u0434%u0430%u043D%u043D%u043E%u0439%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%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%u0415%u0441%u043B%u0438%20%u043F%u0443%u0442%u044C%20%u043A%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%u043E%u043C%u0443%20%u0444%u0430%u0439%u043B%u0443%20%u043D%u0435%20%u0437%u0430%u0434%u0430%u043D%2C%20%u0442%u043E%20%u0444%u0430%u0439%u043B%20%u0431%u0443%u0434%u0435%u0442%20%u0441%u043E%u0437%u0434%u0430%u043D%20%u043F%u043E%20%u043F%u0443%u0442%u0438%3A%20%25BROWSERPROFILE%25%5Ctools%5Cexample.bat%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%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%u043E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u044D%u0442%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%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%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0432%20%u043D%u0435%u043C%20%25dlFilePath%25%20%u0438%20%25dlFileName%25%20%u043D%u0430%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%u043D%u044B%u0439%20%u043F%u0443%u0442%u044C%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0437%u0430%u0433%u0440%u0443%u0436%u0435%u043D%u043D%u043E%u0433%u043E%20%u0444%u0430%u0439%u043B%u0430%0A%20%20%20%20%20%20%20%20dlFilePath%2C%0A%20%20%20%20%20%20%20%20dlFileName%2C%0A%20%20%20%20%20%20%20%20args%20%3D%20%5B%5D%2C%20//%20%u0430%u0440%u0433%u0443%u043C%u0435%u043D%u0442%u044B%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%2C%20%u043F%u0440%u0438%u043C%u0435%u0440%u044B%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%5B%22%25dlFilePath%25%22%2C%20%22%25dlFileName%25%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%5B%22/ELEVATE%22%2C%20%22/NOUAC%22%2C%20%22/NOCONSOLE%22%2C%20%22example.exe%20%5C%22%25dlFilePath%25%5C%22%20%5C%22%25dlFileName%25%5C%22%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%25dlFilePath%25%20%u0438%20%25dlFileName%25%20-%20%u0431%u0443%u0434%u0443%u0442%20%u0437%u0430%u043C%u0435%u043D%u0435%u043D%u044B%20%u043D%u0430%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%u043D%u044B%u0435%20%u043F%u0443%u0442%u044C%20%u0438%20%u0438%u043C%u044F%20%u0437%u0430%u0433%u0440%u0443%u0436%u0435%u043D%u043D%u043E%u0433%u043E%20%u0444%u0430%u0439%u043B%u0430%0A%20%20%20%20%20%20%20%20convertToUnicode%20%3D%20false%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0444%u0432%u0439%u043B%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u0432%20UTF-8%20%u0438%u043B%u0438%2C%20%u0435%u0441%u043B%u0438%20false%2C%20%u0441%20%u043A%u043E%u043D%u0432%u0435%u0440%u0442%u0430%u0446%u0438%u0435%u0439%20%u0432%20CP-1251%0A%20%20%20%20const%20o%20%3D%20%7B//%20https%3A//github.com/Infocatcher/Private_Tab/issues/228%23issuecomment-238963363%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20get%20windows%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%28function*%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20ws%20%3D%20Services.wm.getEnumerator%28%22navigator%3Abrowser%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%28ws.hasMoreElements%28%29%29%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%20yield%20ws.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%28%29%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%7D%2C%0A%20%20%20%20%20%20%20%20%20%20isHndlr%20%3D%20%28%29%20%3D%3E%20%5B...o.windows%5D.some%28win%20%3D%3E%20win.dlHndlr%29%2C%0A%20%20%20%20%20%20%20%20%20%20convertFromUnicode%20%3D%20%28chr%2C%20str%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20converter.charset%20%3D%20chr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20converter.ConvertFromUnicode%28str%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20writeToFile%20%3D%20async%20%28str%2C%20path%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28convertToUnicode%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20enc%20%3D%20new%20TextEncoder%28%29%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%20arr%20%3D%20enc.encode%28str%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20OS.File.writeAtomic%28path%2C%20arr%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%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20custombuttonsUtils.writeFile%28path%2C%20convertFromUnicode%28%27CP1251%27%2C%20str%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20openFile%20%3D%20async%20%28path%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28path%20%26%26%20await%20exists%28path%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%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%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20process.init%28file%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20argss%20%3D%20args.map%28el%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28el.indexOf%28%27%25dlFilePath%25%27%29%20%21%3D%20-1%29%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%20el%20%3D%20el.replace%28%27%25dlFilePath%25%27%2C%20dlFilePath%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28el.indexOf%28%27%25dlFileName%25%27%29%20%21%3D%20-1%29%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%20el%20%3D%20el.replace%28%27%25dlFileName%25%27%2C%20dlFileName%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20convertFromUnicode%28%27CP1251%27%2C%20el%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20process.run%28false%2C%20argss%2C%20argss.length%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%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20path%20%3D%20await%20createFile%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20file%20%3D%20new%20FileUtils.File%28path%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20file.launch%28%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%7D%2C%0A%20%20%20%20%20%20%20%20%20%20exists%20%3D%20async%20%28path%29%20%3D%3E%20OS.File.exists%28path%29%2C%0A%20%20%20%20%20%20%20%20%20%20makePath%20%3D%20%28arr%29%20%3D%3E%20OS.Path.join%28...arr%29%2C%0A%20%20%20%20%20%20%20%20%20%20createFile%20%3D%20async%20%28%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0435%u043C%20%u0434%u0438%u0440%u0435%u043A%u0442%u043E%u0440%u0438%u044E%20%u0438%20%u0444%u0430%u0439%u043B%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%2C%20%u0435%u0441%u043B%u0438%20%u043F%u0443%u0442%u044C%20%u0432%u044B%u0448%u0435%20%u043D%u0435%20%u0437%u0430%u0434%u0430%u043D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20profDir%20%3D%20OS.Constants.Path.profileDir%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dirName%20%3D%20%27tools%27%2C%20//%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043F%u043A%u0438%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fileName%20%3D%20%27example.bat%27%2C%20//%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0438%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u0435%20%u0444%u0430%u0439%u043B%u0430%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pathToDir%20%3D%20makePath%28%5BprofDir%2C%20dirName%5D%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pathToFile%20%3D%20makePath%28%5BprofDir%2C%20dirName%2C%20fileName%5D%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0411%u0435%u0440%u0435%u043C%20%u0442%u0435%u043A%u0441%u0442%20%u0444%u0430%u0439%u043B%u0430%20%u0438%u0437%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u0438%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0432%20%u043D%u0435%u043C%20%25dlFilePath%25%20%u0438%20%25dlFileName%25%20%u043D%u0430%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%u043D%u044B%u0439%20%u043F%u0443%u0442%u044C%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0437%u0430%u0433%u0440%u0443%u0436%u0435%u043D%u043D%u043E%u0433%u043E%20%u0444%u0430%u0439%u043B%u0430%20---%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fileText%20%3D%20this.Help.replace%28%27%25dlFilePath%25%27%2C%20dlFilePath%29.replace%28%27%25dlFileName%25%27%2C%20dlFileName%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%21%28await%20exists%28pathToDir%29%29%20%26%26%20await%20OS.File.makeDir%28pathToDir%29%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0434%u0438%u0440%u0435%u043A%u0442%u043E%u0440%u0438%u044E%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20await%20writeToFile%28fileText%2C%20pathToFile%29%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0444%u0430%u0439%u043B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20pathToFile%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20//%20%u0445%u0435%u043D%u0434%u043B%u0435%u0440%20%u043D%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0430%u0445%20---%3E%0A%20%20%20%20%20%20%20%20%20%20listener%20%3D%20dl%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21dl.succeeded%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlFilePath%20%3D%20dl.target.path%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlFileName%20%3D%20dl.target.path.match%28/%5B%5E%5C%5C%5D+%24/%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20list.remove%28dl%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0417%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%20%u0444%u0430%u0439%u043B%20%u043F%u0440%u0438%20%u0443%u0441%u043F%u0435%u0448%u043D%u043E%u043C%20%u043E%u043A%u043E%u043D%u0447%u0430%u043D%u0438%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u0444%u0430%u0439%u043B%u0430%20---%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20openFile%28filePath%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20list%20%3D%20await%20Downloads.getList%28Downloads.ALL%29%2C%0A%20%20%20%20%20%20%20%20%20%20view%20%3D%20%7B%20onDownloadChanged%3A%20listener%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20pref%20%3D%20%27CB.handle-download-end%27%2C%20//%20%u041D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0430%20%u0432%20about%3Aconfig%2C%20%u0432%20%u043A%u043E%u0442%u043E%u0440%u0443%u044E%20%u0437%u0430%u043F%u0438%u0441%u044B%u0432%u0430%u0435%u0442%u0441%u044F%20%u0441%u043E%u0441%u0442%u043E%u044F%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%0A%20%20%20%20%20%20%20%20%20%20//%20%u041E%u0431%u0441%u0435%u0440%u0432%u0435%u0440%20%u043D%u0430%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0435%20about%3Aconfig%2C%20%u0432%u043A%u043B./%u0432%u044B%u043A%u043B.%20%u043B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%20%u043D%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0430%u0445%20%u0438%20%u0441%u043E%u0441%u0442%u043E%u044F%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20---%3E%0A%20%20%20%20%20%20%20%20%20%20obs%20%3D%20this.obs%20%3D%20async%20%28%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20val%20%3D%20cbu.getPrefs%28pref%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20icon%20%3D%20this.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%27class%27%2C%20%27toolbarbutton-icon%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20icon.style.filter%20%3D%20val%20%3F%20%27%27%20%3A%20%27grayscale%281%29%20opacity%28.6%29%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0440%u0435%u0433%u0438%u0441%u0442%u0440%u0438%u0440%u0443%u0435%u043C%20/%20%u0443%u0434%u0430%u043B%u044F%u0435%u043C%20%u043B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%20%u043D%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0430%u0445%20---%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28val%20%26%26%20%21isHndlr%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list.addView%28view%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.dlHndlr%20%3D%20true%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%20else%20if%20%28%21val%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list.removeView%28view%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20delete%20window.dlHndlr%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%7D%3B%0A%20%20%20%20cbu.isPref%28pref%2C%20false%29%3B%20obs%28%29%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%0A%20%20%20%20this._handleClick%20%3D%20%28%29%20%3D%3E%20cbu.setPrefs%28pref%2C%20%21cbu.getPrefs%28pref%29%29%3B%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0430%u0435%u043C%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%20about%3Aconfig%20%u043F%u043E%20%u043A%u043B%u0438%u043A%u0443%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%0A%20%20%20%20Services.prefs.addObserver%28pref%2C%20obs%2C%20false%29%3B%20//%20%u0437%u0430%u0440%u0435%u0433%u0438%u0441%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043E%u0431%u0441%u0435%u0440%u0432%u0435%u0440%0A%20%20%20%20addDestructor%28reason%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20list.removeView%28view%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.startup.shuttingDown%20%26%26%20reason%20%3D%3D%20%27destructor%27%20%26%26%20window.dlHndlr%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20delete%20window.dlHndlr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20win%20%3D%20%5B...o.windows%5D.find%28win%20%3D%3E%20win%20%21%3D%20window%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20win%20%26%26%20win.document.getElementById%28this.id%29.obs%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20delete%20window.dlHndlr%3B%0A%20%20%20%20%20%20%20%20Services.prefs.removeObserver%28pref%2C%20obs%29%7D%29%3B%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043E%u0431%u0441%u0435%u0440%u0432%u0435%u0440%2C%20%u043B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%20%u0438%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%20%u0432%20about%3Aconfig%20%u043F%u0440%u0438%20%u0443%u0434%u0430%u043B%u0435%u043D%u0438%u0438%20%u0438%u043B%u0438%20%u043F%u0435%u0440%u0435%u0438%u043D%u0438%u0446%u0438%u0430%u043B%u0438%u0437%u0430%u0446%u0438%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%0A%7D%29%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%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@echo%20off%0Aecho%20Patch%3A%20%25dlFilePath%25%20Name%3A%20%25dlFileName%25%0Apause%0A%3Aexit%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E | | Всего записей: 186 | Зарегистр. 09-04-2017 | Отправлено: 13:10 29-08-2018 | Исправлено: nfmzkvmx, 23:23 30-08-2018 |
|