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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№108-09-2017 12:30:48

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 459
UA: Firefox 52.0
Веб-сайт

[CB] Input Language Assistant

Input Language Assistant ( [firefox] 52.3.0)
Автор: difabor (на основе расширения Input Language Assistant (автор: RomCraft)
Версия: от 08.09.2017
Описание: автоматически переключает язык ввода на английский при вводе в строке адреса. При помещении фокуса ввода в строку адреса текущий язык ввода запоминается и затем автоматически переключается на английский. Затем, когда фокус ввода перемещается в какое-нибудь другое место, текущий язык ввода восстанавливается обратно. Во время ввода в строке адреса сохраняется возможность переключать язык на любой другой обычным образом.
В дополнение к этим штатным функциям расширения, введены следующее:
1. Пробел сначала сразу же возвращает исходную раскладку.
2. Два пробела подряд в любом месте тоже возвращают исходную раскладку.
Это сделано для того, чтобы обеспечить поиск в строке адреса на родном языке.
Кнопка работает только на Windows (в исходном расширении обеспечивается работа и на MacOs, но у меня нет MacOs и проверить я не могу.
После установки кнопки требуется перезапуск (Restart).
Использование: положите код  в инициализацию.

Выделить код

Код:

/*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();

Отредактировано difabor (08-09-2017 18:52:24)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

На форуме

 

№208-09-2017 17:33:26

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

Re: [CB] Input Language Assistant

Это не работает и не нужно:

Выделить код

Код:

window.addEventListener("load", function() { ru.net.rvk.ilaff.init(); }, false); 
window.addEventListener("unload", function() { ru.net.rvk.ilaff.uninit(); }, false);

проверь при старте брузера:

Выделить код

Код:

window.addEventListener("load", function() { alert("1") }, false); 

Обработчики в Сustom Buttons надо добавлять вот так:

Выделить код

Код:

addEventListener("focus", function() { ru.net.rvk.ilaff.focus(); }, false, urlbar);

элемент на который ставят обработчик надо указывать за false иначе обработчик в некоторых случаях будет дублироваться и не будет удалятся после удаления кнопки.

Отсутствует

 

№308-09-2017 18:09:27

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 459
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

bunda1 пишет:

Это не работает и не нужно:

Выделить код

Код:

window.addEventListener("load", function() { ru.net.rvk.ilaff.init(); }, false); 
window.addEventListener("unload", function() { ru.net.rvk.ilaff.uninit(); }, false);

проверь при старте брузера:

Выделить код

Код:

window.addEventListener("load", function() { alert("1") }, false); 

Обработчики в Сustom Buttons надо добавлять вот так:

Выделить код

Код:

addEventListener("focus", function() { ru.net.rvk.ilaff.focus(); }, false, urlbar);

элемент на который ставят обработчик надо указывать за false иначе обработчик в некоторых случаях будет дублироваться и не будет удалятся после удаления кнопки.

Спасибо большое!
Я исправил как Вы сказали и подредактировал алгоритм с пробелами. Я ещё дилетант и только учусь.
Я думаю, что лучше отредактировать свой первый пост, чем помещать новый с исправленной версией.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

На форуме

 

№414-09-2017 19:03:55

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 64
UA: unknown 0.0

Re: [CB] Input Language Assistant

difabor
Вещь :rock:

Отсутствует

 

№515-09-2017 23:29:23

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 459
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

Немного модифицировал код. Сейчас можно переходить из родной раскладки в английскую и наоборот сколько угодно раз: два delete подряд тоже переводят в английскую, запоминая предыдущую
Вот как выглядит поиск в адресной строке: https://i.imgur.com/Ey674Py.jpg, когда я в раскладке RU.
Здесь: ng - keyword для нигмы, затем два пробела (один можно стереть, а можно и не стирать), затем идёт русский текст "смотреть", затем пробел, дважды delete -> переходим в английскую раскладку и продолжаем латиницей, затем Alt-Enter и поиск будет в новой вкладке. Покидаем urlbar, фокусируемся кликом где угодно - остаёмся в русской раскладке (RU). На любителя, конечно, кому лень следить за раскладками - с какой зашли, в такую и вернулись, а в urlbarе можно и "попрыгать" :)

модифицированный код

Выделить код

Код:

/*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();

Отредактировано difabor (16-09-2017 19:16:28)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

На форуме

 

Board footer

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