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

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

№755102-03-2014 22:37:50

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

Re: Custom Buttons

Не...  Там пишут:
NOTES - The select event only fires when text inside a text input or textarea is selected.

Это как раз то, о чём я писал

отследить выделение или снятие выделения с конкретного элемента, наподобие как onselect и onblur, но не в текстовом поле
Скажем текст в диве или спане

Может можно через CustomEvent https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent
Но я там ничего не понял

Отсутствует

 

№755203-03-2014 01:17:14

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

Re: Custom Buttons

beggrr
Вот пример:

Выделить код

Код:

// Функции автоматически копирует выделенный текст на странице, если это разрешено в 'about:config' ................................
function autocopy(e) {
   if ( e.button == 2 ) return;

   if ( /input|password|textarea|textbox|searchbar|findbar|tabbrowser/.test( e.target.localName.toLowerCase() ) ) return;
   
   if ( e.type == 'mousedown' ) var lastSelection = getBrowserSelection();
   
   if ( e.type !== 'mouseup' ) return; 
   
   var selection = getBrowserSelection();
   if ( cbu.getPrefs("Autocopy") && selection && selection !== lastSelection ) {
        goDoCommand('cmd_copy');
         
        // выделенный текст мигает ....
        if ( !cbu.getPrefs("Autocopy.selectingTextBlink") ) return;
             document.activeElement.blur();  
             setTimeout(function() { window.content.focus() }, 300);
        }
};
addEventListener("mouseup", autocopy, false, gBrowser );
addEventListener("mousedown", autocopy, false, gBrowser );

Autocopy+3

Отсутствует

 

№755303-03-2014 03:02:02

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

Re: Custom Buttons

bunda1 пишет

beggrr
Вот пример:

Хорошая кнопка, но как она дает ответ на мой вопрос:

отследить выделение или снятие выделения с конкретного элемента, наподобие как onselect и onblur, но не в текстовом поле

?

Отсутствует

 

№755403-03-2014 16:13:22

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

Re: Custom Buttons

beggrr

На крайний случай, вот — жуткая жуть, наверняка глючная, но можешь повозиться

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

Выделить код

Код:

function addSelListener(node) {
    if (!node || "cbSelListener" in node) return;
    var sl = {
        node: node,
        win: null,
        winSel: null,
        lastSel: "",
        hasSel: false,
        mouseDown: false,

        init: function() {
            this.win = this.node.ownerDocument.defaultView;
            this.winSel = this.win.getSelection().QueryInterface(Ci.nsISelectionPrivate);
            this.hasSel = this.winSel.containsNode(this.node, true);

            this.node.cbSelListener = true;
            this.winSel.addSelectionListener(this);
            this.addListeners(true);
        },
        destroy: function() {
            if (!this.node) return;
            delete this.node.cbSelListener;
            this.winSel.removeSelectionListener(this);
        },
        addListeners: function(add) {
            var sl = this;
            var func = add ? addEventListener : removeEventListener;
            ["unload", "mousedown", "mouseup", "blur"].forEach(function(type)
                func(type, sl, false, sl.win)
            );
        },
        handleEvent: function(e) {
            if (e instanceof MouseEvent && e.button) return;
            this[e.type](e);
        },
        unload: function(e) {
            this.addListeners(false);
            this.destroy();
            this.node = null;
        },
        mousedown: function() this.mouseDown = true,
        mouseup: function() this.mouseDown = false,
        blur: function() this.mouseDown = false,

        notifySelectionChanged: function(doc, sel, reason) {
            if (this.mouseDown) return;
            if (sel.isCollapsed || !sel.containsNode(this.node, true)) {
                if (this.hasSel) {
                    this.hasSel = false;
                    this.onUnselect();
                }
                return;
            }
            this.hasSel = true;

            var str = "";
            var nodeRange = doc.createRange();
            nodeRange.selectNode(this.node);

            for(var r = 0; r < sel.rangeCount; r++) {
                var range = sel.getRangeAt(r).cloneRange();

                var [nodeStartsAfter, nodeEndsBefore, nodeStartsBefore, nodeEndsAfter] =
                    "END_TO_START START_TO_END START_TO_START END_TO_END".split(" ")
                    .map(function(how) range.compareBoundaryPoints(Range[how], nodeRange)
                        == (how[0] == "E" ? 1 : -1)
                    );
                if (nodeStartsAfter || nodeEndsBefore) continue;
                if (nodeStartsBefore) range.setStart(this.node, 0);
                if (nodeEndsAfter) range.setEnd(nodeRange.endContainer, nodeRange.endOffset);
        
                str += range.toString();
            }
            if (this.lastSel == str) return;
            this.lastSel = str;
            this.onSelect(str);
        },
        onSelect: function(txt) {

            Services.console.logStringMessage(_id + " - SELECT:\n" + txt);
            custombuttons.alertBox(_id, "SELECT:\n" + txt);
        },
        onUnselect: function() {

            Services.console.logStringMessage(_id + " - UNSELECT");
            custombuttons.alertBox(_id, "UNSELECT");
        }
    };
    sl.init();
    addDestructor(sl.destroy, sl);
}

Отсутствует

 

№755503-03-2014 18:46:50

Sekotka
Участник
 
Группа: Members
Зарегистрирован: 07-02-2010
Сообщений: 44
UA: Firefox 8.0

Re: Custom Buttons

Уважаемые форумчане, помогите пожалуйста, есть код кнопки. По задумке из файла берется строчка с поисковым запросом в произвольном порядке и вставляется в searchbar.
Вот этот код:

Выделить код

Код:

/*CODE*/

var path = "c:\\file.txt";

var words = custombuttonsUtils. readFile (path);
words = words. split (/[\r\n]{1,2}/);

if (words. length != 0)
{
    var ind = Math. floor (Math. random () * words. length);
    var sb = document. getElementById ("searchbar");
    sb. doSearch (MyOwnConverter.ConvertToUnicode(words[ind]), "current");
    sb. value = MyOwnConverter.ConvertToUnicode(words[ind]);
    sb. _textbox. _formHistSvc. addEntry (sb. _textbox. getAttribute ("autocompletesearchparam"), MyOwnConverter.ConvertToUnicode(words[ind])); // Если надо добавить текст в историю поиска
}

Помогите пожалуйста видоизменить код, чтобы произвольный запрос вставлялся не в searchbar, а происходил переход по конструкции вида:

Выделить код

Код:

http://site.ru/search.html?searchid=XXX&text=[b]ПОИСКОВЫЙ ЗАПРОС[/b]&web=0#

Т.е. до поискового запроса из файла конструкция "http://site.ru/search.html?searchid=XXX&text=" и после запроса "&web=0#"

Заранее большое спасибо!

Отредактировано Sekotka (03-03-2014 18:47:59)

Отсутствует

 

№755603-03-2014 21:01:16

Sekotka
Участник
 
Группа: Members
Зарегистрирован: 07-02-2010
Сообщений: 44
UA: Firefox 8.0

Re: Custom Buttons

okkamas_knife пишет

Спасибо большое!

Отредактировано Sekotka (03-03-2014 23:43:15)

Отсутствует

 

№755703-03-2014 22:48:14

Ki_rrrilll
Участник
 
Группа: Members
Зарегистрирован: 22-11-2013
Сообщений: 127
UA: Firefox 26.0

Re: Custom Buttons

Можно конструкцию вида

Выделить код

Код:

(x != "A" && y != "B") || x == y

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

Отсутствует

 

№755804-03-2014 05:33:28

Ki_rrrilll
Участник
 
Группа: Members
Зарегистрирован: 22-11-2013
Сообщений: 127
UA: Firefox 26.0

Re: Custom Buttons

okkamas_knife пишет

а функция чем неустраивает?

А как это будет выглядеть?

Отсутствует

 

№755904-03-2014 15:08:07

Ki_rrrilll
Участник
 
Группа: Members
Зарегистрирован: 22-11-2013
Сообщений: 127
UA: Firefox 26.0

Re: Custom Buttons

У меня это выражение является частью условия

Выделить код

Код:

if (x != "A" && y != "B") || x == y) {
   // выполняются всякие действия
}

На самом деле в условии бывает выражение куда более длинное и бывает нужно несколько раз это условие записывать. Сейчас я делаю так:

Выделить код

Код:

if ((x != "A" && y != "B") ) || x == y)  var my_var = 5;

Вместо 5 - любое значение. А дальше я не пишу это длинное выражение со сравнениями  и пр. а просто повторяю if (my_var = 5) столько раз сколько нужно.

А как правильно нужно делать?

Отредактировано Ki_rrrilll (04-03-2014 15:09:04)

Отсутствует

 

№756004-03-2014 21:32:38

Ki_rrrilll
Участник
 
Группа: Members
Зарегистрирован: 22-11-2013
Сообщений: 127
UA: Firefox 26.0

Re: Custom Buttons

okkamas_knife   спасибо!

Отсутствует

 

№756107-03-2014 22:00:09

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

Я хочу приделать на URLBar обработчик ondblclick.
Как сделать, чтобы при двойном клике контекстное меню адресной строки не появлялось или хотя бы само исчезало через очень короткое время?

Отсутствует

 

№756207-03-2014 22:26:38

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

Re: Custom Buttons

Чайник пишет

Я хочу приделать на URLBar обработчик ondblclick.
Как сделать, чтобы при двойном клике контекстное меню адресной строки не появлялось или хотя бы само исчезало через очень короткое время?

Выделить код

Код:

addEventListener("dblclick", function(e) {
   var box = e.target.inputField.parentNode;
   var popup = box.ownerDocument.getAnonymousElementByAttribute( box, "anonid", "input-box-contextmenu");
   setTimeout(function() popup.hidePopup(), 50);    
}, false, gURLBar );

Отсутствует

 

№756308-03-2014 02:12:04

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1 спасибо, а как бы ещё в адресной строке отменить выделение слова по двойному клику?
e.preventDefault() не помогает.

Отсутствует

 

№756408-03-2014 12:27:54

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

Re: Custom Buttons

Чайник пишет

bunda1 спасибо, а как бы ещё в адресной строке отменить выделение слова по двойному клику?
e.preventDefault() не помогает.

Выделить код

Код:

addEventListener("dblclick", function(e) {
   var box = e.target.inputField.parentNode;
   var popup = box.ownerDocument.getAnonymousElementByAttribute( box, "anonid", "input-box-contextmenu");
   setTimeout(function() { popup.hidePopup(); gURLBar.blur(); } , 5);    
}, false, gURLBar );

или

Выделить код

Код:

addEventListener("dblclick", function(e) {
   var box = e.target.inputField.parentNode;
   var popup = box.ownerDocument.getAnonymousElementByAttribute( box, "anonid", "input-box-contextmenu");
   setTimeout(function() { popup.hidePopup(); gURLBar.inputField.selectionEnd = 0; } , 5);    
}, false, gURLBar );

Отредактировано bunda1 (08-03-2014 12:37:47)

Отсутствует

 

№756508-03-2014 14:53:38

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1
Я попробовал оба варианта, всё равно по двойному клику ЛКМ на очень короткое время слово выделяется.
Я хотел сделать копирование текста в адресной строке по двойному клику. Но копируется не то, что я заранее выделил, а слово, которое успело выделиться, пока выделение сбросилось.

Отсутствует

 

№756608-03-2014 15:36:49

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

Re: Custom Buttons

Чайник
Но ПКМ копирует.

Отсутствует

 

№756708-03-2014 15:45:23

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1 пишет

Но ПКМ копирует.

ПКМ - да. По ПКМ не выделяется слово целиком. Просто у меня на double rightclick повешено уже другое действие.
Ну, что-то придумаю...

Ещё раз спасибо за помощь :)

Отсутствует

 

№756808-03-2014 16:17:41

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

Re: Custom Buttons

Чайник
Можно копировать и так:

Выделить код

Код:

addEventListener("select", function(e){ 
      var theBox = document.commandDispatcher.focusedElement;
      var startPos = theBox.selectionStart;
      var endPos = theBox.selectionEnd;
      var selection = theBox.value.substring(startPos, endPos);
      gClipboard.write( selection );
}, false, gURLBar );

Отсутствует

 

№756908-03-2014 21:36:10

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1 пишет

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

:(
Этот код корректно работает где-то на странице, где выделяют текст только чтобы скопировать, и ни для чего больше.
А в адресной строке (да и в любом инпуте) начинаются косяки: я выделяю фрагмент, чтобы удалить, а он копируется.
Или ещё хуже: выделяю, чтобы вставить на это место из буфера, а в буфере оказывается уже не то что было, а только что выделенный текст.


Я пока сделал себе так. У меня прямо над адресной строкой есть кнопка и я добавил в неё код:

Выделить код

Код:

var myTim;
this.onmouseover = function () {
  var u = gURLBar;
  var sel = u.value.substring(u.selectionStart, u.selectionEnd);
  if (sel != 0) {
    myTim = setTimeout(function () {   // чтобы не срабатывало, если 
      gClipboard.write(sel);   //случайно провести мышкой над кнопкой
      u.selectionEnd = 0
    }, 500)
  }
}

// прибивает таймер, если убрать курсор с кнопки вовремя  
this.onmouseleave = function () {
  clearTimeout(myTim)
}

Вроде удобно (для меня).

Отредактировано Чайник (08-03-2014 21:37:47)

Отсутствует

 

№757008-03-2014 21:42:29

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

Re: Custom Buttons

Остроумно :)

Отсутствует

 

№757108-03-2014 22:31:14

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

Re: Custom Buttons

okkamas_knife
Нет он хочет получить только выделенный текст из адресной строки.

Отсутствует

 

№757208-03-2014 23:05:03

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

Re: Custom Buttons

dblclick это два mousedown

Отсутствует

 

№757308-03-2014 23:18:22

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

Re: Custom Buttons

Подскажите как отсортировать массив из объектов по свойству в алфавитном порядке.

Добавлено 08-03-2014 23:30:29
Вроде так:

Выделить код

Код:

array.sort(function(a,b) { return a.title > b.title } ) 
alert( array.map(function(item) item.title ) ); // проверка

Отредактировано bunda1 (08-03-2014 23:30:46)

Отсутствует

 

№757409-03-2014 03:14:59

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

Re: Custom Buttons

bunda1 пишет

Подскажите как отсортировать массив из объектов по свойству в алфавитном порядке.

По идее, лучше как в документации:

Выделить код

Код:

array.sort(function(a, b) {
    if(a.title > b.title)
        return 1;
    if(a.title == b.title)
        return 0;
    return -1;
});

А простое сравнение дает только

Выделить код

Код:

Number(true) // 1
Number(false) // 0

Кстати, там еще со скоростью обработки некоторые странности: http://jsperf.com/array-sort-objects (создание переменных медленнее, чем доступ к свойствам, хотя, казалось бы, это должно легко оптимизироваться).


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

Отсутствует

 

№757509-03-2014 05:25:48

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

Re: Custom Buttons

Спасибо, это пригодилось.

Отсутствует

 

Board footer

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