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

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№555102-01-2013 15:55:12

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 174
UA: Firefox 17.0

Re: Custom Buttons

По поводу кнопки "Bookmarks Folder button for Custom Buttons"
http://infocatcher.ucoz.net/js/cb/bookmarks.js

Можно ли добавить снизу меню - сепаратор и "open all in tabs" ? И как сделать ? )

Отсутствует

 

№555202-01-2013 17:24:35

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

Re: Custom Buttons

vurdalak пишет

Можно ли добавить снизу меню - сепаратор и "open all in tabs" ? И как сделать ? )

Можно.


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

Отсутствует

 

№555302-01-2013 18:14:07

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

Re: Custom Buttons

okkamas_knife пишет

но второй вариант растягивает статусбар по вертикали(даже если название кнопки пустое)

Принципиальное отличие только в

Выделить код

Код:

this.classList.remove("toolbarbutton-1");
okkamas_knife пишет

а первый иногда глючит - после рестарта кнопка не появляется в статусбаре а оказывается в окне Настройка панелей и её надо вручную заново вытаскивать.

Видимо, последствия настройки панелей инструментов.


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

Отсутствует

 

№555402-01-2013 22:56:18

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

Re: Custom Buttons

okkamas_knife
this.classList.remove("toolbarbutton-1") удаляет "toolbarbutton-1" из списка классов (атрибут "class").
Последствия только одни: перестанут применяться стили для .toolbarbutton-1.


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

Отсутствует

 

№555503-01-2013 19:52:29

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

Re: Custom Buttons

Заметил нехороший глюк на портативном FF17 и custombuttons-0.0.5.6pre3. Если переместить папку с FF на другой диск или в другую папку и нажать правой клавишей на любую CB кнопку то в контекстном меню кнопки отображаются все меню CB кнопок которые открывают свои меню по ПКМ.
:/ Но после того как FF два раза запустить и закрыть глюк пропадает и больше не появляется. И так каждый раз при перемещение. И в консоли ошибок пусто.

Скриншот проблемы
thumbuvs.jpg

Как с этим справиться?
Кто ещё такое наблюдал?

Добавлено 03-01-2013 20:04:19
Мне самому кажетса что ошибка в коде который создает меню которое открывается по ПКМ, но найти не могу:

Выделить код

Код:

var Cb = custombuttons;
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    if (nItem.label == "separator") {
        nItem = document.createElement("menuseparator");
      }
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd);
    if("type" in x.ss[i])
    mItem.setAttribute('type', x.ss[i].type);
    mItem.setAttribute('checked', x.ss[i].cek);
    mItem.setAttribute( 'autocheck', true);
   }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);

Отредактировано bunda1 (03-01-2013 20:12:35)

Отсутствует

 

№555603-01-2013 21:42:07

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

Re: Custom Buttons

okkamas_knife
Мистика однако, но рестарт не убирает этот глюк, он пропадает только если FF два раза запустить и закрыть.
И я не использую версию от Халлера а вот это Portable Firefox 15.0 (с возможностью установки браузером по умолчанию) :: RuTracker.org (ex torrents.ru)

Отсутствует

 

№555704-01-2013 11:19:04

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

Re: Custom Buttons

Dumby пишет

У меня даже не получилось
отцентровать label по вертикали в пределах кнопки.

Может я не понял о чем речь, но

вот так?

Выделить код

Код:

/* dct-style

#digital-clock-text {
        position: absolute!important;
        margin-top:3px!important;
    color: #b73520 !important;
    font-weight: bold !important;
}

dct-style */

Отсутствует

 

№555804-01-2013 17:47:29

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

Re: Custom Buttons

lokiju пишет

вот так?

О ! Здо́рово ! Благодарю.  Для маленьких шрифтов отлично помогает. Для больши́х - нет.
Но когда я это писал, думал, что хорошо-бы сделать в коде принудительное центрование
для любого размера шрифта, а теперь понял, что правильней - никаких ограничений,
пусть каждый подгоняет под себя. :)

bunda1 пишет

Кто ещё такое наблюдал?
Мне самому кажетса что ошибка в коде который создает меню которое открывается по ПКМ

Я, как ни старался, не смог увидеть такой глюк :(
Но интересно, если попробовать, например Toggle Find+3, но без этого кода (набросок),
то он будет участвовать в глюке, или не будет ?

Отредактировано Dumby (04-01-2013 18:25:55)

Отсутствует

 

№555904-01-2013 23:25:51

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

Re: Custom Buttons

okkamas_knife
Очевидно, следует обратиться к документации:
http://adblockplus.org/en/IAdblockPlus
Только там не видать проверки наличия.


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

Отсутствует

 

№556005-01-2013 01:52:12

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

Re: Custom Buttons

Dumby пишет

Но интересно, если попробовать, например Toggle Find+3, но без этого кода (набросок),
то он будет участвовать в глюке, или не будет ?

Без этого кода Toggle Find+3 не участвует в глюке, безграничное спасибо. :)
Переделаю все кнопки меню на твой код и попробую уменьшить его. :/

Отредактировано bunda1 (05-01-2013 07:00:07)

Отсутствует

 

№556105-01-2013 06:59:31

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

Re: Custom Buttons

Dumby пишет

Я, как ни старался, не смог увидеть такой глюк :(

Да ты прав. Попробовал на чистом профиле и там глюка с меню нет. Похоже у меня какая то кнопка глючит но найти будет трудно потому что кнопок и кодов на старом профиле ужасно много. :(
Кстати тут кнопка для перевода которая тоже по ПКМ открывает своё меню, подскажи пожалуйста как к этому меню приделать подменю с стандартным контекстным меню CB кнопки. И пожалуйста если не трудно посмотри код меню кнопки и функцию translateTextInPopup(str) { ... может там можно что то оптимизировать. :blush:

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ...........................................................................
this.onclick = function(e) {
     
     if ( e.button == 0 ) { // ЛКМ        
          var str = getSelect();
          if ( str ) custombuttons.getPrefs ("Translate.TextInPopup")? translateTextInPopup(str): translateTextInGoogle(str);
          if ( !str ) custombuttons.getPrefs ("Translate.PageInMicrosoft")? translatePageInMicrosoft(): ( content.location.protocol == 'https:'? translatePageInMicrosoft(): translatePageInGoogle() );    
          }
          
     if ( e.button == 1 ) translateTextInGoogle( gClipboard.read() ); // СКМ
     
     if ( e.button == 2 && e.metaKey ) gShowPopup(this); // ПКМ + Ctrl  
     
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey )  { // ПКМ  
          e.preventDefault();  
          document.getElementById("Translate-popup").showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
          }      
};                
        


// Подсказка у нопки .................................................................................................
this.tooltipText = "Translate \nЛ = Перевести страницу / выделенный текст \nС = Перевести текст из буфера обмена \nП = Меню";               
 
                   

// Проверить наличие строк в 'about:config' и создать если не существует ...................................................
if ( !custombuttons.isPref("Translate.nextPage") ) ["Translate.TextInPopup", "Translate.PageInMicrosoft", "Translate.nextPage"].forEach(function(pref) { custombuttons.setPrefs( pref, false ) });



// Создать меню кнопки   .............................................................................................
menuPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup"));
menuPopup.setAttribute("id", "Translate-popup");

// массив с данными для создание пунктов меню ....
var array = [
    { label: "Перевод текста в маленьком окошке", checked:( custombuttons.getPrefs('Translate.TextInPopup') ), onclick:"custombuttons.setPrefs('Translate.TextInPopup', !custombuttons.getPrefs('Translate.TextInPopup'))" },
    { label: "Перевод страницы  в переводчике Microsoft", checked:( custombuttons.getPrefs('Translate.PageInMicrosoft') ), onclick:"custombuttons.setPrefs('Translate.PageInMicrosoft', !custombuttons.getPrefs('Translate.PageInMicrosoft'))" },
    { label: "Перевод страницы в новой вкладке сразу справа", checked:( custombuttons.getPrefs('Translate.nextPage') ), onclick:"custombuttons.setPrefs('Translate.nextPage', !custombuttons.getPrefs('Translate.nextPage'))" }
             ];
          
// цикл по очереди добавляет из массива нужные атрибуты к пунктам меню ....     
array.forEach(function( m ) {
     var menuItem = document.createElement("menuitem");
     menuItem.setAttribute("label", m.label);
     menuItem.setAttribute("onclick", m.onclick);
     menuItem.setAttribute("type", "checkbox");
     menuItem.setAttribute("checked", m.checked);
     menuPopup.appendChild(menuItem);
});




/* Получить выделенный текст из страницы или текстового поля, 
   если текст не выделен функция отдаст 'false'  .....................................................................*/
function getSelect() {
     // выделенный текст из страницы ....
     var selection = document.commandDispatcher.focusedWindow.getSelection();

     // выделенный текст из текстового поля ....
     if ( selection.toString().length == 0 ) {
          var theBox = document.commandDispatcher.focusedElement;
         
          if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
               var startPos = theBox.selectionStart;
           var endPos = theBox.selectionEnd;
           var selection = theBox.value.substring(startPos, endPos);  
               }
          }

     return ( selection == '')? false: selection;
};



/* Переводит страницы в переводчике Google зависимости от настроек в 'about:config' 
   в новой активной вкладке сразу справа или в текущей вкладке ........................................................*/
function translatePageInGoogle() {
   var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
   if ( custombuttons.getPrefs ("Translate.nextPage") ) {        
        var x = gBrowser.mCurrentTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), x); // в новой активной вкладке
        }
   else loadURI(url); // в текущей вкладке       
};



/* Переводит в переводчике Microsoft страницы в новой активной вкладке сразу справа от текущей вкладки
   или в текущей вкладке в зависимости от настроек в 'about:config' .....................................*/
function translatePageInMicrosoft() {    
      
   // разрешить страницу для расширения NoScript ....
   if ( "noscriptUtil" in window ) {
        var autoReload = custombuttons.getPrefs("noscript.autoReload");
        if ( autoReload ) custombuttons.setPrefs("noscript.autoReload", false);
        noscriptOverlay.allowPage();
        if ( autoReload ) setTimeout(function() { custombuttons.setPrefs("noscript.autoReload", true) }, 10)
        }
        
   // перевод страницы в новой активной вкладке ....
   if ( custombuttons.getPrefs("Translate.nextPage") ) {
        var newTab = gBrowser.duplicateTab(gBrowser.mCurrentTab);
    ++gBrowser.tabContainer.selectedIndex;
        //...
    gBrowser.addEventListener("pageshow", function(event) {
       gBrowser.removeEventListener("pageshow", arguments.callee, true);
       content.document.location = "javascript:var s = content.document.createElement('script'); s.type = 'text/javascript'; s.src = 'http://labs.microsofttranslator.com/bookmarklet/default.aspx?f=js&to=ru'; content.document.body.insertBefore(s, document.body.firstChild); void(0);";
    }, true);
    }    
    
    // в текущей вкладке ....
    else content.document.location = "javascript:var s = content.document.createElement('script'); s.type = 'text/javascript'; s.src = 'http://labs.microsofttranslator.com/bookmarklet/default.aspx?f=js&to=ru'; content.document.body.insertBefore(s, document.body.firstChild); void(0);";
};



function translateTextInGoogle(str) {
   var x = gBrowser.mCurrentTab._tPos +1;
   var url = "http://translate.google.com/translate_t?hl=ru#auto|ru|" + str;
   gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), x);

};



// Перевести текст в Google переводчике в маленьком окошке ..............................................
function translateTextInPopup(str) { 
   var t = str;
   trtext = t;
   var url1 = "http://translate.google.com/translate_t?prev=hp&hl=ru&js=y&text=";
   var url2 = "&file=&sl=en&tl=ru&history_state0=#";
   var urltr=url1+trtext+url2;
   var xmlhttp;
   function gettransdata() {
    xmlhttp=GetXmlHttpObject();
    if ( xmlhttp==null ) {
         alert ("Your browser does not support AJAX!");
         return;
         };
    xmlhttp.onreadystatechange=stateChanged;
    xmlhttp.open("GET",urltr,true);
    xmlhttp.send(null);
    };
    
    function stateChanged() {
     if ( xmlhttp.readyState==4 ) {
          var trin=xmlhttp.responseText;
          var chkpoint='<span id=result_box';
          var arrayOfStrings = trin.split(chkpoint);
        
          var trouttmp=arrayOfStrings[1];
          var chkpoint='<div id=spell-place-holder';
          var arrayOfStrings = trouttmp.split(chkpoint);
        
          trouttmp1=arrayOfStrings[0];
          trouttmp2=trouttmp1.replace(/<span.+?">/g,"")
          trouttmp2=trouttmp2.replace(/<\/span>/g,"")
          trouttmp2=trouttmp2.replace(/class="long_text">/g,"")
          trouttmp2=trouttmp2.replace(/class="short_text">/g,"")
          trouttmp2=trouttmp2.replace(/class="medium_text">/g,"")
          trouttmp2=trouttmp2.replace(/<br><\/div><\/div>/g,"")
        
          var jurl='data:text/html,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html><head><title></title><meta charset="utf-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>'+trouttmp2+'</body></html>';
        
          var sizex = screen.width/2.2
          var sizey = screen.height/2.2
          var posx=screen.width-sizex;
          var posy=screen.height-sizey;
          qwertywnd = window.open(jurl, this.name, "width="+(sizex-30)+",height="+(sizey-87)+",screenX="+posx+",screenY="+posy+",status=no,scrollbars=yes,resizable=yes");
          if ( qwertywnd.focus ) { qwertywnd.focus() };
          }
     };
        
     function GetXmlHttpObject() {
     if ( window.XMLHttpRequest ) { return new XMLHttpRequest() }
     if ( window.ActiveXObject ) { return new ActiveXObject("Microsoft.XMLHTTP") }
     return null;
     };
     
     gettransdata();
     
     // закрыть окно перевода кликом на странице ....
     gBrowser.addEventListener("click", function(e) {
          qwertywnd.close();
          this.removeEventListener("click", arguments.callee, true);
     }, true);
};

Отредактировано bunda1 (05-01-2013 07:04:18)

Отсутствует

 

№556205-01-2013 11:26:34

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

Re: Custom Buttons

bunda1 пишет

как к этому меню приделать подменю с стандартным контекстным меню CB кнопки.

Вроде прицепилось :) , всякие id сам добавь, если сочтёшь нужным.

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ...........................................................................
this.onclick = function(e) {
     
     if ( e.button == 0 ) { // ЛКМ        
          var str = getSelect();
          if ( str ) custombuttons.getPrefs ("Translate.TextInPopup")? translateTextInPopup(str): translateTextInGoogle(str);
          if ( !str ) custombuttons.getPrefs ("Translate.PageInMicrosoft")? translatePageInMicrosoft(): ( content.location.protocol == 'https:'? translatePageInMicrosoft(): translatePageInGoogle() );    
          }
          
     if ( e.button == 1 ) translateTextInGoogle( gClipboard.read() ); // СКМ
     
     if ( e.button == 2 && e.metaKey ) gShowPopup(this); // ПКМ + Ctrl  
     
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey )  { // ПКМ  
          e.preventDefault();  
          menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
     }      
};                
        


// Подсказка у нопки .................................................................................................
this.tooltipText = "Translate \nЛ = Перевести страницу / выделенный текст \nС = Перевести текст из буфера обмена \nП = Меню";               
 
                   

// Проверить наличие строк в 'about:config' и создать если не существует ...................................................
if ( !custombuttons.isPref("Translate.nextPage") ) ["Translate.TextInPopup", "Translate.PageInMicrosoft", "Translate.nextPage"].forEach(function(pref) { custombuttons.setPrefs( pref, false ) });



// Создать меню кнопки   .............................................................................................
var mainPopupSet = document.getElementById("mainPopupSet");
var menuPopup = mainPopupSet.appendChild(document.createElement("menupopup"));
menuPopup.setAttribute("id", "Translate-popup");

// массив с данными для создание пунктов меню ....
var array = [
    { label: "Перевод текста в маленьком окошке", checked:( custombuttons.getPrefs('Translate.TextInPopup') ), onclick:"custombuttons.setPrefs('Translate.TextInPopup', !custombuttons.getPrefs('Translate.TextInPopup'))" },
    { label: "Перевод страницы  в переводчике Microsoft", checked:( custombuttons.getPrefs('Translate.PageInMicrosoft') ), onclick:"custombuttons.setPrefs('Translate.PageInMicrosoft', !custombuttons.getPrefs('Translate.PageInMicrosoft'))" },
    { label: "Перевод страницы в новой вкладке сразу справа", checked:( custombuttons.getPrefs('Translate.nextPage') ), onclick:"custombuttons.setPrefs('Translate.nextPage', !custombuttons.getPrefs('Translate.nextPage'))" }
];
          
// цикл по очереди добавляет из массива нужные атрибуты к пунктам меню ....     
array.forEach(function( m ) {
     var menuItem = document.createElement("menuitem");
     menuItem.setAttribute("label", m.label);
     menuItem.setAttribute("onclick", m.onclick);
     menuItem.setAttribute("type", "checkbox");
     menuItem.setAttribute("checked", m.checked);
     menuPopup.appendChild(menuItem);
});

var sep = document.createElement("menuseparator");
menuPopup.appendChild(sep);
var cbContextPopup = document.getElementById("custombuttons-contextpopup");

//------------------------------
var clon = cbContextPopup.cloneNode(true);
clon.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + this.id + "')");
var menu = document.createElement("menu");
menu.setAttribute("label", "Меню кнопки");
menu.appendChild(clon);
menuPopup.appendChild(menu);
//----------- or ----------------
/* :D
Array.slice(cbContextPopup.children).forEach(function(menuitem) {
    menuPopup.appendChild(menuitem.cloneNode(true));
});
menuPopup.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + this.id + "')");
*/
//-------------------------------


/* Получить выделенный текст из страницы или текстового поля, 
   если текст не выделен функция отдаст 'false'  .....................................................................*/
function getSelect() {
     // выделенный текст из страницы ....
     var selection = document.commandDispatcher.focusedWindow.getSelection();

     // выделенный текст из текстового поля ....
     if ( selection.toString().length == 0 ) {
          var theBox = document.commandDispatcher.focusedElement;
         
          if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
               var startPos = theBox.selectionStart;
           var endPos = theBox.selectionEnd;
           var selection = theBox.value.substring(startPos, endPos);  
               }
          }

     return ( selection == '')? false: selection;
};



/* Переводит страницы в переводчике Google зависимости от настроек в 'about:config' 
   в новой активной вкладке сразу справа или в текущей вкладке ........................................................*/
function translatePageInGoogle() {
   var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
   if ( custombuttons.getPrefs ("Translate.nextPage") ) {        
        var x = gBrowser.mCurrentTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), x); // в новой активной вкладке
        }
   else loadURI(url); // в текущей вкладке       
};



/* Переводит в переводчике Microsoft страницы в новой активной вкладке сразу справа от текущей вкладки
   или в текущей вкладке в зависимости от настроек в 'about:config' .....................................*/
function translatePageInMicrosoft() {    
      
   // разрешить страницу для расширения NoScript ....
   if ( "noscriptUtil" in window ) {
        var autoReload = custombuttons.getPrefs("noscript.autoReload");
        if ( autoReload ) custombuttons.setPrefs("noscript.autoReload", false);
        noscriptOverlay.allowPage();
        if ( autoReload ) setTimeout(function() { custombuttons.setPrefs("noscript.autoReload", true) }, 10)
        }
        
   // перевод страницы в новой активной вкладке ....
   if ( custombuttons.getPrefs("Translate.nextPage") ) {
        var newTab = gBrowser.duplicateTab(gBrowser.mCurrentTab);
    ++gBrowser.tabContainer.selectedIndex;
        //...
    gBrowser.addEventListener("pageshow", function(event) {
       gBrowser.removeEventListener("pageshow", arguments.callee, true);
       content.document.location = "javascript:var s = content.document.createElement('script'); s.type = 'text/javascript'; s.src = 'http://labs.microsofttranslator.com/bookmarklet/default.aspx?f=js&to=ru'; content.document.body.insertBefore(s, document.body.firstChild); void(0);";
    }, true);
    }    
    
    // в текущей вкладке ....
    else content.document.location = "javascript:var s = content.document.createElement('script'); s.type = 'text/javascript'; s.src = 'http://labs.microsofttranslator.com/bookmarklet/default.aspx?f=js&to=ru'; content.document.body.insertBefore(s, document.body.firstChild); void(0);";
};



function translateTextInGoogle(str) {
   var x = gBrowser.mCurrentTab._tPos +1;
   var url = "http://translate.google.com/translate_t?hl=ru#auto|ru|" + str;
   gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), x);

};



// Перевести текст в Google переводчике в маленьком окошке ..............................................
function translateTextInPopup(str) { 
   var t = str;
   trtext = t;
   var url1 = "http://translate.google.com/translate_t?prev=hp&hl=ru&js=y&text=";
   var url2 = "&file=&sl=en&tl=ru&history_state0=#";
   var urltr=url1+trtext+url2;
   var xmlhttp;
   function gettransdata() {
    xmlhttp=GetXmlHttpObject();
    if ( xmlhttp==null ) {
         alert ("Your browser does not support AJAX!");
         return;
         };
    xmlhttp.onreadystatechange=stateChanged;
    xmlhttp.open("GET",urltr,true);
    xmlhttp.send(null);
    };
    
    function stateChanged() {
     if ( xmlhttp.readyState==4 ) {
          var trin=xmlhttp.responseText;
          var chkpoint='<span id=result_box';
          var arrayOfStrings = trin.split(chkpoint);
        
          var trouttmp=arrayOfStrings[1];
          var chkpoint='<div id=spell-place-holder';
          var arrayOfStrings = trouttmp.split(chkpoint);
        
          trouttmp1=arrayOfStrings[0];
          trouttmp2=trouttmp1.replace(/<span.+?">/g,"")
          trouttmp2=trouttmp2.replace(/<\/span>/g,"")
          trouttmp2=trouttmp2.replace(/class="long_text">/g,"")
          trouttmp2=trouttmp2.replace(/class="short_text">/g,"")
          trouttmp2=trouttmp2.replace(/class="medium_text">/g,"")
          trouttmp2=trouttmp2.replace(/<br><\/div><\/div>/g,"")
        
          var jurl='data:text/html,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html><head><title></title><meta charset="utf-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>'+trouttmp2+'</body></html>';
        
          var sizex = screen.width/2.2
          var sizey = screen.height/2.2
          var posx=screen.width-sizex;
          var posy=screen.height-sizey;
          qwertywnd = window.open(jurl, this.name, "width="+(sizex-30)+",height="+(sizey-87)+",screenX="+posx+",screenY="+posy+",status=no,scrollbars=yes,resizable=yes");
          if ( qwertywnd.focus ) { qwertywnd.focus() };
          }
     };
        
     function GetXmlHttpObject() {
     if ( window.XMLHttpRequest ) { return new XMLHttpRequest() }
     if ( window.ActiveXObject ) { return new ActiveXObject("Microsoft.XMLHTTP") }
     return null;
     };
     
     gettransdata();
     
     // закрыть окно перевода кликом на странице ....
     gBrowser.addEventListener("click", function(e) {
          qwertywnd.close();
          this.removeEventListener("click", arguments.callee, true);
     }, true);
};
this.onDestroy = function() {
    mainPopupSet.removeChild(menuPopup);
}

bunda1 пишет

translateTextInPopup(str) { ... может там можно что то оптимизировать.

Как вариант:

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

Выделить код

Код:

function translateTextInPopup(text) {

    const beg = "http://translate.google.com/translate_t?prev=hp&hl=ru&js=y&text=";
    const end = "&file=&sl=en&tl=ru&history_state0=#";
    var url = beg + text + end;
    
    var req = new XMLHttpRequest();
    req.open("GET", url, true);
    req.onload = function() {

        var res = req.responseText;
        var suHTML = Cc["@mozilla.org/feed-unescapehtml;1"].getService(Ci.nsIScriptableUnescapeHTML);
        var doc = document.implementation.createHTMLDocument("");
        doc.body.appendChild(suHTML.parseFragment(res, false, null, doc.body));

        var ruHTML = doc.getElementById("result_box").innerHTML;
// or        var ruText = doc.getElementById("result_box").textContent;
        var dataURL = 'data:text/html,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html><head><meta charset="utf-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>';
        dataURL += ruHTML + '</body></html>';

        var sizeX = screen.width/2.2
        var sizeY = screen.height/2.2
        var posX=screen.width-sizeX;
        var posY=screen.height-sizeY;
        var win = window.open(dataURL, "", "width="+(sizeX-30)+",height="+(sizeY-87)+",screenX="+posX+",screenY="+posY+",status=no,scrollbars=yes,resizable=yes");
        win.focus();
    }
    req.channel.loadFlags |= req.channel.LOAD_FROM_CACHE; // if possible
    req.send(null);
}

Отредактировано Dumby (05-01-2013 15:28:15)

Отсутствует

 

№556306-01-2013 02:40:34

LBra
Участник
 
Группа: Members
Зарегистрирован: 20-10-2011
Сообщений: 40

Re: Custom Buttons

Lex1 пишет

google-translate
Версия google-translate.js в виде кнопки. Переводит выделенный текст (без особых ограничений на размер) или всю страницу на русский. Также добавляет пункты меню: «Перевести на русский» и «Перевести на английский».

Установил эту кнопку. Она постоянно отваливается, иконка кнопки становится неактивной-полуактивной... Кроме того пункт контекстного меню «Перевести на английский» добавляется не всегда, а по непонятному сценарию.
Автор, посмотри, пожалуйста.

Отсутствует

 

№556408-01-2013 19:39:17

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

Re: Custom Buttons

Dumby
Спасибо за код для меню и особенно спасибо за код перевода, теперь код выглядит красиво.
Другая просьба :blush:
Как убрать заголовок

Переводчика Google
thumbymi.jpg

Он для меня без полезен и только место занимает, я пытался удалить его Css кодом но остаются пустое поле на странице, такого же размера.

Отсутствует

 

№556508-01-2013 20:38:44

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

Re: Custom Buttons

okkamas_knife пишет

а каким способом удалял?
в цсс насколько знаю есть два варианта один просто удаляет другой схлопывает
приведи здесь цсс правила что используешь для удаления

Код не сохранил. Но мысль интересная, надо проверить.
Хотя мне кажется что Css тут не поможет.

Отредактировано bunda1 (08-01-2013 20:39:35)

Отсутствует

 

№556608-01-2013 20:50:17

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

Re: Custom Buttons

okkamas_knife
Всегда скрывает или только на конкретной странице?

Отсутствует

 

№556709-01-2013 00:27:50

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

Re: Custom Buttons

okkamas_knife
Пробовал с адблок + элемент хайдинг хелпер + w но что то не получается, остается пустое поле.

Отсутствует

 

№556809-01-2013 13:24:25

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

Re: Custom Buttons

bunda1
Search and open +4  http://forum.mozilla-russia.org/viewtopic.php?pid=463808#p463808
Можно сделать открытие вкладок активными, привык просто, щелкнул, сразу открылось. Я так понимаю поиск из адресной строки одним левым кликом не получится, первый клик копирует в буфер, второй открывает, или?

Может кто знает как можно перенести кнопку в urlbar, расширения типа url-addon-bar это как-то делают, но не хочется устанавливать лишнее.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№556909-01-2013 15:52:04

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

Re: Custom Buttons

bunda1 пишет

код перевода, теперь код выглядит красиво.

Да, выглядит получше, но

скрытый текст
меня «преследует кошмар», что при каждом вызове функции создаётся новый документ,
наполняется содержимым, и каждый из них никуда не исчезает,
а продолжает висеть в памяти, занимая её. Может лучше так:

Выделить код

Код:

var suHTML = Cc["@mozilla.org/feed-unescapehtml;1"].getService(Ci.nsIScriptableUnescapeHTML);
var doc = document.implementation.createHTMLDocument("");

const beg = "http://translate.google.com/translate_t?prev=hp&hl=ru&js=y&text=";
const end = "&file=&sl=en&tl=ru&history_state0=#";
const dataURLbeg = 'data:text/html,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html><head><meta charset="utf-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>';
const dataURLend = '</body></html>';

function translateTextInPopup(text) {

    var url = beg + text + end;
    var req = new XMLHttpRequest();
    req.open("GET", url, true);
    req.onload = function() {

        var res = req.responseText;
        doc.body.textContent = "";
        doc.body.appendChild(suHTML.parseFragment(res, false, null, doc.body));

        var ruHTML = doc.getElementById("result_box").innerHTML;
// or        var ruText = doc.getElementById("result_box").textContent;
        var dataURL = dataURLbeg + ruHTML + dataURLend;

        var sizeX = screen.width/2.2
        var sizeY = screen.height/2.2
        var posX=screen.width-sizeX;
        var posY=screen.height-sizeY;
        var win = window.open(dataURL, "", "width="+(sizeX-30)+",height="+(sizeY-87)+",screenX="+posX+",screenY="+posY+",status=no,scrollbars=yes,resizable=yes");
        win.focus();
    }
    req.channel.loadFlags |= req.channel.LOAD_FROM_CACHE; // if possible
    req.send(null);
}

bunda1 пишет

пытался удалить его Css кодом но остаются пустое поле на странице, такого же размера.

Наверно я не понял вопрос, но такой стиль убрал то,
что на скриншоте так, как если-бы этого и небыло.

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

Выделить код

Код:

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document domain("translate.google.com") {
    #gb, #gt-appbar { display: none !important }
}

Отсутствует

 

№557009-01-2013 18:35:37

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 479
UA: Firefox 18.0

Re: Custom Buttons

bunda1 попробуй переделать вот этот скрипт:

Выделить код

Код:

javascript:{d=document;b=d.body;o=d.createElement('scri'+'pt');o.setAttribute('src','http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit');o.setAttribute('type','text/javascript');b.appendChild(o);v=b.insertBefore(d.createElement('div'),b.firstChild);v.id='google_translate_element';v.style.display='none';p=d.createElement('scri'+'pt');p.text='function%20googleTranslateElementInit(){new%20google.translate.TranslateElement({pageLanguage:%22%22},%22google_translate_element%22);}';p.setAttribute('type','text/javascript');b.appendChild(p);}void%200

Его особенности:
отсутствует верхний фрейм
нет автоматического перевода
если использовать в твоей кнопке как открыть в новой вкладке, то вкладку, с которой переводилась не закрывается
Далее:
если использовать твой код открытия в новой вкладке происходит следующее:
если вкладка, которую надо перевести не последняя, то дублируется и переводится последняя вкладка.
Чтобы этого не происходило, я использую код, который нашел в этой ветке:
        var orgTab = gBrowser.mCurrentTab;
        var newTab = gBrowser.duplicateTab(orgTab);
        gBrowser.moveTabTo(newTab, ++orgTab._tPos);
        gBrowser.selectedTab = newTab;

Отсутствует

 

№557109-01-2013 20:33:20

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

Re: Custom Buttons

okkamas_knife пишет

попробуй это правило добавить в адблок
translate.google.ru###gb

Спасибо для переводчика текста отлично работает но при переводе страницы в Google переводчике остаются пустое поле. :(

Добавлено 09-01-2013 20:40:30

Dumby пишет

Наверно я не понял вопрос, но такой стиль убрал то,
что на скриншоте так, как если-бы этого и небыло.

Наверно я не правильно описал проблему, извиняюсь :blush:
Речь о переводе страницы в Google переводчике.

Твой стиль там оставляет пустое поле:
thumbzjw.jpg

Отредактировано bunda1 (09-01-2013 20:43:12)

Отсутствует

 

№557209-01-2013 21:11:18

Pony_Smile_Pack
Участник
 
Группа: Members
Зарегистрирован: 13-01-2012
Сообщений: 1144
UA: Firefox 17.0

Re: Custom Buttons

Речь о переводе страницы в Google переводчике

.
bunda1

A simple script that removes upper bar from translated sites by Google Translator (e.g. runned by Google search or translating bookmarklet)

скрытый текст
GPj6k.png
p2AJm.png

Google Translator without upper bar for Greasemonkey


Правило для адблока:
translate.google.com.ru##.jfk-butterBar.jfk-butterBar-info.jfk-butterBar-shown

Отредактировано Pony_Smile_Pack (09-01-2013 21:12:40)

Отсутствует

 

№557309-01-2013 21:37:23

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

Re: Custom Buttons

villa7 пишет

bunda1
Search and open +4 
Можно сделать открытие вкладок активными, привык просто, щелкнул, сразу открылось. Я так понимаю поиск из адресной строки одним левым кликом не получится, первый клик копирует в буфер, второй открывает, или?

Мне кажется Search and open +4 не работает на FF19.

Я немного не понял что ты просишь но пробуй это:

Выделить код

Код:

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%3ESearch%20and%20open%20+%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%252BTzvb2%252B%252Fne4dFJeBw0egA%252FfAJAfAA8ewBBegAAAAD%252B%252FPtft98Mp%252BwWsfAVsvEbs%252FQeqvF8xO7%252F%252F%252F63yqkxdgM7gwE%252FggM%252BfQA%252BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%252FQvq%252Bfz%252Bf%252F%252B%252B%252FZKhR05hgBBhQI8hgBAgAI9ewD0%252B%252Fg3pswAtO8Cxf4Kw%252FsJvvYAqupKsNv%252B%252Fv7%252F%252FP5VkSU0iQA7jQA9hgBDgQU%252BfQH%252F%252Ff%252FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%252Fv%252Fg6Nc%252Fhg05kAA8jAM9iQI%252BhQA%252BgQDQu6b97uv%252F%252F%252F7V8Pqw3eiWz97q8%252Ff%252F%252F%252F%252F7%252FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%252F%252B%252F%252F39%252F%252F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%252F%252B%252Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%252BooT8%252Fv%252F7%252F%252F%252FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%252BhwGfXifWvqz%252B%252Ff%252F58u%252Fev6Dt4tr%252B%252F%252F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%252FkwBChwHt4dv%252F%252F%252F728ei1bCi7VAC5XQ7kz7n%252F%252F%252F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%252F%252F%252F9%252F%252F%252FSqYK5UwDKZAS9WALIkFn%252B%252F%252F3%252F%252BP8oKccGGcIRJrERILYFEMwAAuEAAdX%252F%252Ff7%252F%252FP%252B%252BfDvGXQLIZgLEWgLOjlf7%252F%252F%252F%252F%252F%252F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%252F%252F%252F%252F7%252B%252Fu2bCTIYwDPZgDBWQDSr4P%252F%252Fv%252F%252F%252FP5GRuABAPkAA%252FwBAfkDAPAAAesAAN%252F%252F%252B%252Fz%252F%252F%252F64g1C5VwDMYwK8Yg7y5tz8%252Fv%252FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%252F%252FPvi28ymXyChTATRrIb8%252F%252F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%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%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20//%20%u041B%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20e.originalTarget.nodeName%20%21%3D%20%22xul%3Atoolbarbutton%22%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20str%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21str%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28str%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20false%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%20openSelectedLinks%28%29%20%7D%3B%20//%20%u0421%u041A%u041C%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%26%26%20e.button%20%3D%3D%202%20%29%20%20%7B%20//%20%u041F%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20text%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21text%20%29%20gBrowser.loadOneTab%28%20text%2C%20null%2C%20null%2C%20null%2C%20false%2C%20false%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20...................................................%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0Avar%20_this%20%3D%20this%3B%0A%0A%0A%0A//%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0438%u043B%u0438%20%u0432%u0441%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20................................%0Afunction%20openSelectedLinks%28%29%20%7B%0A%20%20%20%20%20warn_if_opening_more_than%20%3D%2016%3B%0A%20%20%20%20%20var%20browser%20%3D%20getBrowser%28%29%3B%0A%20%20%20%20%20var%20n_to_open%2Cdl%2Cdll%2Ci%3B%0A%20%20%20%20%20%0A%20%20%20%20%20function%20linkIsSafe%28u%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28u.substr%280%2C7%29%3D%3D%27mailto%3A%27%20%29%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28u.substr%280%2C11%29%3D%3D%27javascript%3A%27%29%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%7D%0A%20%20%20%20%20n_to_open%20%3D%200%3B%0A%20%20%20%20%20var%20dl%20%3D%20window._content.document.links%3B%0A%20%20%20%20%20dll%20%3D%20dl.length%3B%0A%20%20%20%20%20if%20%28%20window._content.getSelection%20%26%26%20window._content.getSelection%28%29.containsNode%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20for%20%28%20i%3D0%3B%20i%20%3C%20dll%3B%20++i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28window._content.getSelection%28%29.containsNode%28dl%5Bi%5D%2C%20true%29%20%26%26%20linkIsSafe%28dl%5Bi%5D.href%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20++n_to_open%3B%0A%20%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%20if%20%28%20n_to_open%20%26%26%20%28%20n_to_open%20%3C%3D%20warn_if_opening_more_than%20%7C%7C%20confirm%28%27%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%27%20+%20n_to_open%20+%20%27%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%3F%27%29%20%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20for%20%28%20i%3D0%3B%20i%3Cdll%3B%20++i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20window._content.getSelection%28%29.containsNode%28dl%5Bi%5D%2C%20true%29%20%26%26%20linkIsSafe%28dl%5Bi%5D.href%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20browser.addTab%28dl%5Bi%5D.href%29%3B%0A%20%20%20%20%20%20%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%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%0Aif%20%28%20%21n_to_open%29%20%7B%20%0A%20%20%20%20%20for%20%28%20i%20%3D%200%3B%20i%20%3C%20dll%3B%20++i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20linkIsSafe%28dl%5Bi%5D.href%29%20%29%20++n_to_open%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20if%20%28%20%21n_to_open%29%20alert%20%28%27no%20links%27%20%29%0A%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20confirm%28%27%u041D%u0435%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A.%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%27%20+%20n_to_open%20+%20%27%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%3F%27%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20i%20%3D%200%3B%20i%20%3C%20dll%3B%20++i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20linkIsSafe%28dl%5Bi%5D.href%29%20%29%20%7B%20browser.addTab%28%20dl%5Bi%5D.href%20%29%20%7D%3B%0A%20%20%20%20%20%20%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%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u0441%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0430%u043C%u0438%20................................................%0Afunction%20searchService%28%29%20%7B%0A%20%20%20%20%20return%20Components.classes%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Components.interfaces.nsIBrowserSearchService%29%3B%0A%7D%0A%0Athis.selectEngine%20%3D%20function%28aNode%2C%20aEvent%29%20%7B%0A%20%20%20%20%20var%20engine%20%3D%20aEvent.target.engine%3B%0A%20%20%20%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20%20%20%20ss.currentEngine%20%3D%20ss.getEngineByName%28engine.name%29%3B%0A%20%20%20%20%20aNode.engine%20%3D%20engine%3B%0A%20%20%20%20%20aNode.image%20%3D%20aEvent.target.getAttribute%28%22src%22%29%3B%0A%7D%0A%0Athis.populateMenu%20%3D%20function%28aNode%29%20%7B%0A%20%20%20%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20%20%20%20var%20engines%20%3D%20ss.getVisibleEngines%28%7B%20%7D%29%3B%0A%20%20%20%20%20const%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20%20%20%20while%28%20aNode.firstChild%20%26%26%20aNode.firstChild.localName%20%21%3D%20%22menuseparator%22%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20aNode.removeChild%28%20aNode.firstChild%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20for%20%28%20var%20i%20%3D%20engines.length%20-%201%3B%20i%20%3E%3D%200%3B%20i--%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20mi%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20mi.id%20%3D%20%22cb-search-%22%20+%20engines%5Bi%5D.name%3B%0A%20%20%20%20%20%20%20%20%20%20%20mi.className%20%3D%20%22menuitem-iconic%20searchbar-engine-menuitem%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20mi.setAttribute%28%22label%22%2C%20engines%5Bi%5D.name%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20engines%5Bi%5D.iconURI%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi.setAttribute%28%22src%22%2C%20engines%5Bi%5D.iconURI.spec%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi.engine%20%3D%20engines%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20mi.engine%20%3D%3D%20ss.currentEngine%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi.style.fontWeight%20%3D%20%22bold%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi.setAttribute%28%22onclick%22%2C%20%20%22event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%20parentNode.parentNode.selectEngine%28parentNode.parentNode%2C%20event%29%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20aNode.insertBefore%28mi%2C%20aNode.firstChild%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%0A%0Athis.currentEngine%20%3D%20searchService%28%29.currentEngine%3B%0Avar%20ss%20%3D%20searchService%28%29%3B%0Athis.engine%20%3D%20ss.currentEngine%3B%0Athis.image%20%3D%20this.engine.iconURI.spec%3B%0A%0Avar%20mp%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Amp.setAttribute%28%22onpopupshowing%22%2C%20%22parentNode.populateMenu%28this%29%22%29%3B%0Amp.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0Avar%20managerSeparator%20%3D%20mp.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0AmanagerSeparator.id%20%3D%20%22cb-searchbutton-separator%22%0Avar%20managerItem%20%3D%20mp.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0AmanagerItem.setAttribute%28%22label%22%2C%20%22Manage%20Search%20Engines...%22%29%3B%0AmanagerItem.setAttribute%28%22oncommand%22%2C%20%22openDialog%28%27chrome%3A//browser/content/search/engineManager.xul%27%2C%20%22%20+%20%22%27engineManager%27%2C%20%27chrome%2C%20dialog%3Dno%27%29%22%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%0A%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%20%0A%20%20%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..................%20*/%0Afunction%20getSelect%28%29%20%7B%0A%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%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%0A%0A%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%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20%7B%0A%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%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%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%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%7D%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20//%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20//%20%u0443%u0431%u0438%u0440%u0430%u0435%u043C%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%u0441%20%u043E%u0431%u043E%u0438%u0445%20%u043A%u043E%u043D%u0446%u043E%u0432%20%u0442%u0435%u043A%u0441%u0442%u0430%20....%0A%20%20if%20%28%20selection%20%21%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20selection.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%20%20%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%29%20%7B%20%0A%20%20%20%20%20%20%20var%20str%20%3D%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%0A%20%20%20%20%20%20%20alertsService.showAlertNotification%28_this.image%2C%20_this.label%2C%20str%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%0A%0A%0Athis.tooltipText%20%3D%20%22Search%20and%20open%20%5Cn%u041B%3A%20%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430/%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%5Cn%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430/%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%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%5Bnull%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Добавлено 09-01-2013 21:37:33

villa7 пишет

Может кто знает как можно перенести кнопку в urlbar, расширения типа url-addon-bar это как-то делают, но не хочется устанавливать лишнее.

Пример переносит кнопку раширения noscript из панели дополнений в urlbar.

Выделить код

Код:

var urlbar = document.getElementById("urlbar-icons");
var noscript = document.getElementById("noscript-tbb");
urlbar.insertBefore(noscript, urlbar.lastChild);

Добавлено 09-01-2013 21:58:57

Pony_Smile_Pack пишет

bunda1
A simple script that removes upper bar from translated sites by Google Translator (e.g. runned by Google search or translating bookmarklet)
Google Translator without upper bar for Greasemonkey

Вот спасибо, я не знал что такой скрипт есть.
Спасибо okkamas_knife, Pony_Smile_Pack и Dumby. Вопрос снимается.
Хотя удалять лучше через Css.

Отредактировано bunda1 (09-01-2013 21:58:57)

Отсутствует

 

№557410-01-2013 01:05:16

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 21.0

Re: Custom Buttons

okkamas_knife пишет

Обнаружены глюки СВ в СМ 2.15

А если custombuttons-0.0.5.6pre3-20111120 ?

Отсутствует

 

№557510-01-2013 01:36:04

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

Re: Custom Buttons

bunda1

bunda1 пишет

Я немного не понял что ты просишь но пробуй это:

Да, в этой кнопке открывает в активных вкладках, а не в фоновых, но пропал самый нужный мне пункт, поиск из адресной строки, остальные пункты мне и не нужны, потому как привык делать это другими средствами. Использовал Search and open +4 исключительно как замену панели поиска, типа расширения Omnibar. Мне нужна кнопка с поисковиками ищущая набранный в ручную текст из адресной строки, и больше ничего. Код на перемещение кнопки в urlbar сработал, спасибо.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

Board footer

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