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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№207611-10-2010 13:34:10

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

Re: Custom Buttons

Mr. Di

About:config
middlemouse.paste  – вставка текста из буфера обмена кликом средней кнопки мыши. Значения:
TRUE – Разрешить
FALSE - Запретить

Отредактировано bunda1 (11-10-2010 13:35:32)

Отсутствует

 

№207711-10-2010 17:39:06

AbyssMoon
Участник
 
Группа: Members
Зарегистрирован: 05-10-2010
Сообщений: 14
UA: Firefox 3.6

Re: Custom Buttons

Anton
Доброго времени суток.
Еще раз спасибо вам, вы мне очень помогли с кодом, хотел задать еще один маленький вопрос...

Вот код:

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

Выделить код

Код:

var pathToDirectory = "~/web"; // "/home/labirint/web

var Cc = Components. classes;
var Ci = Components. interfaces;
var Cr = Components. results;

function getDirectory ()
{
    var dir = Cc ["@mozilla.org/file/local;1"].
          createInstance (Ci. nsILocalFile);
    dir. initWithPath (pathToDirectory);
    return dir;
}

function getText (uri)
{
    var header = messenger. messageServiceFromURI (uri).
    messageURIToMsgHdr (uri);
    var charset = header. Charset || "utf-8";
    var subject = header. mime2DecodedSubject;
    var filename = GenerateValidFilename (messenger. messageServiceFromURI (uri).
              messageURIToMsgHdr (uri). mime2DecodedAuthor + " - " + subject, ".html");
    var messageService = messenger. messageServiceFromURI (uri);
    
    var file = dir. clone ();
    file. append (filename);
    if (file. exists ())
        file. createUnique (Ci. nsIFile. NORMAL_FILE_TYPE, 0664);
    
    var ssl =
    {
        foStream: null,
        
        QueryInterface: function (iid)
        {
            if (iid. equals (Ci. nsISupports) || iid. equals (Ci. nsIStreamListener))
                return this;
            throw Cr. NS_ERROR_NO_INTERFACE;
        },
        
        onStartRequest: function (request, context)
        {
            this. foStream = Cc ["@mozilla.org/network/file-output-stream;1"]. createInstance (Ci. nsIFileOutputStream);
            var flags = 0x02 | 0x08 | 0x20;
            this. foStream. init (file, flags, 0664, 0);
        },
        
        onStopRequest: function (request, context, status)
        {
            this. foStream. close ();
        },
        
        onDataAvailable: function (request, context, inputStream, offset, count)
        {
            var sis = Cc ["@mozilla.org/scriptableinputstream;1"]. createInstance(Ci. nsIScriptableInputStream);
            sis. init (inputStream);
            sis. available ();
            while (sis. available ())
                this. foStream. write (sis. read (count), count);
        }
    };

        var chanURI = messageService. streamMessage (uri, null, {}, null, false, null);
        var ios = Cc ["@mozilla.org/network/io-service;1"]. getService (Ci. nsIIOService);
        var chan = ios. newChannelFromURI (chanURI);
        chan. contentType = "message/rfc822";
        var streamConverter = Cc ["@mozilla.org/streamconv;1?from=message/rfc822&to=application/vnd.mozilla.xul+xml"]. createInstance (Ci. nsIStreamConverter);
        streamConverter. asyncConvertData ("message/rfc822", "application/vnd.mozilla.xul+xml", ssl, chan);
        chan. asyncOpen (streamConverter, null);
}

var dir = getDirectory ();
if (!dir)
    return;

var messageArray = gFolderDisplay.selectedMessageUris;
for (var i = 0; i < messageArray. length; i++)
    getText (messageArray [i], dir);

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

Отсутствует

 

№207811-10-2010 22:07:21

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Mr. Di

Выделить код

Код:

this. checked = !this. checked;

Инициализация

Выделить код

Код:

var eventHandler =
{
    button: null,

    get disabled ()
    {
    return !this. button. checked;
    },
    
    get urlbar ()
    {
    return document. getElementById ("urlbar");
    },
    
    handleEvent: function (event)
    {
    if ((event. target. tagName == "TEXTAREA") ||
        (event. target. tagName == "INPUT") ||
        this. disabled)
        return;
    this [event. type] (event);
    },

    keypress: function (event)
    {
    if ((event. which == 32) ||
        (event. which == 8) ||
        (event. which == 0) ||
        event. ctrlKey || event. altKey)
        return;
    this. urlbar. focus ();
    this. urlbar. value += String. fromCharCode (event. which);
    },

    click: function (event)
    {
    //this. urlbar. focus ();
    if (event. button == 0)
        this. urlbar. value = "";
    if (event. button == 1)
    {
        event. preventDefault ();
        this. urlbar. value = custombuttonsUtils. gClipboard. read ();
    }
    }
};
eventHandler. button = this;

this. checked = true;

document. getElementById ("appcontent"). addEventListener ("keypress", eventHandler, true);
document. getElementById ("appcontent"). addEventListener ("click", eventHandler, true);

AbyssMoon

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

Выделить код

Код:

if (file. exists ())
        file. createUnique (Ci. nsIFile. DIRECTORY_TYPE, 0755);
    else
        file. create (Ci. nsIFile. DIRECTORY_TYPE, 0755);
    file. append (filename);
    if (file. exists ())
        file. createUnique (Ci. nsIFile. NORMAL_FILE_TYPE, 0664);
    else
        file. create (Ci. nsIFile. NORMAL_FILE_TYPE, 0664);


вместо

Выделить код

Код:

if (file. exists ())
        file. createUnique (Ci. nsIFile. NORMAL_FILE_TYPE, 0664);

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№207912-10-2010 01:28:55

Mr. Di
Участник
 
Группа: Members
Зарегистрирован: 14-07-2007
Сообщений: 27
UA: Firefox 3.6

Re: Custom Buttons

bunda1 пишет

Mr. Di

About:config
middlemouse.paste  – вставка текста из буфера обмена кликом средней кнопки мыши. Значения:
TRUE – Разрешить
FALSE - Запретить

Спасибо, но мне немного не подходит - нет замены выделенному тексту:( , а это неудобно для меня.

Anton пишет

Mr. Di
Код:

this. checked = !this. checked;

Инициализация

Супер, огромнейшее спасибо за Ваш ТРУД и потраченное время!  Заработало стирание адресной по ЛКМ и автофокус работает, но со средней кнопкой мыши что-то не то, возможно я снова не так изложил в посте свою речь как нужно. Теперь при нажатии два раза средней копки мыши на любом месте интернет страницы в том числе и текстовых полях, текст из буфера обмена вставляется в адресную строку, и при нажатии средней кнопки мыши один раз на любой ссылке на странице текст из буфера вставляется в адресную строку.
1. Хотелось бы чтобы текст из буфера сред.кнопкой вставлялся именно в то текстовое поле в котором работаю и чтобы вставка заменяла выделенный мною в поле текст, а нажатие средней кн. по ссылке (как у меня и настроено было раньше) просто открывало ссылку в новой вкладке.
2. А также если можно при нажатии сред копкой мыши по самой "кастом кнопке" текст из буфера вставлялся бы в адресную строку и после автоматом нажималась клавиша Enter клавиатуры (я имею ввиду (сорри за непрофессионализм в изложении сути ) наступал тот же эффект как и при нажатии клавиши Enter клавиатуры).
Помогите еще разок, пожалуйста.

Отредактировано Mr. Di (12-10-2010 01:39:45)

Отсутствует

 

№208012-10-2010 13:54:44

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

Re: Custom Buttons

Anton

У меня тоже большая просьба,
вот ниже /*Initialization Code*/ кнопки которие дает возможность переключать текущий поисковик, при нажатие на dropmarker рядом с кнопкой появляется выпадающие меню с поисковиками где можно выбрать текущий поисковик.  Иконка кнопки отображает текущий поисковик при изменении которого соответственно меняется иконка кнопки.
Пожалуйста, переделай  этот код так, чтобы этот dropmarker у кнопки пропал, а выпадающие меню появлялась при нажатии на кнопку(лкм).

скрытый текст
Инициализация:

Выделить код

Код:

function searchService() {
  return Components.classes["@mozilla.org/browser/search-service;1"]
          .getService(Components.interfaces.nsIBrowserSearchService);
}

 this.selectEngine = function(aNode, aEvent) {
  var engine = aEvent.target.engine;
  var ss = searchService();
  ss.currentEngine = ss.getEngineByName(engine.name);
  aNode.engine = engine;
  aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
  var ss = searchService();
  var engines = ss.getVisibleEngines({ });
  const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

  while(aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
    aNode.removeChild(aNode.firstChild);
  }

  for(var i = engines.length - 1; i >= 0; i--) {
    var mi = document.createElementNS(kXULNS, "menuitem");
    mi.id = "cb-search-" + engines[i].name;
    mi.className = "menuitem-iconic searchbar-engine-menuitem";
    mi.setAttribute("label", engines[i].name);
    if(engines[i].iconURI)
      mi.setAttribute("src", engines[i].iconURI.spec);
    mi.engine = engines[i];
    if(mi.engine == ss.currentEngine)
      mi.style.fontWeight = "bold";
    mi.setAttribute("onclick",
      "parentNode.parentNode.selectEngine(parentNode.parentNode, event)");
    aNode.insertBefore(mi, aNode.firstChild);
  }
}

this.currentEngine = searchService().currentEngine;

var ss = searchService();
this.engine = ss.currentEngine;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Manage Search Engines...");
managerItem.setAttribute("oncommand",
  "openDialog('chrome://browser/content/search/engineManager.xul', " +
  "'engineManager', 'chrome, dialog=no')");

this.type = "menu-button";

Отсутствует

 

№208112-10-2010 22:39:29

imyax
пользователь FF c 2010года
 
Группа: Members
Откуда: Сейчас здесь
Зарегистрирован: 13-04-2010
Сообщений: 209
UA: IE 8.0

Re: Custom Buttons

bunda1

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

Выделить код

Код:

/*Initialization Code*/
function searchService() {
  return Components.classes["@mozilla.org/browser/search-service;1"]
          .getService(Components.interfaces.nsIBrowserSearchService);
}

 this.selectEngine = function(aNode, aEvent) {
  var engine = aEvent.target.engine;
  var ss = searchService();
  ss.currentEngine = ss.getEngineByName(engine.name);
  aNode.engine = engine;
  aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
  var ss = searchService();
  var engines = ss.getVisibleEngines({ });
  const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

  while(aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
    aNode.removeChild(aNode.firstChild);
  }

  for(var i = engines.length - 1; i >= 0; i--) {
    var mi = document.createElementNS(kXULNS, "menuitem");
    mi.id = "cb-search-" + engines[i].name;
    mi.className = "menuitem-iconic searchbar-engine-menuitem";
    mi.setAttribute("label", engines[i].name);
    if(engines[i].iconURI)
      mi.setAttribute("src", engines[i].iconURI.spec);
    mi.engine = engines[i];
    if(mi.engine == ss.currentEngine)
      mi.style.fontWeight = "bold";
    mi.setAttribute("onclick",
      "parentNode.parentNode.selectEngine(parentNode.parentNode, event)");
    aNode.insertBefore(mi, aNode.firstChild);
  }
}

this.currentEngine = searchService().currentEngine;

var ss = searchService();
this.engine = ss.currentEngine;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Manage Search Engines...");
managerItem.setAttribute("oncommand",
  "openDialog('chrome://browser/content/search/engineManager.xul', " +
  "'engineManager', 'chrome, dialog=no')");

var that = this;
this.hideDropMarker = function() {
  var dropMarker = document.getAnonymousElementByAttribute(that, "class", "toolbarbutton-menu-dropmarker");
  if (dropMarker) {
    dropMarker.setAttribute("hidden", "true");
  } else{
    setTimeout(that.hideDropMarker, 10);
  } 
}
this.hideDropMarker();

this.type="menu";

У меня работает

Отредактировано imyax (12-10-2010 22:40:21)

Отсутствует

 

№208213-10-2010 10:32:01

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

Re: Custom Buttons

imyax

Спасибо большое,у меня тоже работает.

Отсутствует

 

№208313-10-2010 15:33:19

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Mr. Di

1. Хотелось бы чтобы текст из буфера сред.кнопкой вставлялся именно в то текстовое поле в котором работаю и чтобы вставка заменяла выделенный мною в поле текст, а нажатие средней кн. по ссылке (как у меня и настроено было раньше) просто открывало ссылку в новой вкладке.
2. А также если можно при нажатии сред копкой мыши по самой "кастом кнопке" текст из буфера вставлялся бы в адресную строку и после автоматом нажималась клавиша Enter клавиатуры (я имею ввиду (сорри за непрофессионализм в изложении сути ) наступал тот же эффект как и при нажатии клавиши Enter клавиатуры).

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

Выделить код

Код:

var eventHandler =
{
    button: null,

    get disabled ()
    {
    return !this. button. checked;
    },
    
    get urlbar ()
    {
    return document. getElementById ("urlbar");
    },
    
    handleEvent: function (event)
    {
        if (this. disabled)
            return;
    this [event. type] (event);
    },

    keypress: function (event)
    {
        if ((event. target. tagName == "TEXTAREA") ||
        (event. target. tagName == "INPUT") ||
        (event. which == 32) ||
        (event. which == 8) ||
        (event. which == 0) ||
        event. ctrlKey || event. altKey)
        return;
    this. urlbar. focus ();
    this. urlbar. value += String. fromCharCode (event. which);
    },

    click: function (event)
    {
    if ((event. button == 0) &&
        (event. target. tagName != "TEXTAREA") &&
        (event. target. tagName != "INPUT"))
        this. urlbar. value = "";
    if (event. button == 1)
        goDoCommand ("cmd_paste");
    }
};
eventHandler. button = this;

this. checked = true;

document. getElementById ("appcontent"). addEventListener ("keypress", eventHandler, true);
document. getElementById ("appcontent"). addEventListener ("click", eventHandler, true);
//addEventListener ("keypress", eventHandler, true, document. getElementById ("appcontent"));
//addEventListener ("click", eventHandler, true, document. getElementById ("appcontent"));

this. onclick = function (event)
{
    if (event. button == 1)
    {
            document. getElementById ("urlbar"). value = custombuttonsUtils. gClipboard. read ();
            document. getElementById ("urlbar"). handleCommand ();
        }
}

Автоматическую прокрутку (Инструменты → Настройки → Дополнительные → Общие → Использовать автоматическую прокрутку) надо, естественно отключить.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№208414-10-2010 00:45:26

Mr. Di
Участник
 
Группа: Members
Зарегистрирован: 14-07-2007
Сообщений: 27
UA: Firefox 3.6

Re: Custom Buttons

Anton пишет

Mr. Di

    1. Хотелось бы чтобы текст из буфера сред.кнопкой вставлялся именно в то текстовое поле в котором работаю и чтобы вставка заменяла выделенный мною в поле текст, а нажатие средней кн. по ссылке (как у меня и настроено было раньше) просто открывало ссылку в новой вкладке.
    2. А также если можно при нажатии сред копкой мыши по самой "кастом кнопке" текст из буфера вставлялся бы в адресную строку и после автоматом нажималась клавиша Enter клавиатуры (я имею ввиду (сорри за непрофессионализм в изложении сути ) наступал тот же эффект как и при нажатии клавиши Enter клавиатуры).

скрытый текст
Код:

var eventHandler =
{
    button: null,....


Автоматическую прокрутку (Инструменты → Настройки → Дополнительные → Общие → Использовать автоматическую прокрутку) надо, естественно отключить.

Спасибо, Вы воплощаете мечты в реальность! Но есть несколько моментов для огранения алмаза, поправьте код, пожалуйста:

1. Не работает вставка текста средней кнопкой мыши в адресной строке (в полях на интернет странице вставка работает замечательно, огромное спасибо) - сделайте, пожалуйста;
2. Я пользуюсь расширением "Omnibar", сейчас вы сделали, как я и просил, вставку в адресную строку текста из буфера и автоматический переход, при нажатии средней кнопкой мыши по самой "кастом кнопке" - при вставке ссылки все работает - переходит по вставленной ссылке, а если я таким образом вставляю просто текст, то ищет он его всегда в Яндексе (как в поиске по умолчанию русскоязычной Лисы через адресную строку без "Omnibara"), а хотелось бы, чтобы искал в текущем (выбранном) поисковике;
3. В некоторых текстовых полях текст набирать не получается срабатывает автофокус на адресную строку, такое я заметил в некоторых текстовых полях на Gmail, а также в about:config.

Еще раз спасибо Вам за помощь!

Отсутствует

 

№208515-10-2010 18:44:24

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Mr. Di

1. Не работает вставка текста средней кнопкой мыши в адресной строке (в полях на интернет странице вставка работает замечательно, огромное спасибо) - сделайте, пожалуйста;

3. В некоторых текстовых полях текст набирать не получается срабатывает автофокус на адресную строку, такое я заметил в некоторых текстовых полях на Gmail, а также в about:config.

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

Выделить код

Код:

var eventHandler =
{
    button: null,

    get disabled ()
    {
    return !this. button. checked;
    },
    
    get urlbar ()
    {
    return document. getElementById ("urlbar");
    },
    
    handleEvent: function (event)
    {
        if (this. disabled)
            return;
        var tn = event. target. tagName. toLowerCase ();
        if (((event. type == "keypress") || (event. button == 0)) &&
            ((tn == "textarea") || (tn == "input") || (tn == "textbox")))
            return;
    this [event. type] (event);
    },

    keypress: function (event)
    {
        if ((event. which == 32) ||
        (event. which == 8) ||
        (event. which == 0) ||
        event. ctrlKey || event. altKey)
        return;
    this. urlbar. focus ();
    this. urlbar. value += String. fromCharCode (event. which);
    },

    click: function (event)
    {
    //this. urlbar. focus ();
    if ((event. button == 0) && (event. target. ownerDocument instanceof HTMLDocument))
        this. urlbar. value = "";
    if (event. button == 1)
    {
        var controller = top. document. commandDispatcher. getControllerForCommand ("cmd_paste");
        if (controller && controller. isCommandEnabled ("cmd_paste"))
            controller. doCommand ("cmd_paste");
    }
    }
};
eventHandler. button = this;

this. checked = true;

document. getElementById ("appcontent"). addEventListener ("keypress", eventHandler, true);
window. addEventListener ("click", eventHandler, true);

this. onclick = function (event)
{
    if (event. button == 1)
    {
            document. getElementById ("urlbar"). value = custombuttonsUtils. gClipboard. read ();
            document. getElementById ("urlbar"). handleCommand ();
        }
};

2. Я пользуюсь расширением "Omnibar", сейчас вы сделали, как я и просил, вставку в адресную строку текста из буфера и автоматический переход, при нажатии средней кнопкой мыши по самой "кастом кнопке" - при вставке ссылки все работает - переходит по вставленной ссылке, а если я таким образом вставляю просто текст, то ищет он его всегда в Яндексе (как в поиске по умолчанию русскоязычной Лисы через адресную строку без "Omnibara"), а хотелось бы, чтобы искал в текущем (выбранном) поисковике;

Не сделаю.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№208615-10-2010 20:45:13

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8718
UA: Firefox 4.0

Re: Custom Buttons

Господа, а вот такую кнопочку можно сотворить?  Чтобы добавленные в её список ссылки открывались в полноэкранном режиме :angel: Например это было бы очень удобно в случае с GReader и GMail :)

Отсутствует

 

№208716-10-2010 09:59:01

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8718
UA: Firefox 4.0

Re: Custom Buttons

Есть расширение Popup Url and Search Bar - прикрутить бы к нему пару кнопочек для вызова  Url Bar и Search Bar :angel:

Отсутствует

 

№208817-10-2010 18:02:03

Mr. Di
Участник
 
Группа: Members
Зарегистрирован: 14-07-2007
Сообщений: 27
UA: Firefox 3.6

Re: Custom Buttons

Anton

Спасибо 1000 раз!!!

Отсутствует

 

№208918-10-2010 20:18:45

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

Re: Custom Buttons

Anton

большая просьба
пожалуйста подскажи /*Initialization Code*/ который дабавлял в контекстное меню менеджера раширений пункт- открыть папку расширения, вот ниже код для раширение userChromeJS который делает подобное, у меня Firefox portable.

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

Выделить код

Код:

var OpenAddonFolder = {

    init: function() {
        document.getElementById("addonContextMenu").addEventListener("popupshowing", this, false);
    },

    launchDir: function() {
        var selectedItem = gExtensionsView.selectedItem;
        var addonID = selectedItem.getAttribute("addonID");
        var dir = gExtensionManager.getInstallLocation(addonID);
        dir = dir.getItemLocation(addonID);
        dir.QueryInterface(Components.interfaces.nsILocalFile);
        dir.launch();
    },

    handleEvent: function(event) {
        var selectedItem = gExtensionsView.selectedItem;
        var addonID = selectedItem.getAttribute("addonID");
        var dir = gExtensionManager.getInstallLocation(addonID);
        if (!addonID || !dir)
            return;
        var popup = event.target;
        var menuitem = document.createElement("menuitem");
        menuitem.setAttribute("label", "Open Folder");
        menuitem.setAttribute("oncommand", "OpenAddonFolder.launchDir();");
        popup.insertBefore(menuitem, document.getElementById("menuitem_homepage_clone"));
    }

};

OpenAddonFolder.init();

Отредактировано bunda1 (19-10-2010 14:37:40)

Отсутствует

 

№209019-10-2010 14:31:48

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

Re: Custom Buttons

Караул, помогите!

Вот ниже Initialization Code кнопки , при нажатие на dropmarker рядом с кнопкой появляется выпадающие меню с поисковиками где можно выбрать текущий поисковик.
Но почему то при нажатие на dropmarker также срабатывает  this.leftclick = function(e){...........   в Initialization Code кнопки.
Как это прекратить!!!

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

Выделить код

Код:

this.tooltipText = "L=search clipboard/selected text\nDL=open selected links \nM=open selected links \nR=open URL from clipboard\nCtrl+R=контекстное меню ";
this.leftclick = function(e) 
{
goDoCommand("cmd_copy");
var str = readFromClipboard();
var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
var submission = ss.currentEngine.getSubmission(str, null);
gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, true, false);
}

this.leftDclick = function(event) {
  var str = gURLBar.value;
var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
var submission = ss.currentEngine.getSubmission(str, null);
gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, true, false);
};

this.midclick = function (evt){

 warn_if_opening_more_than = 16;
var browser = getBrowser();
var n_to_open,dl,dll,i;
function linkIsSafe(u) {
  if (u.substr(0,7)=='mailto:' ) return false;
  if (u.substr(0,11)=='javascript:') return false;
  return true;
}
n_to_open = 0;
dl = window._content.document.links;
dll = dl.length;
if (window._content.getSelection && window._content.getSelection().containsNode) {
  for(i=0; i<dll; ++i) {
    if (window._content.getSelection().containsNode(dl[i], true) && linkIsSafe(dl[i].href)) {
      ++n_to_open;
    }
  }
  if (n_to_open && (n_to_open<=warn_if_opening_more_than || confirm('Open ' + n_to_open + ' selected links in new windows?'))) {
    for(i=0; i<dll; ++i) {
      if (window._content.getSelection().containsNode(dl[i], true) && linkIsSafe(dl[i].href)) {
        browser.addTab(dl[i].href);
      }
    }
  }
}
if (!n_to_open) { /* if no links selected, open all links */
  for(i = 0; i < dll; ++i) {
    if (linkIsSafe(dl[i].href)) ++n_to_open;
  }
  if (!n_to_open) alert ('no links');
  else {
    if (confirm('No links selected. Open ' + n_to_open + ' links in new windows?')) {
      for (i = 0; i < dll; ++i) {
        if (linkIsSafe(dl[i].href)) {
          browser.addTab(dl[i].href);
        }
      }
    }
  }
}
};

this.rightclick = function(event) {
  goDoCommand("cmd_copy");        
const IN_NEW_TAB = true;
const IN_BACKGROUND = false;
var str = readFromClipboard();
if (!str)
  return;
if (IN_NEW_TAB)
  gBrowser.loadOneTab(str, null, null, null, IN_BACKGROUND, false);
else
  gBrowser.loadURI(str);

};
this.setAttribute('onclick', 'gQuot(event, this)');
this.setAttribute('ondblclick', 'gQuot(event, this)');


function searchService() {
return Components.classes["@mozilla.org/browser/search-service;1"]
.getService(Components.interfaces.nsIBrowserSearchService);
}

 this.selectEngine = function(aNode, aEvent) {
  var engine = aEvent.target.engine;
  var ss = searchService();
  ss.currentEngine = ss.getEngineByName(engine.name);
  aNode.engine = engine;
  aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
  var ss = searchService();
  var engines = ss.getVisibleEngines({ });
  const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

  while(aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
    aNode.removeChild(aNode.firstChild);
  }

  for(var i = engines.length - 1; i >= 0; i--) {
    var mi = document.createElementNS(kXULNS, "menuitem");
    mi.id = "cb-search-" + engines[i].name;
    mi.className = "menuitem-iconic searchbar-engine-menuitem";
    mi.setAttribute("label", engines[i].name);
    if(engines[i].iconURI)
      mi.setAttribute("src", engines[i].iconURI.spec);
    mi.engine = engines[i];
    if(mi.engine == ss.currentEngine)
      mi.style.fontWeight = "bold";
    mi.setAttribute("onclick",
      "parentNode.parentNode.selectEngine(parentNode.parentNode, event)");
    aNode.insertBefore(mi, aNode.firstChild);
  }
}

this.currentEngine = searchService().currentEngine;

var ss = searchService();
this.engine = ss.currentEngine;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Manage Search Engines...");
managerItem.setAttribute("oncommand",
  "openDialog('chrome://browser/content/search/engineManager.xul', " +
  "'engineManager', 'chrome, dialog=no')");

this.type = "menu-button";

Отсутствует

 

№209119-10-2010 16:18:03

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Крошка Ру пишет

Господа, а вот такую кнопочку можно сотворить?  Чтобы добавленные в её список ссылки открывались в полноэкранном режиме :angel: Например это было бы очень удобно в случае с GReader и GMail :)

В инициализацию:

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

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">
        <menuitem label="Engadget"
              class="menuitem-iconic"
              image="http://www.blogsmithmedia.com/www.engadget.com/media/favicon.ico"
              cb:url="http://www.engadget.com/"/>
        <menuitem label="ScienceDaily"
              class="menuitem-iconic"
              image="http://www.sciencedaily.com/favicon.ico"
              cb:url="http://www.sciencedaily.com/"/>
        <menuitem label="New Scientist"
              class="menuitem-iconic"
              image="http://www.newscientist.com/favicon.ico"
              cb:url="http://www.newscientist.com/"/>
        <menuitem label="Popular Mechanics"
              class="menuitem-iconic"
              image="http://www.popularmechanics.com/favicon.ico"
              cb:url="http://www.popularmechanics.com/"/>
        <menuitem label="Popular Science"
              class="menuitem-iconic"
              image="http://www.popsci.com/favicon.ico"
              cb:url="http://www.popsci.com/"/>
        <menuitem label="Physics.org"
              class="menuitem-iconic"
              image="http://www.physorg.com/favicon.ico"
              cb:url="http://www.physorg.com/"/>
      </menupopup>;
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";
 
this. handleClick = function (event)
{
    var menuitem = event. target;
    var url = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "url");
    if (event. button == 0)
    {
               var win = window. open (url);
               setTimeout (function () { win. fullScreen = true; }, 100);
        }
    this. open = false;
};

Крошка Ру пишет

Есть расширение Popup Url and Search Bar - прикрутить бы к нему пару кнопочек для вызова  Url Bar и Search Bar :angel:

Выделить код

Код:

PopupUrlBar. showAndFocusAddressBar ();
Выделить код

Код:

PopupUrlBar. showAndFocusSearchBar ();

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№209219-10-2010 16:55:54

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8718
UA: Firefox 4.0

Re: Custom Buttons

Anton И то и другое работают замечательно - Спасибо :)
......сразу ,когда идея возникла не дошло что нельзя наверное развёртывать в полноэкранном режиме одну вкладку :dumb: только в новом окне - получилась альтернатива Prism :D .....а во втором случае подозревал конечно что нужно вставить тот код что в комментарии к расширению ,но чтобы так просто :beer: ....вообщем буду осваивать :sick:

Отсутствует

 

№209319-10-2010 17:30:26

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Крошка Ру пишет

нельзя наверное развёртывать в полноэкранном режиме одну вкладку

Можно текущее окно разворачивать.

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

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">
        <menuitem label="Engadget"
              class="menuitem-iconic"
              image="http://www.blogsmithmedia.com/www.engadget.com/media/favicon.ico"
              cb:url="http://www.engadget.com/"/>
        <menuitem label="ScienceDaily"
              class="menuitem-iconic"
              image="http://www.sciencedaily.com/favicon.ico"
              cb:url="http://www.sciencedaily.com/"/>
        <menuitem label="New Scientist"
              class="menuitem-iconic"
              image="http://www.newscientist.com/favicon.ico"
              cb:url="http://www.newscientist.com/"/>
        <menuitem label="Popular Mechanics"
              class="menuitem-iconic"
              image="http://www.popularmechanics.com/favicon.ico"
              cb:url="http://www.popularmechanics.com/"/>
        <menuitem label="Popular Science"
              class="menuitem-iconic"
              image="http://www.popsci.com/favicon.ico"
              cb:url="http://www.popsci.com/"/>
        <menuitem label="Physics.org"
              class="menuitem-iconic"
              image="http://www.physorg.com/favicon.ico"
              cb:url="http://www.physorg.com/"/>
      </menupopup>;
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";
 
this. handleClick = function (event)
{
    var menuitem = event. target;
    var url = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "url");
    if (event. button == 0)
    {
        let newTab = gBrowser.addTab(url)
               gBrowser.selectedTab = newTab;// loads into a new tab;
        }
    else if (event. button == 1)
        gBrowser. addTab (url);
    this. open = false;
    window. fullScreen = true;
};


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№209419-10-2010 19:55:47

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8718
UA: Firefox 4.0

Re: Custom Buttons

Anton ага,такой вариант тоже неплохой :) в идеале конечно если бы после закрытия той вкладки браузер выходил бы из полноэкранного режима безо всякой помощи :sick:

Отсутствует

 

№209520-10-2010 17:34:56

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

bunda1 пишет

/*Initialization Code*/ который дабавлял в контекстное меню менеджера раширений пункт- открыть папку расширения, вот ниже код для раширение userChromeJS который делает подобное, у меня Firefox portable.
скрытый текст

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

Выделить код

Код:

var script = <>
    <script xmlns={xulns} type="application/x-javascript">
            <![CDATA[
                var OpenAddonFolder = {

    init: function() {
        document.getElementById("addonContextMenu").addEventListener("popupshowing", this, false);
    },

    launchDir: function() {
        var selectedItem = gExtensionsView.selectedItem;
        var addonID = selectedItem.getAttribute("addonID");
        var dir = gExtensionManager.getInstallLocation(addonID);
        dir = dir.getItemLocation(addonID);
        dir.QueryInterface(Components.interfaces.nsILocalFile);
        dir.launch();
    },

    handleEvent: function(event) {
        var selectedItem = gExtensionsView.selectedItem;
        var addonID = selectedItem.getAttribute("addonID");
        var dir = gExtensionManager.getInstallLocation(addonID);
        if (!addonID || !dir)
            return;
        var popup = event.target;
        var menuitem = document.createElement("menuitem");
        menuitem.setAttribute("label", "Open Folder");
        menuitem.setAttribute("oncommand", "OpenAddonFolder.launchDir();");
        popup.insertBefore(menuitem, document.getElementById("menuitem_homepage_clone"));
    }

};

OpenAddonFolder.init();
            ]]>
        </script>
</>;

var observer =
{
    observe: function (subject, topic, data)
        {
            subject. addEventListener ("load", this, false);
        },
        
        handleEvent: function (event)
        {
            var doc = event. originalTarget;
            if (doc. location && doc. location. href == "chrome://mozapps/content/extensions/extensions.xul")
                doc. defaultView. eval (script. toString ());
        }
};

var os = Cc ["@mozilla.org/observer-service;1"].
     getService (Ci. nsIObserverService);
os. addObserver (observer, "domwindowopened", false);

bunda1 пишет

при нажатие на dropmarker также срабатывает  this.leftclick = function(e){...........   в Initialization Code кнопки.

Выделить код

Код:

if (e.target.nodeName != "button") return;

после

Выделить код

Код:

this.leftclick = function(e) 
{

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№209620-10-2010 21:40:27

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

Re: Custom Buttons

Anton

Спасибо огромное,твоя помощь неоценима,
добавил
if (e.target.nodeName != "button") return;
после
this.leftclick = function(e){
и this.leftclick.....больше не срабатывет после нажатие на dropmarker
но теперь this.leftclick = function(e){ ........не работает:(
что делать?

Kод который дабавляет в контекстное меню менеджера раширений пункт- открыть папку расширения неработает, даже на новом профиле.

Отредактировано bunda1 (21-10-2010 18:50:08)

Отсутствует

 

№209721-10-2010 20:27:52

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

if (e.target.nodeName != "button") return;

Да, это неправильно — в любом случае.

bunda1 пишет

что делать?

Попросить автора кнопки исправить ситуацию.

bunda1 пишет

Kод который дабавляет в контекстное меню менеджера раширений пункт- открыть папку расширения неработает, даже на новом профиле.

У меня работает. Что не так ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№209821-10-2010 20:34:55

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

Re: Custom Buttons

Anton
Я сам автор кнопки.

Отсутствует

 

№209921-10-2010 20:36:28

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

bunda1 пишет

Я сам автор кнопки.

Значит, надо переделать код так, чтобы он не использовал gQuot.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№210021-10-2010 22:00:09

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

bunda1
Вот так:

Выделить код

Код:

if (e.target.nodeName != "xul:toolbarbutton") return;

вроде бы работает. Но лучше всё же не пользоваться gQuot.

Дополнение к коду, добавляющему пункт в контекстное меню менеджера расширений:
1. Код не имеет возможности снимать обработчики уведомления об открытых окнах
2. Простым способом проверить, что обработчик уже установлен нет возможности, вследствие чего каждое вновь открытое окно браузера будет добавлять пункт "Open Folder" в контекстное меню менеджера дополнений.

Избежать дублирования пунктов меню можно добавив

Выделить код

Код:

var mi = document. getElementsByAttribute ("label", "Open Folder");
        if (mi. length >= 1)
            return;

после

Выделить код

Код:

handleEvent: function(event) {

Но при возможности лучше пользоваться расширением userChrome.js


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

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