-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathswitchKeybLayout.html
More file actions
35 lines (33 loc) · 13.9 KB
/
switchKeybLayout.html
File metadata and controls
35 lines (33 loc) · 13.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE HTML>
<meta charset="utf-8"/>
<title>Switch Keyboard Layout [0.2.0 - 2014-10-20]</title>
<body>
<a href="custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESwitch%20Keyboard%20Layout%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAk1BMVEX///8/Pz8BAQF8fHwJCQkCAgIJCQl8fHx9fX0AAABJSUkBAQENDQ0wMDBVVVUAAABra2t0dHR7e3thYWEBAQEAAAAAAAABAQEAAAAgICABAQEBAQH8/Pzw8PDp6en39/fj4+Pe3t41V9I/YeWKioqDg4N9fX0jRa8wUrVoaGhkhuxWeNx1dXVCZMhvb28kRqsqTL4KidXxAAAAHHRSTlMAAABndwAAAAA0blVZcm1naWhNa6hrcJ8AAKRU4jk/3gAAAHVJREFUeF6FyMUCwjAUBdEbaQupUMOjqMv/fx1dQN6yZ3aDcWnyw6ezoRWNYc15kqKQZCFlgTKQQwgllL/dn5f3+bPb+6P3CpWNw56srdCZOMzDmA61i8O9nKvRaHLVukEryFKIFtnkj7ENYxmNdd5v+5xj1BcJ/w9Kj6K7ZAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20http%3A//infocatcher.ucoz.net/js/cb/switchKeybLayout.js%0A//%20https%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Switch_Keyboard_Layout%0A%0A//%20Switch%20Keyboard%20Layout%20button%20for%20Custom%20Buttons%0A//%20%28code%20for%20%22code%22%20section%29%0A%0A//%20%28c%29%20Infocatcher%202009%2C%202013-2014%0A//%20version%200.2.0%20-%202014-10-20%0A%0A//%20Convert%20text%2C%20typed%20in%20wrong%20keyboard%20layout.%0A//%20Configured%20for%20Russian%20%3C-%3E%20English.%0A%0Avar%20keybUtils%20%3D%20%7B%0A%09//%3D%3D%20Options%0A%09noSelBehavior%3A%20%7B%20//%20Shift+Home%0A%09%09ctrlKey%3A%20%20false%2C%0A%09%09altKey%3A%20%20%20false%2C%0A%09%09shiftKey%3A%20true%2C%0A%09%09metaKey%3A%20%20false%2C%0A%09%09keyCode%3A%20%20KeyEvent.DOM_VK_HOME%2C%0A%09%09charCode%3A%200%0A%09%7D%2C%0A%09//%200%20-%20do%20nothing%0A%09//%201%20-%20convert%20all%20text%0A%09//%20Or%20use%20object%20like%20following%20to%20simulate%20%22keypress%22%20event%3A%0A%09/*%0A%09noSelBehavior%3A%20%7B%20//%20Ctrl+Shift+Left%0A%09%09ctrlKey%3A%20%20true%2C%0A%09%09altKey%3A%20%20%20false%2C%0A%09%09shiftKey%3A%20true%2C%0A%09%09metaKey%3A%20%20false%2C%0A%09%09keyCode%3A%20%20KeyEvent.DOM_VK_LEFT%2C%0A%09%09charCode%3A%200%0A%09%7D%0A%09*/%0A%09convTableForward%3A%20%7B%20//%20ru%20-%3E%20en%0A%09%09%22%5C%22%22%3A%20%22@%22%2C%0A%09%09%22%3A%22%3A%20%22%5E%22%2C%0A%09%09%22%3B%22%3A%20%22%24%22%2C%0A%09%09%22%3F%22%3A%20%22%26%22%2C%0A%09%09%22%2C%22%3A%20%22%3F%22%2C%0A%09%09%22/%22%3A%20%22%7C%22%2C%0A%09%09%22.%22%3A%20%22/%22%2C%0A%09%09%22%u044D%22%3A%20%22%27%22%2C%0A%09%09%22%u0431%22%3A%20%22%2C%22%2C%0A%09%09%22%u044E%22%3A%20%22.%22%2C%0A%09%09%22%u0416%22%3A%20%22%3A%22%2C%0A%09%09%22%u0436%22%3A%20%22%3B%22%2C%0A%09%09%22%u0411%22%3A%20%22%3C%22%2C%0A%09%09%22%u042E%22%3A%20%22%3E%22%2C%0A%09%09%22%u042D%22%3A%20%22%5C%22%22%2C%0A%09%09%22%u0445%22%3A%20%22%5B%22%2C%0A%09%09%22%u044A%22%3A%20%22%5D%22%2C%0A%09%09%22%u0451%22%3A%20%22%60%22%2C%0A%09%09%22%u0425%22%3A%20%22%7B%22%2C%0A%09%09%22%u042A%22%3A%20%22%7D%22%2C%0A%09%09%22%u0401%22%3A%20%22%7E%22%2C%0A%09%09%22%u2116%22%3A%20%22%23%22%2C%0A%09%09%22%u0424%22%3A%20%22A%22%2C%0A%09%09%22%u0444%22%3A%20%22a%22%2C%0A%09%09%22%u0418%22%3A%20%22B%22%2C%0A%09%09%22%u0438%22%3A%20%22b%22%2C%0A%09%09%22%u0421%22%3A%20%22C%22%2C%0A%09%09%22%u0441%22%3A%20%22c%22%2C%0A%09%09%22%u0412%22%3A%20%22D%22%2C%0A%09%09%22%u0432%22%3A%20%22d%22%2C%0A%09%09%22%u0423%22%3A%20%22E%22%2C%0A%09%09%22%u0443%22%3A%20%22e%22%2C%0A%09%09%22%u0410%22%3A%20%22F%22%2C%0A%09%09%22%u0430%22%3A%20%22f%22%2C%0A%09%09%22%u041F%22%3A%20%22G%22%2C%0A%09%09%22%u043F%22%3A%20%22g%22%2C%0A%09%09%22%u0420%22%3A%20%22H%22%2C%0A%09%09%22%u0440%22%3A%20%22h%22%2C%0A%09%09%22%u0428%22%3A%20%22I%22%2C%0A%09%09%22%u0448%22%3A%20%22i%22%2C%0A%09%09%22%u041E%22%3A%20%22J%22%2C%0A%09%09%22%u043E%22%3A%20%22j%22%2C%0A%09%09%22%u041B%22%3A%20%22K%22%2C%0A%09%09%22%u043B%22%3A%20%22k%22%2C%0A%09%09%22%u0414%22%3A%20%22L%22%2C%0A%09%09%22%u0434%22%3A%20%22l%22%2C%0A%09%09%22%u042C%22%3A%20%22M%22%2C%0A%09%09%22%u044C%22%3A%20%22m%22%2C%0A%09%09%22%u0422%22%3A%20%22N%22%2C%0A%09%09%22%u0442%22%3A%20%22n%22%2C%0A%09%09%22%u0429%22%3A%20%22O%22%2C%0A%09%09%22%u0449%22%3A%20%22o%22%2C%0A%09%09%22%u0417%22%3A%20%22P%22%2C%0A%09%09%22%u0437%22%3A%20%22p%22%2C%0A%09%09%22%u0419%22%3A%20%22Q%22%2C%0A%09%09%22%u0439%22%3A%20%22q%22%2C%0A%09%09%22%u041A%22%3A%20%22R%22%2C%0A%09%09%22%u043A%22%3A%20%22r%22%2C%0A%09%09%22%u042B%22%3A%20%22S%22%2C%0A%09%09%22%u044B%22%3A%20%22s%22%2C%0A%09%09%22%u0415%22%3A%20%22T%22%2C%0A%09%09%22%u0435%22%3A%20%22t%22%2C%0A%09%09%22%u0413%22%3A%20%22U%22%2C%0A%09%09%22%u0433%22%3A%20%22u%22%2C%0A%09%09%22%u041C%22%3A%20%22V%22%2C%0A%09%09%22%u043C%22%3A%20%22v%22%2C%0A%09%09%22%u0426%22%3A%20%22W%22%2C%0A%09%09%22%u0446%22%3A%20%22w%22%2C%0A%09%09%22%u0427%22%3A%20%22X%22%2C%0A%09%09%22%u0447%22%3A%20%22x%22%2C%0A%09%09%22%u041D%22%3A%20%22Y%22%2C%0A%09%09%22%u043D%22%3A%20%22y%22%2C%0A%09%09%22%u042F%22%3A%20%22Z%22%2C%0A%09%09%22%u044F%22%3A%20%22z%22%2C%0A%09%09__proto__%3A%20null%0A%09%7D%2C%0A%09//%3D%3D%20End%20of%20options%0A%09button%3A%20this%2C%0A%09get%20convTableBackward%28%29%20%7B%0A%09%09var%20ctb%20%3D%20%7B%20__proto__%3A%20null%20%7D%3B%0A%09%09var%20ctf%20%3D%20this.convTableForward%3B%0A%09%09for%28var%20c%20in%20ctf%29%0A%09%09%09ctb%5Bctf%5Bc%5D%5D%20%3D%20c%3B%0A%09%09delete%20this.convTableBackward%3B%0A%09%09return%20this.convTableBackward%20%3D%20ctb%3B%0A%09%7D%2C%0A%09inPrimaryLayout%3A%20function%28s%29%20%7B%0A%09%09for%28var%20i%20%3D%200%2C%20l%20%3D%20s.length%3B%20i%20%3C%20l%3B%20++i%29%20%7B%0A%09%09%09var%20c%20%3D%20s.charAt%28i%29%3B%0A%09%09%09if%28c%20in%20this.convTableForward%29%0A%09%09%09%09return%20true%3B%0A%09%09%09if%28c%20in%20this.convTableBackward%29%0A%09%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09return%20false%3B%0A%09%7D%2C%0A%09switchKeybLayout%3A%20function%28s%2C%20convTable%29%20%7B%0A%09%09var%20res%20%3D%20%22%22%3B%0A%09%09for%28var%20i%20%3D%200%2C%20l%20%3D%20s.length%3B%20i%20%3C%20l%3B%20++i%29%20%7B%0A%09%09%09var%20c%20%3D%20s.charAt%28i%29%3B%0A%09%09%09res%20+%3D%20c%20in%20convTable%20%3F%20convTable%5Bc%5D%20%3A%20c%3B%0A%09%09%7D%0A%09%09return%20res%3B%0A%09%7D%2C%0A%09switchSelKeybLayout%3A%20function%28_subCall%2C%20_focusFixed%29%20%7B%0A%09%09if%28%0A%09%09%09%21_focusFixed%0A%09%09%09%26%26%20%22closeMenus%22%20in%20window%0A%09%09%09%26%26%20document.commandDispatcher.focusedElement%20%3D%3D%20this.button%0A%09%09%29%20%7B%0A%09%09%09closeMenus%28this.button%29%3B%0A%09%09%09setTimeout%28function%28_this%29%20%7B%0A%09%09%09%09_this.switchSelKeybLayout%28_subCall%2C%20true%29%3B%0A%09%09%09%7D%2C%200%2C%20this%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09var%20fe%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09if%28%21fe%29%0A%09%09%09return%3B%0A%09%09if%28fe%20instanceof%20HTMLInputElement%20%7C%7C%20fe%20instanceof%20HTMLTextAreaElement%29%20%7B%0A%09%09%09var%20ta%20%3D%20fe%3B%0A%09%09%09try%20%7B%0A%09%09%09%09var%20val%20%3D%20ta.value%3B%0A%09%09%09%09var%20sel%20%3D%20val.substring%28ta.selectionStart%2C%20ta.selectionEnd%29%3B%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%20//%20Non-text%20HTMLInputElement%0A%09%09%09%09return%3B%0A%09%09%09%7D%0A%09%09%09if%28%21sel%20%26%26%20val%20%26%26%20this.noSelBehavior%20%26%26%20%21_subCall%29%20%7B%0A%09%09%09%09if%28this.noSelBehavior%20%3D%3D%201%29%20%7B%0A%09%09%09%09%09ta.selectionStart%20%3D%200%3B%0A%09%09%09%09%09ta.selectionEnd%20%3D%20val.length%3B%0A%09%09%09%09%09sel%20%3D%20val%3B%0A%09%09%09%09%7D%0A%09%09%09%09else%20%7B%0A%09%09%09%09%09this.handleNoSel%28ta%29%3B%0A%09%09%09%09%09return%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09if%28%21sel%29%0A%09%09%09%09return%3B%0A%09%09%09var%20res%20%3D%20this.switchKeybLayout%28%0A%09%09%09%09sel%2C%0A%09%09%09%09this.inPrimaryLayout%28sel%29%0A%09%09%09%09%09%3F%20this.convTableForward%0A%09%09%09%09%09%3A%20this.convTableBackward%0A%09%09%09%29%3B%0A%09%09%09if%28res%20%21%3D%20sel%29%0A%09%09%09%09this.insertText%28ta%2C%20res%29%3B%0A%09%09%7D%0A%09%09else%20if%28fe.contentEditable%20%3D%3D%20%22true%22%29%20%7B%0A%09%09%09var%20doc%20%3D%20fe.ownerDocument%3B%0A%0A%09%09%09var%20docURI%20%3D%20doc.documentURI%3B%0A%09%09%09if%28%0A%09%09%09%09docURI.substr%280%2C%205%29%20%3D%3D%20%22data%3A%22%0A%09%09%09%09%26%26%20docURI.indexOf%28%22chrome%3A//browser/skin/devtools/%22%29%20%21%3D%20-1%0A%09%09%09%29%20%7B%0A%09%09%09%09//%7E%20todo%3A%20seems%20like%20we%20only%20can%20use%20paste%20from%20clipboard%20here...%0A%09%09%09%09return%3B%0A%09%09%09%7D%0A%0A%09%09%09var%20sel%20%3D%20doc.defaultView.getSelection%28%29%3B%0A%09%09%09var%20rng%20%3D%20sel.rangeCount%20%26%26%20sel.getRangeAt%280%29%3B%0A%09%09%09var%20tmpNode%3B%0A%09%09%09if%28%21rng%20%7C%7C%20rng.collapsed%29%20%7B%0A%09%09%09%09if%28%21this.noSelBehavior%20%7C%7C%20_subCall%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09if%28this.noSelBehavior%20%3D%3D%201%29%20%7B%0A%09%09%09%09%09var%20r%20%3D%20doc.createRange%28%29%3B%0A%09%09%09%09%09r.selectNodeContents%28fe%29%3B%0A%09%09%09%09%09sel.removeAllRanges%28%29%3B%0A%09%09%09%09%09sel.addRange%28r%29%3B%0A%09%09%09%09%09tmpNode%20%3D%20fe.cloneNode%28true%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09else%20%7B%0A%09%09%09%09%09this.handleNoSel%28fe%29%3B%0A%09%09%09%09%09return%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09else%20%7B%0A%09%09%09%09tmpNode%20%3D%20doc.createElementNS%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22div%22%29%3B%0A%09%09%09%09tmpNode.appendChild%28rng.cloneContents%28%29%29%3B%0A%09%09%09%7D%0A%0A%09%09%09var%20orig%20%3D%20tmpNode.innerHTML%3B%0A%09%09%09var%20convTable%20%3D%20this.inPrimaryLayout%28tmpNode.textContent%29%0A%09%09%09%09%3F%20this.convTableForward%0A%09%09%09%09%3A%20this.convTableBackward%3B%0A%0A%09%09%09var%20_this%20%3D%20this%3B%0A%09%09%09var%20parseChildNodes%20%3D%20function%28node%29%20%7B%0A%09%09%09%09if%28node%20instanceof%20Element%29%20%7B%0A%09%09%09%09%09var%20childNodes%20%3D%20node.childNodes%3B%0A%09%09%09%09%09for%28var%20i%20%3D%20childNodes.length%20-%201%3B%20i%20%3E%3D%200%3B%20--i%29%0A%09%09%09%09%09%09parseChildNodes%28childNodes%5Bi%5D%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09else%20if%28node.nodeType%20%3D%3D%20node.TEXT_NODE%29%20%7B%0A%09%09%09%09%09var%20text%20%3D%20node.nodeValue%3B%0A%09%09%09%09%09var%20newText%20%3D%20_this.switchKeybLayout%28node.nodeValue%2C%20convTable%29%3B%0A%09%09%09%09%09if%28newText%20%21%3D%20text%29%0A%09%09%09%09%09%09node.parentNode.replaceChild%28doc.createTextNode%28newText%29%2C%20node%29%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09parseChildNodes%28tmpNode%29%3B%0A%0A%09%09%09var%20res%20%3D%20tmpNode.innerHTML%3B%0A%09%09%09if%28res%20%21%3D%20orig%29%0A%09%09%09%09doc.execCommand%28%22insertHTML%22%2C%20false%2C%20res%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09handleNoSel%3A%20function%28node%29%20%7B%0A%09%09this.select%28node%29%3B%0A%09%09this.switchSelKeybLayout%28true%29%3B%0A%09%7D%2C%0A%09select%3A%20function%28node%29%20%7B%0A%09%09var%20e%20%3D%20this.noSelBehavior%3B%0A%09%09if%28%21e%20%7C%7C%20typeof%20e%20%21%3D%20%22object%22%29%0A%09%09%09return%3B%0A%09%09var%20evt%20%3D%20document.createEvent%28%22KeyboardEvent%22%29%3B%0A%09%09evt.initKeyEvent%28%0A%09%09%09%22keypress%22%2C%20true%20/*bubbles*/%2C%20true%20/*cancelable*/%2C%20node.ownerDocument.defaultView%2C%0A%09%09%09e.ctrlKey%2C%20e.altKey%2C%20e.shiftKey%2C%20e.metaKey%2C%0A%09%09%09e.keyCode%2C%20e.charCode%0A%09%09%29%3B%0A%09%09node.dispatchEvent%28evt%29%3B%0A%09%7D%2C%0A%09insertText%3A%20function%28ta%2C%20text%29%20%7B%0A%09%09var%20editor%20%3D%20ta.QueryInterface%28Components.interfaces.nsIDOMNSEditableElement%29%0A%09%09%09.editor%0A%09%09%09.QueryInterface%28Components.interfaces.nsIPlaintextEditor%29%3B%0A%09%09if%28editor.flags%20%26%20editor.eEditorReadonlyMask%29%0A%09%09%09return%3B%0A%0A%09%09var%20sTop%20%3D%20ta.scrollTop%3B%0A%09%09var%20sHeight%20%3D%20ta.scrollHeight%3B%0A%09%09var%20sLeft%20%3D%20ta.scrollLeft%3B%0A%09%09//%20var%20sWidth%20%3D%20ta.scrollWidth%3B%0A%0A%09%09if%28text%29%0A%09%09%09editor.insertText%28text%29%3B%0A%09%09else%0A%09%09%09editor.deleteSelection%280%2C%200%29%3B%0A%0A%09%09ta.scrollTop%20%3D%20sTop%20+%20%28ta.scrollHeight%20-%20sHeight%29%3B%0A%09%09ta.scrollLeft%20%3D%20sLeft%3B%20//%20+%20%28ta.scrollWidth%20-%20sWidth%29%3B%0A%09%7D%0A%7D%3B%0A%0Avar%20btn%20%3D%20this%3B%0Aif%28btn%20instanceof%20XULElement%20%26%26%20addEventListener.length%20%3E%203%29%20%7B%0A%09addEventListener%28%22command%22%2C%20function%28e%29%20%7B%0A%09%09if%28e.target%20%21%3D%20btn%29%0A%09%09%09return%3B%0A%09%09e.preventDefault%28%29%3B%0A%09%09e.stopPropagation%28%29%3B%0A%09%09keybUtils.switchSelKeybLayout%28%29%3B%0A%09%7D%2C%20true%2C%20this.parentNode%29%3B%0A%7D%0AkeybUtils.switchSelKeybLayout%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E"
>Install</a>
| <a href="https://github.com/Infocatcher/Custom_Buttons/tree/master/Switch_Keyboard_Layout">Source</a>
| <a href="https://github.com/Infocatcher/Custom_Buttons#usage">Instructions</a>
<script type="text/javascript">
var a = document.getElementsByTagName("a")[0];
a.title = document.title;
if(/%3Cimage%3E%3C%21%5BCDATA%5B(data%3A\S+)%5D%5D%3E%3C\/image%3E/.test(a.href)) {
var icon = decodeURIComponent(RegExp.$1);
var img = document.createElement("img");
img.src = icon;
img.alt = "";
img.style.verticalAlign = "middle";
img.style.marginRight = "4px";
img.style.border = "none";
a.insertBefore(img, a.firstChild);
var link = document.createElement("link");
link.rel = "shortcut icon";
link.href = icon;
document.documentElement.insertBefore(link, document.documentElement.firstChild);
}
</script>
<script type="text/javascript" src="https://infocatcher.github.io/Custom_Buttons/viewCustomButton.js"></script>
<script type="text/javascript">
if("viewCustomButtonCode" in window) setTimeout(function() {
viewCustomButtonCode(a.href);
}, 0);
</script>
</body>