Полезная информация

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№1035113-07-2016 20:05:21

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Custom Buttons

fokanik
Затупил. Виноват. Жара. Вот:

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

Выделить код

Код:

(({history}) => {
   this.ondragover = () => false;
   var array;
   this.ondrop = e => {
      var place = e.dataTransfer.getData("text/x-moz-place"), obj;
      if (
         place && (obj = JSON.parse(place)).type == "text/x-moz-place-container"
         && !("annos" in obj && obj.annos.some(anno => anno.name.startsWith("livemark/") || anno.value == "AllBookmarks"))
      ) {
         var query = history.getNewQuery();
         query.setFolders([obj.id], 1);
         var node = history.executeQuery(query, history.getNewQueryOptions()).root;

         array = []; recData(node);
         play(array, "/add");

      } else if (true) {
         var link = e.dataTransfer.getData("text/x-moz-url").split("\n")[0];
         if (!link) return;
         play(link, "/add");
      }
   }
   var cut = string => string.slice(0, 64);

   function recData(node) {
      var result = node.parentResult;
      var wasOpen = node.containerOpen, didSuppressNotifications = false;
      if (!wasOpen) {
         didSuppressNotifications = result.suppressNotifications;
         if (!didSuppressNotifications) result.suppressNotifications = true;
         node.containerOpen = true;
      }
      for (var ind = 0; ind < node.childCount; ind++) {
         var child = node.getChild(ind), {uri} = child;
         if (PlacesUtils.nodeIsBookmark(child) && isGoodURL(uri) && child.type != child.RESULT_TYPE_FOLDER)
            array.push(cut(uri));
      }
      if (!wasOpen) {
         node.containerOpen = false;
         if (!didSuppressNotifications) result.suppressNotifications = false;
      }
   }
   function isGoodURL(url) {
      return true;
   }
})(PlacesUtils);

и

Выделить код

Код:

function play(links, param) {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   file.initWithPath(path);
   process.init(file);
   var params = []; 
   for (var link of links)
      params.push(link);
   params.push(param);
   process.run(false, params, params.length);
};


Вроде, как надо выглядит.

Добавлено 13-07-2016 20:13:54
Наверное, все это проще можно и, кажись, что-то лишнее в коде Dumby осталось, после обкарнывания до

fokanik пишет

без ссылок в подпапках

, но я дальше пас. :)

Отредактировано turbot (13-07-2016 20:13:54)

Отсутствует

 

№1035213-07-2016 20:57:38

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

turbot пишет

Наверное, все это проще можно и, кажись, что-то лишнее в коде Dumby осталось, после обкарнывания до, но я дальше пас. :)

turbot, еще один маленький вопрос - куда пихать функцию PLAY[s] (проверил, а буквы то у меня не такие), [s]помогите - а то плеер не могу запустить.

А так, функционал меня устраивает, наверное больше и не нужно ничего придумывать - спасибо большое!
Зверь кнопка получилась!

Отредактировано fokanik (13-07-2016 21:43:12)

Отсутствует

 

№1035313-07-2016 21:05:22

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Custom Buttons

fokanik

Выделить код

Код:

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%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20SMPlayer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bmoz-icon%3A//file%3A//C%3A%5CProgram%20Files%5CSMPlayer%5Csmplayer.exe%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CSMPlayer%5C%5Csmplayer.exe%22%3B%0A%0A%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20play%28content.location.href%2C%20%22%22%29%3B%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28self%29%3B%20%0A%0A%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%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20play%28content.location.href%2C%20%22-add-to-playlist%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%0A%7D%3B%0A%28%28%7Bhistory%7D%29%20%3D%3E%20%7B%0A%20%20%20this.ondragover%20%3D%20%28%29%20%3D%3E%20false%3B%0A%20%20%20var%20array%3B%0A%20%20%20this.ondrop%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20%20%20var%20place%20%3D%20e.dataTransfer.getData%28%22text/x-moz-place%22%29%2C%20obj%3B%0A%20%20%20%20%20%20if%20%28%0A%20%20%20%20%20%20%20%20%20place%20%26%26%20%28obj%20%3D%20JSON.parse%28place%29%29.type%20%3D%3D%20%22text/x-moz-place-container%22%0A%20%20%20%20%20%20%20%20%20%26%26%20%21%28%22annos%22%20in%20obj%20%26%26%20obj.annos.some%28anno%20%3D%3E%20anno.name.startsWith%28%22livemark/%22%29%20%7C%7C%20anno.value%20%3D%3D%20%22AllBookmarks%22%29%29%0A%20%20%20%20%20%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20query%20%3D%20history.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20%20query.setFolders%28%5Bobj.id%5D%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%20var%20node%20%3D%20history.executeQuery%28query%2C%20history.getNewQueryOptions%28%29%29.root%3B%0A%0A%20%20%20%20%20%20%20%20%20array%20%3D%20%5B%5D%3B%20recData%28node%29%3B%0A%0A%20%20%20%20%20%20%20%20%20play%28array%2C%20%22-add-to-playlist%22%29%3B%0A%20%20%20%20%20%20%7D%20else%20if%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20link%20%3D%20e.dataTransfer.getData%28%22text/x-moz-url%22%29.split%28%22%5Cn%22%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21link%29%20return%3B%0A%20%20%20%20%20%20%20%20%20play%28link%2C%20%22-add-to-playlist%22%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20var%20cut%20%3D%20string%20%3D%3E%20string.slice%280%2C%2064%29%3B%0A%0A%20%20%20function%20recData%28node%29%20%7B%0A%20%20%20%20%20%20var%20result%20%3D%20node.parentResult%3B%0A%20%20%20%20%20%20var%20wasOpen%20%3D%20node.containerOpen%2C%20didSuppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20didSuppressNotifications%20%3D%20result.suppressNotifications%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20%28var%20ind%20%3D%200%3B%20ind%20%3C%20node.childCount%3B%20ind++%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20child%20%3D%20node.getChild%28ind%29%2C%20%7Buri%7D%20%3D%20child%3B%0A%20%20%20%20%20%20%20%20%20if%20%28PlacesUtils.nodeIsBookmark%28child%29%20%26%26%20isGoodURL%28uri%29%20%26%26%20child.type%20%21%3D%20child.RESULT_TYPE_FOLDER%29%0A%20%20%20%20%20%20%20%20%20%20%20%20array.push%28cut%28uri%29%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20function%20isGoodURL%28url%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%7D%0A%7D%29%28PlacesUtils%29%3B%0A%0Aself.image%20%3D%20%22moz-icon%3A//file%3A//%22%20+%20path%3B%0Avar%20playerName%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%22%22%29%3B%0Aself.label%20%3D%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%3B%0A%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%20%0Avar%20menuitem%20%3D%20contextMenu.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20document.getElementById%28%22context-sep-open%22%29%29%3B%0Amenuitem.setAttribute%28%22label%22%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%22%20+%20playerName%29%3B%20%20%20%20%20%20%0Amenuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0Amenuitem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20path%29%3B%20%0Amenuitem.onclick%20%3De%3D%3E%20play%28gContextMenu.mediaURL%20%7C%7C%20gContextMenu.getLinkURL%28%29%2C%20e.button%20%3F%20%22-add-to-playlist%22%20%3A%20%22%22%29%3B%0AaddEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20menuitem.hidden%20%3D%20%21%28gContextMenu.onLink%20%7C%7C%20gContextMenu.onVideo%20%7C%7C%20gContextMenu.onAudio%20%29%2C%20false%2C%20contextMenu%29%3B%0AaddDestructor%28%28%29%3D%3E%20menuitem.remove%28%29%20%29%3B%0A%0A%0Afunction%20play%28links%2C%20param%29%20%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20var%20params%20%3D%20%5B%5D%3B%20%0A%20%20%20for%20%28var%20link%20of%20links%29%0A%20%20%20%20%20%20params.push%28link%29%3B%0A%20%20%20params.push%28param%29%3B%0A%20%20%20process.run%28false%2C%20params%2C%20params.length%29%3B%0A%7D%3B%0A%0A%0Aself.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%20+%20%22%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%20%22%20+%20playerName%20+%22%5Cn%u041F%u0435%u0440%u0435%u0442%u0430%u0449%u0438%u0442%u0435%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0438%u043B%u0438%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%2C%20%u0434%u043B%u044F%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%22%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1035413-07-2016 22:23:03

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

turbot пишет
Выделить код

Код:

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%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20SMPlayer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bmoz-icon%3A//file%3A//C%3A%5CProgram%20Files%5CSMPlayer%5Csmplayer.exe%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CSMPlayer%5C%5Csmplayer.exe%22%3B%0A%0A%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20play%28content.location.href%2C%20%22%22%29%3B%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28self%29%3B%20%0A%0A%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%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20play%28content.location.href%2C%20%22-add-to-playlist%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%0A%7D%3B%0A%28%28%7Bhistory%7D%29%20%3D%3E%20%7B%0A%20%20%20this.ondragover%20%3D%20%28%29%20%3D%3E%20false%3B%0A%20%20%20var%20array%3B%0A%20%20%20this.ondrop%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20%20%20var%20place%20%3D%20e.dataTransfer.getData%28%22text/x-moz-place%22%29%2C%20obj%3B%0A%20%20%20%20%20%20if%20%28%0A%20%20%20%20%20%20%20%20%20place%20%26%26%20%28obj%20%3D%20JSON.parse%28place%29%29.type%20%3D%3D%20%22text/x-moz-place-container%22%0A%20%20%20%20%20%20%20%20%20%26%26%20%21%28%22annos%22%20in%20obj%20%26%26%20obj.annos.some%28anno%20%3D%3E%20anno.name.startsWith%28%22livemark/%22%29%20%7C%7C%20anno.value%20%3D%3D%20%22AllBookmarks%22%29%29%0A%20%20%20%20%20%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20query%20%3D%20history.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20%20query.setFolders%28%5Bobj.id%5D%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%20var%20node%20%3D%20history.executeQuery%28query%2C%20history.getNewQueryOptions%28%29%29.root%3B%0A%0A%20%20%20%20%20%20%20%20%20array%20%3D%20%5B%5D%3B%20recData%28node%29%3B%0A%0A%20%20%20%20%20%20%20%20%20play%28array%2C%20%22-add-to-playlist%22%29%3B%0A%20%20%20%20%20%20%7D%20else%20if%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20link%20%3D%20e.dataTransfer.getData%28%22text/x-moz-url%22%29.split%28%22%5Cn%22%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21link%29%20return%3B%0A%20%20%20%20%20%20%20%20%20play%28link%2C%20%22-add-to-playlist%22%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20var%20cut%20%3D%20string%20%3D%3E%20string.slice%280%2C%2064%29%3B%0A%0A%20%20%20function%20recData%28node%29%20%7B%0A%20%20%20%20%20%20var%20result%20%3D%20node.parentResult%3B%0A%20%20%20%20%20%20var%20wasOpen%20%3D%20node.containerOpen%2C%20didSuppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20didSuppressNotifications%20%3D%20result.suppressNotifications%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20%28var%20ind%20%3D%200%3B%20ind%20%3C%20node.childCount%3B%20ind++%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20child%20%3D%20node.getChild%28ind%29%2C%20%7Buri%7D%20%3D%20child%3B%0A%20%20%20%20%20%20%20%20%20if%20%28PlacesUtils.nodeIsBookmark%28child%29%20%26%26%20isGoodURL%28uri%29%20%26%26%20child.type%20%21%3D%20child.RESULT_TYPE_FOLDER%29%0A%20%20%20%20%20%20%20%20%20%20%20%20array.push%28cut%28uri%29%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20function%20isGoodURL%28url%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%7D%0A%7D%29%28PlacesUtils%29%3B%0A%0Aself.image%20%3D%20%22moz-icon%3A//file%3A//%22%20+%20path%3B%0Avar%20playerName%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%22%22%29%3B%0Aself.label%20%3D%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%3B%0A%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%20%0Avar%20menuitem%20%3D%20contextMenu.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20document.getElementById%28%22context-sep-open%22%29%29%3B%0Amenuitem.setAttribute%28%22label%22%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%22%20+%20playerName%29%3B%20%20%20%20%20%20%0Amenuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0Amenuitem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20path%29%3B%20%0Amenuitem.onclick%20%3De%3D%3E%20play%28gContextMenu.mediaURL%20%7C%7C%20gContextMenu.getLinkURL%28%29%2C%20e.button%20%3F%20%22-add-to-playlist%22%20%3A%20%22%22%29%3B%0AaddEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20menuitem.hidden%20%3D%20%21%28gContextMenu.onLink%20%7C%7C%20gContextMenu.onVideo%20%7C%7C%20gContextMenu.onAudio%20%29%2C%20false%2C%20contextMenu%29%3B%0AaddDestructor%28%28%29%3D%3E%20menuitem.remove%28%29%20%29%3B%0A%0A%0Afunction%20play%28links%2C%20param%29%20%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20var%20params%20%3D%20%5B%5D%3B%20%0A%20%20%20for%20%28var%20link%20of%20links%29%0A%20%20%20%20%20%20params.push%28link%29%3B%0A%20%20%20params.push%28param%29%3B%0A%20%20%20process.run%28false%2C%20params%2C%20params.length%29%3B%0A%7D%3B%0A%0A%0Aself.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%20+%20%22%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%20%22%20+%20playerName%20+%22%5Cn%u041F%u0435%u0440%u0435%u0442%u0430%u0449%u0438%u0442%u0435%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0438%u043B%u0438%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%2C%20%u0434%u043B%u044F%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%22%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Тут с ошибкой получилось, при открытии ссылки - код ее на буковки режет и передает эти запчасти в плейлист, поправил:

Выделить код

Код:

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%u042E%u0442%u0443%u0431%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/jpeg%3Bbase64%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%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CSMPlayer%5C%5Csmplayer.exe%22%3B%0Avar%20param%20%3D%20%22-add-to-playlist%22%3B%0A%0A%28%28%7Bhistory%7D%29%20%3D%3E%20%7B%0A%20%20%20this.ondragover%20%3D%20%28%29%20%3D%3E%20false%3B%0A%20%20%20var%20array%3B%0A%20%20%20this.ondrop%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20%20%20var%20place%20%3D%20e.dataTransfer.getData%28%22text/x-moz-place%22%29%2C%20obj%3B%0A%20%20%20%20%20%20if%20%28%0A%20%20%20%20%20%20%20%20%20place%20%26%26%20%28obj%20%3D%20JSON.parse%28place%29%29.type%20%3D%3D%20%22text/x-moz-place-container%22%0A%20%20%20%20%20%20%20%20%20%26%26%20%21%28%22annos%22%20in%20obj%20%26%26%20obj.annos.some%28anno%20%3D%3E%20anno.name.startsWith%28%22livemark/%22%29%20%7C%7C%20anno.value%20%3D%3D%20%22AllBookmarks%22%29%29%0A%20%20%20%20%20%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20query%20%3D%20history.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20%20query.setFolders%28%5Bobj.id%5D%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%20var%20node%20%3D%20history.executeQuery%28query%2C%20history.getNewQueryOptions%28%29%29.root%3B%0A%20%20%20%20%20%20%20%20%20array%20%3D%20%5B%5D%3B%20recData%28node%29%3B%0A%20%20%20%20%20%20%20%20%20play%28array%2C%20param%29%3B%0A%20%20%20%20%20%20%7D%20else%20if%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20link%20%3D%20e.dataTransfer.getData%28%22text/x-moz-url%22%29.split%28%22%5Cn%22%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21link%29%20return%3B%0A%20%20%20%20%20%20%20%20%20Play%28path%2C%20param%2C%20link%29%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20var%20cut%20%3D%20string%20%3D%3E%20string.slice%280%2C%2064%29%3B%0A%0A%20%20%20function%20recData%28node%29%20%7B%0A%20%20%20%20%20%20var%20result%20%3D%20node.parentResult%3B%0A%20%20%20%20%20%20var%20wasOpen%20%3D%20node.containerOpen%2C%20didSuppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20didSuppressNotifications%20%3D%20result.suppressNotifications%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20%28var%20ind%20%3D%200%3B%20ind%20%3C%20node.childCount%3B%20ind++%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20child%20%3D%20node.getChild%28ind%29%2C%20%7Buri%7D%20%3D%20child%3B%0A%20%20%20%20%20%20%20%20%20if%20%28PlacesUtils.nodeIsBookmark%28child%29%20%26%26%20isGoodURL%28uri%29%20%26%26%20child.type%20%21%3D%20child.RESULT_TYPE_FOLDER%29%0A%20%20%20%20%20%20%20%20%20%20%20%20array.push%28cut%28uri%29%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20function%20isGoodURL%28url%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%7D%0A%7D%29%28PlacesUtils%29%3B%0A%0Afunction%20play%28links%2C%20param%29%20%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20var%20params%20%3D%20%5B%5D%3B%20%0A%20%20%20for%20%28var%20link%20of%20links%29%0A%20%20%20%20%20%20params.push%28link%29%3B%0A%20%20%20params.push%28param%29%3B%0A%20%20%20process.run%28false%2C%20params%2C%20params.length%29%3B%0A%7D%3B%0A%0Afunction%20Play%28path%2C%20param%2C%20link%29%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20var%20process%20%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5Blink%2C%20param%5D%2C%202%29%3B%0A%7D%0A%0A%0Aself.tooltipText%20%3D%20%22%u041F%u0435%u0440%u0435%u0442%u0430%u0449%u0438%u0442%u0435%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0438%u043B%u0438%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%2C%20%u0434%u043B%u044F%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%22%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отредактировано fokanik (13-07-2016 22:26:38)

Отсутствует

 

№1035513-07-2016 22:46:09

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Custom Buttons

fokanik
Да что ж такое! Чертова жара. :dumb: Поправил:

Выделить код

Код:

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%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20SMPlayer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bmoz-icon%3A//file%3A//C%3A%5CProgram%20Files%5CSMPlayer%5Csmplayer.exe%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CSMPlayer%5C%5Csmplayer.exe%22%3B%0A%0A%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20play%28content.location.href%2C%20%22%22%29%3B%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28self%29%3B%20%0A%0A%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%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20play%28content.location.href%2C%20%22-add-to-playlist%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%0A%7D%3B%0A%28%28%7Bhistory%7D%29%20%3D%3E%20%7B%0A%20%20%20this.ondragover%20%3D%20%28%29%20%3D%3E%20false%3B%0A%20%20%20var%20array%3B%0A%20%20%20this.ondrop%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20%20%20var%20place%20%3D%20e.dataTransfer.getData%28%22text/x-moz-place%22%29%2C%20obj%3B%0A%20%20%20%20%20%20if%20%28%0A%20%20%20%20%20%20%20%20%20place%20%26%26%20%28obj%20%3D%20JSON.parse%28place%29%29.type%20%3D%3D%20%22text/x-moz-place-container%22%0A%20%20%20%20%20%20%20%20%20%26%26%20%21%28%22annos%22%20in%20obj%20%26%26%20obj.annos.some%28anno%20%3D%3E%20anno.name.startsWith%28%22livemark/%22%29%20%7C%7C%20anno.value%20%3D%3D%20%22AllBookmarks%22%29%29%0A%20%20%20%20%20%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20query%20%3D%20history.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20%20query.setFolders%28%5Bobj.id%5D%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%20var%20node%20%3D%20history.executeQuery%28query%2C%20history.getNewQueryOptions%28%29%29.root%3B%0A%0A%20%20%20%20%20%20%20%20%20array%20%3D%20%5B%5D%3B%20recData%28node%29%3B%0A%0A%20%20%20%20%20%20%20%20%20play%28array%2C%20%22-add-to-playlist%22%29%3B%0A%20%20%20%20%20%20%7D%20else%20if%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20link%20%3D%20e.dataTransfer.getData%28%22text/x-moz-url%22%29.split%28%22%5Cn%22%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21link%29%20return%3B%0A%20%20%20%20%20%20%20%20%20play%28link%2C%20%22-add-to-playlist%22%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20var%20cut%20%3D%20string%20%3D%3E%20string.slice%280%2C%2064%29%3B%0A%0A%20%20%20function%20recData%28node%29%20%7B%0A%20%20%20%20%20%20var%20result%20%3D%20node.parentResult%3B%0A%20%20%20%20%20%20var%20wasOpen%20%3D%20node.containerOpen%2C%20didSuppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20didSuppressNotifications%20%3D%20result.suppressNotifications%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20%28var%20ind%20%3D%200%3B%20ind%20%3C%20node.childCount%3B%20ind++%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20child%20%3D%20node.getChild%28ind%29%2C%20%7Buri%7D%20%3D%20child%3B%0A%20%20%20%20%20%20%20%20%20if%20%28PlacesUtils.nodeIsBookmark%28child%29%20%26%26%20isGoodURL%28uri%29%20%26%26%20child.type%20%21%3D%20child.RESULT_TYPE_FOLDER%29%0A%20%20%20%20%20%20%20%20%20%20%20%20array.push%28cut%28uri%29%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20function%20isGoodURL%28url%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%7D%0A%7D%29%28PlacesUtils%29%3B%0A%0Aself.image%20%3D%20%22moz-icon%3A//file%3A//%22%20+%20path%3B%0Avar%20playerName%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%22%22%29%3B%0Aself.label%20%3D%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%3B%0A%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%20%0Avar%20menuitem%20%3D%20contextMenu.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20document.getElementById%28%22context-sep-open%22%29%29%3B%0Amenuitem.setAttribute%28%22label%22%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%22%20+%20playerName%29%3B%20%20%20%20%20%20%0Amenuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0Amenuitem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20path%29%3B%20%0Amenuitem.onclick%20%3De%3D%3E%20play%28gContextMenu.mediaURL%20%7C%7C%20gContextMenu.getLinkURL%28%29%2C%20e.button%20%3F%20%22-add-to-playlist%22%20%3A%20%22%22%29%3B%0AaddEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20menuitem.hidden%20%3D%20%21%28gContextMenu.onLink%20%7C%7C%20gContextMenu.onVideo%20%7C%7C%20gContextMenu.onAudio%20%29%2C%20false%2C%20contextMenu%29%3B%0AaddDestructor%28%28%29%3D%3E%20menuitem.remove%28%29%20%29%3B%0A%0A%0Afunction%20play%28links%2C%20param%29%20%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20var%20params%20%3D%20%5B%5D%3B%0A%20%20%20if%20%28Array.isArray%28links%29%29%20%7B%0A%20%20%20%20%20%20for%20%28var%20link%20of%20links%29%0A%20%20%20%20%20%20%20%20%20params.push%28link%29%3B%0A%20%20%20%7D%0A%20%20%20else%20params.push%28links%29%3B%0A%20%20%20params.push%28param%29%3B%0A%20%20%20process.run%28false%2C%20params%2C%20params.length%29%3B%0A%7D%3B%0A%0A%0Aself.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%20+%20%22%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%20%22%20+%20playerName%20+%22%5Cn%u041F%u0435%u0440%u0435%u0442%u0430%u0449%u0438%u0442%u0435%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0438%u043B%u0438%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%2C%20%u0434%u043B%u044F%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%22%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1035614-07-2016 00:38:33

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 1373
UA: Firefox 45.0

Re: Custom Buttons

turbot пишет

Наверное, все это проще можно

О, кстати, а почему бы и не пропробовать.

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

Выделить код

Код:

this.ondragover = () => false;
this.ondrop = e => {
    var place = e.dataTransfer.getData("text/x-moz-place"), obj;
    if (
        place && (obj = JSON.parse(place)).type == "text/x-moz-place-container"
        && !("annos" in obj && obj.annos.some(anno => anno.name.startsWith("livemark/") || anno.value == "AllBookmarks"))
    ) {
        var html = e.dataTransfer.getData("text/html");
        var doc = new DOMParser().parseFromString(html, "text/html");
        var array = [...doc.querySelectorAll("body > DL > DD > A")].map(a => a.getAttribute("HREF"));

        array.length ? alert(array.join("\n")) : alert("Urls not found");
    }
}

Отредактировано Dumby (14-07-2016 01:11:03)

Отсутствует

 

№1035714-07-2016 01:53:42

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

А удобно однако drag n drop использовать, теперь даже не хочется и думать про контекстное меню. Главное кнопочки большие сделать, чтоб небрежно не промазать :) :
aea66c1440dd.jpg

Выделить код

Код:

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%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0448%u043A%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/jpeg%3Bbase64%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%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CGoogle%5C%5CChrome%5C%5CApplication%5C%5Cchrome.exe%22%0Avar%20param%20%3D%20%22--profile-directory%3DDefault%22%3B%0A%0Avar%20playerName%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%22%22%29%3B%0Aself.tooltipText%20%3D%20%22%u041F%u0435%u0440%u0435%u0442%u0430%u0449%u0438%u0442%u0435%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0438%u043B%u0438%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%5Cn%u0434%u043B%u044F%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u044F%20%u0432%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%20-%20%22%20+%20playerName%3B%0A%0A%28%28%7Bhistory%7D%29%20%3D%3E%20%7B%0A%20%20%20this.ondragover%20%3D%20%28%29%20%3D%3E%20false%3B%0A%20%20%20var%20array%3B%0A%20%20%20this.ondrop%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20%20%20var%20place%20%3D%20e.dataTransfer.getData%28%22text/x-moz-place%22%29%2C%20obj%3B%0A%20%20%20%20%20%20if%20%28%0A%20%20%20%20%20%20%20%20%20place%20%26%26%20%28obj%20%3D%20JSON.parse%28place%29%29.type%20%3D%3D%20%22text/x-moz-place-container%22%0A%20%20%20%20%20%20%20%20%20%26%26%20%21%28%22annos%22%20in%20obj%20%26%26%20obj.annos.some%28anno%20%3D%3E%20anno.name.startsWith%28%22livemark/%22%29%20%7C%7C%20anno.value%20%3D%3D%20%22AllBookmarks%22%29%29%0A%20%20%20%20%20%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20query%20%3D%20history.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20%20query.setFolders%28%5Bobj.id%5D%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%20var%20node%20%3D%20history.executeQuery%28query%2C%20history.getNewQueryOptions%28%29%29.root%3B%0A%20%20%20%20%20%20%20%20%20array%20%3D%20%5B%5D%3B%20recData%28node%29%3B%0A%20%20%20%20%20%20%20%20%20play%28array%2C%20param%29%3B%0A%20%20%20%20%20%20%7D%20else%20if%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20link%20%3D%20e.dataTransfer.getData%28%22text/x-moz-url%22%29.split%28%22%5Cn%22%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20//if%20%28%21link%29%20return%3B%0A%20%20%20%20%20%20%20%20%20Play%28path%2C%20param%2C%20link%29%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20var%20cut%20%3D%20string%20%3D%3E%20string.slice%280%2C%2064%29%3B%0A%0A%20%20%20function%20recData%28node%29%20%7B%0A%20%20%20%20%20%20var%20result%20%3D%20node.parentResult%3B%0A%20%20%20%20%20%20var%20wasOpen%20%3D%20node.containerOpen%2C%20didSuppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20didSuppressNotifications%20%3D%20result.suppressNotifications%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20%28var%20ind%20%3D%200%3B%20ind%20%3C%20node.childCount%3B%20ind++%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20child%20%3D%20node.getChild%28ind%29%2C%20%7Buri%7D%20%3D%20child%3B%0A%20%20%20%20%20%20%20%20%20if%20%28PlacesUtils.nodeIsBookmark%28child%29%20%26%26%20isGoodURL%28uri%29%20%26%26%20child.type%20%21%3D%20child.RESULT_TYPE_FOLDER%29%0A%20%20%20%20%20%20%20%20%20%20%20%20array.push%28cut%28uri%29%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28%21wasOpen%29%20%7B%0A%20%20%20%20%20%20%20%20%20node.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21didSuppressNotifications%29%20result.suppressNotifications%20%3D%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%20function%20isGoodURL%28url%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%7D%0A%7D%29%28PlacesUtils%29%3B%0A%0Afunction%20play%28links%2C%20param%29%20%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20var%20params%20%3D%20%5B%5D%3B%20%0A%20%20%20for%20%28var%20link%20of%20links%29%0A%20%20%20%20%20%20params.push%28link%29%3B%0A%20%20%20params.push%28param%29%3B%0A%20%20%20process.run%28false%2C%20params%2C%20params.length%29%3B%0A%7D%3B%0A%0Afunction%20Play%28path%2C%20param%2C%20link%29%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20var%20process%20%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5Blink%2C%20param%5D%2C%202%29%3B%0A%7D%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1035814-07-2016 04:09:08

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

turbot пишет

Вот только PotPlayer не дает добавить несколько файлов одновременно в плейлист. По всякому пробовал (из системы тоже, на случай, если напутал что в коде) - добавляет только первый файл. Но, может, ваш плеер, fokanik, умеет это. Пробуйте:

smplayer отркрывает все без проблем, а хромом и potplayer корректно работать отказываются, при передаче из папки нескольких ссылок "разного типа" (видео + плейлист = капут)

2fb66d0c0791.jpg 35cda0945929.jpg

fokanik пишет

наверное нужно так: командная строка - smplayer.exe  "урл1" "урл2" "урл3" -add-to-playlist

Хотя на хроме, с ярлыка без кавычек запустил - все открылось хорошо.

Но на potplayer такая запись не сработала, только в таком варианте запускается - с кавычками, батник и ярлык проверил:
"C:\PortableApps\PortableApps\PotPlayer\PotPlayerMini.exe" "https://www.youtube.com/watch?v=dUybgTRI1SE" "https://www.youtube.com/watch?v=Ad1Dl-DV8kI" "https://www.youtube.com/playlist?list=PLVhl7-zCOVC0FCkM4eEfRtdcp7Ai23abd" /add

Еще вот такая схема работает: PotPlayerMini.exe ""url" "url" "url"" /add

Отредактировано fokanik (14-07-2016 05:45:27)

Отсутствует

 

№1035914-07-2016 12:11:05

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Custom Buttons

fokanik пишет

Открывашка

Я же там поправленную версию выложил, выше, с проверкой:

Выделить код

Код:

function play(links, params) {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   file.initWithPath(path);
   process.init(file);
   var args = [];
   if (Array.isArray(links)) for(var link of links) args.push(link); else args.push(links);
   if (Array.isArray(params)) for(var param of params) args.push(param); else args.push(params);
   process.run(false, args, args.length);
};

нет нужды эту функцию дублировать для массива и отдельной ссылки.

в таком варианте запускается

Ха, спасибо, я вроде и так пробовал. Видимо, очепятался где, когда проверял. Но я все равно не знаю, как в таком виде передать. Массивы и строки - для меня головная боль. Пробовал даже в строку вывести, с replace(), но тогда ругается.
Вся надежда, что Dumby, в очередной раз, снизойдет до чужой тупости. pray.gif

А для хрома, может, в таком виде нужно: урл1|урл3|урл3.

Добавлено 14-07-2016 12:12:24

Dumby пишет

О, кстати, а почему бы и не пропробовать.

О, не заметил. Спасибо. И впрямь проще. :)

Отредактировано turbot (14-07-2016 12:12:24)

Отсутствует

 

№1036014-07-2016 20:40:15

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 1373
UA: Firefox 45.0

Re: Custom Buttons

turbot пишет

надежда, что Dumby, в очередной раз, снизойдет

Не, я тоже не знаю что PotPlayer от меня хочет.
А как думаешь, может завести где-нибудь специальный .m3u8-файл?

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

Выделить код

Код:

var pot = "C:\\Program Files (x86) 2\\PotPlayer\\PotPlayerMini.exe";
var list = "C:\\Users\\Admin\\Documents\\PotPlayer\\Playlist\\CBPotPlayerAddList.m3u8";

var file = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath")(pot);
var fph = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler);

this.ondragover = () => false;
this.ondrop = e => {
    var place = e.dataTransfer.getData("text/x-moz-place"), obj;
    if (
        place && (obj = JSON.parse(place)).type == "text/x-moz-place-container"
        && !("annos" in obj && obj.annos.some(anno => anno.name.startsWith("livemark/") || anno.value == "AllBookmarks"))
    ) {
        var doc = new DOMParser().parseFromString(e.dataTransfer.getData("text/html"), "text/html");
        var text = "#EXTM3U";
        for(var a of doc.querySelectorAll("body > DL > DD > A")) {
            var title = a.textContent;
            if (title) text += "\n#EXTINF: -1, " + title;
            var href = decodeURIComponent(a.href);
            if (href.startsWith("file://")) href = fph.getFileFromURLSpec(href).path;
            text += "\n" + href;
        }
        if (!text[7]) return;
        cbu.writeFile(list, convertFromUnicode("utf-8", text));
        var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
        process.init(file);
        process.run(false, [list, "/add"], 2);
    }
}

Отсутствует

 

№1036114-07-2016 21:35:50

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Custom Buttons

Dumby
Ну, как вариант. Мне то оно не нужно, а fokanik'а не знаю, устроит ли.
Просто интересно, что, никак в Array нельзя запихнуть значение с кавычками (т.е., типа [""entry1"", ""entry2""]), чтобы на выходе они тоже получились "entry1" "entry2"?

Отредактировано turbot (14-07-2016 21:37:05)

Отсутствует

 

№1036214-07-2016 22:13:18

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4806
UA: Firefox 24.0

Re: Custom Buttons

turbot пишет

что, никак в Array нельзя запихнуть значение с кавычками (т.е., типа [""entry1"", ""entry2""]), чтобы на выходе они тоже получились "entry1" "entry2"?

"'entry2'" или '"entry2"' или "\x22entry2\x22"

Отсутствует

 

№1036314-07-2016 22:42:04

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Custom Buttons

bunda1
Спасибо, но нет. С одинарными я уже пробовал, но плеер их не переваривает. А второй вариант в консоли как надо выводится, но в командную строку вот что отправляется. :(

Добавлено 14-07-2016 22:44:46

'"entry2"'

А так как сделать? Я ведь не вручную их задаю, они через push() добавляются. И уже отформатированы там соответственно.
Затупил. Но с array.push('"' + cut(uri) + '"') - результат тот же, что и на скрине выше.

Отредактировано turbot (14-07-2016 22:47:56)

Отсутствует

 

№1036414-07-2016 22:53:43

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1531
UA: Firefox 38.0

Re: Custom Buttons

Не могли бы пожалуйста помочь, можно ли указать что бы кнопка GrabScroll не работала на сайте https://realtimeboard.com?
Так как она там блокирует функцию ПКМ.

Отсутствует

 

№1036514-07-2016 23:04:53

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4806
UA: Firefox 24.0

Re: Custom Buttons

Stakhovsky пишет

Не могли бы пожалуйста помочь, можно ли указать что бы кнопка GrabScroll не работала на сайте https://realtimeboard.com?
Так как она там блокирует функцию ПКМ.

Выделить код

Код:

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%3EGrabScroll%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAawBrAGsept3cAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAeElEQVR42pVSWw7AIAwC4209T8/LPmq6xk1T+Wwh0AfHGPjAzAD8tvqXZGaSAJD0Vlb2YC8kRxRD01CGR+hhSlKSpMUkRyBZdfBs0yHGDZOFlME82Y70snOkMzV21TxJUTPXmjUlQQVxu5bvcOdw0Gxfo+Jz8UuOB3pnSTiV10R3AAAAAElFTkSuQmCC%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%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20GrabScroll.toggle%28%29%3B%0A%20%20%20%20%20%20%20%0A%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%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20/%20%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%u043C%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%5Cn%u0414%u041F%3A%20%u0421%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20...............%0Avar%20array%20%3D%20%5B%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0431%u0440%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%27%2C%20func%3A%20%27GrabScroll.button%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0431%u0440%u0430%u0442%u044C%20%u043D%u0430%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0438%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%27%2C%20func%3A%20%27GrabScroll.moverate%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0432%u0440%u0435%u043C%u044F%20%u043E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u044F%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u043F%u0440%u0438%20%u0431%u0435%u0437%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0438%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%27%2C%20func%3A%20%27GrabScroll.threshold%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0430%u0432%u0442%u043E%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0443%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043F%u0440%u0438%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%27%2C%20pref%3A%20%27grabScroll.enableinertia%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u043F%u0440%u0438%20%u043A%u043E%u0442%u043E%u0440%u043E%u0439%20%u043F%u043E%u044F%u0432%u043B%u044F%u0435%u0442%u0441%u044F%20%u0430%u0432%u0442%u043E%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%27%2C%20func%3A%20%27GrabScroll.inertiaThreshold%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0434%u043B%u0438%u043D%u0443%20%u0430%u0432%u0442%u043E%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%27%2C%20func%3A%20%27GrabScroll.inertiarate%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u0441%u0441%u044B%u043B%u043A%u0430%u0445%27%2C%20pref%3A%20%27grabScroll.clickable%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%u0445%27%2C%20pref%3A%20%27grabScroll.notimage%27%20%7D%2C%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28%20document.createElement%28%22menupopup%22%29%20%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20if%20%28%22separator%22%20in%20m%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20if%20%28%22pref%22%20in%20m%29%20%7B%20%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27type%27%2C%20%27checkbox%27%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28m.pref%29%20%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20cbu.setPrefs%28m.pref%2C%20%21cbu.getPrefs%28m.pref%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20else%20mItem.onclick%20%3D%28%29%3D%3E%20eval%28m.func%29%3B%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0Avar%20GrabScroll%20%3D%20%7B%0A%20%20TOLERANCE%20%20%20%20%20%20%20%20%20%3A3%2C%0A%20%20TOLERANCE_WHEN_NO_H_SCROLL%20%3A%205%2C%0A%20%20CANCEL_WHEN_SELECTION%3A%20%20%20%20%20%20%20true%2C%0A%20%20CURSOR%3A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22-moz-grab%22%2C%20//%20none%0A%20%20%0A%20%20MOUSEBUTTON%3A%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.button%22%29%20%7C%7C%200%2C%0A%20%20MOVERATE%3A%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.moverate%22%29%20%7C%7C%20-1%2C%0A%20%20TIMER%3A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.timer%22%29%20%7C%7C%20500%2C%0A%20%20INERTIATHRESHOLD%3A%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.inertiathreshold%22%29%20%7C%7C%2080%2C%0A%20%20INERTIARATE%3A%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.inertiarate%22%29%20%7C%7C%2050%2C%0A%20%20IGNOREURL%3A%20%20%20%20%20%20%20%20%20%20%20%20%20self.getAttribute%28%27Help%27%29.split%28%27%5Cn%27%29.filter%28%28url%29%3D%3E%20/%5CS/.test%28url%29%29.map%28%28url%29%3D%3E%20url.trim%28%29%29%2C%20%20%20%20%20%20%20%0A%0A%20%20mStatus%3A%200%2C%20%0A%20%20mLastX%3A%200%2C%0A%20%20mLastY%3A%200%2C%0A%20%20mCursor%3A%20null%2C%0A%20%20mCursorElement%3A%20null%2C%0A%20%20_target%3A%20null%2C%0A%20%20_target2%3A%20null%2C%0A%20%20_isImage%3Afalse%2C%0A%20%20_timer%3A0%2C%0A%20%20_ctimer%3A0%2C%0A%20%20_mtimer%3A%20false%2C%0A%20%20cScroll%3Afalse%2C%0A%20%20cSpeedX%3A0%2C%0A%20%20cSpeedY%3A0%2C%0A%20%20_doc%3Anull%2C%0A%20%20_MOVERATEpZoom%3A1%2C%0A%20%20_window%3A%20null%2C%0A%20%20%20%20%20%20%0A%20%20initGrabScroll%3A%20function%28%29%20%7B%0A%20%20%20%20var%20curentBrowserVersion%20%3D%20Services.appinfo.platformVersion%3B%20//%2731.*%27%0A%20%20%20%20var%20compareResult%20%3D%20Services.vc.compare%28curentBrowserVersion%2C%20%2746.*%27%29%3B%0A%20%20%20%20this.Bug1209100%20%3D%20%28compareResult%20%3C%200%29%20%3F%2010%20%3A%201%3B%0A%20%20%20%20%0A%20%20%20%20if%20%28%20GrabScroll.activeBrowser%28%29.mPanelContainer%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20this._window%20%3D%20GrabScroll.activeBrowser%28%29.mPanelContainer%3B%0A%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20else%20this._window%20%3D%20document.getElementById%28%27content%27%29%3B%0A%0A%20%20%20%20for%28%20var%20aURL%20in%20this.IGNOREURL%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20if%20%28%20this.IGNOREURL%5BaURL%5D%20%3D%3D%3D%20%27%27%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20this.IGNOREURL%5BaURL%5D%20%3D%20this.convert2RegExp%28this.IGNOREURL%5BaURL%5D%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20this._window.setCapture%28%29%3B%0A%20%20%20%20addEventListener%28%22mousedown%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%22click%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%22mouseup%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%27pagehide%27%2C%20this%2C%20false%2C%20gBrowser%29%3B%0A%20%20%20%20%0A%20%20%20%20this.setIcon%28%29%3B%0A%20%20%7D%2C%0A%0A%20%20activeBrowser%3A%20function%28%29%20%7B%0A%20%20%20%20return%20%28%27SplitBrowser%27%20in%20window%20%3F%20SplitBrowser.activeBrowser%20%3A%20null%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%20gBrowser%3B%0A%20%20%7D%2C%0A%0A%20%20handleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20e%20%3D%20new%20XPCNativeWrapper%28e%29%3B%0A%20%20%20%20switch%28e.type%29%20%7B%0A%20%20%20%20%20%20case%20%22mousedown%22%3A%0A%20%20%20%20%20%20%20%20if%20%28%20this.cScroll%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20this.cSpeedY%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28%20cbu.getPrefs%28%22grabScroll.enable%22%29%20%26%26%20%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.grabStart%28e%29%3B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22mousemove%22%3A%0A%20%20%20%20%20%20%20%20this.mousemove%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%22click%22%3A%0A%20%20%20%20%20%20%20%20this.click%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%22mouseup%22%3A%0A%20%20%20%20%20%20%20%20this.mouseup%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%27pagehide%27%3A%0A%20%20%20%20%20%20%20%20this._doc%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this.mCursorElement%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._target%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._isImage%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this.NS%20%3D%20this.EW%20%3D%20this.NSEW%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20grabStart%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28this.mStatus%20%3D%3D%203%29%0A%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%0A%20%20%20%20if%20%28this.MOUSEBUTTON%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20if%20%28Math.abs%28this.mLastX%20-%20e.screenX%29%20%3C%205%20%26%26%0A%20%20%20%20%20%20%20%20%20%20Math.abs%28this.mLastY%20-%20e.screenY%29%20%3C%205%20%29%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20doc%20%3D%20e.originalTarget.ownerDocument%3B%0A%20%20%20%20if%20%28%21doc%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20if%20%28doc.contentType%20%3D%3D%20%27application/vnd.mozilla.xul+xml%27%29%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20this._doc%20%3D%20doc%3B%0A%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20if%20%28this.CANCEL_WHEN_SELECTION%20%26%26%20this.MOUSEBUTTON%20%3D%3D%200%20%26%26%20doc.defaultView.getSelection%28%29%20%21%3D%20%22%22%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20this._target%20%3D%20e.originalTarget%3B%0A%0A%20%20%20%20%20%20if%20%28/%5E%28html%7Cbody%29%24/.test%28this._target.localName.toLowerCase%28%29%29%20%7C%7C%20this._target.clientHeight%20%3E%2030000%29%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20else%20if%20%28/div/.test%28this._target.localName.toLowerCase%28%29%29%20%26%26%20this._target.clientHeight%20%3E%201000%29%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20this._target%3B%0A%0A%20%20%20%20%20%20for%20%28aURL%20in%20this.IGNOREURL%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.IGNOREURL%5BaURL%5D%20%3D%3D%3D%20%27%27%29continue%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28doc.documentURI.match%28this.IGNOREURL%5BaURL%5D%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20LOG%28this.IGNOREURL%5BaURL%5D+%27%5Cn%27+ex%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this.isParentEditableNode%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isParentDraggableNode%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isIgnore%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isVideoControl%28e.target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isParentClickableNode%28this._target%29%29%7B%0A%20%20%20%20%20%20%20%20if%20%28cbu.getPrefs%28%22grabScroll.clickable%22%29%29%0A%09return%3B%0A%20%20%20%20%20%20%20%20if%20%28%21%28%27linkDragSelection%27%20in%20window%29%29%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20this._isImage%20%3D%20this.isImage%28e%29%3B%0A%20%20%20%20%20%20if%20%28this._isImage%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28cbu.getPrefs%28%22grabScroll.notimage%22%29%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20var%20target%20%3D%20this._target%3B%0A%20%20%20%20%20%20while%20%28target%29%7B%0A%20%20%20%20%20%20%20%20if%20%28%22getAttribute%22%20in%20target%20%26%26%20target.getAttribute%28%22draggable%22%29%20%3D%3D%20%22true%22%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20style%20%3D%20this._doc.defaultView.getComputedStyle%28target%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22cursor%22%29%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20else%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22auto%22%29%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20%20%20%20%20target%20%3D%20target.parentNode%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this.MOUSEBUTTON%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20this._timer%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%20%20%20%20%20%20this.mLastX%20%3D%20e.screenX%3B%0A%20%20%20%20%20%20this.mLastY%20%3D%20e.screenY%3B%0A%20%20%20%20%20%20this.mStatus%20%3D%201%3B%0A%20%20%20%20%20%20this._MOVERATEpZoom%20%3D%20%20this.MOVERATE%20/%20%28ZoomManager.useFullZoom%20%3F%20ZoomManager.zoom%20%3A%201%29%3B%0A%0A%20%20%20%20%20%20%5Bthis.NS%2C%20this.EW%2C%20this.NSEW%5D%20%3D%20this.getScrollView%28e%29%3B%0A%20%20%20%20%20%20this._window.addEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20%20%20this.setCursor%28this._target2%2C%20this.CURSOR%29%3B%0A%20%20%20%20%20%20this.resetCursorWithTimer%28this._target2%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20adjustedTimer%3A%20function%28%29%7B%0A%20%20%20%20var%20magTimer%20%3D%20this.TIMER%3B%0A%20%20%20%20return%20magTimer%3B%0A%20%20%7D%2C%0A%0A%20%20grabFinish%3A%20%20function%28%29%20%7B%0A%20%20%20%20this.resetCursorTimer%28%29%3B%0A%20%20%20%20this.resetCursor%28%29%3B%0A%0A%20%20%20%20this._window.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%20%20%20%20if%20%28selCon%29%0A%20%20%20%20%20%20selCon.setDisplaySelection%28selCon.SELECTION_ON%29%3B%0A%20%20%7D%2C%0A%0A%20%20mousemove%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28this.mStatus%20%3D%3D%202%20%7C%7C%20this.mStatus%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20%20%20var%20x%20%3D%20e.screenX%3B%0A%20%20%20%20%20%20var%20y%20%3D%20e.screenY%3B%0A%20%20%20%20%20%20var%20doc%20%3D%20e.originalTarget.ownerDocument%3B%0A%0A%20%20%20%20%20%20if%20%28this.mStatus%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21this._isImage%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%28new%20Date%28%29.getTime%28%29%20-%20this._timer%29%20%3E%20this.adjustedTimer%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28Math.abs%28x-this.mLastX%29%20%3C%20this.TOLERANCE_WHEN_NO_H_SCROLL%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20movingh%20%3D%20Math.abs%28x-this.mLastX%29%20%3E%20Math.abs%28y-this.mLastY%29%20*%2050%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21this._isImage%20%26%26%20this.MOUSEBUTTON%20%3D%3D%200%20%20%26%26%20this.isText%28e%29%20%20%26%26%20movingh%20%26%26%20%21this.EW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%28Math.abs%28x%20-%20this.mLastX%29%20+%20Math.abs%28y%20-%20this.mLastY%29%20%3C%20this.TOLERANCE%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28this.MOUSEBUTTON%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28selCon%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selCon.getSelection%28selCon.SELECTION_NORMAL%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20selection.removeAllRanges%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20selCon.setDisplaySelection%28selCon.SELECTION_OFF%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%22ucjsMouseGestures%22%20in%20window%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ucjsMouseGestures._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20this.mLastX%20%3D%20x%20-%20%28x%20-%20this.mLastX%29%20/%2010%3B%0A%20%20%20%20%20%20%20%20this.mLastY%20%3D%20y%20-%20%28y%20-%20this.mLastY%29%20/%2010%3B%0A%20%20%20%20%20%20%20%20this.mStatus%20%3D%202%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this._ctimer%29%0A%20%20%20%20%20%20%20%20this.resetCursorTimer%28%29%3B%0A%0A%20%20%20%20%20%20if%20%28this._mtimer%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20this.cSpeedX%20%3D%20this._MOVERATEpZoom%20*%20%28x%20-%20this.mLastX%29%3B%0A%20%20%20%20%20%20this.cSpeedY%20%3D%20this._MOVERATEpZoom%20*%20%28y%20-%20this.mLastY%29%3B%0A%0A%20%20%20%20%20%20if%20%28this.scroll%28e%29%29%20%7B%0A%20%20%20%20%20%20%20%20this.mLastX%20%3D%20x%3B%0A%20%20%20%20%20%20%20%20this.mLastY%20%3D%20y%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20getSelconForDoc%3A%20function%20getSelconForDoc%28doc%29%7B%0A%20%20%20%20if%20%28%21doc%29%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20var%20aFrame%20%3D%20doc.defaultView%3B%0A%20%20%20%20if%20%28%21aFrame%29%0A%20%20%20%20%20return%20null%3B%0A%20%20%20%20var%20docShell%20%3D%20this.getDocShellForFrame%28aFrame%29%3B%0A%20%20%20%20var%20selCon%20%3D%20docShell.QueryInterface%28Ci.nsIInterfaceRequestor%29.getInterface%28Ci.nsISelectionDisplay%29.QueryInterface%28Ci.nsISelectionController%29%3B%0A%20%20%20%20return%20selCon%3B%0A%20%20%7D%2C%0A%0A%20%20getDocShellForFrame%3A%20function%20getDocShellForFrame%28aFrame%29%7B%0A%20%20%20%20return%20aFrame.QueryInterface%28Ci.nsIInterfaceRequestor%29.getInterface%28Ci.nsIWebNavigation%29.QueryInterface%28Ci.nsIDocShell%29%3B%0A%20%20%7D%2C%0A%0A%20%20click%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%202%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28e.button%20%3D%3D%200%20%26%26%20this.mStatus%20%3E%3D%202%20%26%26%20this._doc%20instanceof%20Ci.nsIImageDocument%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%7D%2C%0A%0A%20%20mouseup%3A%20%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3E%201%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%0A%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20if%20%28this.mStatus%20%3D%3D%202%29%0A%20%20%20%20%20%20%20%20this.mStatus%20%3D%203%3B%0A%0A%20%20%20%20%20%20if%20%28cbu.getPrefs%28%22grabScroll.enableinertia%22%29%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%28Math.abs%28this.cSpeedX%29%20%3E%20this.INERTIATHRESHOLD%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20this.INERTIATHRESHOLD%20%29%29%7B%0A%20%20%20%20%20%20%20%20if%20%28this.cScroll%29%0A%20%20%20%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20%20var%20v%20%3D%20this.INERTIARATE%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cSpeedX%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20Math.min%28this.cSpeedX%2C%20v%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20Math.max%28this.cSpeedX%2C%20-v%29%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cSpeedY%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedY%20%3D%20Math.min%28this.cSpeedY%2C%20v%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedY%20%3D%20Math.max%28this.cSpeedY%2C%20-v%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20Start%3B%0A%20%20%20%20%20%20%20%20function%20scrolling%28e%2C%20self%29%7B%0A%20%20%20%20%20%20%20%20%20%20Start%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20self.scroll2%28e%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20self.cScroll%20%3D%20setTimeout%28arguments.callee%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%20Math.max%2825%20-%20%28%28new%20Date%28%29%29.getTime%28%29-Start%29%2C%200%29%2C%20e%2C%20self%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this.scroll2%28e%29%3B%0A%20%20%20%20%20%20%20%20scrolling%28e%2C%20this%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%201%29%7B%0A%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20scroll2%3A%20function%28e%29%7B%0A%20%20%20%20var%20ay%20%3D%20Math.abs%28this.cSpeedY%29%3B%0A%20%20%20%20var%20ax%20%3D%20Math.abs%28this.cSpeedX%29%3B%0A%20%20%20%20if%20%28ay%20%3C%2010%20%26%26%20ax%20%20%3C%2010%29%7B%0A%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.scroll%28e%29%3B%0A%20%20%20%20if%20%20%20%20%20%20%28ax%20%3E%3D%20100%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%20100%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%2020%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%2010%29%20%20this.cSpeedX%20%3D%200%3B%0A%0A%20%20%20%20if%20%20%20%20%20%20%28ay%20%3E%3D%20100%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%20100%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%2020%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%2010%29%20this.cSpeedY%20%3D%200%3B%0A%20%20%7D%2C%0A%0A%20%20scroll%3A%20function%28e%29%7B%0A%20%20%20%20var%20minScroll%20%3D%20this.Bug1209100%3B%20//%20prevent%20Bug%201209100%2C%2010px%20%3Cfx46.%201px%20%3E%3Dfx46%0A%20%20%20%20this._mtimer%20%3D%20true%3B%0A%20%20%20%20var%20flg%20%3D%20false%3B%0A%20%20%20%20if%20%28this.NS%20%26%26%20this.NS%20%3D%3D%20this.EW%20%26%26%0A%20%20%20%20%20%20%20%20%28Math.abs%28this.cSpeedX%29%20%3E%20minScroll%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20minScroll%29%29%20%7B%0A%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%20%20%20%20%20%20%20%20this.NS.scrollBy%28this.cSpeedX%2C%20this.cSpeedY%29%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this.NS.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%20%20%20%20%20%20%20%20this.NS.scrollTop%20%20+%3D%20this.cSpeedY%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20if%20%28this.NS%20%26%26%20Math.abs%28this.cSpeedY%29%20%3E%20minScroll%29%20%7B%0A%20%20%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.NS.scrollBy%280%2C%20this.cSpeedY%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.NS.scrollTop%20+%3D%20this.cSpeedY%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28this.EW%20%26%26%20Math.abs%28this.cSpeedX%29%20%3E%20minScroll%29%7B%0A%20%20%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.EW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.EW.scrollBy%28this.cSpeedX%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.EW.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20setTimeout%28function%28self%29%7B%0A%20%20%20%20%20%20self._mtimer%20%3D%20false%3B%0A%20%20%20%20%7D%2C%2020%2C%20this%29%3B%0A%20%20%20%20return%20flg%3B%0A%20%20%7D%2C%0A%0A%20%20isText%3A%20function%28e%29%20%7B%0A%20%20%20%20return%20e.explicitOriginalTarget.nodeType%20%3D%3D%20document.TEXT_NODE%3B%0A%20%20%7D%2C%0A%0A%20%20isImage%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.target%20instanceof%20Ci.nsIImageLoadingContent%29%0A%20%20%20%20%20%20return%20e.target%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isIgnore%3A%20function%28aNode%29%7B%0A%20%20%20%20%20while%20%28aNode%29%7B%0A%20%20%20%20%20%20var%20name%20%3D%20aNode.nodeName.toLowerCase%28%29%3B%0A%20%20%20%20%20%20if%20%28name%20%3D%3D%20%22html%22%29%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20if%20%28/%28scrollbar%7Cselect%7Coption%7Cembed%7Cobject%7Ctree%7Capplet%7Cstatusbar%29/.test%28name%29%29%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20aNode%20%3D%20aNode.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%2C%0A%0A%20%20isParentClickableNode%20%3A%20function%28aNode%29%20%7B%0A%20%20%20%20if%20%28%21aNode%29%20return%20null%3B%0A%20%20%20%20var%20d%20%3D%20aNode.ownerDocument%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20var%20xpathResult%20%3D%20d.evaluate%28%0A%20%20%20%20%20%20%20%20%20%20%27ancestor-or-self%3A%3A*%5B%28%28local-name%28%29%20%3D%20%22a%22%20or%20local-name%28%29%20%3D%20%22A%22%29%29%20or%20local-name%28%29%20%3D%20%22button%22%20or%20local-name%28%29%20%3D%20%22BUTTON%22%20or%20%28%28local-name%28%29%20%3D%20%22input%22%20or%20local-name%28%29%20%3D%20%22INPUT%22%29%20and%20%28@type%20%3D%20%22SUBMIT%22%20or%20@type%20%3D%20%22submit%22%20or%20@type%20%3D%20%22BUTTON%22%20or%20@type%20%3D%20%22button%22%20or%20@type%20%3D%20%22IMAGE%22%20or%20@type%20%3D%20%22image%22%29%29%5D%27%2C%0A%20%20%20%20%20%20%20%20%20%20aNode%2C%0A%20%20%20%20%20%20%20%20%20%20this.NSResolver%2C%0A%20%20%20%20%20%20%20%20%20%20XPathResult.FIRST_ORDERED_NODE_TYPE%2C%0A%20%20%20%20%20%20%20%20%20%20null%0A%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20xpathResult.singleNodeValue%3B%0A%20%20%7D%2C%0A%0A%20%20NSResolver%20%3A%20%7B%0A%20%20%20%20lookupNamespaceURI%20%3A%20function%28aPrefix%29%20%7B%0A%20%20%20%20%20%20switch%20%28aPrefix%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27xul%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%27%3B%0A%20%20%20%20%20%20%20%20case%20%27html%27%3A%0A%20%20%20%20%20%20%20%20case%20%27xhtml%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.w3.org/1999/xhtml%27%3B%0A%20%20%20%20%20%20%20%20case%20%27xlink%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.w3.org/1999/xlink%27%3B%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27%27%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20isParentEditableNode%20%3A%20function%28node%29%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20if%20%28node.ownerDocument.designMode%20%3D%3D%20%27on%27%29%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21%28node%20instanceof%20Ci.nsIDOMNSEditableElement%29%29%0A%20%20%20%20%20%20%20%20%20%20throw%200%3B%0A%20%20%20%20%20%20%20%20node.QueryInterface%28Ci.nsIDOMNSEditableElement%29%3B%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isParentDraggableNode%20%3A%20function%28node%29%7B%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%20%20%20%20%20%20if%20%28node.getAttribute%28%27draggable%27%29%20%3D%3D%20%27true%27%29%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isVideoControl%3A%20function%28node%29%20%7B%0A%20%20%20%20if%20%28/%5E%28audio%7Cvideo%29%24/i.test%28node.localName%29%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20var%20i%20%3D%200%3B%0A%20%20%20%20%20%20while%20%28i%20%3C%20node.childNodes.length%29%20%7B%0A%20%20%20%20%20%20%20%20var%20child%20%3Dnode.childNodes%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20if%20%28child.hasAttribute%28%27controls%27%29%20%26%26%20child.getAttribute%28%27controls%27%29%20%3D%3D%20%27controls%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20i++%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%2C%0A%0A%20%20setCursor%3A%20function%28element%2C%20cursor%29%20%7B%0A%20%20%20%20if%20%28%21%21element%20%26%26%20element.style%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20this.mCursor%20%3D%20element.style.cursor%3B%0A%20%20%20%20%20%20%20%20this.mCursorElement%20%20%3D%20element%3B%0A%20%20%20%20%20%20%20%20element.style.cursor%20%3D%20cursor%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%0A%20%20resetCursor%3A%20function%28%29%20%7B%0A%20%20%20%20var%20element%20%3D%20this.mCursorElement%3B%0A%20%20%20%20if%20%28%21%21element%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20element.style.cursor%20%3D%20this.mCursor%3B%0A%20%20%20%20%20%20%20%20%20%20this.mCursor%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20this.mCursorElement%20%3D%20null%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20resetCursorWithTimer%3A%20function%28%29%20%7B%0A%20%20%20%20if%20%28this._ctimer%29%0A%20%20%20%20%20%20clearTimeout%28this._ctimer%29%3B%0A%20%20%20%20this._ctimer%20%3D%20setTimeout%28function%28self%29%7B%0A%20%20%20%20%20%20self.resetCursor%28%29%3B%0A%20%20%20%20%7D%2C%20this.adjustedTimer%28%29%2C%20this%29%3B%0A%20%20%7D%2C%0A%0A%20%20resetCursorTimer%3A%20function%28%29%20%7B%0A%20%20%20%20if%20%28this._ctimer%29%20%7B%0A%20%20%20%20%20%20clearTimeout%28this._ctimer%29%3B%0A%20%20%20%20%20%20this._ctimer%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20convert2RegExp%3A%20function%28%20pattern%20%29%20%7B%0A%20%20%20%20var%20s%20%3D%20new%20String%28pattern%29%3B%0A%20%20%20%20var%20res%20%3D%20new%20String%28%22%5E%22%29%3B%0A%0A%20%20%20%20for%20%28var%20k%20%3D%200%20%3B%20k%20%3C%20s.length%20%3B%20k++%29%20%7B%0A%20%20%20%20%20%20switch%28s%5Bk%5D%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27*%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22.*%22%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27.%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%3F%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5E%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%24%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27+%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%7B%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5B%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%7C%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%28%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%29%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5D%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22%5C%5C%22%20+%20s%5Bk%5D%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27%5C%5C%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22%5C%5C%5C%5C%22%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27%20%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20//%20Remove%20spaces%20from%20URLs.%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20default%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20s%5Bk%5D%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20new%20RegExp%28res%20+%20%27%24%27%2C%20%22i%22%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20toggle%3A%20function%28%29%7B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.enable%22%2C%20%21cbu.getPrefs%28%22grabScroll.enable%22%29%29%3B%0A%20%20%20%20this.setIcon%28%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20button%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20%u043A%u043D%u043E%u043F%u043A%u0443%3A%20L-%u043B%u0435%u0432%u0430%u044F%2C%20M-%u0441%u0440%u0435%u0434%u043D%u044F%u044F%2C%20R-%u043F%u0440%u0430%u0432%u0430%u044F%22%2C%20%22LMR%22.substr%28this.MOUSEBUTTON%2C1%29%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20switch%28value.toUpperCase%28%29%29%7B%0A%20%20%20%20%20%20case%20%22M%22%3A%20value%20%3D1%3B%20break%3B%0A%20%20%20%20%20%20case%20%22R%22%3A%20value%20%3D2%3B%20break%3B%0A%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20case%20%22L%22%3A%20value%20%3D0%3B%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.MOUSEBUTTON%20%3D%20value%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.button%22%2C%20value%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20threshold%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%u0432%u0440%u0435%u043C%u044F%20%u0432%20ms%281000%u043C%u0441%20%3D%201%u0441%u0435%u043A%29%22%2Cthis.TIMER%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.TIMER%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20this.TIMER%20%3C%3D0%20%7C%7C%20%21this.TIMER%20%29%20this.TIMER%20%3D%201000%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.timer%22%2C%20this.TIMER%29%3B%0A%20%20%7D%2C%0A%0A%20%20moverate%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%5B+-%5D%u0432%u0435%u043B%u0438%u0447%u0438%u043D%u0443%5Cn%20%u0415%u0441%u043B%u0438%20%5B+%5D%20c%u0442%u0440%u0430%u043D%u0438%u0446%u0430%20%u0431%u0443%u0434%u0435%u0442%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u0442%u0441%u044F%20%u043F%u0440%u043E%u0442%u0438%u0432%u043E%u043F%u043E%u043B%u043E%u0436%u043D%u043E%20%u0434%u0432%u0438%u0436%u0435%u043D%u0438%u044E%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20%20%22%2Cthis.MOVERATE%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.MOVERATE%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.MOVERATE%20%29%20this.MOVERATE%20%3D%20-1%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.moverate%22%2C%20this.MOVERATE%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20inertiaThreshold%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u043F%u0440%u0438%20%u043A%u043E%u0442%u043E%u0440%u043E%u0439%20%u043F%u043E%u044F%u0432%u043B%u044F%u0435%u0442%u0441%u044F%20%u0430%u0432%u0442%u043E%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%22%2Cthis.INERTIATHRESHOLD%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.INERTIATHRESHOLD%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.INERTIATHRESHOLD%20%29%20this.INERTIATHRESHOLD%20%3D%2020%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.inertiathreshold%22%2C%20this.INERTIATHRESHOLD%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20inertiarate%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%u0434%u043B%u0438%u043D%u0443%20%u0430%u0432%u0442%u043E%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%22%2Cthis.INERTIARATE%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.INERTIARATE%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.INERTIARATE%20%29%20this.INERTIARATE%20%3D%2020%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.inertiarate%22%2C%20this.INERTIARATE%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20setIcon%3A%20function%28%29%7B%0A%20%20%20%20document.getAnonymousNodes%28self%29%5B1%5D.src%20%3D%20%21cbu.getPrefs%28%22grabScroll.enable%22%29%0A%20%20%20%20%3F%20self.image%0A%20%20%20%20%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4AQXCg4QbH3A+AAAAZpJREFUOMuNk79qVUEQxn+zf06MCFZ2YnURBMHi+hp5ARtJY7PFhTRiY2ETkNuId5vbhLSmCeQtLAQhhTEpLeILaHL27K7FOXvYe+SiHwwzsMw33zfMinMOAO+9ooJzLnnv81ALWyBAaVRAGGoLhNPLNVose7P9mniDTA1hgHByseLkYkVFRMx9eXZ1xNnVEUVVTWCGIKSWkNrxMaSWLnUbRAWFqBA0wIMXTw646X5xfH4IQJc6Mukv3977XNSUZltUdKklDmvpKjVTO7UFC1wDP4DHr5694zb+Zv31LSG1xBz49O3jaGUKA1yvvrwm5shivvzeT4q08RZBEUUTJSLSL//0cs10icQciTnw/rMbpcYcyaQxT7E328c5Jwp4tJgvx4dC8r9QQAJmB88/YJTBKIMWixaNoMa8DQbogBZAi6XPmkbvoJXpoyIpl1kuspxvCzxczJfsmrvs6F2MarCqQYtFRDDKbP0L96prVMDP4/PDYbLFKIOgRmv19KKgWLgZ4v7Lp29o1J2N5n/tQFW/smcWvdFY9jPFH7MJpWpDanM5AAAAAElFTkSuQmCC%22%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20getScrollView%3A%20function%20%28e%29%20%7B%0A%20%20%20%20var%20NS%2CEW%2CNSEW%3B%0A%20%20%20%20NS%20%3D%20EW%20%3D%20NSEW%20%3D%20null%3B%0A%20%20%20%20var%20_scrollingView%20%3D%20null%3B%0A%20%20%20%20var%20overflowx%2C%20overflowy%2C%20ox%2C%20oy%3B%0A%20%20%20%20var%20scw%2C%20sch%2C%20horz%2C%20vert%3B%0A%20%20%20%20var%20doc%2C%20style%3B%0A%20%20%20%20var%20borderTop%3B%0A%20%20%20%20var%20borderBottom%3B%0A%20%20%20%20var%20borderLeft%3B%0A%20%20%20%20var%20borderRight%3B%0A%0A%20%20%20%20if%20%28e.originalTarget.ownerDocument.contentType%20%3D%3D%20%22application/xml%22%29%20%7B%0A%20%20%20%20%20%20_scrollingView%20%3D%20e.originalTarget.ownerDocument.defaultView%3B%0A%0A%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%21%3D%20_scrollingView.scrollMinX%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%20%20NS%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%20%20EW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20EW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20NS%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20for%20%28_scrollingView%20%3D%20e.originalTarget%3B%20_scrollingView%3B%20_scrollingView%20%3D%20_scrollingView.parentNode%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView%20instanceof%20HTMLElement%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.localName.toUpperCase%28%29%20%3D%3D%20%22HTML%22%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.localName.toUpperCase%28%29%20%3D%3D%20%22BODY%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView%20%3D%20_scrollingView.ownerDocument.defaultView%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%21%3D%20_scrollingView.scrollMinX%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%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%7D%20else%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%3E%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%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%20if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%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%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%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%20if%20%28_scrollingView.frameElement%20%26%26%20%21NS%20%26%26%20%21EW%20%26%26%20%21NSEW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.getScrollView%28%7BoriginalTarget%20%3A%20_scrollingView.frameElement%7D%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%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.localName.toLowerCase%28%29%20%3D%3D%20%22select%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.parentNode.focus%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20overflowx%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20overflowy%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20ox%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20oy%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20doc%20%3D%20_scrollingView.ownerDocument%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overflowx%20%3D%20style.getPropertyValue%28%22overflow-x%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ox%20%3D%20overflowx%20%21%3D%20%22hidden%22%20%26%26%20overflowx%20%21%3D%20%22visible%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overflowy%20%3D%20style.getPropertyValue%28%22overflow-y%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20oy%20%3D%20overflowy%20%21%3D%20%22hidden%22%20%26%26%20overflowy%20%21%3D%20%22visible%22%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20borderTop%20%20%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderBottom%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderLeft%20%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderRight%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28/%5E%28table%7Ctd%7Cth%29%24/i.test%28_scrollingView.localName%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc%20%3D%20_scrollingView.ownerDocument%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderTop%20%20%20%20%3D%20style.getPropertyValue%28%22border-top-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderBottom%20%3D%20style.getPropertyValue%28%22border-bottom-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderLeft%20%20%20%3D%20style.getPropertyValue%28%22border-left-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderRight%20%20%3D%20style.getPropertyValue%28%22border-right-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28ex%29%20%7B%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%7D%0A%20%20%20%20%20%20%20%20%20%20scw%20%3D%20_scrollingView.clientWidth%3B%0A%20%20%20%20%20%20%20%20%20%20horz%20%3D%20ox%20%26%26%20scw%20%21%3D%3D%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scw%20+%20borderLeft%20+%20borderRight%20%3C%20_scrollingView.scrollWidth%3B%0A%20%20%20%20%20%20%20%20%20%20sch%20%3D%20_scrollingView.clientHeight%3B%0A%20%20%20%20%20%20%20%20%20%20vert%20%3D%20oy%20%26%26%20sch%20%21%3D%3D%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sch%20+%20borderTop%20+%20borderBottom%20%3C%20_scrollingView.scrollHeight%3B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28horz%20%26%26%20vert%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28horz%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28vert%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%7D%0A%7D%3B%0AgBrowser.currentURI%20%3D%3D%20%22about%3Acustomizing%22%20%7C%7C%20GrabScroll.initGrabScroll%28%29%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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%5Bhttp%3A//maps.google.*/*%0Ahttp%3A//maps.yahoo.co.jp/pl*%0Ahttp%3A//map.yahoo.co.jp/pl*%0Ahttp%3A//map.goo.ne.jp/*%0Ahttp%3A//www.mapion.co.jp/c/f*%0Ahttp%3A//books.google.co.jp/books%3Fid%3D*%0Ahttp%3A//books.google.co.jp/books%3Fid%3D*%0Ahttps%3A//realtimeboard.com/%3F*%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1036614-07-2016 23:19:06

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1531
UA: Firefox 38.0

Re: Custom Buttons

bunda1
Удалил, поставил заново. Все равно работает, не выключается.

Добавлено 14-07-2016 23:46:12
Или может можно сделать что бы ратобала на сайте ПКМ?
Так ПКМ вызывает контекстное меню сайта, а когда включаю это кнопку оно перестает работать.

Отредактировано Stakhovsky (14-07-2016 23:46:42)

Отсутствует

 

№1036715-07-2016 08:15:49

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

turbot пишет

Ну, как вариант. Мне то оно не нужно, а fokanik'а не знаю, устроит ли.

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

turbot пишет

но в командную строку вот что отправляется. :(

Выделить код

Код:

var link1 = "https://www.youtube.com/watch?v=dUybgTRI1SE";
var link2 = "https://www.youtube.com/playlist?list=PLVhl7-zCOVC0FCkM4eEfRtdcp7Ai23abd";
var link3 = "https://www.youtube.com/watch?v=Ad1Dl-DV8kI";

  Play("/add");
//Play("--profile-directory=Default");

function Play(param){
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   
   file.initWithPath("C:\\PortableApps\\PortableApps\\PotPlayer\\PotPlayerMini.exe");
 //file.initWithPath("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
   
   var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   process.run(false, [link1,link2,link3, param], 4);
}

хром теперь открывает все без ошибок, а potplayer нет.
А что тут в cmd передается, как посмотреть?

Отсутствует

 

№1036815-07-2016 21:03:48

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

fokanik пишет

хром теперь открывает все без ошибок, а potplayer нет.

Где-то я уже с этим сталкивался :sick:, на входе было так:

Выделить код

Код:

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath("C:\\PortableApps\\PortableApps\\Balabolka\\balabolka.exe");
var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);

var text = "эш тити писи  https://www.youtube.com/watch?v=dUybgTRI1SE"; 

process.run(false, ["-nr", text], 2);

А на выходе так получалось, хотя с ярлыка все нормально запускается:

Выделить код

Код:

MH B8B8 ?8A8  https://www.youtube.com/watch?v=dUybgTRI1SE

Вывод: неправильная кодировка пробелов и potplayer не может открыть больше чем одну ссылку?

Отредактировано fokanik (15-07-2016 21:17:01)

Отсутствует

 

№1036915-07-2016 22:05:05

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

Кнопка - прочитать выделенный на странице текст в балаболке:

Выделить код

Код:

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%3EBalabolka%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bmoz-icon%3A//file%3A//C%3A%5CPortableApps%5CPortableApps%5CBalabolka%5Cbalabolka.exe%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.tooltipText%3D%22%u041F%u0440%u043E%u0447%u0438%u0442%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0442%u0435%u043A%u0441%u0442%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%20//%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0Aif%20%28sel%20%3D%3D%20%27%27%29%20%7B%20%20%20%20%0A%20%20%20%20var%20el%20%3D%20document.commandDispatcher.focusedElement%3B%20//%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%0A%20%20%20%20if%20%28%20el%20%26%26%20el.textLength%20%29%20%0A%20%20%20%20%20%20%20%20%20sel%20%3D%20el.value.substring%28el.selectionStart%2C%20el.selectionEnd%29%3B%20%20%0A%20%20%20%20%7D%0Aif%20%28sel%20%21%3D%3D%20%27%27%29%20gClipboard.write%28sel%29%3B%20//%20%u0432%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0Aelse%20%0A%20%20%20%20%7B%0A%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20%20.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20%22Balabolka%22%2C%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20return%3B%0A%20%20%20%20%7D%3B%0A%0A//sel%20%3D%20convertFromUnicode%28%22windows-1251%22%2C%20sel%29%3B%0Avar%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0Afile.initWithPath%28%22C%3A%5C%5CPortableApps%5C%5CPortableApps%5C%5CBalabolka%5C%5Cbalabolka.exe%22%29%3B%0Avar%20process%20%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0Aprocess.init%28file%29%3B%0Aprocess.runw%28false%2C%20%5B%22-nr%22%2C%20sel%5D%2C%202%29%3B%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
Выделить код

Код:

var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); // из страницы
if (sel == '') {    
    var el = document.commandDispatcher.focusedElement; // из текстового поля
    if ( el && el.textLength ) 
         sel = el.value.substring(el.selectionStart, el.selectionEnd);  
    }
if (sel !== '') gClipboard.write(sel); // в буфера обмена
else 
    {
    Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
    .showAlertNotification("chrome://global/skin/icons/error-16.png", "Balabolka", "Выделите текст!", false, "", null, "");
    return;
    };

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath("C:\\PortableApps\\PortableApps\\Balabolka\\balabolka.exe");
var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.runw(false, ["-nr", sel], 2);

Ура, заработало! На выходе имеем  - тоже, что и на входе!

bunda1, спасибо, а то как-то не хотела работать кнопка раньше или я что-то не так делал.

Отредактировано fokanik (16-07-2016 00:40:02)

Отсутствует

 

№1037016-07-2016 00:17:21

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4331
UA: Firefox 47.0

Re: Custom Buttons

fokanik пишет
Выделить код

Код:

var text = "эш тити писи  https://www.youtube.com/watch?v=dUybgTRI1SE"; 

process.run(false, ["-nr", text], 2);

Есть process.runw() для юникодных данных.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1037116-07-2016 00:32:00

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

Infocatcher пишет

Есть process.runw() для юникодных данных.

Спасибо, работает!

Отсутствует

 

№1037216-07-2016 10:18:07

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

turbot пишет

Ха, спасибо, я вроде и так пробовал. Видимо, очепятался где, когда проверял. Но я все равно не знаю, как в таком виде передать. Массивы и строки - для меня головная боль. Пробовал даже в строку вывести, с replace(), но тогда ругается.
Вся надежда, что Dumby, в очередной раз, снизойдет до чужой тупости.

Ой какие беспорядки в массиве, не понятно, как все там устроено - все ссылки в разнобой идут :)

Выделить код

Код:

var path = "C:\\Program Files\\SMPlayer\\smplayer.exe";
var param = "-add-to-playlist";

this.ondragover = () => false;
this.ondrop = e => {
    var place = e.dataTransfer.getData("text/x-moz-place"), obj;
    if (
        place && (obj = JSON.parse(place)).type == "text/x-moz-place-container"
        && !("annos" in obj && obj.annos.some(anno => anno.name.startsWith("livemark/") || anno.value == "AllBookmarks"))
    ) {
        var html = e.dataTransfer.getData("text/html");
        var doc = new DOMParser().parseFromString(html, "text/html");
        var array = [...doc.querySelectorAll("body > DL > DD > A")].map(a => a.getAttribute("HREF"));

        var shtuk = array.length;
        var link;
        while(shtuk > 0) {
          shtuk--; 
          link = array[shtuk];
          Play(link);
        }
        
    }
    else if (true) {
         var link = e.dataTransfer.getData("text/x-moz-url").split("\n")[0];
         if (!link) return;
         if(link == "about:blank")return;
         Play(link);}
}

function Play(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);
   process.run(false, [link, param], 2);
}

Dumby рулит, а у нас тут где-то ошибка, ссылка плейлиста передается усеченной (не все буквы в конце):

Выделить код

Код:

this.ondrop = e => {
      var place = e.dataTransfer.getData("text/x-moz-place"), obj;
      if (
         place && (obj = JSON.parse(place)).type == "text/x-moz-place-container"
         && !("annos" in obj && obj.annos.some(anno => anno.name.startsWith("livemark/") || anno.value == "AllBookmarks"))
      ) {
         var query = history.getNewQuery();
         query.setFolders([obj.id], 1);
         var node = history.executeQuery(query, history.getNewQueryOptions()).root;
         array = []; recData(node);

Ну вот, крайний вариант какой получился:

Выделить код

Код:

var path = "C:\\Program Files\\SMPlayer\\smplayer.exe";
var params = "-add-to-playlist";

this.ondragover = () => false;
this.ondrop = e => {
    var place = e.dataTransfer.getData("text/x-moz-place"), obj;
    if (place && (obj = JSON.parse(place)).type == "text/x-moz-place-container"
        && !("annos" in obj && obj.annos.some(anno => anno.name.startsWith("livemark/") || anno.value == "AllBookmarks"))) 
        {
        var html = e.dataTransfer.getData("text/html");
        var doc = new DOMParser().parseFromString(html, "text/html");
        var array = [...doc.querySelectorAll("body > DL > DD > A")].map(a => a.getAttribute("HREF"));
        play(array);
        }
    else if (true) {
         var link = e.dataTransfer.getData("text/x-moz-url").split("\n")[0];
         if (!link) return;
         if(link == "about:blank")return;
         play(link);}
}

function play(links) {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   file.initWithPath(path);
   process.init(file);
   var args = [];
   if (Array.isArray(links)) for(var link of links) args.push(link); else args.push(links);
   if (Array.isArray(params)) for(var param of params) args.push(param); else args.push(params);
   process.run(false, args, args.length);
};

turbot, Dumby - спасибо за кнопку, сам бы я никогда не допетрил :)

Отредактировано fokanik (16-07-2016 11:46:16)

Отсутствует

 

№1037317-07-2016 08:17:30

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

Infocatcher пишет

fokanik пишет: Выделить кодКод:var text = "эш тити писи  https://www.youtube.com/watch?v=dUybgTRI1SE";

process.run(false, ["-nr", text], 2);Есть process.runw() для юникодных данных.

Блин, вот еще какая штука получается - отправляем в программу строку:

Выделить код

Код:

var text = "эш тити писи  https://www.youtube.com/watch?v=dUybgTRI1SE";

А на выходе получается:

Выделить код

Код:

var text = \эш

Кавычки в переданной строчке программа обрабатывает как параметр запуска, да блин, опять облом :sick:

Починил, пока работает - снова кодировка помогла:

Выделить код

Код:

var file = Services.dirsvc.get('Desk', Ci.nsIFile);
   file.append("Text To Editor.txt");
   custombuttonsUtils.writeFile( file.path, convertFromUnicode("Windows-1251",sel)); //"Windows-1251" - заработало
   var list = file.path;
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   file.initWithPath("C:\\PortableApps\\PortableApps\\Balabolka\\balabolka.exe");
   var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   process.run(false, ["-rm", list], 2);

Будем считать, что все правильно написано - ошибок вроде нет в консоли. :)

Balabolka:

Выделить код

Код:

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%3EBalabolka%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bmoz-icon%3A//file%3A//C%3A%5CPortableApps%5CPortableApps%5CBalabolka%5Cbalabolka.exe%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u0441%u043E%u0437%u0434%u0430%u0441%u0442%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0439%20%u0444%u0430%u0439%u043B%20%u043D%u0430%20%u0440%u0430%u0431%u043E%u0447%u0435%u043C%20%u0441%u0442%u043E%u043B%u0435%2C%20%0A%20%20%20%u0437%u0430%u043F%u0438%u0448%u0435%u0442%20%u0432%20%u0444%u0430%u0439%u043B%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%20%u0444%u0430%u0439%u043B%20%u0432%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%20*/%0A%0Afunction%20textToEditor%28%29%20%7B%0A%0A%20%20%20var%20sel%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0444%u0438%u043B%u044C%u0442%u0440%20....%0A%20%20%20if%20%28%20%21sel%20%29%20%7B%0A%20%20%20%20%20%20%20%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20%22Text%20To%20Editor%22%2C%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20var%20file%20%3D%20Services.dirsvc.get%28%27Desk%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20file.append%28%22Text%20To%20Editor.txt%22%29%3B%0A%20%20%20custombuttonsUtils.writeFile%28%20file.path%2C%20convertFromUnicode%28%22Windows-1251%22%2Csel%29%29%3B%20//%22Windows-1251%22%20-%20%u0437%u0430%u0440%u0430%u0431%u043E%u0442%u0430%u043B%u043E%0A%20%20%20var%20list%20%3D%20file.path%3B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20file.initWithPath%28%22C%3A%5C%5CPortableApps%5C%5CPortableApps%5C%5CBalabolka%5C%5Cbalabolka.exe%22%29%3B%0A%20%20%20var%20process%20%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5B%22-rmq%22%2C%20list%5D%2C%202%29%3B%20%20%20%20%0A%20%20%20%0A%7D%3B%0AtextToEditor%28%29%3B%0A%0A%0A/*%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%0A%20%20%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20.......................................................*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20%20%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29%3B%0A%20%20%20%20%20var%20anchor%20%3D%20%28selection.anchorNode%20%21%3D%3D%20null%29%3F%20selection.anchorNode%3A%20false%3B%0A%0A%20%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%27PRE%27%20....%0A%20%20%20%20%20if%20%28%20anchor%20%26%26%20anchor.parentNode.tagName%20%3D%3D%20%27PRE%27%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20var%20node%20%3D%20selection.focusNode%3B%0A%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20selection.anchorOffset%3B%0A%20%20%20%20%20%20%20%20%20%20var%20endPos%20%3D%20selection.focusOffset%3B%0A%20%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20node.data.substring%28startPos%2C%20endPos%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20%20%20%20if%20%28%20selection.toString%28%29.length%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%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%7D%0A%20%20%20%20%20//%20%u0438%u0441%u043F%u0440%u0430%u0432%u043B%u044F%u0435%u043C%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%u0443%20%u0441%20%u043F%u0435%u0440%u0435%u043D%u043E%u0441%u043E%u043C%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043D%u043E%u0432%u0443%u044E%20%u0441%u0442%u0440%u043E%u043A%u0443%20%u0432%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u043C%20win%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%u0435%20....%0A%20%20%20%20%20if%20%28%20selection.toString%28%29.length%20%21%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.toString%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.replace%28/%5Cu000A/g%2C%20%22%5Cu000D%5Cu000A%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.replace%28/%5Cu000D%5Cu000D%5Cu000A/g%2C%20%22%5Cu000D%5Cu000A%22%29%3B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%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%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

P.S Комменты на руторе слушать прикольно: - "Господи, скажите этому джойказино, что нет у них проблем с доступом, просто не заходит к ним никто..." :music:

Отредактировано fokanik (17-07-2016 09:33:54)

Отсутствует

 

№1037418-07-2016 07:43:07

selevo
Забанен
 
Группа: Members
Откуда: Ижевск
Зарегистрирован: 23-01-2008
Сообщений: 240
UA: Firefox 36.0
Веб-сайт

Re: Custom Buttons

Проблема большая!
Вот видео  проблемы: https://youtu.be/s5s7XgyDeT4

В firefox  нет задержек  на закрытие менюшек и подменюшек, когда нажата левая кнопка мыши,тоесть когда я что-то  перетаскиваю, менюхи закрываются тут же без задержек,что  сильно бесит и приходится    попадать и  идти строго пол линиям...
При этом задержки  в обычном режиме  (когда кнопка   мышки не нажата) нормальные но тоже хотел бы узнать где их менять.

Очень нужна кнопка выставляющая задержки закрытия менюшек при перетаскиваниях.
расширения я такого не нашёл.
Есть ли вообще такой параметр в FF (задержка при нажатой кнопке левой)  не известно.

Отредактировано selevo (18-07-2016 17:17:52)

Отсутствует

 

№1037518-07-2016 08:18:05

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 588
UA: Firefox 47.0

Re: Custom Buttons

fokanik пишет

Будем считать, что все правильно написано

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

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

Отредактировано Ultima2m (18-07-2016 08:27:34)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]