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

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

№1172614-05-2017 16:45:10

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 43.0

Re: Custom Buttons

Проблема с размером кнопок - продолжения мучения. :)

1. Этим я получил квадратные кнопки нормального размера - userChrome.css

Выделить код

Код:

toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon {
    min-width: 18px !important;
    min-height: 18px !important;
}

- РЕШЕНО.

2. Как получить диапазон размера, ибо у меня кнопки есть прямоугольные, т.е. как написать диапазон? Так вот не выходит, ширина в пять раз больше, раньше было возможно, т.е. я перепробовал все варианты которые я знаю.

Выделить код

Код:

min-width: 18px !important;
max-width: 90px !important;

3. Как увеличит размер боковой панели и размер кнопок на ней?

То что вырубились 90% кнопок я молчу... это как говориться на потом. :)

Отредактировано Indomito (14-05-2017 16:51:44)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№1172714-05-2017 16:58:23

SendInfo
.
 
Группа: Members
Зарегистрирован: 14-02-2011
Сообщений: 271
UA: Firefox 42.0

Re: Custom Buttons

Rag пишет

Посоветуйте,как с этим боротся?И вообще стоит ли обращать внимания на это?А может у кого есть действенный метод,как же всё таки заставить Palemoon не сбрасывать галочку проверки орфографии.

Что user.js не помогает?

Выделить код

Код:

/* Этот параметр включает мгновенную автоматическую проверку орфографии во всех формах, где Вы что-то вводите. При значении 1(по умолчанию) почему-то проверяет не везде и не сразу.©*/
    user_pref("layout.spellcheckDefault", 2);

Отсутствует

 

№1172814-05-2017 21:31:34

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Custom Buttons

SendInfo пишет

Что user.js не помогает?

Если что-то сбрасывает значение этого параметра после старта, то и user.js может не помочь.
Более сильнодействующее средство - lockPref() в файле конфигурации.
Хотя в случае каких-то внутренних ошибок браузера и оно может не помочь.

Отсутствует

 

№1172914-05-2017 22:09:55

feas
Участник
 
Группа: Extensions
Откуда: от DNS
Зарегистрирован: 25-08-2011
Сообщений: 5213
UA: Firefox 55.0
Веб-сайт

Re: Custom Buttons

Плюсую. Симптомы те же. [nightly] 55 (extensions.allow-non-mpc-extensions = true), кнопки работают, но добавить новые или просто открыть панель расширений не представляется возможным.


Добро пожаловать на форум mozilla-russia.org. Здесь вы можете посоветоваться или обратиться за помощью к фанатам и пользователям продуктов Мозиллы. Если не знаете как правильно оформить пост специально для вас расписан пункт 2.2 правил форума
Сброс на примере Firefox – лёгкое решение большинства проблем
Починка браузера. Перенос своих настроек на новый профиль.

Отсутствует

 

№1173014-05-2017 22:20:42

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

Re: Custom Buttons

Indomito пишет

2. Как получить диапазон размера, ибо у меня кнопки есть прямоугольные, т.е. как написать диапазон? Так вот не выходит, ширина в пять раз больше, раньше было возможно, т.е. я перепробовал все варианты которые я знаю.

Выделить код

Код:

min-width: 18px !important;
max-width: 90px !important;

Можно попробовать вот так:

Выделить код

Код:

toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon {
    width: auto !important;
    height: auto !important;
    min-width: 18px !important;
    min-height: 18px !important;
    max-width: none !important;
    max-height: none !important;
}

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

Отсутствует

 

№1173114-05-2017 23:15:51

Rag
Участник
 
Группа: Members
Откуда: Краснодон
Зарегистрирован: 06-03-2017
Сообщений: 247
UA: Firefox 53.0

Re: Custom Buttons

SendInfo пишет:
Что user.js не помогает?

Это я сделал в первую очередь.После чего проверка кое где появилась,но галочка в контекстном меню гугла пропадает после перезагрузки.

yup пишет:
Добавить в код проверку его наличия. Например, так:

Не знаю правильно я добавил или нет после addEventListener('focus', function(e){ но ошибки в консоли больше не появляются.Так что по видимому ваш совет уже ни в первый раз мне помог.За что огромное вам спасибо!!!

Отсутствует

 

№1173215-05-2017 00:00:31

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

Re: Custom Buttons

feas пишет

Симптомы те же.

У меня ещё хуже — валит браузер сразу.
Кое-как чуток подправил и бросил, поскольку надо Stylish реанимировать.

Вобщем, к краху у меня приводит использование всё того же nsIDOMParser
Если это само не пройдёт, то надо будет просить помощи у Infocatcher'а.

Ну а себе пока сделал как-то так. Дичь, конечно, но хоть не падает

скрытый текст
\components\CustomButtonsService.js

Выделить код

Код:

...
// ***** END LICENSE BLOCK *****

var win = Components. classes ["@mozilla.org/embedcomp/window-watcher;1"]
    .getService (Components. interfaces. nsIWindowWatcher)
    .openWindow (null, 'data:application/vnd.mozilla.xul+xml,<?xml%20version="1.0"?><window></window>', null, null, null);
var DOMParser = new win. DOMParser ();
win. close ();

...
Overlay. prototype = {
    ...
    get overlayDocument () {
        if (!this. _overlayDocument) {
            var ios = Components. classes ["@mozilla.org/network/io-service;1"]. getService (Components. interfaces. nsIIOService);
            var uri = this. path + this. fileName;
            var cbs = Components. classes ["@xsms.nm.ru/custombuttons/cbservice;1"]. getService (Components. interfaces. cbICustomButtonsService);
            var xulchan = cbs. getChannel (uri, null);
            var instr = xulchan. open ();
            //var dp = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser);
            //try    {
            //    var fakeOverlayURI = ios. newURI ("chrome://custombuttons/content/buttonsoverlay.xul", null, null);
            //    var chromeProtocolHandler = Components. classes ["@mozilla.org/network/protocol;1?name=chrome"]. getService ();
            //    chromeProtocolHandler = chromeProtocolHandler. QueryInterface (Components. interfaces. nsIProtocolHandler);
            //    var fakeOverlayChannel = chromeProtocolHandler. newChannel (fakeOverlayURI);
            //    try    {
            //        dp. init (fakeOverlayChannel. owner, ios. newURI (uri, null, null), null, null);
            //    } catch (e)    {
            //        dp = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser);
            //    }
            //} catch (e) {}
            //this. _overlayDocument = dp. parseFromStream (instr, null, instr. available (), "application/xml");

            this. _overlayDocument = DOMParser. parseFromStream (instr, null, instr. available (), "application/xml");
            instr. close();
        }
        return this. _overlayDocument;
    },
...

CustombuttonsURIParser. prototype =    {
    ...
    parse: function (uri) {
        ...
        if (button_code. indexOf ("<?xml ") == 0) {
            //var xp = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser);
            //this. doc = xp. parseFromString (button_code, "text/xml");

            this. doc = DOMParser. parseFromString (button_code, "text/xml");
...

cbCustomButtonsService. prototype =    {
    DOMParser: DOMParser,
    get wrappedJSObject() {
        return this;
    },

\modules\addons4.js

Выделить код

Код:

...
var AddonProvider = {
    getOverlayDocument: function (overlayFileName) {
        var overlayDocument = null;
        var ios = Cc [IO_SERVICE_CID]. getService (IO_SERVICE_IID);
        var uri = "resource://custombuttons/" + overlayFileName;
        var cbs = Components. classes [CB_SERVICE_CID]. getService (CB_SERVICE_IID);
        var xulchan = cbs. getChannel (uri);
        var instr = xulchan. open ();
        //var dp = Cc [DOM_PARSER_CID]. createInstance (DOM_PARSER_IID);
        //try {
        //    var fakeOverlayURI = ios. newURI ("chrome://custombuttons/content/buttonsoverlay.xul", null, null);
        //    var chromeProtocolHandler = Cc [CHROME_PROTOCOL_HANDLER_CID]. getService ();
        //    chromeProtocolHandler = chromeProtocolHandler. QueryInterface (PROTOCOL_HANDLER_IID);
        //    var fakeOverlayChannel = chromeProtocolHandler. newChannel (fakeOverlayURI);
        //    try {
        //        dp. init (fakeOverlayChannel. owner, ios. newURI (uri, null, null), null, null);
        //    } catch (e) {
        //        var dp = Cc [DOM_PARSER_CID]. createInstance (DOM_PARSER_IID);
        //    }
        //} catch (e) {}
        //overlayDocument = dp. parseFromStream (instr, null, instr. available (), "application/xml");

        overlayDocument = cbs. wrappedJSObject. DOMParser. parseFromStream (instr, null, instr. available (), "application/xml");
        instr. close ();
        return overlayDocument;
    },

Отсутствует

 

№1173315-05-2017 00:07:21

Rag
Участник
 
Группа: Members
Откуда: Краснодон
Зарегистрирован: 06-03-2017
Сообщений: 247
UA: Firefox 53.0

Re: Custom Buttons

yup
Извините меня за туповатость,но перечитав ваше сообщение более внимательно,я понял то что ничего ни понял.
Вы пишите.

Добавить в код проверку его наличия. Например, так:

У меня получилось.

Выделить код

Код:

addEventListener('focus', function(e){
   if (e.target.tagName && (e.target.tagName.toLowerCase() == 'textarea'|| e.target.tagName.toLowerCase() == 'input'))
   if( e.target.tagName.toLowerCase()=='textarea'|| e.target.tagName.toLowerCase()=='input')
       e.target.setAttribute('spellcheck', 'true')
 }, content.document.body);

Дальше.

https://developer.mozilla.org/ru/docs/W … nt/tagName уверяет, что tagName всегда содержит имя тега большими буквами, так что вызов toLowerCase() является излишним.

Выделить код

Код:

addEventListener('focus', function(e){
  if (e.target.tagName && (e.target.tagName == 'TEXTAREA'|| e.target.tagName == 'INPUT'))
       e.target.setAttribute('spellcheck', 'true')
 }, content.document.body);

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

Отсутствует

 

№1173415-05-2017 00:28:27

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Custom Buttons

Rag пишет

Так какой код более оптимальный?

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

Выделить код

Код:

if( e.target.tagName.toLowerCase()=='textarea'|| e.target.tagName.toLowerCase()=='input')

Заменить надо было на вариант, куда вставлена дополнительная проверка:

Выделить код

Код:

if (e.target.tagName && (e.target.tagName.toLowerCase() == 'textarea'|| e.target.tagName.toLowerCase() == 'input'))

Но так как от вызова функции toLowerCase() можно избавиться (с целью ускорения выполнения), то получаем более простой вариант замены:

Выделить код

Код:

if (e.target.tagName && (e.target.tagName == 'TEXTAREA'|| e.target.tagName == 'INPUT'))

Отсутствует

 

№1173515-05-2017 00:31:39

Rag
Участник
 
Группа: Members
Откуда: Краснодон
Зарегистрирован: 06-03-2017
Сообщений: 247
UA: Firefox 53.0

Re: Custom Buttons

yup
Огромное спасибище!!!

Отредактировано Rag (15-05-2017 00:33:03)

Отсутствует

 

№1173615-05-2017 08:46:21

momo2000
Участник
 
Группа: Members
Зарегистрирован: 03-09-2015
Сообщений: 237
UA: Firefox 53.0

Re: Custom Buttons

Проблема с Toggle Find+ Minimal
с 53 перестали работать кнопки след и пед при поиске

Выделить код

Код:

const forceFind = false, forceFindCS = true;

// Приклеить элемент findbar к странице( #appcontent ) ................................
const fbID = "FindToolbar-m";
delete window.gFindBar;
window.gFindBar = document.getElementById(fbID);
if (!gFindBar) {
    gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser);
    gFindBar.id = fbID;
    gFindBar.setAttribute("browserid", "content");
    gFindBar.clientTop;
    delete window.gFindBarInitialized;
    window.gFindBarInitialized = true;
    gFindBar._selectionMaxLen = 1000;    // лимит символов для поиска
    
    setTimeout(function() {
       eval("gFindBar.startFind = " + gFindBar.startFind.toString()
       .replace('this.browser.finder.getInitialSelection();',
       'this.onCurrentSelection(gBrowser.finder.getActiveSelectionText(), false)'));
             
       var {Finder} = Cu.import("resource://gre/modules/Finder.jsm");
       eval("Finder.prototype.getActiveSelectionText = " + Finder.prototype
       .getActiveSelectionText.toString().replace('.replace', '; //'));          
    }, 3000 );
    
}


// Ctrl+F, показать - скрыть панель поиска ....................................  
function toggleFindbar() {
   if (gFindBar.hidden) { gFindBar.onFindCommand(); setTimeout(function() { gFindBar._find() }, 50) }
   else 
       gFindBar.close();
};
addEventListener("keydown", function(e)
    e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey
    && !e.preventDefault() && toggleFindbar()
, false);
this.onclick = function(e) { if (!e.button) toggleFindbar() };



// Показать количество совпадений на панели поиска ................................
const textbox = gFindBar.getElement("findbar-textbox"),
nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m";
var lab = document.getElementById(labID);
if (!lab) {
    lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox);
    lab.id = labID;
}
var curHit, allHits;

function updateHits(arg) {
    if (gFindBar.hidden) return;
    var word = textbox.value;
    if (!word) {
        lab.value = "0/0";
        textbox.removeAttribute("status");
        return;
    }
    var win = arg instanceof Window && arg || content;
    if (win == content) curHit = allHits = 0;
    var findbarFinder = gFindBar._browser.finder;
    var controller = findbarFinder._getSelectionController(win);
    var doc = win.document;

    if (word && controller && doc && doc.documentElement) {
        var body = doc instanceof HTMLDocument && doc.body ? doc.body : doc.documentElement;

        var searchRange = doc.createRange();
        searchRange.selectNodeContents(body);
        var startPt = searchRange.cloneRange();
        startPt.collapse(true);
        var endPt = searchRange.cloneRange();
        endPt.collapse(false);

        var retRange = null;
        var finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind);
        finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word);

        while ((retRange = finder.Find(word, searchRange, startPt, endPt))) {
            allHits++;
            if (!curHit) {
                var sel = controller.getSelection(nrm), range;
                if (sel.toString()) range = sel.getRangeAt(0);
                else {
                    var editableNode = findbarFinder._getEditableNode(retRange.startContainer);
                    if (editableNode) sel = editableNode.editor.selectionController.getSelection(nrm);
                    if (sel.toString()) range = sel.getRangeAt(0);
                }
                var comp = range && ["startContainer", "endContainer", "startOffset", "endOffset"]
                    .every(function(prop) range[prop] == retRange[prop]);
                if (comp) curHit = allHits;
            }
            startPt = retRange.cloneRange();
            startPt.collapse(false);
        }
        Array.forEach(win.frames, function(frame) updateHits(frame));
    }
    if (win != content) return;
    allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound");
    forceFind && !curHit && allHits && gFindBar._find();
    lab.value = curHit + "/" + allHits;
}
updateHits();


gFindBar.updateHits = updateHits;
function insUpd(methodName, code) {
    const method = gFindBar[methodName];
    gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();");
    gFindBar[methodName].method = method;
    addDestructor(function() gFindBar[methodName] = method);
}
insUpd("_find"); insUpd("_findAgain");
insUpd("_setCaseSensitivity", forceFindCS && " this._find();");


const progressListener = {
    onStateChange: function(wpr, req, state)
        state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320),
    onLocationChange: function(wpr, req) !req && updateHits()
};
addDestructor(function() gBrowser.removeProgressListener(progressListener));


function onFindbar() {
    gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener);
    !gFindBar.hidden && updateHits();
}
onFindbar();
const observer = new MutationObserver(onFindbar);
observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] });
addDestructor(function() observer.disconnect());

Отсутствует

 

№1173715-05-2017 22:35:39

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

Re: Custom Buttons

Dumby пишет

\components\CustomButtonsService.js

Выделить код

Код:

...
// ***** END LICENSE BLOCK *****

var win = Components. classes ["@mozilla.org/embedcomp/window-watcher;1"]
    .getService (Components. interfaces. nsIWindowWatcher)
    .openWindow (null, 'data:application/vnd.mozilla.xul+xml,<?xml%20version="1.0"?><window></window>', null, null, null);
var DOMParser = new win. DOMParser ();
win. close ();

Я вот такую дичь придумал, покультурнее:

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

Выделить код

Код:

this. __defineGetter__ ( // Not available at startup
    "DOMParser",
    function () {
        var hw = Components. classes ["@mozilla.org/appshell/appShellService;1"].
            getService (Components. interfaces. nsIAppShellService).
            hiddenDOMWindow;
        delete this. DOMParser;
        return this. DOMParser = new hw. DOMParser();
    }
);

+

Выделить код

Код:

cbCustomButtonsService. prototype =    {
    get wrappedJSObject() {
        return this;
    },
    get DOMParser() {
        return DOMParser;
    },

Добавлено 15-05-2017 22:38:01
custom_buttons-0.0.5.8.9-fixed5pre.xpi

Еще нынче дикая ругань на отсутствие <em:multiprocessCompatible>true</em:multiprocessCompatible>, но с ним кнопкам будет хуже, по идее.

Отредактировано Infocatcher (15-05-2017 22:38:01)


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

Отсутствует

 

№1173815-05-2017 22:43:19

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 53.0

Re: Custom Buttons

Infocatcher, Спасибо, твоя версия

userChrome.css

Выделить код

Код:

toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon {
    width: auto !important;
    height: auto !important;
    min-width: 18px !important;
    min-height: 18px !important;
    max-width: none !important;
    max-height: none !important;
}


работает нормально, т.е. как и было до обновления.

Правда отвалилось куча кнопок связанных с буфером обмена, т.е. с его сканированием.

Clipboard&FocusSwitch

Выделить код

Код:

/*Initialization Code*/


//Автор Infocatcher ver 0.0.1 bild of 12.02.2015
//Автор Indomito ver 9.2.1 bild of 15.01.2016

//----------Описание индификаторов панелей------------
/*
Что найти ID-панели истользуйте готовую кнопку Attributes Inspector
Автор Infocatcher
https://github.com/Infocatcher/Custom_Buttons/tree/master/Attributes_Inspector
*/
//----------------------------------------------------

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Блок инициализации глоб. переменных и функций
// Срок существования - один сеанс
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//++++++++++++++++++BEGIN DEF++++++++++++++++++++++++++++++
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

//*********************************************************
//*********Begin section descriptions of variables*********
//*********************************************************

// Подсказка для кнопки ................................
this.onmouseover =()=> {

   this.tooltipText = 
    "  Буфер обмена\n"; 
    };

window.bbBBCodeStat=true                                                          // разрешить/включить BBCode
window.arycb_BBCodeClipboardStrings = this.clipboardStrings = [];                 // Массив буфера обмена
window.MaxClipboardEntries = 16;                                     //Максимальное число записей буфера обмена ввиде стека
window.Polling_Rate = 1000;                                                       //Время(частота) опроса буфера в миллисекундах

window.FocusSwitchEICB = "Buttons.Clipboard.Focus.Switch";                  //Задание имени в реестре
window.SetFocus = Application.prefs.getValue(window.FocusSwitchEICB, 0);          //Статус для работы функции window.focus();
if (typeof window.SetFocus != "boolean")                          //Создаём новую переменную в реестре, если её нет
       { Application.prefs.setValue(window.FocusSwitchEICB, false);                 //Отключаем автофокус                 
      window.SetFocus = Application.prefs.getValue(window.FocusSwitchEICB, 0);}


//*********************************************************
//*********End section descriptions of variables***********
//*********************************************************


//*********************************************************
//*********Begin section descriptions of functions*********
//*********************************************************

//Переключение автофукосировки на окно браузера или почтовика, при подаче -1 на вход статус не меняется.
 SetFocusSwitch = function (vSwitch) {
// Коды возврата
// true  - функция window.focus() работает 
// false - функция window.focus() отключена(не работает)
// -1    - всё осталось без изменений
// Значения так же можно считать из window.SetFocus
   const Title_alertBox   = "Вкл/Выкл фокуса";
   const Msg_alertBox_On   = "Фокус = ON";   
   const Msg_alertBox_Off  = "Фокус = OFF";
   var   Msg_alertBox;
   if (vSwitch == -1 ) { return vSwitch; } 
   if (window.SetFocus == true)   { window.SetFocus = false; Msg_alertBox = Msg_alertBox_Off;} 
          else                     { window.SetFocus = true; Msg_alertBox = Msg_alertBox_On;}
   Application.prefs.setValue(window.FocusSwitchEICB, window.SetFocus);                      
   custombuttons. alertBox(Title_alertBox, Msg_alertBox); // Диагностика
return window.SetFocus;
};

//--------Общие функции для вставки BBCode----------------

//--------------------------------------------------------
// Функция lb_BBCodePrim 
// [bbCode]выделенный[/bbCode]
//  по умолчанию от ЛКМ)
lb_BBCodePrim = function (open,close){
var theBox = document.commandDispatcher.focusedElement;
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var oPosition = theBox.scrollTop;
var oHeight = theBox.scrollHeight;
var text=theBox.value.substring(0,startPos);
text +=open+theBox.value.substring(startPos, endPos)+close;
text +=theBox.value.substring(endPos, theBox.value.length);
theBox.value = text;
var nHeight = theBox.scrollHeight - oHeight;
theBox.scrollTop = oPosition + nHeight;
};

//---------------------------------------------------------
// Функция mb_BBCodePrim 
// Резерв
// по умолчанию от CКМ
mb_BBCodePrim = function (open,close) {};

// -------------------------------------------------------
// Функция rb_BBCodePrim 
// [bbCode]параметр PASTE по умолчанию из буфер обмена[/bbCode]
// по умолчанию от ПКМ
rb_BBCodePrim = function (open,close,paste){
if (paste == undefined)  { open +=close;} //буфер обмена пуст
   else                 { open +=paste+close;}
   
var theBox = document.commandDispatcher.focusedElement;
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var selectionLen = endPos - startPos
var oPosition = theBox.scrollTop;
var oHeight = theBox.scrollHeight;
var text=theBox.value.substring(0,startPos); 
var nHeight = theBox.scrollHeight - oHeight;
text +=open;
text +=theBox.value.substring(endPos, theBox.value.length);
theBox.value = text; 
theBox.selectionStart = endPos + open.length;
theBox.selectionEnd = endPos + open.length - selectionLen;
theBox.scrollTop = oPosition + nHeight;
};

// -------------------------------------------------------
// Функция fHLD_Get_ListClipboardPrim 
// получить список сохранёного буфера обмена

fnHLD_Get_ListClipboardPrim = function (){
var cs = arycb_BBCodeClipboardStrings; 
return (cs.slice(0)); 
}; 



//********************************************************
//*********End section descriptions the functions*********
//********************************************************


//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//++++++++++++++++++END DEF++++++++++++++++++++++++++++++
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 

//Список сохранёного буфера обмена
//Не вызываем это, обработка по таймеру или по событию ЛКМ
//-----Обработчики буфера обмена

this.MAX_ENTRIES = window.MaxClipboardEntries;                       //Максимальное число записей буфера обмена ввиде стека
this.CHECK_INTERVAL = window.Polling_Rate;                          //Время(частота) опроса буфера в миллисекундах
this.type = "menu";
this.orient = "horizontal";
this._menupopup = this.appendChild(document.createElement("menupopup"));
this._menupopup.setAttribute("oncommand", "this.parentNode.handleCommand(event.target);");

// Обработка двойного клика для установки режима автофокуса
this.leftDclick = function(event) {
    //fnHidePT();
    //SetFocusSwitch();
};



this.checkClipboard = function() {
    var clipStr = custombuttonsUtils. gClipboard. read ();
    if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1)
        this.storeString(clipStr);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    if(window.SetFocus) // Если true, иначе на выход
          window.focus();  // Фокус на браузер или почтовик
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
//fnHidePT();     
};


this.storeString = function(str) {
    var cs = this.clipboardStrings;
    cs.push(str);
    while(cs.length > this.MAX_ENTRIES)
        cs.shift(); 

    var mi = document.createElement("menuitem");
    mi.setAttribute("label", str);
   
    
    this._menupopup.appendChild(mi);
    while(this._menupopup.childNodes.length > this.MAX_ENTRIES)
        this._menupopup.removeChild(this._menupopup.firstChild);
};


this.handleCommand = function(mi) {
    var indx = Array.indexOf(mi.parentNode.childNodes, mi);
    if(indx != -1)
        this.insertText(this.clipboardStrings[indx]);
};

this.insertText = function(str) {
    var cmd = "cmd_insertText";
    var controller = document.commandDispatcher.getControllerForCommand(cmd);
    if(controller && controller.isCommandEnabled(cmd)) {
        controller = controller.QueryInterface(Components.interfaces.nsICommandController);
        var params = Components.classes["@mozilla.org/embedcomp/command-params;1"]
            .createInstance(Components.interfaces.nsICommandParams);
        params.setStringValue("state_data", str);
        controller.doCommandWithParams(cmd, params);
    }
};

setInterval(function(button) {
    button.checkClipboard();
}, this.CHECK_INTERVAL, this);



this.setAttribute("onpopupshowing", "this.checkClipboard();");
this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');


и соответственно все кнопки BBcode.

Помоги, ибо я ошибки в JS не вижу.

Отредактировано Indomito (15-05-2017 23:06:15)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№1173915-05-2017 23:36:14

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 53.0

Re: Custom Buttons

bunda1 пишет

На последних версиях Firefox в некоторых кнопках перестала работать блокировка контекстного меню по ПКМ. Это можно исправить если положить в вкладку инициализации кнопки строку:

Выделить код

Код:

this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };

Контекстное меню кнопки будет открываться по Ctrl + ПКМ.

Спасибо, половину кнопок адаптировал. :beer:

Я долго искал хоть намёк на ошибку и набрёл на твой пост и код. :)

Отредактировано Indomito (15-05-2017 23:52:02)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№1174016-05-2017 01:50:45

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

Re: Custom Buttons

Infocatcher пишет

hiddenDOMWindow

Да-да, я тоже пробовал у него попросить DOMParser,
но только у hiddenPrivateDOMWindow, которое у меня available at startup

Но парсер у него был какой-то капризный, иногда отказывался парсить.
Поставил 0.0.5.8.9.4pre, и точно, — воротит нос:

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

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

Код:

Ошибка: Ошибка синтаксического анализа XML: 
Адрес: resource://gre-resources/hiddenWindow.html
Строка 1, символ 115:
Источник: resource://gre-resources/hiddenWindow.html
Строка: 1, символ: 115
Исходный код:
<overlay id="custombuttons-profile-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">


Наверно потому, что в окне html документ.
Но если поискать окно с благородным XUL документом,
то, вроде, всё работает. Пока вот так записал:
скрытый текст

Выделить код

Код:

this. __defineGetter__ ( // Not available at startup
    "DOMParser",
    function () {
        var en = Components. classes ["@mozilla.org/embedcomp/window-watcher;1"].
            getService (Components. interfaces. nsIWindowWatcher).
            getWindowEnumerator ();
        while (en. hasMoreElements ()) {
            var win = en. getNext (). QueryInterface (Components. interfaces. nsIDOMWindow);
            if (win. document && win. document. contentType == "application/vnd.mozilla.xul+xml") {
                delete this. DOMParser;
                return this. DOMParser = new win. DOMParser ();
            }
        }
    }
);

Отсутствует

 

№1174116-05-2017 06:54:48

supmener
Участник
 
Группа: Members
Зарегистрирован: 09-02-2010
Сообщений: 30
UA: Firefox 52.0

Re: Custom Buttons

Как вызвать окно редактора для кнопки повторно? А то не работают горячие клавиши, которые там прописал. :sick:

Отсутствует

 

№1174216-05-2017 07:08:05

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

Re: Custom Buttons

Infocatcher
Решил проверить ещё раз с нуля на другой виртуалке. Поставил чистую свежую Nightly.

Устанавливаю твой вариант с hiddenDOMWindow. Неудача. Скрин.
Удалил CB через about:addons. Удалил из профиля папку custombuttons.

Устанавливаю свой вариант с поиском существующего окна. Снова провал. Скрин.
Опять всё подчистил.

Устанавливаю вариант с принудительным открытием окна. Успех, всё работает.
Не знаю что и думать ... :sick:

Отсутствует

 

№1174317-05-2017 21:01:21

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 53.0

Re: Custom Buttons

Infocatcher и осталным
Не работает кнопка Tools, а точнее её часть - фрагмент кода.

Выделить код

Код:

//Right(Системные настройки)
this.rightclick = function(event) {
                  //Application.prefs.setValue("plugin.expose_full_path", true);   //НЕ РАБОТАЕТ
                  OpenCloseTabGlobal("about:plugins");
                  OpenCloseTabGlobal("about:support");
                 OpenCloseTabGlobal("about:config");
};

т.е. не работает Application.prefs.setValue("plugin.expose_full_path", true); - у меня на ней завязано куча кнопок около 80%

Отредактировано Indomito (17-05-2017 21:26:31)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№1174417-05-2017 21:17:37

oleg.sgh
Участник
 
Группа: Members
Зарегистрирован: 19-04-2014
Сообщений: 3157
UA: Firefox 52.0

Re: Custom Buttons

Можно подредактировать кнопку, что бы меню само закрывалось когда с него убран курсор, с задержкой 0,5 сек.?

Отсутствует

 

№1174517-05-2017 21:25:07

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 53.0

Re: Custom Buttons

oleg.sgh Ты мне отвечаешь?


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№1174617-05-2017 21:26:02

oleg.sgh
Участник
 
Группа: Members
Зарегистрирован: 19-04-2014
Сообщений: 3157
UA: Firefox 52.0

Re: Custom Buttons

Indomito пишет

oleg.sgh Ты мне отвечаешь?

Я задал свой вопрос.

Отсутствует

 

№1174717-05-2017 21:30:29

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

Re: Custom Buttons

Indomito пишет

т.е. не работает Application.prefs.setValue("plugin.expose_full_path", true); - у меня на ней завязано куча кнопок около 80%

cbu.setPrefs("plugin.expose_full_path", true);

Отсутствует

 

№1174817-05-2017 22:05:11

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 53.0

Re: Custom Buttons

oleg.sgh Раньше так работало

Выделить код

Код:

// Открывает список когда курсор мышки над кнопкой
this. onmouseover = function (event)
{
    this. open = true;
};

bunda1 Спасибо.

А функции cbu.setPrefs и cbu.getPrefs  смотреть в chrome://custombuttons/content/cb2api.js или другой адрес?

Отредактировано Indomito (17-05-2017 22:11:57)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№1174917-05-2017 22:24:56

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

Re: Custom Buttons

Indomito пишет

А функции cbu.setPrefs и cbu.getPrefs  смотреть в chrome://custombuttons/content/cb2api.js или другой адрес?

Объекты: перебор свойств
Смотри там cbu, ну и CB2const, custombutton, custombuttons, custombuttonsUtils тоже могут быть интересны.

Отсутствует

 

№1175017-05-2017 22:42:18

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 53.0

Re: Custom Buttons

Спасибо - "то что доктор прописал". :)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

Board footer

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