>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB] Input Language Assistant http://forum.mozilla-russia.org/viewtopic.php?id=72410 |
difabor > 08-09-2017 12:30:48 |
Input Language Assistant ( 52.3.0) Выделить код Код:/*Initialization Code*/ //return(0); if (!ru) var ru = {}; if (!ru.net) ru.net = {}; if (!ru.net.rvk) ru.net.rvk = {}; if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {}; ru.net.rvk.ilaff = { cnt32: 1, Windows:{ init: function() { try { this.lib = ctypes.open("user32.dll"); this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout", ctypes.winapi_abi, ctypes.voidptr_t, // return HKL ctypes.voidptr_t, // HKL hkl ctypes.uint32_t); // UINT Flags this.KLF_SETFORPROCESS = 0x00000100; this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US) return true; } catch (err) { this.uninit(); return false; } }, uninit: function() { try { if (this.lib) { this.lib.close();} } catch (err) {} }, focus: function() { try {if (this.ActivateKeyboardLayout) {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}} catch (err){} }, blur: function() { try {if (this.ActivateKeyboardLayout && this.hkl) {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}} catch (err) {} } }, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral init: function (){try { Components.utils.import("resource://gre/modules/ctypes.jsm"); if (this.Windows.init()) {this.engine = this.Windows;} else if (this.MacOS.init()){this.engine = this.MacOS;} else {alert("Unsupported platform: " + navigator.platform);return;} var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar); addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar); addEventListener('keydown', function(e){//var cnt32=1; if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++; if (ru.net.rvk.ilaff.cnt32>1) ru.net.rvk.ilaff.blur();} if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)) ru.net.rvk.ilaff.cnt32=0;},false,urlbar);} } catch (err) {} }, uninit: function () { try {if (this.engine){this.engine.uninit();}} catch (err) {} }, focus: function () {try {if (this.engine) { this.engine.focus();}} catch (err){} }, blur: function (){ try {if (this.engine) { this.engine.blur();}} catch (err) {} } } ru.net.rvk.ilaff.init(); |
bunda1 > 08-09-2017 17:33:26 |
Это не работает и не нужно: Выделить код Код:window.addEventListener("load", function() { ru.net.rvk.ilaff.init(); }, false); window.addEventListener("unload", function() { ru.net.rvk.ilaff.uninit(); }, false); проверь при старте брузера: Обработчики в Сustom Buttons надо добавлять вот так: элемент на который ставят обработчик надо указывать за false иначе обработчик в некоторых случаях будет дублироваться и не будет удалятся после удаления кнопки. |
difabor > 08-09-2017 18:09:27 |
bunda1 пишет
Спасибо большое! |
broker > 14-09-2017 19:03:55 |
difabor |
difabor > 15-09-2017 23:29:23 |
Немного модифицировал код. Сейчас можно переходить из родной раскладки в английскую и наоборот сколько угодно раз: два delete подряд тоже переводят в английскую, запоминая предыдущую модифицированный код Выделить код Код:/*Initialization Code*/ //return(0); if (!ru) var ru = {}; if (!ru.net) ru.net = {}; if (!ru.net.rvk) ru.net.rvk = {}; if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {}; ru.net.rvk.ilaff = { cnt32: 1, cnt46: 0, Windows:{ init: function() { try { this.lib = ctypes.open("user32.dll"); this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout", ctypes.winapi_abi, ctypes.voidptr_t, // return HKL ctypes.voidptr_t, // HKL hkl ctypes.uint32_t); // UINT Flags this.KLF_SETFORPROCESS = 0x00000100; this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US) return true; } catch (err) { this.uninit(); return false; } }, uninit: function() { try { if (this.lib) { this.lib.close();} } catch (err) {} }, focus: function() { try {if (this.ActivateKeyboardLayout) {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}} catch (err){} }, blur: function() { try {if (this.ActivateKeyboardLayout && this.hkl) {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}} catch (err) {} } }, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral init: function (){try { Components.utils.import("resource://gre/modules/ctypes.jsm"); if (this.Windows.init()) {this.engine = this.Windows;} else if (this.MacOS.init()){this.engine = this.MacOS;} else {alert("Unsupported platform: " + navigator.platform);return;} var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar); addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar); addEventListener('keydown', function(e){//var cnt32=1; if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++; if (ru.net.rvk.ilaff.cnt32>1) ru.net.rvk.ilaff.blur()} if (e.keyCode==46) {ru.net.rvk.ilaff.cnt46++; if (ru.net.rvk.ilaff.cnt46>1) ru.net.rvk.ilaff.focus()} if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)) { ru.net.rvk.ilaff.cnt32=0;ru.net.rvk.ilaff.cnt46=0}},false,urlbar);} } catch (err) {} }, uninit: function () { try {if (this.engine){this.engine.uninit();}} catch (err) {} }, focus: function () {try {if (this.engine) { this.engine.focus();}} catch (err){} }, blur: function (){ try {if (this.engine) { this.engine.blur();}} catch (err) {} } } ru.net.rvk.ilaff.init(); |
broker > 08-12-2017 17:29:05 |
difabor |
difabor > 11-12-2017 03:15:16 |
broker пишет
Я сделал то, что Вы просили - по длинному ЛКМ переводит в EN, но независимо от того, в какой раскладке Вы были. Выделить код Код:#CB_ID {visibility: collapse !important;} #CB_ID > menupopup {visibility: visible !important;} где CB_ID - ИД кнопки (напр. custombuttons-button30) Выделить код Код:#custombuttons-button30 {visibility: collapse !important;}#custombuttons-button30 > menupopup {visibility: visible !important;} Тогда эту кнопку надо будет вызывать лишь в двух случаях: чтобы что-то отредактировать в ней или зачем-то вызвать её стандартное меню. скрытый текст Выделить код Код:/*Initialization Code*/ //return(0); var btn = this; var mdown = [Date.now(),0,0],B=Date.now(),tlong=800,dlow=10; if (!ru) var ru = {}; if (!ru.net) ru.net = {}; if (!ru.net.rvk) ru.net.rvk = {}; if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {}; ru.net.rvk.ilaff = { cnt32: 1, cnt46: 0, Windows:{ init: function() { try { this.lib = ctypes.open("user32.dll"); this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout", ctypes.winapi_abi, ctypes.voidptr_t, // return HKL ctypes.voidptr_t, // HKL hkl ctypes.uint32_t); // UINT Flags this.KLF_SETFORPROCESS = 0x00000100; this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US) return true; } catch (err) { this.uninit(); return false; } }, uninit: function() { try { if (this.lib) { this.lib.close();} } catch (err) {} }, focus: function() { try {if (this.ActivateKeyboardLayout) {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}} catch (err){} }, blur: function() { try {if (this.ActivateKeyboardLayout && this.hkl) {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}} catch (err) {} } }, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral init: function (){try { Components.utils.import("resource://gre/modules/ctypes.jsm"); if (this.Windows.init()) {this.engine = this.Windows;} else if (this.MacOS.init()){this.engine = this.MacOS;} else {alert("Unsupported platform: " + navigator.platform);return;} var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar); addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar); addEventListener('keydown', function(e){//var cnt32=1; if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++; if ((ru.net.rvk.ilaff.cnt32>1)&&!e.ctrlKey) ru.net.rvk.ilaff.blur(); if ((ru.net.rvk.ilaff.cnt32>1)&&e.ctrlKey) ru.net.rvk.ilaff.focus();} if (e.keyCode==46) {ru.net.rvk.ilaff.cnt46++; if (ru.net.rvk.ilaff.cnt46>1) ru.net.rvk.ilaff.focus()} if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)&&!e.ctrlKey) { ru.net.rvk.ilaff.cnt32=0;ru.net.rvk.ilaff.cnt46=0}},false,urlbar); addEventListener('mousedown',(e)=>{mdown=[Date.now(),e.clientX,e.clientY];},0,urlbar); addEventListener('mouseup',(e)=> {var dx=e.clientX-mdown[1],dy=e.clientY-mdown[2]; var trem=dx*dx+dy*dy, TfromDown = Date.now()-mdown[0]; var LongClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey); var CtrlClick = ((trem<dlow)&&(TfromDown>tlong)&&e.ctrlKey&&!e.shiftKey&&!e.altKey); var ShiftClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&e.shiftKey&&!e.altKey); if ((e.button==0)&&LongClick) ru.net.rvk.ilaff.focus(); if ((e.button==0)&&ShiftClick) gShowPopup(btn); if ((e.button==0)&&CtrlClick) {custombuttons.editButton(btn)};},0,urlbar); } } catch (err) {} }, uninit: function () { try {if (this.engine){this.engine.uninit();}} catch (err) {} }, focus: function () {try {if (this.engine) { this.engine.focus();}} catch (err){} }, blur: function (){ try {if (this.engine) { this.engine.blur();}} catch (err) {} } } ru.net.rvk.ilaff.init(); broker, я сейчас работаю ещё над одной кнопкой, которая должна исправлять крякозябры - но уже не в адресной строке (urlbar), а текстовых полях и других местах, где можно писать. Когда что-то получится, я её выложу, а в этой ветке дам на неё ссылку. Она Вам тоже может пригодиться. |
broker > 11-12-2017 18:09:48 |
difabor
Хорошо, будем тестить заодно форумчане подтянутся.
нет изменений
также |
difabor > 12-12-2017 03:34:27 |
broker, Вы уверены, что обновили предыдущую версию, а не создали новую кнопку? broker, |
broker > 12-12-2017 16:47:39 |
difabor difabor пишет
Я предыдущую удалил, создал новую, на новой кнопке ПКМ работает меню кустомбуттон а не должно. difabor пишет
Да я оттуда брал, не первый год на форуме. |
difabor > 12-12-2017 18:09:29 |
broker пишет
1. ПКМ по кнопке должно выдавать меню кустомбуттон, но кроме того - ещё и по Shift+ЛКМ на urlbarе. |
broker > 12-12-2017 23:53:20 |
difabor difabor пишет
Здесь работает, хорошо но манипуляции
Ctrl+пробел не работает.
Курсор никуда не убегает в конце текста на ЛКМ не реагирует. |
difabor > 13-12-2017 03:12:20 |
broker, я Вам послал личное сообщение. |
difabor > 14-12-2017 22:36:20 |
Добавил ещё одну возможность переводить в EN раскладку. 4. Поскольку сама СВ кнопка не требует никаких кликов по ней то нет смысла, чтобы она занимала место на тулбаре. Тогда саму СВ кнопку вообще можно спрятать стилем, например, если у вас есть Classic Theme Restorer, то там в Custom css code напишите: #CB_ID {visibility: collapse !important;} #CB_ID > menupopup {visibility: visible !important;} где CB_ID - ИД кнопки (напр. custombuttons-button30) Тогда это будет выглядеть так: #custombuttons-button30 {visibility: collapse !important;}#custombuttons-button30 > menupopup {visibility: visible !important;} В Инициализацию: Выделить код Код:/*Initialization Code*/ //return(0); var btn = this; var mdown = [Date.now(),0,0],B=Date.now(),tlong=800,dlow=10; if (!ru) var ru = {}; if (!ru.net) ru.net = {}; if (!ru.net.rvk) ru.net.rvk = {}; if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {}; ru.net.rvk.ilaff = { cnt32: 1, cnt46: 0, Windows:{ init: function() { try { this.lib = ctypes.open("user32.dll"); this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout", ctypes.winapi_abi, ctypes.voidptr_t, // return HKL ctypes.voidptr_t, // HKL hkl ctypes.uint32_t); // UINT Flags this.KLF_SETFORPROCESS = 0x00000100; this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US) return true; } catch (err) { this.uninit(); return false; } }, uninit: function() { try { if (this.lib) { this.lib.close();} } catch (err) {} }, focus: function() { try {if (this.ActivateKeyboardLayout) {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}} catch (err){} }, blur: function() { try {if (this.ActivateKeyboardLayout && this.hkl) {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}} catch (err) {} } }, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral init: function (){try { Components.utils.import("resource://gre/modules/ctypes.jsm"); if (this.Windows.init()) {this.engine = this.Windows;} else if (this.MacOS.init()){this.engine = this.MacOS;} else {alert("Unsupported platform: " + navigator.platform);return;} var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar); addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar); addEventListener('keydown', function(e){//var cnt32=1; if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++; if ((ru.net.rvk.ilaff.cnt32>1)&&!e.ctrlKey) ru.net.rvk.ilaff.blur(); if ((ru.net.rvk.ilaff.cnt32>1)&&e.ctrlKey) ru.net.rvk.ilaff.focus();} if (e.keyCode==46) {ru.net.rvk.ilaff.cnt46++; if (ru.net.rvk.ilaff.cnt46>1) ru.net.rvk.ilaff.focus()} if (e.keyCode==39) ru.net.rvk.ilaff.focus(); if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)&&!e.ctrlKey) { ru.net.rvk.ilaff.cnt32=0;ru.net.rvk.ilaff.cnt46=0}},false,urlbar); addEventListener('mousedown',(e)=>{mdown=[Date.now(),e.clientX,e.clientY];},0,urlbar); addEventListener('mouseup',(e)=> {var dx=e.clientX-mdown[1],dy=e.clientY-mdown[2]; var trem=dx*dx+dy*dy, TfromDown = Date.now()-mdown[0]; var LongClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey); var CtrlClick = ((trem<dlow)&&(TfromDown>tlong)&&e.ctrlKey&&!e.shiftKey&&!e.altKey); var ShiftClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&e.shiftKey&&!e.altKey); if ((e.button==0)&&LongClick) ru.net.rvk.ilaff.focus(); if ((e.button==0)&&ShiftClick) gShowPopup(btn); if ((e.button==0)&&CtrlClick) {custombuttons.editButton(btn)};},0,urlbar); } } catch (err) {} }, uninit: function () { try {if (this.engine){this.engine.uninit();}} catch (err) {} }, focus: function () {try {if (this.engine) { this.engine.focus();}} catch (err){} }, blur: function (){ try {if (this.engine) { this.engine.blur();}} catch (err) {} } } ru.net.rvk.ilaff.init(); |
broker > 15-12-2017 01:30:11 |
difabor |
difabor > 15-12-2017 02:59:50 |
broker, я немного подправил код. Скопируйте ещё раз. Думаю, что стрелочка вправо заработает |
broker > 17-12-2017 00:18:31 |
difabor |