// Настройка функций кликов мыши для кнопки ............................................................. this.onclick = function(e) { if ( e.button == 0 ) { custombuttons.setPrefs("Autocopy", !custombuttons.getPrefs("Autocopy") ); } if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); document.getElementById(this.id + "-menuPopup").showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); } }; // Проверить наличие строк в 'about:config' и создать если не существует ............................... if ( !custombuttons.isPref("Autocopy") ) { ["Autocopy","Autocopy.reset","Autocopy.selectingTextBlink","Autocopy.selectWithDoubleClick", "Autocopy.copyWithDoubleClick"].forEach(function(pref) { custombuttons.setPrefs( pref, false ) }); }; // Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ................... if ( this.hasAttribute("stop") ) return; // Создать меню .......................................................................................... var menuPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup")); menuPopup.id = this.id + "-menuPopup"; // массив с данными для создание меню .... var array = [ { label: 'Выключать автокопирование при выходе из браузера', value: 'Autocopy.reset' }, { label: 'Выделенный текст мигает при автокопировании', value: 'Autocopy.selectingTextBlink' }, { separator: ''}, { label: 'Двойной правый клик мыши копирует выделенный текст', value: 'Autocopy.copyWithDoubleClick' }, { label: 'Двойной левый клик мыши выделяет все в текстовых полях', value: 'Autocopy.selectWithDoubleClick' }, { label: 'Средним кликом вставлятъ текст с заменой выделенного текста', value: 'middlemouse.paste' } ]; // цикл по очереди добавляет из массива нужные атрибуты к пунктам меню .... array.forEach(function( m ) { if ( "separator" in m ) { menuPopup.appendChild( document.createElement("menuseparator") ); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.setAttribute('type', 'checkbox'); mItem.setAttribute('checked', custombuttons.getPrefs( m.value ) ); mItem.setAttribute('onclick', 'custombuttons.setPrefs("' + m.value + '", !custombuttons.getPrefs("' + m.value + '"))'); menuPopup.appendChild( mItem ); }); // добавляем стандартное контекстное меню кнопки .... menuPopup.appendChild( document.createElement("menuseparator") ); var cbContextPopup = document.getElementById("custombuttons-contextpopup"); var clone = cbContextPopup.cloneNode(true); clone.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + this.id + "')"); var menu = document.createElement("menu"); menu.setAttribute( "label", "Меню кнопки" ); menu.appendChild( clone ); menuPopup.appendChild( menu ); // Установить нужную иконку кнопки при старте браузера или при изменениях настроек в 'about:config' ............... var button = this, s = "Autocopy"; function toggleImage() { button.image = custombuttons.getPrefs( s ) ? "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" : "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEDAAQACAcEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAHCAMBBAEAAAAAAAAAAAAAAAACAAMDAAAAABUAJx9cAKq3awG84GoBud1qAbreagG63moBut5qAbreagG63mgAuN1qAbrgYgCzxR4ANy8AAAAAAAABAAEAAgQABAAAVwCgprNW/f/Wqf7805///9Si///Uov//1KL//9Si///Uov//16f//9Wl/vy3Yv3/YwC0vwEBAAAAAAAAFQAoH1cAoalyAM/1hh/Y/Ywn3P2KI9v9iyTb/Ysl2/2LJdv9iybb/Yki2v2bQ+L927X9/Neq/v9qAbvdBQAJCAABAABeAKuzr1H7/8WP9Pu+f/H/vn/y/76A8v++gPL/voDy/75/8v+9fvL/wof0/4wq3P+eS+L93rT//2gAud0DAAcIBQAJCGsBvNzVp/3/4sH//d+7///hv///4b///+G////hv///4b///9+7/v/nyf//w4rx/4wr2v3guv//agK63gMABwgEAAcIagK53dWl///gwP793rv+/9++/v/gv/7/4L/+/+C//v/fvv7/3br+/+TG///BhvH/jy3b/eTD//9qA7reAwAHCAQABwhqArre2rD//+jP//3lyv//583//+fO///nzv//587//+fN///lyP7/7Nb//8WP8v+QL9v96c3//2oDut4DAAcIBAAHCGoCut7fuf//7tz//evW///t2f//7dr//+3a///t2v//7dn//+rV/v/y4///yJby/5Ax2/3s1f//agS63gMABwgEAAcIagK63uPB///z6P/98OH///Lk///z5f//8+X///Pl///y5P//8OD+//ju///LnfL/kTLb/fDc//9rBLreAwAHCAQABwhqArre5sn///jy//316v//9u3///fu///37///9+7///bt///06f7//fj//86j8v+RMtv98d///2oFud0DAAcIBAAHCGoCut7pz////Pr//fjx///69P//+vX///r1///69f//+vT///fw/v//////0ajx/5M12/305///awS83AQACQgEAAcIaQK53erR///+/v/9+vT///v3///8+P///Pj///z4///79///+fT+///////TrPL/iyjY+8N5/f9dAKuzAAIAAAUACQhqAbvd7dr+//////z+/f/9/////f////3////9/////f////39/P79/////dy+8/5vAND1VgKhqRUAJx8AAAAAAQIAAGIAtL/Jh/3/8uT+/O3X///u2f//7tn//+7Z///u2f//7tn//+3X///x4/38vW78/1UAoKYABQAAAQACBAAAAQAAAAAAHgA3LmEAs8VqArvgagK53WoCut5qArreagK63moCut5qArreagK53WsBvOBbAKq3FQAnHwAAAAACAAMDAAAAAAAAAAAAAAAAAwIEAQQACAgEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAIBwMCAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; }; toggleImage(); var ps = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).QueryInterface(Ci.nsIPrefBranch2); ps.addObserver( s, toggleImage, false ); this.onDestroy = function() { ps.removeObserver( s, toggleImage, false ); }; /* Выключать кнопку при закрытии браузера если это разрешено в 'about:config'............................*/ var observer = { observe: function(subject, topic, data) { if ( custombuttons.getPrefs("Autocopy.reset") && data == "shutdown" ) custombuttons.setPrefs("Autocopy", false); } }; Services.obs.addObserver(observer, "quit-application", false); /* Функции автоматически копирует выделенный текст на странице, если это разрешено в 'about:config' ..................................................................*/ function autocopy(e) { if ( e.button == 2 ) return; if ( /input|textarea|textbox|searchbar|findbar/.test(e.target.localName.toLowerCase()) ) return; if ( e.type == 'mousedown' ) var lastSelection = getBrowserSelection(); if ( e.type !== 'mouseup' ) return; var selection = getBrowserSelection(); if ( custombuttons.getPrefs("Autocopy") && selection && selection !== lastSelection ) { goDoCommand('cmd_copy'); // выделенный текст мигает .... if ( !custombuttons.getPrefs("Autocopy.selectingTextBlink") ) return; document.activeElement.blur(); setTimeout(function() { window.content.focus() }, 300); } }; gBrowser.addEventListener("mouseup", autocopy, false); gBrowser.addEventListener("mousedown", autocopy, false); /* Cредней кнопкой мыши вставить текст из буфера обмена в текстовые поля с заменой выделенного текста .........................................................*/ document.documentElement.addEventListener("click", function(e) { if ( e.button !== 1 || !custombuttons.getPrefs('middlemouse.paste') ) return; if ( /input|textarea|textbox|searchbar|findbar/.test( e.target.localName.toLowerCase() ) && document.commandDispatcher.getControllerForCommand("cmd_paste") ) { goDoCommand("cmd_paste"); e.preventDefault(); } }, true); /* Обработчик следит за кликами мыши на значке идентификации сайта в строке адреса и запускают нужные коды и функции .....................................................................*/ document.getElementById("identity-box").addEventListener("click", function(e) { e.preventDefault(); e.stopPropagation(); // ЛКМ открывает информацию о странице без запроса .... if ( e.button == 0 ) BrowserPageInfo( gBrowser.contentDocument, "generalTab" ); // ПКМ копирует текущий адрес .... if ( e.button == 2) { gClipboard.write( content.location ); // значок идентификации сайта мигает красным .... document.getElementById("identity-box").setAttribute("style", "background: red;"); setTimeout(function() { document.getElementById("identity-box").removeAttribute("style") }, 500); } }, true); // Обработчик следит за двойным правым кликом мыши на странице и запускают нужные коды и функции ........... gBrowser.addEventListener("dblclick", function(e) { // двойной левый клик мыши выделяет все в текстовых полях .... if ( e.button == 0 && custombuttons.getPrefs("Autocopy.selectWithDoubleClick") ) { var localName = e.target.localName; e.preventDefault(); if ( localName =='input' || localName =='textbox' || localName=='textarea' ) e.target.select(); } // двойной правый клик мыши копирует выделенный текст .... if ( e.button == 2 && custombuttons.getPrefs("Autocopy.copyWithDoubleClick")) { e.preventDefault(); document.getElementById("contentAreaContextMenu").hidePopup(); document.getElementById("cmd_copy").doCommand(); }; }, false); // Устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды this.setAttribute("stop","true"); // Подсказка для кнопки .... this.tooltipText = "Autocopy \nЛ: Переключить автоматическое копирование \nП: Меню + CB меню";