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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№882617-08-2015 21:49:02

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

Re: Custom Buttons

Dumby пишет

- Сестра, может всё-таки continue?
- Нет, доктор сказал return, значит return.

Да, правильно будет continue но и return работает. Поменяю.

Dumby пишет

И, разве self.res не должен очищаться
при вызове getBookmarksFolder ?

Не должен очищаться, при вызове getBookmarksFolder срабатывает функция f которая устанавливает свойство self.res для всей кнопки и после того как f отработала getBookmarksFolder через return self.res; его отдаёт куда надо.

Отредактировано bunda1 (17-08-2015 21:50:21)

Отсутствует

 

№882717-08-2015 22:21:29

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

Re: Custom Buttons

bunda1 пишет

но и return работает

С какой это стати?
Разве поиск не прекратится на первом же не folder'е ?

Не должен очищаться, при вызове getBookmarksFolder срабатывает функция f которая устанавливает свойство self.res для всей кнопки и после того как f отработала getBookmarksFolder через return self.res; его отдаёт куда надо.

А если функция f ничего не найдёт, то getBookmarksFolder
через return self.res отдаст предыдущее найденное ?
Если так, то хорошо ли это ?

Отсутствует

 

№882817-08-2015 22:37:18

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

Re: Custom Buttons

Dumby пишет

С какой это стати?
Разве поиск не прекратится на первом же не folder'е ?

Ну так не останавливается, посмотри в консоль ошибок:

Выделить код

Код:

function getBookmarksFolder(id, folderName) {      
      self.res = false; 
      
      (function f(id) { 
         var folder = PlacesUtils.getFolderContents(id).root;
     
         folder.QueryInterface(Ci.nsINavHistoryContainerResultNode);
         folder.containerOpen = true;
         
         
         for ( var i = 0; i < folder.childCount; i++ ) {
               var child = folder.getChild(i);
               if ( !PlacesUtils.nodeIsFolder(child) ) return;
               
               LOG(child.title);

               if ( child.title == folderName ) {
                    self.res = child.itemId;
                    break;
                    }    
               f(child.itemId);                            
               }                      
         folder.containerOpen = false
      })(id);
      
      return self.res; 
   };
alert(getBookmarksFolder(1, "add") + "\n" + getBookmarksFolder(1, "open"));
Dumby пишет

А если функция f ничего не найдёт, то getBookmarksFolder
через return self.res отдаст предыдущее найденное ?
Если так, то хорошо ли это ?

Да тут не доработка, видно я не понял про что ты намекаешь в предыдущем комментарии. Похоже, мой русский не так хорош как хотелось.

Отсутствует

 

№882917-08-2015 23:27:14

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

Re: Custom Buttons

fokanik пишет

Заработало, так она только после 15+ открытых вкладок начинает работать, а в seamonkey - сразу все включается - с первой вкладки.

Выделить код

Код:

#alltabs-button {
  visibility: visible!important;
}

Отсутствует

 

№883018-08-2015 00:17:44

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

Re: Custom Buttons

bunda1 пишет

посмотри в консоль ошибок

Сделал. Только заменил LOG(child.title); на
Services.console.logStringMessage(child.title || "EmptY");

Вот результат. Слева return, справа continue.

Отсутствует

 

№883118-08-2015 10:30:50

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

Re: Custom Buttons

lokiju пишет

Вот есть кнопка от bunda1[CB] Автовыделение ++ | Форум Mozilla Россия. Взял её код . Из него удалил всё ненужное мне. Получилось выделение кириллицы
Но мне надо обратное - выделение всего не кириллицы. А так же , чтобы кнопка не создавала  и не использовала настройки в about:config . Как это сделать - моих знаний не хватает.

Как получить выделение всего не кириллицы, я не знаю и думаю что ничего хорошего из этого не получится, браузер зависнет обрабатывая все буквы на странице. Сделать, чтобы кнопка не создавала и не использовала настройки в about:config я конечно могу но нужно ли это по выше изложенным причинам.

Отсутствует

 

№883218-08-2015 12:16:26

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

Re: Custom Buttons

turbot пишет

#alltabs-button { visibility: visible!important;}

Спасибо!  :iron:

Отсутствует

 

№883318-08-2015 13:12:01

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 42.0

Re: Custom Buttons

bunda1 пишет

Как получить выделение всего не кириллицы, я не знаю и думаю что ничего хорошего из этого не получится, браузер зависнет обрабатывая все буквы на странице. Сделать, чтобы кнопка не создавала и не использовала настройки в about:config я конечно могу но нужно ли это по выше изложенным причинам.

Понятно. Спасибо. Значит буду использовать как есть.

Отсутствует

 

№883418-08-2015 13:16:02

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

Re: Custom Buttons

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

bunda1 пишет

fokanik пишет: Получилось наконец.Интересно придумано, но цеплять на каждый новый пункт меню отдельный обработчик с кучкой кода это лишняя трата ресурсов. Можно добавлять Выделить кодКод:menuitem.onclick =()=> функция( аргументы );а уже функция пусть делает то что делает обработчик и не нужны будут оба обработчики на click в функциях Open и Open1 из которых одна тоже явно лишняя.Добавлено 10-08-2015 20:45:17Цеплять везде addDestructor( ()=> contextMenu.removeChild(menuitem) ); тоже это не есть - хорошо, можно все пункты удалить разом по какому то общему признаку например idВыделить кодКод:   
addDestructor(function() {
      [...contextMenu.childNodes].forEach(function(el) {
          if (el.id && el.id == 'тут общий id')
              contextMenu.removeChild(el);
      })
});
Ну и так далее
                    Отредактировано bunda1 (10-08-2015 20:51:25)


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

Выделить код

Код:

this.setAttribute("context", "");
this.tooltipText="SMPlayer  - Пкм.\nPotPlayer - Лкм.";

if ( this.hasAttribute("initialized") ) return;

var ppm = "C:\\PortableApps\\PortableApps\\PotPlayer\\PotPlayerMini.exe";
var smp = "C:\\Program Files\\SMPlayer\\smplayer.exe";
var vlc = "C:\\Program Files\\VideoLAN\\VLC\\vlc.exe";
var smt = "C:\\Program Files\\SMPlayer\\smtube.exe";
var dlm = "C:\\PortableApps\\PortableApps\\TotalCmd\\Portable\\Download Master Portable\\dmaster.exe";

this.onclick = function(e) {
     if ( e.button == 0 ) Play(smp, "-add-to-playlist", 0); // ПКМ
     if ( e.button == 1 ) gShowPopup(this);                 // Редактировать кнопку
     if ( e.button == 2 ) Play(ppm, "/add", 0);             // ЛКМ
} 

//Передаем Имя, Путь, Параметры запуска
OpenIn("PotPlayer", ppm, "/add");
OpenIn("SMPlayer", smp, "-add-to-playlist");
OpenIn("Video Lan", vlc, "-AddToPlaylist");
OpenIn("SMTube", smt, "");
OpenIn("Download Master", dlm, "");

//----------------------------------------------------------------------------------------------
function OpenIn(name, path, param){// Открыть ссылку или адрес текущей страницы в программе
   
   var menuitem = document.createElement("menuitem");
   var contextMenu = document.getElementById("contentAreaContextMenu");
   var icons = "moz-icon://file://" + path;
   menuitem.id = "open-in";
   menuitem.setAttribute("label", name);
   menuitem.setAttribute("class", "menuitem-iconic");
   menuitem.setAttribute("image", icons);
   document.getElementById("context-sep-open").parentNode.insertBefore( menuitem, document.getElementById("context-sep-open") );
   addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu, false, contextMenu );
   addDestructor( ()=> contextMenu.removeChild(menuitem));
   addEventListener("command", function(e) {
   if ( e.button ) return;
   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);
   
   //Передаем Путь, Параметры запуска, 1 = ссылку или 0 = адрес страницы
   if (!gContextMenu.onLink) Play(path, param, 0);
   else Play(path, param, 1);
   
   ;}, false, menuitem );};
//----------------------------------------------------------------------------------------------
function Play(path, param, link){
   
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   file.initWithPath(path);
   var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   if (link) process.run(false, [gContextMenu.getLinkURL(), param], 2);
   else process.run(false, [content.location.href, param], 2);
}
//----------------------------------------------------------------------------------------------


bunda1, menuitem.onclick =()=> функция( аргументы ); - вообще не пойму, как это работает, куда теперь это цеплять =()=> - просто взрыв мозга :whiteflag:

Выделить код

Код:

this.setAttribute("context", "");
this.tooltipText="SMPlayer  - Пкм.\nPotPlayer - Лкм.";

if ( this.hasAttribute("initialized") ) return;

var ppm = "C:\\PortableApps\\PortableApps\\PotPlayer\\PotPlayerMini.exe";
var smp = "C:\\Program Files\\SMPlayer\\smplayer.exe";
var vlc = "C:\\Program Files\\VideoLAN\\VLC\\vlc.exe";
var smt = "C:\\Program Files\\SMPlayer\\smtube.exe";
var dlm = "C:\\PortableApps\\PortableApps\\TotalCmd\\Portable\\Download Master Portable\\dmaster.exe";

this.onclick = function(e) {
     if ( e.button == 0 ) Play(smp, "-add-to-playlist", "href"); // ПКМ
     if ( e.button == 1 ) gShowPopup(this);                 // Редактировать кнопку
     if ( e.button == 2 ) Play(ppm, "/add", "href");             // ЛКМ
} 

//Передаем Имя, Путь, Параметры запуска
OpenIn("PotPlayer", ppm, "/add");
OpenIn("SMPlayer", smp, "-add-to-playlist");
OpenIn("Video Lan", vlc, "-AddToPlaylist");
OpenIn("SMTube", smt, "");
OpenIn("Download Master", dlm, "");

//----------------------------------------------------------------------------------------------
function OpenIn(name, path, param){// Открыть ссылку или адрес текущей страницы в программе
   
   var menuitem = document.createElement("menuitem");
   var contextMenu = document.getElementById("contentAreaContextMenu");
   var icons = "moz-icon://file://" + path;
   menuitem.id = "open-in";
   menuitem.setAttribute("label", name);
   menuitem.setAttribute("class", "menuitem-iconic");
   menuitem.setAttribute("image", icons);
   document.getElementById("context-sep-open").parentNode.insertBefore( menuitem, document.getElementById("context-sep-open") );
   addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu, false, contextMenu );
   addDestructor( ()=> contextMenu.removeChild(menuitem));
   
   menuitem.onclick = function(e) {Play(path, param, "");};
   };
//----------------------------------------------------------------------------------------------
function Play(path, param, link){
   
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   file.initWithPath(path);
   var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   if (!gContextMenu.onLink || link == "href") process.run(false, [content.location.href, param], 2);
   else process.run(false, [gContextMenu.getLinkURL(), param], 2);
}
//----------------------------------------------------------------------------------------------

Еще раз все перечитал и родил наконец, завтра деструкторы будем мучать - хотя я даже не знаю, что это :dumb:

P.S Я так и не понял, что это за запись = ( Тут чего, функции мыши или чего ? ) = >

Отредактировано fokanik (18-08-2015 15:22:50)

Отсутствует

 

№883518-08-2015 16:36:43

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

Re: Custom Buttons

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

Выделить код

Код:

this.onclick = function(e) {
     if ( e.button == 0 ) Play(smp, "-add-to-playlist", "href"); // ПКМ
     if ( e.button == 1 ) gShowPopup(this);                 // Редактировать кнопку
     if ( e.button == 2 ) Play(ppm, "/add", "href");             // ЛКМ
}

menuitem.onclick = function(e) {Play(path, param, "");};


Мышь глючит или код неправильный, function(e) в одном коде для разных целей так можно использовать? А то на кнопке работает в контексте нет - или наоборот, в контексте рабоатет, а на кнопке нет?

А все, нашел ошибку - не по порядку выполнения операций написано было:

Выделить код

Код:

if (!gContextMenu.onLink || link == "href") // было - не работало
if (link == "href" || !gContextMenu.onLink) // стало - заработало

Отредактировано fokanik (18-08-2015 18:02:56)

Отсутствует

 

№883618-08-2015 17:53:48

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 20.0

Re: Custom Buttons

Помогите сделать tooltip для элемента. У этого элемента уже есть title и я хочу этот title вставить в свою подсказку.
Код подсказки следующий

Выделить код

Код:

"строка\n" +родной_title+ xyz

Вот это xyz изменяется и я хочу чтобы по событию mouseover в tooltip-е показывалось его актуальное значение.
Иначе говоря, мне надо чтобы "строка" и родной_title оставались неизменными, а xyz подгружалось заново.

Отсутствует

 

№883718-08-2015 18:21:24

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

Re: Custom Buttons

rbfyec
Вот похожая кнопка.

Отсутствует

 

№883818-08-2015 19:20:32

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 20.0

Re: Custom Buttons

turbot пишет

rbfyec
Вот похожая кнопка.

Нет, ну это не то совсем. Мне нужна самая простая подсказка для ссылки.
Я бы и сам сделал, но не знаю как сохранить родной title ссылки, чтобы с ним работать дальше.

Отсутствует

 

№883918-08-2015 19:46:28

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

Re: Custom Buttons

lokiju пишет

А так же, чтобы кнопка не создавала и не использовала настройки в about:config

Выделить код

Код:

this._handleClick =()=> autoHighlight(self.checked = !self.checked);
document.persist(this.id, "checked");


// Буквы для выделения ..........
var str = "а|б|в|г|д|е|ё|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я";
   

// Автоматически выделить буквы ..........
function autoHighlight() {
  var finder = gBrowser.finder || gFindBar;
  var lighted = (finder._highlightDoc || finder._highlight).bind(finder);
  
  lighted(false);   
  
  if ( !self.checked ) return;
  
  var sel = getBrowserSelection();   
  var array = str.split("|"); 
  if ( sel.length ) array.push(sel);
       
  while( array.length > 0 ) lighted( true, array.shift() );
};


// Обработчик следит за загрузкой и переключением вкладки и запускает автовыделение ..........
var listener = {
   onLocationChange: function(wpr, req) {
      if ( gBrowser.currentURI.spec.startsWith("http") && !req && wpr.document.readyState == "complete" )
           autoHighlight();
      self.onLocationChange = true;        
   },   
   onStateChange: function(wpr, req, flag) {       
      if ( !gBrowser.currentURI.spec.startsWith("http") ) return;
      
      if ( !self.onLocationChange && (flag & Ci.nsIWebProgressListener.STATE_STOP) ) 
           autoHighlight();
      self.onLocationChange = false;
   }   
};   
gBrowser.addProgressListener(listener);
addDestructor(function() gBrowser.removeProgressListener(listener));

Добавлено 18-08-2015 19:55:05

Dumby пишет

Вот результат. Слева return, справа continue.

Да ты прав, спасибо :)

Отредактировано bunda1 (18-08-2015 20:13:05)

Отсутствует

 

№884018-08-2015 21:21:56

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

Re: Custom Buttons

Выделить код

Код:

var static per = "";

А тут статические переменные есть, чтоб в пределах функции значение жило само по себе и не обнулялось?

Отсутствует

 

№884118-08-2015 21:41:57

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

Re: Custom Buttons

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

Код:

var static per = "";

А тут статические переменные есть, чтоб в пределах функции значение жило само по себе и не обнулялось?

Ошибка: SyntaxError: missing ; before statement
Строка 1, символ 11
var static per = "";

Отсутствует

 

№884218-08-2015 21:44:21

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

Re: Custom Buttons

turbot пишет

Сепаратор

d8254810ac8e.jpg

Несколько пунктов в меню с общим id, как универсально найти последний пункт и врезать после него сепаратор?

Отсутствует

 

№884318-08-2015 21:51:57

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

Re: Custom Buttons

fokanik пишет

Несколько пунктов в меню с общим id, как универсально найти последний пункт и врезать после него сепаратор?

Под функцией OpenIn

Выделить код

Код:

document.getElementById("context-sep-open").parentNode.insertBefore( document.createElement("menuseparator"), document.getElementById("context-sep-open") );

Отсутствует

 

№884418-08-2015 21:55:22

Filadelfia
Участник
 
Группа: Members
Зарегистрирован: 02-11-2014
Сообщений: 3
UA: Firefox 40.0

Re: Custom Buttons

После аварийного закрытия Мозилы - пропали все созданные кнопки, и теперь вообще не реагирует.
В меню выбираю: Добавить новую кнопку, но ничего не происходит.
Уже и мозилу обновил до 40.о и сам Custom Botton последний установил - ничего не изменилось :sick:

Добавлено 18-08-2015 21:58:27
Уже привык к кнопкам Custom Botton настолько - что без него с этими закладками мутными = это ужас какая чума неудобная:mad:
помогите плиз исправить положение

Отредактировано Filadelfia (18-08-2015 21:58:27)

Отсутствует

 

№884518-08-2015 22:30:36

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

Re: Custom Buttons

bunda1 пишет

addDestructor(function() { [...contextMenu.childNodes].forEach(function(el) { if (el.id && el.id == 'тут общий id') contextMenu.removeChild(el); }) });

Выделить код

Код:

addDestructor("open-in-programs");
//----------------------------------------------------------------------------------------------
function addDestructor(id){
    [contentAreaContextMenu].childNodes.forEach(function(el) {if (el.id == id)contextMenu.removeChild(el);});
}

bunda1, не могу функцию сгруппировать, после компиляции ошибку выдает постоянно?

Да ладно, вроде все работает теперь, проверенно на SeaMonkey:

Выделить код

Код:

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%3ESMplayer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/ico%3Bbase64%2CAAABAAEAGBgAAAEAIACICQAAFgAAACgAAAAYAAAAMAAAAAEAIAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrq6sAqqqqJm1tbT8vLy8FS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANXV1QCfn58c1tbWrMPDw+N8fX1cAAAAAkJAQAmVkZFNycbGfbSysmmDgoIeyMXFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnZ2dAGJiYhasrKyo5uXk+fn19P/Pzs3qkpKSZ6ajo3fT0dHmwMDA/rCvr/i+u7qpqaWlHqikpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3NzcANDQ0FY2OjqDe3Nvt6+Pf/Pbt5/728u7/tra19cC/v/fQ0ND/wMHB/8G/wP+urKv/urW0i8y/vQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2NgAYGBgSgICAh8K/vujd0Mv97d3U/urd1P+wqqX/nJqY/8TExP/HwMD/9Ovr//Pw8P/Nysn/t7Kx28vCwTkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUlJSAAcHBwpsbG1vq6mo4dHCuvnlzb/+6tXH/7etp/9+eXj/trKx/7m2tv/Vo6P/5bW1/+/h4f/e2dn/trKy9biysloAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8ANTU1BVxcXF2Vk5Lft6uk89O5qP/pyrT/3cq9/316ef+0rav/3dXV/8a4uP/mt7f/7s7O//Dh4P/p4uL/vLe2/KOennIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCQkJUnRycrmqloz6xaeV/8CqnP/iw6v/7N/S/4qKjP/h09P/8ujo/9TBwf/w2Nj//Pf3//Xu7v/s5eX/wry7/qKcnHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPERI2FhMSuGhJOvrGm4L92KqM/9Wxlv/OuqP/3tTI/4qJiv/k19b/8Ofn/9TCwv/w2dn//Pj4//Xu7v/s5eX/wry8/qOdnXoAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAC0bGBjKVDAe8o1DGP/PmHT+3quE/+vEmf/cxaL/vLat/4V+e//DtrX/29PT/8S4uP/mubn/8NLS//Hi4v/o4uH/vLe3/Kmko28AAAAAAAAAAAAAAAAAAAAAAAAAOgUGB207HxHliz8T/6xRFv/VlGX/5reH/+7Nm//Ou5n/naSp/4aasv+KhIT/vre1/7y6uv/TpaX/5bS0//Hk5P/d2dj/tK+u87qys1cAAAAAAAAAAAAAAAEAAAAlAwEBbjsaCsRFHwr8mEYT/8BfGf/fpGr/7MSK/8eyi/+tqaH/WIO5/z2R9f9TktX/gJ24/8vJx/+8tLT/8uTk//Pw8P/Mycj/vrm5883IyVYAAAAAAAAAAAAAACcFAgFvOhkJtn45Ev5+OhD/Yy8K/7lvKv/ntnL/x6p6/355bv9oeZb/Nnzs/yuF//88lv//osLi/9rW0v/T09P/x8jI/8XExP+1srL8z8zL+szMy3YAAAAAAAAAJQAAAGk2FwisfTcS/qVMFf68XBf/p2Eg/3VTJ/+mhlX/Z1xO/3Jxcf9si8z/LnX9/y5+//9ak+T/p6yx/9HQz//a2tr/0dDQ/8C+vv+Zl5f0np2d6NXV1X4AAAApAgEAZzEVCK15NRH4pEsV/7hYFv/OdSb/4pxB/4toLv87Min/PDg2/5iXl/+nss3/Rmy8/zNy6/+putb/r66t/9na2v+CgoL/bW1t/2loaP8+Pj77a2tr18vLy24AAABJDQYCpG8xEOyiShX/t1cV/8xyI//gmT//w5JD/1JGLv8mJib/bm1t/7+/v//k4+L/sLG0/52mtv+Kiov/4+Pj/+3t7f+Li4v/Li4u/zAwMP8yMjL7ioqK6s3NzW8AAAAWBgMBikYgCfOoUBT/zG8i/92VPP/LmEb/V0gt/0VGRv+bm5v/mJiY/2xsbP99fX3/ycnJ/+vq6f/a2tr/1tbW/9bW1v/Ozs7/fX19/1ZWVv9/f3/+ysrK8NHR0VUAAAAAAAAAEQQBAHVULg7ux4U1/9WdRf9aSi3/RUZG/4qKiv+mpqb/RUVF/y4uLv8wMDD/Y2Nj/87Ozv+ioqL/Wlpa/1ZWVv+Ojo7/29vb/9HR0f7e3t7/0dHRz6Ojoy8AAAAAAAAAAAAAAAgCAQFoUj0a5VlFI9otLS35YWFh/rCwsP+Ghob/NjY2/zY2Nv80NDT/QkJC/5+fn/9AQED/MjIy/zExMf9BQUH/ubm5//T09P/j4+P1y8vLaf///wAAAAAAAAAAAAAAAAAAAAAFAAAAWwYGBpxnZ2e7enp6/oSEhP6JiYn/Ojo6/zMzM/8yMjL/VFRU/5mZmf85OTn/NTU1/zQ0NP84ODj/qqqq//Ly8v3a2tqdrq6uDq+vrwAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACp9fX1CjY2N33FxcddtbW3vdnZ2/lFRUf9kZGT/o6Oj/8TExP9qamr/NjY2/jY2Nv5gYGD/z8/P+t7e3pnDw8Mg3NzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxsbAAAAAABfX19UYeHh7ptbW3ChISE9p6env+tra3/w8PD/8zMzP/AwMD/iIiI/3R0dP6xsbHewsLCgomJiRienp4AiIiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi4uLAH19fSOIiIiPjIyM4IuLi/mQkJD+pKSk/qWlpf6qqqr6rKys6p+fn6ODg4NAVVVVBVlZWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIWFhQCEhIQMh4eHQI+Pj2WQkJB8iIiIgH5+fn95eXlseXl5SF9fXxP///8AAAAAAAAAAAAAAAAAAAAAAAAAAAD/+P8A//ADAP/gAQD/wAAA/4AAAP8AAAD+AAAA/AAAAPgAAADwAAAA8AAAAMAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAADAAAEA4AABAPAAAwD8AAcA/wAPAP+APwA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.setAttribute%28%22context%22%2C%20%22%22%29%3B%0Athis.tooltipText%3D%22SMPlayer%20%20-%20%u041F%u043A%u043C.%5CnPotPlayer%20-%20%u041B%u043A%u043C.%22%3B%0A%0Aif%20%28%20this.hasAttribute%28%22initialized%22%29%20%29%20return%3B%0A%0Avar%20id%20%3D%20%22context-bookmarklink%22%3B%20//%20%u041C%u0435%u0441%u0442%u043E%20%u0432%u0440%u0435%u0437%u043A%u0438%0Avar%20ppm%20%3D%20%22C%3A%5C%5CPortableApps%5C%5CPortableApps%5C%5CPotPlayer%5C%5CPotPlayerMini.exe%22%3B%0Avar%20smp%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CSMPlayer%5C%5Csmplayer.exe%22%3B%0Avar%20vlc%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CVideoLAN%5C%5CVLC%5C%5Cvlc.exe%22%3B%0Avar%20smt%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CSMPlayer%5C%5Csmtube.exe%22%3B%0Avar%20dlm%20%3D%20%22C%3A%5C%5CPortableApps%5C%5CPortableApps%5C%5CTotalCmd%5C%5CPortable%5C%5CDownload%20Master%20Portable%5C%5Cdmaster.exe%22%3B%0A%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20Play%28smp%2C%20%22-add-to-playlist%22%2C%20%22href%22%29%3B%20//%20%u041F%u041A%u041C%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%29%20Play%28ppm%2C%20%22/add%22%2C%20%22href%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u041B%u041A%u041C%0A%7D%20%0A%0A//%u041F%u0435%u0440%u0435%u0434%u0430%u0435%u043C%20%u0418%u043C%u044F%2C%20%u041F%u0443%u0442%u044C%2C%20%u041F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u044B%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%0AOpenin%28%22PotPlayer%22%2C%20ppm%2C%20%22/add%22%29%3B%0AOpenin%28%22SMPlayer%22%2C%20smp%2C%20%22-add-to-playlist%22%29%3B%0AOpenin%28%22Video%20Lan%22%2C%20vlc%2C%20%22-AddToPlaylist%22%29%3B%0AOpenin%28%22SMTube%22%2C%20smt%2C%20%22%22%29%3B%0AOpenin%28%22Download%20Master%22%2C%20dlm%2C%20%22%22%29%3B%0A%0Adocument.getElementById%28id%29.parentNode.insertBefore%28%20document.createElement%28%22menuseparator%22%29%2C%20document.getElementById%28id%29%29%3B%20//%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%0AaddDestructor%28function%28%29%20%7B%20%5B...contextMenu.childNodes%5D.forEach%28function%28el%29%20%7B%20if%20%28el.id%20%26%26%20el.id%20%3D%3D%20%22open-in-programs%22%29%20contextMenu.removeChild%28el%29%3B%20%7D%29%20%7D%29%3B%20//%u0414%u0435%u0441%u0442%u0440%u0443%u043A%u0442%u043E%u0440%0A//----------------------------------------------------------------------------------------------%0Afunction%20Openin%28name%2C%20path%2C%20param%29%7B//%20%u041A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%0A%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20var%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%0A%20%20%20menuitem.id%20%3D%20%22open-in-programs%22%3B%0A%20%20%20menuitem.setAttribute%28%22label%22%2C%20name%29%3B%0A%20%20%20menuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20menuitem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20path%29%3B%0A%20%20%20document.getElementById%28id%29.parentNode.insertBefore%28%20menuitem%2C%20document.getElementById%28id%29%20%29%3B%20%20%0A%20%20%20addEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20menuitem.hidden%20%3D%20%21gContextMenu%2C%20false%2C%20contextMenu%20%29%3B%0A%20%20%20menuitem.onclick%20%3D%20function%28e%29%20%7BPlay%28path%2C%20param%2C%20%22%22%29%3B%7D%3B%0A%7D%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%20if%20%28link%20%3D%3D%20%22href%22%20%7C%7C%20%21gContextMenu.onLink%29%20process.run%28false%2C%20%5Bcontent.location.href%2C%20param%5D%2C%202%29%3B%0A%20%20%20else%20process.run%28false%2C%20%5BgContextMenu.getLinkURL%28%29%2C%20param%5D%2C%202%29%3B%0A%7D%0A//----------------------------------------------------------------------------------------------%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

Добавлено 18-08-2015 22:56:01

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

Код:

.forEach(function(m) {
   if (m == "separator") {
       contextMenu.insertBefore(document.createElement("menuseparator"), sepOpen);
       return;
       };
   var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), sepOpen);
   menuitem.id = "open-in";
   var label = m[0], path = m[1], param = m[2]; 
   menuitem.setAttribute("label", label);
   menuitem.setAttribute("class", "menuitem-iconic");
   menuitem.setAttribute("image", "moz-icon://file://" + path);   
   menuitem.onclick =()=> Play(path, param, "");
});

О, еще круче у Вас! Забираю, пошел спать. Спасибо за подсказки!

Отредактировано fokanik (18-08-2015 22:56:01)

Отсутствует

 

№884618-08-2015 23:00:59

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

Re: Custom Buttons

fokanik

Выделить код

Код:

this.setAttribute("context", "");
this.tooltipText="SMPlayer  - Пкм.\nPotPlayer - Лкм.";

if ( this.hasAttribute("initialized") ) return;


this.onclick = function(e) {
     if ( e.button == 0 ) Play(array[1][1], "-add-to-playlist", "href"); // ПКМ
     if ( e.button == 1 ) gShowPopup(this);                              // Редактировать кнопку
     if ( e.button == 2 ) Play(array[0][1], "/add", "href");             // ЛКМ
}

var contextMenu = document.getElementById("contentAreaContextMenu"); 
var sepOpen = document.getElementById("context-sep-open");

var array = [
 ["PotPlayer", "C:\\PortableApps\\PortableApps\\PotPlayer\\PotPlayerMini.exe", "/add" ],
 ["SMPlayer", "C:\\Program Files\\SMPlayer\\smplayer.exe", "-add-to-playlist" ],
 ["Video Lan", "C:\\Program Files\\VideoLAN\\VLC\\vlc.exe", "-AddToPlaylist" ],
 ["SMTube", "C:\\Program Files\\SMPlayer\\smtube.exe", ""],
 ["Download Master", "C:\\PortableApps\\PortableApps\\TotalCmd\\Portable\\Download Master Portable\\dmaster.exe", ""],
 ["separator"]
            ]
array.forEach(function(m) {
   if (m == "separator") {
       contextMenu.insertBefore(document.createElement("menuseparator"), sepOpen);
       return;
       };
   var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), sepOpen);
   menuitem.id = "open-in";
   var label = m[0], path = m[1], param = m[2]; 
   menuitem.setAttribute("label", label);
   menuitem.setAttribute("class", "menuitem-iconic");
   menuitem.setAttribute("image", "moz-icon://file://" + path);   
   menuitem.onclick =()=> Play(path, param, "");
});
   
addDestructor(function() {
   [...contextMenu.childNodes].forEach(function(el) {
      if (el.id == "open-in")
          contextMenu.removeChild(el);
   }) 
});

function Play(path, param, link){
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   file.initWithPath(path);
   var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   if (link == "href" || !gContextMenu.onLink) process.run(false, [content.location.href, param], 2);
   else process.run(false, [gContextMenu.getLinkURL(), param], 2);
}

Отсутствует

 

№884718-08-2015 23:20:45

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

Re: Custom Buttons

bunda1, спасибо!

Заменил место врезки:

Выделить код

Код:

var sepOpen = document.getElementById("context-bookmarklink");

Все, теперь как кладка полигональная смотрится :) 

Всем пока :zzz:

Отредактировано fokanik (18-08-2015 23:38:12)

Отсутствует

 

№884819-08-2015 18:22:14

vet41
Участник
 
Группа: Members
Зарегистрирован: 19-08-2015
Сообщений: 5
UA: Firefox 28.0

Re: Custom Buttons

Скажите есть ли кнопка отключить переход по закладке левым кликом в боковой панели?

Отсутствует

 

№884920-08-2015 09:53:11

beggrr
Участник
 
Группа: Members
Зарегистрирован: 04-02-2014
Сообщений: 128
UA: Firefox 25.0

Re: Custom Buttons

А о чем идет речь в этом посте bunda1 17-08-2015 21:04:57 ?
Что должна делать эта кнопка и для чего она?

Отсутствует

 

№885020-08-2015 10:36:31

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

Re: Custom Buttons

beggrr пишет

А о чем идет речь в этом посте bunda1 17-08-2015 21:04:57 ?
Что должна делать эта кнопка и для чего она?

Эта функция даёт возможность получить id папки закладок по названию, мне эта нужно для жеста мыши - добавить страницу в закладки в указанной папке закладок.

Отсутствует

 

Board footer

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