How to use getText method in Appium Android Driver

Best JavaScript code snippet using appium-android-driver

keyboard.js

Source:keyboard.js Github

copy

Full Screen

12var VKI_attach, VKI_close;3  function VKI_buildKeyboardInputs() {4    var self = this;5    this.VKI_version = "1.37";6    this.VKI_showVersion = false;7    this.VKI_target = false;8    this.VKI_shift = this.VKI_shiftlock = false;9    this.VKI_altgr = this.VKI_altgrlock = false;10    this.VKI_dead = false;11    this.VKI_deadkeysOn = false;12    this.VKI_kts = this.VKI_kt = "US Int'l";  // Default keyboard layout13    //this.VKI_kts = this.VKI_kt = "US"; 14    this.VKI_langAdapt = true;  // Use lang attribute of input to select keyboard15    this.VKI_size = 2;  // Default keyboard size (1-5)16    this.VKI_sizeAdj = false;  // Allow user to adjust keyboard size17    this.VKI_clearPasswords = false;  // Clear password fields on focus18    this.VKI_imageURI = rcmail.env.skin == "classic" ? "plugins/vkeyboard/skins/classic/keyboard.png" : "program/resources/blank.gif";  // If empty string, use imageless mode19    this.VKI_clickless = 0;  // 0 = disabled, > 0 = delay in ms20    this.VKI_keyCenter = 3;2122    this.VKI_isIE = /*@cc_on!@*/false;23    this.VKI_isIE6 = /*@if(@_jscript_version == 5.6)!@end@*/false;24    this.VKI_isIElt8 = /*@if(@_jscript_version < 5.8)!@end@*/false;25    this.VKI_isWebKit = window.opera;26    this.VKI_isOpera = RegExp("Opera").test(navigator.userAgent);27    this.VKI_isMoz = (!this.VKI_isWebKit && navigator.product == "Gecko");282930    /* ***** i18n text strings ************************************* */31    this.VKI_i18n = {32      '00': rcmail.gettext('vk00','vkeyboard'),33      '01': rcmail.gettext('vk01','vkeyboard'),34      '02': rcmail.gettext('vk02','vkeyboard'),35      '03': rcmail.gettext('vk03','vkeyboard'),36      '04': rcmail.gettext('vk04','vkeyboard'),37      '05': rcmail.gettext('vk05','vkeyboard'),38      '06': rcmail.gettext('vk06','vkeyboard'),39      '07': rcmail.gettext('vk07','vkeyboard'),40      '08': rcmail.gettext('vk08','vkeyboard'),41      '09': rcmail.gettext('vk09','vkeyboard'),42      '10': rcmail.gettext('vk10','vkeyboard')43    };444546    /* ***** Create keyboards ************************************** */47    this.VKI_layout = {};4849    // - Lay out each keyboard in rows of sub-arrays.  Each sub-array50    //   represents one key.51    //52    // - Each sub-array consists of four slots described as follows:53    //     example: ["a", "A", "\u00e1", "\u00c1"]54    //55    //          a) Normal character56    //          A) Character + Shift/Caps57    //     \u00e1) Character + Alt/AltGr/AltLk58    //     \u00c1) Character + Shift/Caps + Alt/AltGr/AltLk59    //60    //   You may include sub-arrays which are fewer than four slots.61    //   In these cases, the missing slots will be blanked when the62    //   corresponding modifier key (Shift or AltGr) is pressed.63    //64    // - If the second slot of a sub-array matches one of the following65    //   strings:66    //     rcmail.gettext('tab','vkeyboard'), rcmail.gettext('caps','vkeyboard'), rcmail.gettext('shift','vkeyboard'), rcmail.gettext('enter','vkeyboard'), rcmail.gettext('bksp','vkeyboard'),67    //     "Alt" OR "AltGr", "AltLk"68    //   then the function of the key will be the following,69    //   respectively:70    //     - Insert a tab71    //     - Toggle Caps Lock (technically a Shift Lock)72    //     - Next entered character will be the shifted character73    //     - Insert a newline (textarea), or close the keyboard74    //     - Delete the previous character75    //     - Next entered character will be the alternate character76    //     - Toggle Alt/AltGr Lock77    //78    //   The first slot of this sub-array will be the text to display79    //   on the corresponding key.  This allows for easy localisation80    //   of key names.81    //82    // - Layout dead keys (diacritic + letter) should be added as83    //   arrays of two item arrays with hash keys equal to the84    //   diacritic.  See the "this.VKI_deadkey" object below the layout85    //   definitions.  In  each two item child array, the second item86    //   is what the diacritic would change the first item to.87    //88    // - To disable dead keys for a layout, simply assign true to the89    //   DDK property of the layout (DDK = disable dead keys).  See the90    //   Numpad layout below for an example.91    //92    // - Note that any characters beyond the normal ASCII set should be93    //   entered in escaped Unicode format.  (eg \u00a3 = Pound symbol)94    //   You can find Unicode values for characters here:95    //     http://unicode.org/charts/96    //97    // - To remove a keyboard, just delete it, or comment it out of the98    //   source code. If you decide to remove the US Int'l keyboard99    //   layout, make sure you change the default layout (this.VKI_kt)100    //   above so it references an existing layout.   101102    this.VKI_layout.Arabic = [ // Arabic Keyboard103      [["\u0630", "\u0651 "], ["1", "!", "\u00a1", "\u00b9"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a4", "\u00a3"], ["5", "%", "\u20ac"], ["6", "^", "\u00bc"], ["7", "&", "\u00bd"], ["8", "*", "\u00be"], ["9", "(", "\u2018"], ["0", ")", "\u2019"], ["-", "_", "\u00a5"], ["=", "+", "\u00d7", "\u00f7"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],104      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0636", "\u064e"], ["\u0635", "\u064b"], ["\u062b", "\u064f"], ["\u0642", "\u064c"], ["\u0641", "\u0644"], ["\u063a", "\u0625"], ["\u0639", "\u2018"], ["\u0647", "\u00f7"], ["\u062e", "\u00d7"], ["\u062d", "\u061b"], ["\u062c", "\u003c"], ["\u062f", "\u003e"], ["\u005c", "\u007c"]],105      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0634", "\u0650"], ["\u0633", "\u064d"], ["\u064a", "\u005d"], ["\u0628", "\u005b"], ["\u0644", "\u0644"], ["\u0627", "\u0623"], ["\u062a", "\u0640"], ["\u0646", "\u060c"], ["\u0645", "\u002f"], ["\u0643", "\u003a"], ["\u0637", "\u0022"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],106      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u0626", "\u007e"], ["\u0621", "\u0652"], ["\u0624", "\u007d"], ["\u0631", "\u007b"], ["\u0644", "\u0644"], ["\u0649", "\u0622"], ["\u0629", "\u2019"], ["\u0648", "\u002c"], ["\u0632", "\u002e"], ["\u0638", "\u061f"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],107      [[" ", " ", " ", " "], ["Alt", "Alt"]]108    ]; this.VKI_layout.Arabic.lang = ["ar_SA"];109110    this.VKI_layout["Armenian East"] = [ // Eastern Armenian Keyboard111      [["\u055D", "\u055C"], [":", "1"], ["\u0571", "\u0541"], ["\u0575", "\u0545"], ["\u055B", "3"], [",", "4"], ["-", "9"], [".", "\u0587"], ["\u00AB", "("], ["\u00BB", ")"], ["\u0585", "\u0555"], ["\u057C", "\u054C"], ["\u056A", "\u053A"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],112      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u056D", "\u053D"], ["\u0582", "\u0552"], ["\u0567", "\u0537"], ["\u0580", "\u0550"], ["\u057F", "\u054F"], ["\u0565", "\u0535"], ["\u0568", "\u0538"], ["\u056B", "\u053B"], ["\u0578", "\u0548"], ["\u057A", "\u054A"], ["\u0579", "\u0549"], ["\u057B", "\u054B"], ["'", "\u055E"]],113      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0561", "\u0531"], ["\u057D", "\u054D"], ["\u0564", "\u0534"], ["\u0586", "\u0556"], ["\u0584", "\u0554"], ["\u0570", "\u0540"], ["\u0573", "\u0543"], ["\u056F", "\u053F"], ["\u056C", "\u053C"], ["\u0569", "\u0539"], ["\u0583", "\u0553"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],114      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u0566", "\u0536"], ["\u0581", "\u0551"], ["\u0563", "\u0533"], ["\u057E", "\u054E"], ["\u0562", "\u0532"], ["\u0576", "\u0546"], ["\u0574", "\u0544"], ["\u0577", "\u0547"], ["\u0572", "\u0542"], ["\u056E", "\u053E"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],115      [[" ", " "]]116    ]; this.VKI_layout["Armenian East"].lang = ["hy_AM"];117118    this.VKI_layout["Armenian West"] = [ // Western Armenian Keyboard119      [["\u055D", "\u055C"], [":", "1"], ["\u0571", "\u0541"], ["\u0575", "\u0545"], ["\u055B", "3"], [",", "4"], ["-", "9"], [".", "\u0587"], ["\u00AB", "("], ["\u00BB", ")"], ["\u0585", "\u0555"], ["\u057C", "\u054C"], ["\u056A", "\u053A"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],120      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u056D", "\u053D"], ["\u057E", "\u054E"], ["\u0567", "\u0537"], ["\u0580", "\u0550"], ["\u0564", "\u0534"], ["\u0565", "\u0535"], ["\u0568", "\u0538"], ["\u056B", "\u053B"], ["\u0578", "\u0548"], ["\u0562", "\u0532"], ["\u0579", "\u0549"], ["\u057B", "\u054B"], ["'", "\u055E"]],121      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0561", "\u0531"], ["\u057D", "\u054D"], ["\u057F", "\u054F"], ["\u0586", "\u0556"], ["\u056F", "\u053F"], ["\u0570", "\u0540"], ["\u0573", "\u0543"], ["\u0584", "\u0554"], ["\u056C", "\u053C"], ["\u0569", "\u0539"], ["\u0583", "\u0553"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],122      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u0566", "\u0536"], ["\u0581", "\u0551"], ["\u0563", "\u0533"], ["\u0582", "\u0552"], ["\u057A", "\u054A"], ["\u0576", "\u0546"], ["\u0574", "\u0544"], ["\u0577", "\u0547"], ["\u0572", "\u0542"], ["\u056E", "\u053E"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],123      [[" ", " "]]124    ]; this.VKI_layout["Armenian West"].lang = ["hy-arevmda"];125126    this.VKI_layout.Belarusian = [ // Belarusian Standard Keyboard127      [["\u0451", "\u0401"], ["1", "!"], ["2", '"'], ["3", "\u2116"], ["4", ";"], ["5", "%"], ["6", ":"], ["7", "?"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],128      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0439", "\u0419"], ["\u0446", "\u0426"], ["\u0443", "\u0423"], ["\u043a", "\u041a"], ["\u0435", "\u0415"], ["\u043d", "\u041d"], ["\u0433", "\u0413"], ["\u0448", "\u0428"], ["\u045e", "\u040e"], ["\u0437", "\u0417"], ["\u0445", "\u0425"], ["'", "'"], ["\\", "/"]],129      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0444", "\u0424"], ["\u044b", "\u042b"], ["\u0432", "\u0412"], ["\u0430", "\u0410"], ["\u043f", "\u041f"], ["\u0440", "\u0420"], ["\u043e", "\u041e"], ["\u043b", "\u041b"], ["\u0434", "\u0414"], ["\u0436", "\u0416"], ["\u044d", "\u042d"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],130      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["/", "|"], ["\u044f", "\u042f"], ["\u0447", "\u0427"], ["\u0441", "\u0421"], ["\u043c", "\u041c"], ["\u0456", "\u0406"], ["\u0442", "\u0422"], ["\u044c", "\u042c"], ["\u0431", "\u0411"], ["\u044e", "\u042e"], [".", ","], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],131      [[" ", " "]]132    ]; this.VKI_layout.Belarusian.lang = ["be"];133134    this.VKI_layout.Belgian = [ // Belgian Standard Keyboard135      [["\u00b2", "\u00b3"], ["&", "1", "|"], ["\u00e9", "2", "@"], ['"', "3", "#"], ["'", "4"], ["(", "5"], ["\u00a7", "6", "^"], ["\u00e8", "7"], ["!", "8"], ["\u00e7", "9", "{"], ["\u00e0", "0", "}"], [")", "\u00b0"], ["-", "_"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],136      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["a", "A"], ["z", "Z"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u005e", "\u00a8", "["], ["$", "*", "]"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],137      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["q", "Q"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["m", "M"], ["\u00f9", "%", "\u00b4"], ["\u03bc", "\u00a3", "`"]],138      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">", "\\"], ["w", "W"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], [",", "?"], [";", "."], [":", "/"], ["=", "+", "~"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],139      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]140    ]; this.VKI_layout.Belgian.lang = ["nl_BE", "fr_BE"];141142    this.VKI_layout.Bengali = [ // Bengali Standard Keyboard143      [[""], ["1", "", "\u09E7"], ["2", "", "\u09E8"], ["3", "\u09CD\u09B0", "\u09E9"], ["4", "\u09B0\u09CD", "\u09EA"], ["5", "\u099C\u09CD\u09B0", "\u09EB"], ["6", "\u09A4\u09CD\u09B7", "\u09EC"], ["7", "\u0995\u09CD\u09B0", "\u09ED"], ["8", "\u09B6\u09CD\u09B0", "\u09EE"], ["9", "(", "\u09EF"], ["0", ")", "\u09E6"], ["-", "\u0983"], ["\u09C3", "\u098B", "\u09E2", "\u09E0"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],144      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u09CC", "\u0994", "\u09D7"], ["\u09C8", "\u0990"], ["\u09BE", "\u0986"], ["\u09C0", "\u0988", "\u09E3", "\u09E1"], ["\u09C2", "\u098A"], ["\u09AC", "\u09AD"], ["\u09B9", "\u0999"], ["\u0997", "\u0998"], ["\u09A6", "\u09A7"], ["\u099C", "\u099D"], ["\u09A1", "\u09A2", "\u09DC", "\u09DD"], ["\u09BC", "\u099E"]],145      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u09CB", "\u0993", "\u09F4", "\u09F5"], ["\u09C7", "\u098F", "\u09F6", "\u09F7"], ["\u09CD", "\u0985", "\u09F8", "\u09F9"], ["\u09BF", "\u0987", "\u09E2", "\u098C"], ["\u09C1", "\u0989"], ["\u09AA", "\u09AB"], ["\u09B0", "", "\u09F0", "\u09F1"], ["\u0995", "\u0996"], ["\u09A4", "\u09A5"], ["\u099A", "\u099B"], ["\u099F", "\u09A0"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],146      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], [""], ["\u0982", "\u0981", "\u09FA"], ["\u09AE", "\u09A3"], ["\u09A8"], ["\u09AC"], ["\u09B2"], ["\u09B8", "\u09B6"], [",", "\u09B7"], [".", "{"], ["\u09AF", "\u09DF"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],147      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]148    ]; this.VKI_layout.Bengali.lang = ["bn_BD"];149150    this.VKI_layout['Bulgarian Ph'] = [ // Bulgarian Phonetic Keyboard151      [["\u0447", "\u0427"], ["1", "!"], ["2", "@"], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],152      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u044F", "\u042F"], ["\u0432", "\u0412"], ["\u0435", "\u0415"], ["\u0440", "\u0420"], ["\u0442", "\u0422"], ["\u044A", "\u042A"], ["\u0443", "\u0423"], ["\u0438", "\u0418"], ["\u043E", "\u041E"], ["\u043F", "\u041F"], ["\u0448", "\u0428"], ["\u0449", "\u0429"], ["\u044E", "\u042E"]],153      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0430", "\u0410"], ["\u0441", "\u0421"], ["\u0434", "\u0414"], ["\u0444", "\u0424"], ["\u0433", "\u0413"], ["\u0445", "\u0425"], ["\u0439", "\u0419"], ["\u043A", "\u041A"], ["\u043B", "\u041B"], [";", ":"], ["'", '"'], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],154      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u0437", "\u0417"], ["\u044C", "\u042C"], ["\u0446", "\u0426"], ["\u0436", "\u0416"], ["\u0431", "\u0411"], ["\u043D", "\u041D"], ["\u043C", "\u041C"], [",", "<"], [".", ">"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],155      [[" ", " "]]156    ]; this.VKI_layout['Bulgarian Ph'].lang = ["bg_BG"];157158    this.VKI_layout['Bulgarian BDS'] = [ // Bulgarian BDS Keyboard159      [["`", "~"], ["1", "!"], ["2", "?"], ["3", "+"], ["4", '"'], ["5", "%"], ["6", "="], ["7", ":"], ["8", "/"], ["9", "_"], ["0", "\u2116"], ["-", "\u0406"], ["=", "V"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],160      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], [",", "\u044b"], ["\u0443", "\u0423"], ["\u0435", "\u0415"], ["\u0438", "\u0418"], ["\u0448", "\u0428"], ["\u0449", "\u0429"], ["\u043a", "\u041a"], ["\u0441", "\u0421"], ["\u0434", "\u0414"], ["\u0437", "\u0417"], ["\u0446", "\u0426"], [";", "\u00a7"], ["(", ")"]],161      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u044c", "\u042c"], ["\u044f", "\u042f"], ["\u0430", "\u0410"], ["\u043e", "\u041e"], ["\u0436", "\u0416"], ["\u0433", "\u0413"], ["\u0442", "\u0422"], ["\u043d", "\u041d"], ["\u0412", "\u0412"], ["\u043c", "\u041c"], ["\u0447", "\u0427"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],162      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u042e", "\u044e"], ["\u0439", "\u0419"], ["\u044a", "\u042a"], ["\u044d", "\u042d"], ["\u0444", "\u0424"], ["\u0445", "\u0425"], ["\u043f", "\u041f"], ["\u0440", "\u0420"], ["\u043b", "\u041b"], ["\u0431", "\u0411"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],163      [[" ", " "]]164    ];165166    this.VKI_layout.Burmese = [ // Burmese Keyboard167      [["\u1039`", "~"], ["\u1041", "\u100D"], ["\u1042", "\u100E"], ["\u1043", "\u100B"], ["\u1044", "\u1000\u103B\u1015\u103A"], ["\u1045", "%"], ["\u1046", "\u002F"], ["\u1047", "\u101B"], ["\u1048", "\u1002"], ["\u1049", "("], ["\u1040", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],168      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u1006", "\u1029"], ["\u1010", "\u1040"], ["\u1014", "\u103F"], ["\u1019", "\u1023"], ["\u1021", "\u1024"], ["\u1015", "\u104C"], ["\u1000", "\u1009"], ["\u1004", "\u104D"], ["\u101E", "\u1025"], ["\u1005", "\u100F"], ["\u101F", "\u1027"], ["\u2018", "\u2019"], ["\u104F", "\u100B\u1039\u100C"]],169      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u200B\u1031", "\u1017"], ["\u200B\u103B", "\u200B\u103E"], ["\u200B\u102D", "\u200B\u102E"], ["\u200B\u103A","\u1004\u103A\u1039\u200B"], ["\u200B\u102B", "\u200B\u103D"], ["\u200B\u1037", "\u200B\u1036"], ["\u200B\u103C", "\u200B\u1032"], ["\u200B\u102F", "\u200B\u102F"], ["\u200B\u1030", "\u200B\u1030"], ["\u200B\u1038", "\u200B\u102B\u103A"], ["\u1012", "\u1013"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],170      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u1016", "\u1007"], ["\u1011", "\u100C"], ["\u1001", "\u1003"], ["\u101C", "\u1020"], ["\u1018", "\u1026"], ["\u100A", "\u1008"], ["\u200B\u102C", "\u102A"], ["\u101A", "\u101B"], ["\u002E", "\u101B"], ["\u104B", "\u104A"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],171      [[" ", " "]]172    ]; this.VKI_layout.Burmese.lang = ["ms_MY"];173174    this.VKI_layout.Czech = [ // Czech Keyboard175     [[";", "\u00b0", "`", "~"], ["+", "1", "!"], ["\u011B", "2", "@"], ["\u0161", "3", "#"], ["\u010D", "4", "$"], ["\u0159", "5", "%"], ["\u017E", "6", "^"], ["\u00FD", "7", "&"], ["\u00E1", "8", "*"], ["\u00ED", "9", "("], ["\u00E9", "0", ")"], ["=", "%", "-", "_"], ["\u00B4", "\u02c7", "=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],176     [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20AC"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00FA", "/", "[", "{"], [")", "(", "]", "}"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],177     [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u016F", '"', ";", ":"], ["\u00A7", "!", "\u00a4", "^"], ["\u00A8", "'", "\\", "|"]],178     [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\\", "|", "", "\u02dd"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "?", "<", "\u00d7"], [".", ":", ">", "\u00f7"], ["-", "_", "/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],179     [[" ", " ", " ", " "], ["Alt", "Alt"]]180    ];  this.VKI_layout.Czech.lang = ["cs_CZ"];181182    this.VKI_layout.Danish = [ // Danish Standard Keyboard183      [["\u00bd", "\u00a7"], ["1", "!"], ["2", '"', "@"], ["3", "#", "\u00a3"], ["4", "\u00a4", "$"], ["5", "%", "\u20ac"], ["6", "&"], ["7", "/", "{"], ["8", "(", "["], ["9", ")", "]"], ["0", "=", "}"], ["+", "?"], ["\u00b4", "`", "|"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],184      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00e5", "\u00c5"], ["\u00a8", "^", "~"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],185      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00e6", "\u00c6"], ["\u00f8", "\u00d8"], ["'", "*"]],186      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">", "\\"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u03bc", "\u039c"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],187      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]188    ]; this.VKI_layout.Danish.lang = ["da_DK"];189190    this.VKI_layout.Dutch = [ // Dutch Standard Keyboard191      [["@", "\u00a7", "\u00ac"], ["1", "!", "\u00b9"], ["2", '"', "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00bc"], ["5", "%", "\u00bd"], ["6", "&", "\u00be"], ["7", "_", "\u00a3"], ["8", "(", "{"], ["9", ")", "}"], ["0", "'"], ["/", "?", "\\"], ["\u00b0", "~", "\u00b8"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],192      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R", "\u00b6"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00a8", "^"], ["*", "|"], ["<", ">"]],193      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S", "\u00df"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["+", "\u00b1"], ["\u00b4", "\u0060"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],194      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["]", "[", "\u00a6"], ["z", "Z", "\u00ab"], ["x", "X", "\u00bb"], ["c", "C", "\u00a2"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u00b5"], [",", ";"], [".", ":", "\u00b7"], ["-", "="], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],195      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]196    ]; this.VKI_layout.Dutch.lang = ["nl_NL"];197198    this.VKI_layout.Dvorak = [ // Dvorak Keyboard199      [["`", "~"], ["1", "!"], ["2", "@"], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["[", "{"], ["]", "}"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],200      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')],["'", '"'], [",", "<"], [".", ">"], ["p", "P"], ["y", "Y"], ["f", "F"], ["g", "G"], ["c", "C"], ["r", "R"], ["l", "L"], ["/", "?"], ["=", "+"], ["\\", "|"]],201      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["o", "O"], ["e", "E"], ["u", "U"], ["i", "I"], ["d", "D"], ["h", "H"], ["t", "T"], ["n", "N"], ["s", "S"], ["-", "_"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],202      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], [";", ":"], ["q", "Q"], ["j", "J"], ["k", "K"], ["x", "X"], ["b", "B"], ["m", "M"], ["w", "W"], ["v", "V"], ["z", "Z"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],203      [[" ", " "]]204    ];205206    this.VKI_layout.Farsi = [ // Farsi Keyboard207      [["\u067e", "\u0651 "], ["1", "!", "\u00a1", "\u00b9"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a4", "\u00a3"], ["5", "%", "\u20ac"], ["6", "^", "\u00bc"], ["7", "&", "\u00bd"], ["8", "*", "\u00be"], ["9", "(", "\u2018"], ["0", ")", "\u2019"], ["-", "_", "\u00a5"], ["=", "+", "\u00d7", "\u00f7"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],208      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0636", "\u064e"], ["\u0635", "\u064b"], ["\u062b", "\u064f"], ["\u0642", "\u064c"], ["\u0641", "\u0644"], ["\u063a", "\u0625"], ["\u0639", "\u2018"], ["\u0647", "\u00f7"], ["\u062e", "\u00d7"], ["\u062d", "\u061b"], ["\u062c", "\u003c"], ["\u0686", "\u003e"], ["\u0698", "\u007c"]],209      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0634", "\u0650"], ["\u0633", "\u064d"], ["\u064a", "\u005d"], ["\u0628", "\u005b"], ["\u0644", "\u0644"], ["\u0627", "\u0623"], ["\u062a", "\u0640"], ["\u0646", "\u060c"], ["\u0645", "\u005c"], ["\u06af", "\u003a"], ["\u0643", "\u0022"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],210      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u0626", "\u007e"], ["\u0621", "\u0652"], ["\u0632", "\u007d"], ["\u0631", "\u007b"], ["\u0630", "\u0644"], ["\u062f", "\u0622"], ["\u0626", "\u0621"], ["\u0648", "\u002c"], [".", "\u002e"], ["/", "\u061f"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],211      [[" ", " ", " ", " "], ["Alt", "Alt"]]212    ]; this.VKI_layout.Farsi.lang = ["fa"];213214    this.VKI_layout.French = [ // French Standard Keyboard215      [["\u00b2", "\u00b3"], ["&", "1"], ["\u00e9", "2", "~"], ['"', "3", "#"], ["'", "4", "{"], ["(", "5", "["], ["-", "6", "|"], ["\u00e8", "7", "\u0060"], ["_", "8", "\\"], ["\u00e7", "9", "\u005e"], ["\u00e0", "0", "\u0040"], [")", "\u00b0", "]"], ["=", "+", "}"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],216      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["a", "A"], ["z", "Z"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["^", "\u00a8"], ["$", "\u00a3", "\u00a4"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],217      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["q", "Q"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["m", "M"], ["\u00f9", "%"], ["*", "\u03bc"]],218      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["w", "W"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], [",", "?"], [";", "."], [":", "/"], ["!", "\u00a7"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],219      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]220    ]; this.VKI_layout.French.lang = ["fr_FR"];221222    this.VKI_layout.German = [ // German Standard Keyboard223      [["\u005e", "\u00b0"], ["1", "!"], ["2", '"', "\u00b2"], ["3", "\u00a7", "\u00b3"], ["4", "$"], ["5", "%"], ["6", "&"], ["7", "/", "{"], ["8", "(", "["], ["9", ")", "]"], ["0", "=", "}"], ["\u00df", "?", "\\"], ["\u00b4", "\u0060"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],224      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "\u0040"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00fc", "\u00dc"], ["+", "*", "~"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],225      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f6", "\u00d6"], ["\u00e4", "\u00c4"], ["#", "'"]],226      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">", "\u00a6"], ["y", "Y"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u00b5"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],227      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]228    ]; this.VKI_layout.German.lang = ["de_DE"];229230    this.VKI_layout.Greek = [ // Greek Standard Keyboard231      [["`", "~"], ["1", "!"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a3"], ["5", "%", "\u00a7"], ["6", "^", "\u00b6"], ["7", "&"], ["8", "*", "\u00a4"], ["9", "(", "\u00a6"], ["0", ")", "\u00ba"], ["-", "_", "\u00b1"], ["=", "+", "\u00bd"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],232      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], [";", ":"], ["\u03c2", "^"], ["\u03b5", "\u0395"], ["\u03c1", "\u03a1"], ["\u03c4", "\u03a4"], ["\u03c5", "\u03a5"], ["\u03b8", "\u0398"], ["\u03b9", "\u0399"], ["\u03bf", "\u039f"], ["\u03c0", "\u03a0"], ["[", "{", "\u201c"], ["]", "}", "\u201d"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],233      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u03b1", "\u0391"], ["\u03c3", "\u03a3"], ["\u03b4", "\u0394"], ["\u03c6", "\u03a6"], ["\u03b3", "\u0393"], ["\u03b7", "\u0397"], ["\u03be", "\u039e"], ["\u03ba", "\u039a"], ["\u03bb", "\u039b"], ["\u0384", "\u00a8", "\u0385"], ["'", '"'], ["\\", "|", "\u00ac"]],234      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["\u03b6", "\u0396"], ["\u03c7", "\u03a7"], ["\u03c8", "\u03a8"], ["\u03c9", "\u03a9"], ["\u03b2", "\u0392"], ["\u03bd", "\u039d"], ["\u03bc", "\u039c"], [",", "<"], [".", ">"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],235      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]236    ]; this.VKI_layout.Greek.lang = ["el_GR"];237238    this.VKI_layout.Hebrew = [ // Hebrew Standard Keyboard239      [["~", "`"], ["1", "!"], ["2", "@"], ["3", "#"], ["4" , "$", "\u20aa"], ["5" , "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", ")"], ["0", "("], ["-", "_"], ["=", "+"], ["\\", "|"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],240      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["/", "Q"], ["'", "W"], ["\u05e7", "E", "\u20ac"], ["\u05e8", "R"], ["\u05d0", "T"], ["\u05d8", "Y"], ["\u05d5", "U", "\u05f0"], ["\u05df", "I"], ["\u05dd", "O"], ["\u05e4", "P"], ["]", "}"], ["[", "{"]],241      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u05e9", "A"], ["\u05d3", "S"], ["\u05d2", "D"], ["\u05db", "F"], ["\u05e2", "G"], ["\u05d9", "H", "\u05f2"], ["\u05d7", "J", "\u05f1"], ["\u05dc", "K"], ["\u05da", "L"], ["\u05e3", ":"], ["," , '"'], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],242      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u05d6", "Z"], ["\u05e1", "X"], ["\u05d1", "C"], ["\u05d4", "V"], ["\u05e0", "B"], ["\u05de", "N"], ["\u05e6", "M"], ["\u05ea", ">"], ["\u05e5", "<"], [".", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],243      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]244    ]; this.VKI_layout.Hebrew.lang = ["he_IL"];245246    this.VKI_layout.Hindi = [ // Hindi Traditional Keyboard247      [["\u200d", "\u200c", "`", "~"], ["1", "\u090D", "\u0967", "!"], ["2", "\u0945", "\u0968", "@"], ["3", "\u094D\u0930", "\u0969", "#"], ["4", "\u0930\u094D", "\u096A", "$"], ["5", "\u091C\u094D\u091E", "\u096B", "%"], ["6", "\u0924\u094D\u0930", "\u096C", "^"], ["7", "\u0915\u094D\u0937", "\u096D", "&"], ["8", "\u0936\u094D\u0930", "\u096E", "*"], ["9", "(", "\u096F", "("], ["0", ")", "\u0966", ")"], ["-", "\u0903", "-", "_"], ["\u0943", "\u090B", "=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],248      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u094C", "\u0914"], ["\u0948", "\u0910"], ["\u093E", "\u0906"], ["\u0940", "\u0908"], ["\u0942", "\u090A"], ["\u092C", "\u092D"], ["\u0939", "\u0919"], ["\u0917", "\u0918"], ["\u0926", "\u0927"], ["\u091C", "\u091D"], ["\u0921", "\u0922", "[", "{"], ["\u093C", "\u091E", "]", "}"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],249      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u094B", "\u0913"], ["\u0947", "\u090F"], ["\u094D", "\u0905"], ["\u093F", "\u0907"], ["\u0941", "\u0909"], ["\u092A", "\u092B"], ["\u0930", "\u0931"], ["\u0915", "\u0916"], ["\u0924", "\u0925"], ["\u091A", "\u091B", ";", ":"], ["\u091F", "\u0920", "'", '"'], ["\u0949", "\u0911", "\\", "|"]],250      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], [""], ["\u0902", "\u0901", "", "\u0950"], ["\u092E", "\u0923"], ["\u0928"], ["\u0935"], ["\u0932", "\u0933"], ["\u0938", "\u0936"], [",", "\u0937", ",", "<"], [".", "\u0964", ".", ">"], ["\u092F", "\u095F", "/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],251      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]252    ]; this.VKI_layout.Hindi.lang = ["hi_IN"];253254    this.VKI_layout.Hungarian = [ // Hungarian Standard Keyboard255      [["0", "\u00a7"], ["1", "'", "\u007e"], ["2", '"', "\u02c7"], ["3", "+", "\u02c6"], ["4", "!", "\u02d8"], ["5", "%", "\u00b0"], ["6", "/", "\u02db"], ["7", "=", "\u0060"], ["8", "(", "\u02d9"], ["9", ")", "\u00b4"], ["\u00f6", "\u00d6", "\u02dd"], ["\u00fc", "\u00dc", "\u00a8"], ["\u00f3", "\u00d3", "\u00b8"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],256      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "\u005c"], ["w", "W", "\u007c"], ["e", "E", "\u00c4"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U", "\u20ac"], ["i", "I", "\u00cd"], ["o", "O"], ["p", "P"], ["\u0151", "\u0150", "\u00f7"], ["\u00fa", "\u00da", "\u00d7"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],257      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A", "\u00e4"], ["s", "S","\u0111"], ["d", "D","\u0110"], ["f", "F","\u005b"], ["g", "G","\u005d"], ["h", "H"], ["j", "J","\u00ed"], ["k", "K","\u0141"], ["l", "L","\u0142"], ["\u00e9", "\u00c9","\u0024"], ["\u00e1", "\u00c1","\u00df"], ["\u0171", "\u0170","\u00a4"]],258      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u00ed", "\u00cd","\u003c"], ["y", "Y","\u003e"], ["x", "X","\u0023"], ["c", "C","\u0026"], ["v", "V","\u0040"], ["b", "B","\u007b"], ["n", "N","\u007d"], ["m", "M","\u003c"], [",", "?","\u003b"], [".", ":","\u003e"], ["-", "_","\u002a"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],259      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]260    ]; this.VKI_layout.Hungarian.lang = ["hu_HU"];261262    this.VKI_layout.Italian = [ // Italian Standard Keyboard263      [["\u005c", "\u007c"], ["1", "!"], ["2", '"'], ["3", "\u00a3"], ["4", "$", "\u20ac"], ["5", "%"], ["6", "&"], ["7", "/"], ["8", "("], ["9", ")"], ["0", "="], ["'", "?"], ["\u00ec", "\u005e"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],264      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00e8", "\u00e9", "[", "{"], ["+", "*", "]", "}"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],265      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f2", "\u00e7", "@"], ["\u00e0", "\u00b0", "#"], ["\u00f9", "\u00a7"]],266      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],267      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]268    ]; this.VKI_layout.Italian.lang = ["it_IT"];269270    this.VKI_layout["\u65e5\u672c\u8a9e"] = [ // Basic Japanese Hiragana/Katakana Keyboard271      [["\uff5e"], ["\u306c", "\u30cc"], ["\u3075", '\u30d5'], ["\u3042", "\u30a2", "\u3041", "\u30a1"], ["\u3046", "\u30a6", "\u3045", "\u30a5"], ["\u3048", "\u30a8", "\u3047", "\u30a7"], ["\u304a", "\u30aa", "\u3049","\u30a9"], ["\u3084", "\u30e4", "\u3083", "\u30e3"], ["\u3086", "\u30e6", "\u3085", "\u30e5"], ["\u3088", "\u30e8", "\u3087", "\u30e7"], ["\u308f", "\u30ef", "\u3092", "\u30f2"], ["\u307b", "\u30db", "\u30fc", "\uff1d"], ["\u3078", "\u30d8" ,"\uff3e", "\uff5e"], ['"', '"', "\uffe5", "\uff5c"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],272      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u305f", "\u30bf"], ["\u3066", "\u30c6"], ["\u3044", "\u30a4", "\u3043", "\u30a3"], ["\u3059", "\u30b9"], ["\u304b", "\u30ab"], ["\u3093", "\u30f3"], ["\u306a", "\u30ca"], ["\u306b", "\u30cb"], ["\u3089", "\u30e9"], ["\u305b", "\u30bb"],["\u3001", "\u3001", "\uff20", "\u2018"],["\u3002", "\u3002", "\u300c", "\uff5b"],["\uffe5","", "", "\uff0a"]],273      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u3061", "\u30c1"], ["\u3068", "\u30c8"], ["\u3057", "\u30b7"], ["\u306f", "\u30cf"], ["\u304d", "\u30ad"], ["\u304f", "\u30af"], ["\u307e", "\u30de"], ["\u306e", "\u30ce"], ["\u308c", "\u30ec", "\uff1b", "\uff0b"], ["\u3051", "\u30b1", "\uff1a", "\u30f6"], ["\u3080", "\u30e0", "\u300d", "\uff5d"],[rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],274      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u3064", "\u30c4"], ["\u3055", "\u30b5"], ["\u305d", "\u30bd"], ["\u3072", "\u30d2"], ["\u3053", "\u30b3"], ["\u307f", "\u30df"], ["\u3082", "\u30e2"], ["\u306d", "\u30cd", "\u3001", "\uff1c"], ["\u308b", "\u30eb", "\u3002", "\uff1e"], ["\u3081", "\u30e1", "\u30fb", "\uff1f"], ["\u308d", "\u30ed", "", "\uff3f"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],275      [["AltLk", "AltLk"], [" ", " ", " ", " "], ["Alt", "Alt"]]276    ]; this.VKI_layout["\u65e5\u672c\u8a9e"].lang = ["ja_JP"];277278    this.VKI_layout.Kazakh = [ // Kazakh Standard Keyboard279      [["(", ")"], ['"', "!"], ["\u04d9", "\u04d8"], ["\u0456", "\u0406"], ["\u04a3", "\u04a2"], ["\u0493", "\u0492"], [",", ";"], [".", ":"], ["\u04af", "\u04ae"], ["\u04b1", "\u04b0"], ["\u049b", "\u049a"], ["\u04e9", "\u04e8"], ["\u04bb", "\u04ba"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],280      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0439", "\u0419"], ["\u0446", "\u0426"], ["\u0443", "\u0423"], ["\u043A", "\u041A"], ["\u0435", "\u0415"], ["\u043D", "\u041D"], ["\u0433", "\u0413"], ["\u0448", "\u0428"], ["\u0449", "\u0429"], ["\u0437", "\u0417"], ["\u0445", "\u0425"], ["\u044A", "\u042A"], ["\\", "/"]],281      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0444", "\u0424"], ["\u044B", "\u042B"], ["\u0432", "\u0412"], ["\u0430", "\u0410"], ["\u043F", "\u041F"], ["\u0440", "\u0420"], ["\u043E", "\u041E"], ["\u043B", "\u041B"], ["\u0434", "\u0414"], ["\u0436", "\u0416"], ["\u044D", "\u042D"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],282      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\\", "|"], ["\u044F", "\u042F"], ["\u0447", "\u0427"], ["\u0441", "\u0421"], ["\u043C", "\u041C"], ["\u0438", "\u0418"], ["\u0442", "\u0422"], ["\u044C", "\u042C"], ["\u0431", "\u0411"], ["\u044E", "\u042E"], ["\u2116", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],283      [[" ", " "]]284    ]; this.VKI_layout.Kazakh.lang = ["kk"];285286    this.VKI_layout.Lithuanian = [ // Lithuanian Standard Keyboard287      [["`", "~"], ["\u0105", "\u0104"], ["\u010D", "\u010C"], ["\u0119", "\u0118"], ["\u0117", "\u0116"], ["\u012F", "\u012E"], ["\u0161", "\u0160"], ["\u0173", "\u0172"], ["\u016B", "\u016A"], ["\u201E", "("], ["\u201C", ")"], ["-", "_"], ["\u017E", "\u017D"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],288      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["[", "{"], ["]", "}"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],289      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], [";", ":"], ["'", '"'], ["\\", "|"]],290      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u2013", "\u20AC"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],291      [[" ", " "]]292    ]; this.VKI_layout.Lithuanian.lang = ["lt_LT"];293294    this.VKI_layout.Macedonian = [ // Macedonian Cyrillic Standard Keyboard295      [["`", "~"], ["1", "!"], ["2", "\u201E"], ["3", "\u201C"], ["4", "\u2019"], ["5", "%"], ["6", "\u2018"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],296      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0459", "\u0409"], ["\u045A", "\u040A"], ["\u0435", "\u0415", "\u20AC"], ["\u0440", "\u0420"], ["\u0442", "\u0422"], ["\u0455", "\u0405"], ["\u0443", "\u0423"], ["\u0438", "\u0418"], ["\u043E", "\u041E"], ["\u043F", "\u041F"], ["\u0448", "\u0428", "\u0402"], ["\u0453", "\u0403", "\u0452"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],297      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0430", "\u0410"], ["\u0441", "\u0421"], ["\u0434", "\u0414"], ["\u0444", "\u0424", "["], ["\u0433", "\u0413", "]"], ["\u0445", "\u0425"], ["\u0458", "\u0408"], ["\u043A", "\u041A"], ["\u043B", "\u041B"], ["\u0447", "\u0427", "\u040B"], ["\u045C", "\u040C", "\u045B"], ["\u0436", "\u0416"]],298      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u0451", "\u0401"], ["\u0437", "\u0417"], ["\u045F", "\u040F"], ["\u0446", "\u0426"], ["\u0432", "\u0412", "@"], ["\u0431", "\u0411", "{"], ["\u043D", "\u041D", "}"], ["\u043C", "\u041C", "\u00A7"], [",", ";"], [".", ":"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],299      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]300    ]; this.VKI_layout.Macedonian.lang = ["mk_MK"];301302    this.VKI_layout.Norwegian = [ // Norwegian Standard Keyboard303      [["|", "\u00a7"], ["1", "!"], ["2", '"', "@"], ["3", "#", "\u00a3"], ["4", "\u00a4", "$"], ["5", "%"], ["6", "&"], ["7", "/", "{"], ["8", "(", "["], ["9", ")", "]"], ["0", "=", "}"], ["+", "?"], ["\\", "`", "\u00b4"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],304      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00e5", "\u00c5"], ["\u00a8", "^", "~"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],305      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f8", "\u00d8"], ["\u00e6", "\u00c6"], ["'", "*"]],306      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u03bc", "\u039c"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],307      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]308    ]; this.VKI_layout.Norwegian.lang = ["nb_NO", "nb", "nn"];309310    this.VKI_layout.Numpad = [ // Number pad311      [["$"], ["\u00a3"], ["\u20ac"], ["\u00a5"], ["/"], ["^"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],312      [["."], ["7"], ["8"], ["9"], ["*"], ["<"], ["("], ["["]],313      [["="], ["4"], ["5"], ["6"], ["-"], [">"], [")"], ["]"]],314      [["0"], ["1"], ["2"], ["3"], ["+"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],315      [[" "]]316    ]; this.VKI_layout.Numpad.DDK = true;317318    this.VKI_layout.Pashto = [ // Pashto Keyboard319      [["\u200d", "\u00f7", "\u0060"], ["\u06f1", "\u0021", "\u0060"], ["\u06f2", "\u066c", "\u0040"], ["\u06f3", "\u066b", "\u066b"], ["\u06f4", "\u00a4", "\u00a3"], ["\u06f5", "\u066a", "\u0025"], ["\u06f6", "\u00d7", "\u005e"], ["\u06f7", "\u00ab", "\u0026"], ["\u06f8", "\u00bb", "\u002a"], ["\u06f9", "(", "\ufdf2"], ["\u06f0", ")", "\ufefb"], ["\u002d", "\u0640", "\u005f"], ["\u003d", "\u002b", "\ufe87", "\u00f7"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],320      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0636", "\u0652", "\u06d5"], ["\u0635", "\u064c", "\u0653"], ["\u062b", "\u064d", "\u20ac"], ["\u0642", "\u064b", "\ufef7"], ["\u0641", "\u064f", "\ufef5"], ["\u063a", "\u0650", "\u0027"], ["\u0639", "\u064e", "\ufe84"], ["\u0647", "\u0651", "\u0670"], ["\u062e", "\u0681", "\u0027"], ["\u062d", "\u0685", "\u0022"], ["\u062c", "\u005d", "\u007d"], ["\u0686", "\u005b", "\u007b"], ["\u005c", "\u066d", "\u007c"]],321      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0634", "\u069a", "\ufbb0"], ["\u0633", "\u06cd", "\u06d2"], ["\u06cc", "\u064a", "\u06d2"], ["\u0628", "\u067e", "\u06ba"], ["\u0644", "\u0623", "\u06b7"], ["\u0627", "\u0622", "\u0671"], ["\u062a", "\u067c", "\u0679"], ["\u0646", "\u06bc", "\u003c"], ["\u0645", "\u0629", "\u003e"], ["\u06a9", "\u003a", "\u0643"], ["\u06af", "\u061b", "\u06ab"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],322      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u0638", "\u0626", "\u003f"], ["\u0637", "\u06d0", "\u003b"], ["\u0632", "\u0698", "\u0655"], ["\u0631", "\u0621", "\u0654"], ["\u0630", "\u200c", "\u0625"], ["\u062f", "\u0689", "\u0688"], ["\u0693", "\u0624", "\u0691"], ["\u0648", "\u060c", "\u002c"], ["\u0696", "\u002e", "\u06c7"], ["\u002f", "\u061f", "\u06c9"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard'), "\u064d"]],323      [[" ", " ", " ", " "], ["Alt", "Alt"]]324    ]; this.VKI_layout.Pashto.lang = ["ps"];325326    this.VKI_layout.Pinyin = [ // Pinyin Keyboard327      [["`", "~", "\u4e93", "\u301C"], ["1", "!", "\uFF62"], ["2", "@", "\uFF63"], ["3", "#", "\u301D"], ["4", "$", "\u301E"], ["5", "%", "\u301F"], ["6", "^", "\u3008"], ["7", "&", "\u3009"], ["8", "*", "\u302F"], ["9", "(", "\u300A"], ["0", ")", "\u300B"], ["-", "_", "\u300E"], ["=", "+", "\u300F"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],328      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "\u0101", "\u0100"], ["w", "W", "\u00E1", "\u00C1"], ["e", "E", "\u01CE", "\u01CD"], ["r", "R", "\u00E0", "\u00C0"], ["t", "T", "\u0113", "\u0112"], ["y", "Y", "\u00E9", "\u00C9"], ["u", "U", "\u011B", "\u011A"], ["i", "I", "\u00E8", "\u00C8"], ["o", "O", "\u012B", "\u012A"], ["p", "P", "\u00ED", "\u00CD"], ["[", "{", "\u01D0", "\u01CF"], ["]", "}", "\u00EC", "\u00CC"], ["\\", "|", "\u3020"]],329      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A", "\u014D", "\u014C"], ["s", "S", "\u00F3", "\u00D3"], ["d", "D", "\u01D2", "\u01D1"], ["f", "F", "\u00F2", "\u00D2"], ["g", "G", "\u00fc", "\u00dc"], ["h", "H", "\u016B", "\u016A"], ["j", "J", "\u00FA", "\u00DA"], ["k", "K", "\u01D4", "\u01D3"], ["l", "L", "\u00F9", "\u00D9"], [";", ":"], ["'", '"'], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],330      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["z", "Z", "\u01D6", "\u01D5"], ["x", "X", "\u01D8", "\u01D7"], ["c", "C", "\u01DA", "\u01D9"], ["v", "V", "\u01DC", "\u01DB"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<", "\u3001"], [".", ">", "\u3002"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],331      [["AltLk", "AltLk"], [" ", " ", " ", " "], ["Alt", "Alt"]]332    ]; this.VKI_layout.Pinyin.lang = ["zh-CN"];333334    this.VKI_layout["Polish Prog"] = [ // Polish Programmers Keyboard335      [["`", "~"], ["1", "!"], ["2", "@"], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],336      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u0119", "\u0118"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O", "\u00f3", "\u00d3"], ["p", "P"], ["[", "{"], ["]", "}"], ["\\", "|"]],337      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A", "\u0105", "\u0104"], ["s", "S", "\u015b", "\u015a"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L", "\u0142", "\u0141"], [";", ":"], ["'", '"'], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],338      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["z", "Z", "\u017c", "\u017b"], ["x", "X", "\u017a", "\u0179"], ["c", "C", "\u0107", "\u0106"], ["v", "V"], ["b", "B"], ["n", "N", "\u0144", "\u0143"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],339      [[" ", " ", " ", " "], ["Alt", "Alt"]]340    ]; this.VKI_layout["Polish Prog"].lang = ["pl_PL"];341342    this.VKI_layout["Portuguese Br"] = [ // Portuguese (Brazil) Standard Keyboard343      [["'", '"'], ["1", "!", "\u00b9"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a3"], ["5", "%", "\u00a2"], ["6", "\u00a8", "\u00ac"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+", "\u00a7"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],344      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "/"], ["w", "W", "?"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00b4", "`"], ["[", "{", "\u00aa"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],345      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00e7", "\u00c7"], ["~", "^"], ["]", "}", "\u00ba"], ["/", "?"]],346      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\\", "|"], ["z", "Z"], ["x", "X"], ["c", "C", "\u20a2"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], [":", ":"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],347      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]348    ]; this.VKI_layout["Portuguese Br"].lang = ["pt_BR"];349350    this.VKI_layout["Portuguese Pt"] = [ // Portuguese (Portugal) Standard Keyboard351      [["\\", "|"], ["1", "!"], ["2", '"', "@"], ["3", "#", "\u00a3"], ["4", "$", "\u00a7"], ["5", "%"], ["6", "&"], ["7", "/", "{"], ["8", "(", "["], ["9", ")", "]"], ["0", "=", "}"], ["'", "?"], ["\u00ab", "\u00bb"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],352      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["+", "*", "\u00a8"], ["\u00b4", "`"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],353      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00e7", "\u00c7"], ["\u00ba", "\u00aa"], ["~", "^"]],354      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">", "\\"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],355      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]356    ]; this.VKI_layout["Portuguese Pt"].lang = ["pt_PT"];357358    this.VKI_layout.Romanian = [ // Romanian Standard Keyboard359     [["\u201E", "\u201D", "\u0060", "~"], ["1", "!","~"], ["2", "\u0040", "\u02C7"], ["3", "#","\u005E"], ["4", "$", "\u02D8"], ["5", "%", "\u00B0"], ["6", "\u005E", "\u02DB"], ["7", "&", "\u0060"], ["8", "*", "\u02D9"], ["9", "(", "\u00B4"], ["0", ")", "\u02DD"], ["-", "_", "\u00A8"], ["=", "+", "\u00B8", "\u00B1"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],360     [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20AC"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P", "\u00A7"], ["\u0103", "\u0102", "[", "{"], ["\u00EE", "\u00CE", "]","}"], ["\u00E2", "\u00C2", "\\", "|"]],361     [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S", "\u00df"], ["d", "D", "\u00f0", "\u00D0"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L", "\u0142", "\u0141"], [(this.VKI_isIElt8) ? "\u015F" : "\u0219", (this.VKI_isIElt8) ? "\u015E" : "\u0218", ";", ":"], [(this.VKI_isIElt8) ? "\u0163" : "\u021B", (this.VKI_isIElt8) ? "\u0162" : "\u021A", "\'", "\""], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],362     [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\\", "|"], ["z", "Z"], ["x", "X"], ["c", "C", "\u00A9"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", ";", "<", "\u00AB"], [".", ":", ">", "\u00BB"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],363     [[" ", " ", " ", " "], ["AltGr", "AltGr"]]364    ]; this.VKI_layout.Romanian.lang = ["ro_RO"];365366    this.VKI_layout.Russian = [ // Russian Standard Keyboard367      [["\u0451", "\u0401"], ["1", "!"], ["2", '"'], ["3", "\u2116"], ["4", ";"], ["5", "%"], ["6", ":"], ["7", "?"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],368      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0439", "\u0419"], ["\u0446", "\u0426"], ["\u0443", "\u0423"], ["\u043A", "\u041A"], ["\u0435", "\u0415"], ["\u043D", "\u041D"], ["\u0433", "\u0413"], ["\u0448", "\u0428"], ["\u0449", "\u0429"], ["\u0437", "\u0417"], ["\u0445", "\u0425"], ["\u044A", "\u042A"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],369      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0444", "\u0424"], ["\u044B", "\u042B"], ["\u0432", "\u0412"], ["\u0430", "\u0410"], ["\u043F", "\u041F"], ["\u0440", "\u0420"], ["\u043E", "\u041E"], ["\u043B", "\u041B"], ["\u0434", "\u0414"], ["\u0436", "\u0416"], ["\u044D", "\u042D"], ["\\", "/"]],370      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["/", "|"], ["\u044F", "\u042F"], ["\u0447", "\u0427"], ["\u0441", "\u0421"], ["\u043C", "\u041C"], ["\u0438", "\u0418"], ["\u0442", "\u0422"], ["\u044C", "\u042C"], ["\u0431", "\u0411"], ["\u044E", "\u042E"], [".", ","], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],371      [[" ", " "]]372    ]; this.VKI_layout.Russian.lang = ["ru_RU"];373374    this.VKI_layout.SerbianCyr = [ // Serbian Cyrillic Standard Keyboard375      [["`", "~"], ["1", "!"], ["2", '"'], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "&"], ["7", "/"], ["8", "("], ["9", ")"], ["0", "="], ["'", "?"], ["+", "*"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],376      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0459", "\u0409"], ["\u045a", "\u040a"], ["\u0435", "\u0415", "\u20ac"], ["\u0440", "\u0420"], ["\u0442", "\u0422"], ["\u0437", "\u0417"], ["\u0443", "\u0423"], ["\u0438", "\u0418"], ["\u043e", "\u041e"], ["\u043f", "\u041f"], ["\u0448", "\u0428"], ["\u0452", "\u0402"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],377      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0430", "\u0410"], ["\u0441", "\u0421"], ["\u0434", "\u0414"], ["\u0444", "\u0424"], ["\u0433", "\u0413"], ["\u0445", "\u0425"], ["\u0458", "\u0408"], ["\u043a", "\u041a"], ["\u043b", "\u041b"], ["\u0447", "\u0427"], ["\u045b", "\u040b"], ["\u0436", "\u0416"]],378      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["\u0455", "\u0405"], ["\u045f", "\u040f"], ["\u0446", "\u0426"], ["\u0432", "\u0412"], ["\u0431", "\u0411"], ["\u043d", "\u041d"], ["\u043c", "\u041c"], [",", ";", "<"], [".", ":", ">"], ["-", "_", "\u00a9"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],379      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]380    ]; this.VKI_layout.SerbianCyr.lang = ["sr-Cyrl"];381382    this.VKI_layout.SerbianLat = [ // Serbian Latin Standard Keyboard383      [["\u201a", "~"], ["1", "!", "~"], ["2", '"', "\u02c7"], ["3", "#", "^"], ["4", "$", "\u02d8"], ["5", "%", "\u00b0"], ["6", "&", "\u02db"], ["7", "/", "`"], ["8", "(", "\u02d9"], ["9", ")", "\u00b4"], ["0", "=", "\u02dd"], ["'", "?", "\u00a8"], ["+", "*", "\u00b8"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],384      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "\\"], ["w", "W","|"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u0161", "\u0160", "\u00f7"], ["\u0111", "\u0110", "\u00d7"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],385      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F", "["], ["g", "G", "]"], ["h", "H"], ["j", "J"], ["k", "K", "\u0142"], ["l", "L", "\u0141"], ["\u010d", "\u010c"], ["\u0107", "\u0106", "\u00df"], ["\u017e", "\u017d", "\u00a4"]],386      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["y", "Y"], ["x", "X"], ["c", "C"], ["v", "V", "@"], ["b", "B", "{"], ["n", "N", "}"], ["m", "M", "\u00a7"], [",", ";", "<"], [".", ":", ">"], ["-", "_", "\u00a9"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],387      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]388    ]; this.VKI_layout.SerbianLat.lang = ["sr_CS"];389390    this.VKI_layout.Slovak = [ // Slovak Keyboard391     [[";", "\u00b0"], ["+", "1", "~"], ["\u013E", "2", "\u02C7"], ["\u0161", "3", "\u005E"], ["\u010D", "4", "\u02D8"], ["\u0165", "5", "\u00B0"], ["\u017E", "6", "\u02DB"], ["\u00FD", "7", "\u0060"], ["\u00E1", "8", "\u02D9"], ["\u00ED", "9", "\u00B4"], ["\u00E9", "0", "\u02DD"], ["=", "%", "\u00A8"], ["\u00B4", "\u02c7", "\u00B8"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],392     [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q","\u005C"], ["w", "W","\u007C"], ["e", "E", "\u20AC"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P","\u0027"], ["\u00FA", "/", "\u00F7"], ["\u00E4", "(", "\u00D7"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],393     [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S","\u0111"], ["d", "D","\u0110"], ["f", "F","\u005B"], ["g", "G","\u005D"], ["h", "H"], ["j", "J"], ["k", "K","\u0142"], ["l", "L","\u0141"], ["\u00F4", '"', "\u0024"], ["\u00A7", "!", "\u00DF"], ["\u0148", ")","\u00A4"]],394     [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["&", "*", "\u003C"], ["y", "Y","\u003E"], ["x", "X","\u0023"], ["c", "C","\u0026"], ["v", "V","\u0040"], ["b", "B","\u007B"], ["n", "N","\u007D"], ["m", "M"], [",", "?", "<"], [".", ":", ">"], ["-", "_", "\u002A"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],395     [[" ", " ", " ", " "], ["AltGr", "AltGr"]]396    ]; this.VKI_layout.Slovak.lang = ["sk_SK"];397398    this.VKI_layout.Slovenian = [ // Slovenian Standard Keyboard399      [["\u00a8", "\u00a8", "\u00b8"], ["1", "!", "~"], ["2", '"', "\u02c7"], ["3", "#", "^"], ["4", "$", "\u02d8"], ["5", "%", "\u00b0"], ["6", "&", "\u02db"], ["7", "/", "\u0060"], ["8", "(", "\u00B7"], ["9", ")", "\u00b4"], ["0", "=", "\u2033"], ["'", "?", "\u00a8"], ["+", "*", "\u00b8"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],400      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "\\"], ["w", "W","|"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u0161", "\u0160", "\u00f7"], ["\u0111", "\u0110", "\u00d7"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],401      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F", "["], ["g", "G", "]"], ["h", "H"], ["j", "J"], ["k", "K", "\u0142"], ["l", "L", "\u0141"], ["\u010D", "\u010C"], ["\u0107", "\u0106", "\u00df"], ["\u017E", "\u017D", "\u00a4"]],402      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["y", "Y"], ["x", "X"], ["c", "C"], ["v", "V", "@"], ["b", "B", "{"], ["n", "N", "}"], ["m", "M", "\u00a7"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],403      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]404    ]; this.VKI_layout.Slovenian.lang = ["sl_SI"];405406    this.VKI_layout["Spanish Es"] = [ // Spanish (Spain) Standard Keyboard407      [["\u00ba", "\u00aa", "\\"], ["1", "!", "|"], ["2", '"', "@"], ["3", "'", "#"], ["4", "$", "~"], ["5", "%", "\u20ac"], ["6", "&","\u00ac"], ["7", "/"], ["8", "("], ["9", ")"], ["0", "="], ["'", "?"], ["\u00a1", "\u00bf"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],408      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u0060", "^", "["], ["\u002b", "\u002a", "]"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],409      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f1", "\u00d1"], ["\u00b4", "\u00a8", "{"], ["\u00e7", "\u00c7", "}"]],410      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],411      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]412    ]; this.VKI_layout["Spanish Es"].lang = ["es_ES"];413414    this.VKI_layout.Swedish = [ // Swedish Standard Keyboard415      [["\u00a7", "\u00bd"], ["1", "!"], ["2", '"', "@"], ["3", "#", "\u00a3"], ["4", "\u00a4", "$"], ["5", "%", "\u20ac"], ["6", "&"], ["7", "/", "{"], ["8", "(", "["], ["9", ")", "]"], ["0", "=", "}"], ["+", "?", "\\"], ["\u00b4", "`"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],416      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00e5", "\u00c5"], ["\u00a8", "^", "~"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],417      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f6", "\u00d6"], ["\u00e4", "\u00c4"], ["'", "*"]],418      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">", "|"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u03bc", "\u039c"], [",", ";"], [".", ":"], ["-", "_"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],419      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]420    ]; this.VKI_layout.Swedish.lang = ["sv_SE"];421422    this.VKI_layout["Turkish-F"] = [ // Turkish F Keyboard Layout423      [['+', "*", "\u00ac"], ["1", "!", "\u00b9", "\u00a1"], ["2", '"', "\u00b2"], ["3", "^", "#", "\u00b3"], ["4", "$", "\u00bc", "\u00a4"], ["5", "%", "\u00bd"], ["6", "&", "\u00be"], ["7", "'", "{"], ["8", "(", '['], ["9", ")", ']'], ["0", "=", "}"], ["/", "?", "\\", "\u00bf"], ["-", "_", "|"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],424      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["f", "F", "@"], ["g", "G"], ["\u011f", "\u011e"], ["\u0131", "\u0049", "\u00b6", "\u00ae"], ["o", "O"], ["d", "D", "\u00a5"], ["r", "R"], ["n", "N"], ["h", "H", "\u00f8", "\u00d8"], ["p", "P", "\u00a3"], ["q", "Q", "\u00a8"], ["w", "W", "~"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],425      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["u", "U", "\u00e6", "\u00c6"], ["i", "\u0130", "\u00df", "\u00a7"], ["e", "E", "\u20ac"], ["a", "A", " ", "\u00aa"], ["\u00fc", "\u00dc"], ["t", "T"], ["k", "K"], ["m", "M"], ["l", "L"], ["y", "Y", "\u00b4"], ["\u015f", "\u015e"], ["x", "X", "`"]],426      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">", "|", "\u00a6"], ["j", "J", "\u00ab", "<"], ["\u00f6", "\u00d6", "\u00bb", ">"], ["v", "V", "\u00a2", "\u00a9"], ["c", "C"], ["\u00e7", "\u00c7"], ["z", "Z"], ["s", "S", "\u00b5", "\u00ba"], ["b", "B", "\u00d7"], [".", ":", "\u00f7"], [",", ";", "-"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],427      [[" ", " ", " ", " "],  ["AltGr", "AltGr"]]428    ];429430    this.VKI_layout["Turkish-Q"] = [ // Turkish Q Keyboard Layout431      [['"', "\u00e9", "<"], ["1", "!", ">"], ["2", "'", "\u00a3"], ["3", "^", "#"], ["4", "+", "$"], ["5", "%", "\u00bd"], ["6", "&"], ["7", "/", "{"], ["8", "(", '['], ["9", ")", ']'], ["0", "=", "}"], ["*", "?", "\\"], ["-", "_", "|"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],432      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "@"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["\u0131", "\u0049", "\u0069", "\u0130"], ["o", "O"], ["p", "P"], ["\u011f", "\u011e", "\u00a8"], ["\u00fc", "\u00dc", "~"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],433      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A", "\u00e6", "\u00c6"], ["s", "S", "\u00df"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u015f", "\u015e", "\u00b4"], ["\u0069", "\u0130"], [",", ";", "`"]],434      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["<", ">", "|"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], ["\u00f6", "\u00d6"], ["\u00e7", "\u00c7"], [".", ":"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],435      [[" ", " ", " ", " "],  ["AltGr", "AltGr"]]436    ]; this.VKI_layout["Turkish-Q"].lang = ["tr_TR"];437438    this.VKI_layout.UK = [ // UK Standard Keyboard439      [["`", "\u00ac", "\u00a6"], ["1", "!"], ["2", '"'], ["3", "\u00a3"], ["4", "$", "\u20ac"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],440      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E", "\u00e9", "\u00c9"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U", "\u00fa", "\u00da"], ["i", "I", "\u00ed", "\u00cd"], ["o", "O", "\u00f3", "\u00d3"], ["p", "P"], ["[", "{"], ["]", "}"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],441      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A", "\u00e1", "\u00c1"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], [";", ":"], ["'", "@"], ["#", "~"]],442      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\\", "|"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],443      [[" ", " ", " ", " "], ["AltGr", "AltGr"]]444    ]; this.VKI_layout.UK.lang = ["en_GB"];445446    this.VKI_layout.Ukrainian = [ // Ukrainian Standard Keyboard447      [["\u00b4", "~"], ["1", "!"], ["2", '"'], ["3", "\u2116"], ["4", ";"], ["5", "%"], ["6", ":"], ["7", "?"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],448      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["\u0439", "\u0419"], ["\u0446", "\u0426"], ["\u0443", "\u0423"], ["\u043A", "\u041A"], ["\u0435", "\u0415"], ["\u043D", "\u041D"], ["\u0433", "\u0413"], ["\u0448", "\u0428"], ["\u0449", "\u0429"], ["\u0437", "\u0417"], ["\u0445", "\u0425"], ["\u0457", "\u0407"], ["\u0491", "\u0490"]],449      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["\u0444", "\u0424"], ["\u0456", "\u0406"], ["\u0432", "\u0412"], ["\u0430", "\u0410"], ["\u043F", "\u041F"], ["\u0440", "\u0420"], ["\u043E", "\u041E"], ["\u043B", "\u041B"], ["\u0434", "\u0414"], ["\u0436", "\u0416"], ["\u0454", "\u0404"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],450      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["\u044F", "\u042F"], ["\u0447", "\u0427"], ["\u0441", "\u0421"], ["\u043C", "\u041C"], ["\u0438", "\u0418"], ["\u0442", "\u0422"], ["\u044C", "\u042C"], ["\u0431", "\u0411"], ["\u044E", "\u042E"], [".", ","], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],451      [[" ", " "]]452    ]; this.VKI_layout.Ukrainian.lang = ["uk_UA"];453454    this.VKI_layout.US = [ // US Standard Keyboard455      [["`", "~"], ["1", "!"], ["2", "@"], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],456      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q"], ["w", "W"], ["e", "E"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["[", "{"], ["]", "}"], ["\\", "|"]],457      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], [";", ":"], ["'", '"'], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],458      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],459      [[" ", " "]]460    ]; this.VKI_layout.US.lang = ["en_US"];461462    this.VKI_layout["US Int'l"] = [ // US International Keyboard463      [["`", "~"], ["1", "!", "\u00a1", "\u00b9"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a4", "\u00a3"], ["5", "%", "\u20ac"], ["6", "^", "\u00bc"], ["7", "&", "\u00bd"], ["8", "*", "\u00be"], ["9", "(", "\u2018"], ["0", ")", "\u2019"], ["-", "_", "\u00a5"], ["=", "+", "\u00d7", "\u00f7"], [rcmail.gettext('bksp','vkeyboard'), rcmail.gettext('bksp','vkeyboard')]],464      [[rcmail.gettext('tab','vkeyboard'), rcmail.gettext('tab','vkeyboard')], ["q", "Q", "\u00e4", "\u00c4"], ["w", "W", "\u00e5", "\u00c5"], ["e", "E", "\u00e9", "\u00c9"], ["r", "R", "\u00ae"], ["t", "T", "\u00fe", "\u00de"], ["y", "Y", "\u00fc", "\u00dc"], ["u", "U", "\u00fa", "\u00da"], ["i", "I", "\u00ed", "\u00cd"], ["o", "O", "\u00f3", "\u00d3"], ["p", "P", "\u00f6", "\u00d6"], ["[", "{", "\u00ab"], ["]", "}", "\u00bb"], ["\\", "|", "\u00ac", "\u00a6"]],465      [[rcmail.gettext('caps','vkeyboard'), rcmail.gettext('caps','vkeyboard')], ["a", "A", "\u00e1", "\u00c1"], ["s", "S", "\u00df", "\u00a7"], ["d", "D", "\u00f0", "\u00d0"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L", "\u00f8", "\u00d8"], [";", ":", "\u00b6", "\u00b0"], ["'", '"', "\u00b4", "\u00a8"], [rcmail.gettext('enter','vkeyboard'), rcmail.gettext('enter','vkeyboard')]],466      [[rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')], ["z", "Z", "\u00e6", "\u00c6"], ["x", "X"], ["c", "C", "\u00a9", "\u00a2"], ["v", "V"], ["b", "B"], ["n", "N", "\u00f1", "\u00d1"], ["m", "M", "\u00b5"], [",", "<", "\u00e7", "\u00c7"], [".", ">"], ["/", "?", "\u00bf"], [rcmail.gettext('shift','vkeyboard'), rcmail.gettext('shift','vkeyboard')]],467      [[" ", " ", " ", " "], ["Alt", "Alt"]]468    ]; this.VKI_layout["US Int'l"].lang = ["en"];469470471    /* ***** Define Dead Keys ************************************** */472    //this.VKI_deadkey = {};473	this.VKI_deadkey = false;474475    // - Lay out each dead key set in one row of sub-arrays.  The rows476    //   below are wrapped so uppercase letters are below their477    //   lowercase equivalents.478    //479    // - The first letter in each sub-array is the letter pressed after480    //   the diacritic.  The second letter is the letter this key-combo481    //   will generate.482    //483    // - Note that if you have created a new keyboard layout and want484    //   it included in the distributed script, PLEASE TELL ME if you485    //   have added additional dead keys to the ones below.486487    this.VKI_deadkey['"'] = this.VKI_deadkey['\u00a8'] = [ // Umlaut / Diaeresis / Greek Dialytika488      ["a", "\u00e4"], ["e", "\u00eb"], ["i", "\u00ef"], ["o", "\u00f6"], ["u", "\u00fc"], ["y", "\u00ff"], ["\u03b9", "\u03ca"], ["\u03c5", "\u03cb"], ["\u016B", "\u01D6"], ["\u00FA", "\u01D8"], ["\u01D4", "\u01DA"], ["\u00F9", "\u01DC"],489      ["A", "\u00c4"], ["E", "\u00cb"], ["I", "\u00cf"], ["O", "\u00d6"], ["U", "\u00dc"], ["Y", "\u0178"], ["\u0399", "\u03aa"], ["\u03a5", "\u03ab"], ["\u016A", "\u01D5"], ["\u00DA", "\u01D7"], ["\u01D3", "\u01D9"], ["\u00D9", "\u01DB"],490      ["\u304b", "\u304c"], ["\u304d", "\u304e"], ["\u304f", "\u3050"], ["\u3051", "\u3052"], ["\u3053", "\u3054"],491      ["\u305f", "\u3060"], ["\u3061", "\u3062"], ["\u3064", "\u3065"], ["\u3066", "\u3067"], ["\u3068", "\u3069"],492      ["\u3055", "\u3056"], ["\u3057", "\u3058"], ["\u3059", "\u305a"], ["\u305b", "\u305c"], ["\u305d", "\u305e"],493      ["\u306f", "\u3070"], ["\u3072", "\u3073"], ["\u3075", "\u3076"], ["\u3078", "\u3079"], ["\u307b", "\u307c"],494      ["\u30ab", "\u30ac"], ["\u30ad", "\u30ae"], ["\u30af", "\u30b0"], ["\u30b1", "\u30b2"], ["\u30b3", "\u30b4"],495      ["\u30bf", "\u30c0"], ["\u30c1", "\u30c2"], ["\u30c4", "\u30c5"], ["\u30c6", "\u30c7"], ["\u30c8", "\u30c9"],496      ["\u30b5", "\u30b6"], ["\u30b7", "\u30b8"], ["\u30b9", "\u30ba"], ["\u30bb", "\u30bc"], ["\u30bd", "\u30be"],497      ["\u30cf", "\u30d0"], ["\u30d2", "\u30d3"], ["\u30d5", "\u30d6"], ["\u30d8", "\u30d9"], ["\u30db", "\u30dc"]498    ];499    this.VKI_deadkey['~'] = [ // Tilde / Stroke500      ["a", "\u00e3"], ["l", "\u0142"], ["n", "\u00f1"], ["o", "\u00f5"],501      ["A", "\u00c3"], ["L", "\u0141"], ["N", "\u00d1"], ["O", "\u00d5"]502    ];503    this.VKI_deadkey['^'] = [ // Circumflex504      ["a", "\u00e2"], ["e", "\u00ea"], ["i", "\u00ee"], ["o", "\u00f4"], ["u", "\u00fb"], ["w", "\u0175"], ["y", "\u0177"],505      ["A", "\u00c2"], ["E", "\u00ca"], ["I", "\u00ce"], ["O", "\u00d4"], ["U", "\u00db"], ["W", "\u0174"], ["Y", "\u0176"]506    ];507    this.VKI_deadkey['\u02c7'] = [ // Baltic caron508      ["c", "\u010D"], ["d", "\u010f"], ["e", "\u011b"], ["s", "\u0161"], ["l", "\u013e"], ["n", "\u0148"], ["r", "\u0159"], ["t", "\u0165"], ["u", "\u01d4"], ["z", "\u017E"], ["\u00fc", "\u01da"],509      ["C", "\u010C"], ["D", "\u010e"], ["E", "\u011a"], ["S", "\u0160"], ["L", "\u013d"], ["N", "\u0147"], ["R", "\u0158"], ["T", "\u0164"], ["U", "\u01d3"], ["Z", "\u017D"], ["\u00dc", "\u01d9"]510    ];511    this.VKI_deadkey['\u02d8'] = [ // Romanian and Turkish breve512      ["a", "\u0103"], ["g", "\u011f"],513      ["A", "\u0102"], ["G", "\u011e"]514    ];515    this.VKI_deadkey['-'] = this.VKI_deadkey['\u00af'] = [ // Macron516      ["a", "\u0101"], ["e", "\u0113"], ["i", "\u012b"], ["o", "\u014d"], ["u", "\u016B"], ["y", "\u0233"], ["\u00fc", "\u01d6"],517      ["A", "\u0100"], ["E", "\u0112"], ["I", "\u012a"], ["O", "\u014c"], ["U", "\u016A"], ["Y", "\u0232"], ["\u00dc", "\u01d5"]518    ];519    this.VKI_deadkey['`'] = [ // Grave520      ["a", "\u00e0"], ["e", "\u00e8"], ["i", "\u00ec"], ["o", "\u00f2"], ["u", "\u00f9"], ["\u00fc", "\u01dc"],521      ["A", "\u00c0"], ["E", "\u00c8"], ["I", "\u00cc"], ["O", "\u00d2"], ["U", "\u00d9"], ["\u00dc", "\u01db"]522    ];523    this.VKI_deadkey["'"] = this.VKI_deadkey['\u00b4'] = this.VKI_deadkey['\u0384'] = [ // Acute / Greek Tonos524      ["a", "\u00e1"], ["e", "\u00e9"], ["i", "\u00ed"], ["o", "\u00f3"], ["u", "\u00fa"], ["y", "\u00fd"], ["\u03b1", "\u03ac"], ["\u03b5", "\u03ad"], ["\u03b7", "\u03ae"], ["\u03b9", "\u03af"], ["\u03bf", "\u03cc"], ["\u03c5", "\u03cd"], ["\u03c9", "\u03ce"], ["\u00fc", "\u01d8"],525      ["A", "\u00c1"], ["E", "\u00c9"], ["I", "\u00cd"], ["O", "\u00d3"], ["U", "\u00da"], ["Y", "\u00dd"], ["\u0391", "\u0386"], ["\u0395", "\u0388"], ["\u0397", "\u0389"], ["\u0399", "\u038a"], ["\u039f", "\u038c"], ["\u03a5", "\u038e"], ["\u03a9", "\u038f"], ["\u00dc", "\u01d7"]526    ];527    this.VKI_deadkey['\u02dd'] = [ // Hungarian Double Acute Accent528      ["o", "\u0151"], ["u", "\u0171"],529      ["O", "\u0150"], ["U", "\u0170"]530    ];531    this.VKI_deadkey['\u0385'] = [ // Greek Dialytika + Tonos532      ["\u03b9", "\u0390"], ["\u03c5", "\u03b0"]533    ];534    this.VKI_deadkey['\u00b0'] = this.VKI_deadkey['\u00ba'] = [ // Ring535      ["a", "\u00e5"], ["u", "\u016f"],536      ["A", "\u00c5"], ["U", "\u016e"]537    ];538    this.VKI_deadkey['\u02DB'] = [ // Ogonek539      ["a", "\u0106"], ["e", "\u0119"], ["i", "\u012f"], ["o", "\u01eb"], ["u", "\u0173"], ["y", "\u0177"],540      ["A", "\u0105"], ["E", "\u0118"], ["I", "\u012e"], ["O", "\u01ea"], ["U", "\u0172"], ["Y", "\u0176"]541    ];542    this.VKI_deadkey['\u02D9'] = [ // Dot-above543      ["c", "\u010B"], ["e", "\u0117"], ["g", "\u0121"], ["z", "\u017C"],544      ["C", "\u010A"], ["E", "\u0116"], ["G", "\u0120"], ["Z", "\u017B"]545    ];546    this.VKI_deadkey['\u00B8'] = this.VKI_deadkey['\u201a'] = [ // Cedilla547      ["c", "\u00e7"], ["s", "\u015F"],548      ["C", "\u00c7"], ["S", "\u015E"]549    ];550    this.VKI_deadkey[','] = [ // Comma551      ["s", (this.VKI_isIElt8) ? "\u015F" : "\u0219"], ["t", (this.VKI_isIElt8) ? "\u0163" : "\u021B"],552      ["S", (this.VKI_isIElt8) ? "\u015E" : "\u0218"], ["T", (this.VKI_isIElt8) ? "\u0162" : "\u021A"]553    ];554    this.VKI_deadkey['\u3002'] = [ // Hiragana/Katakana Point555      ["\u306f", "\u3071"], ["\u3072", "\u3074"], ["\u3075", "\u3077"], ["\u3078", "\u307a"], ["\u307b", "\u307d"],556      ["\u30cf", "\u30d1"], ["\u30d2", "\u30d4"], ["\u30d5", "\u30d7"], ["\u30d8", "\u30da"], ["\u30db", "\u30dd"]557    ];558559560    /* ***** Define Symbols **************************************** */561    this.VKI_symbol = {562      '\u200c': "ZW\r\nNJ", '\u200d': "ZW\r\nJ"563    };564565566567    /* ****************************************************************568     * Attach the keyboard to an element569     *570     */571    this.VKI_attachKeyboard = VKI_attach = function(elem) {572      if (elem.VKI_attached) return false;573      if (this.VKI_imageURI) {574        var keybut = document.createElement('img');575            keybut.src = this.VKI_imageURI;576            keybut.alt = this.VKI_i18n['00'];577            keybut.className = "keyboardInputInitiator myrc_sprites";578            keybut.title = this.VKI_i18n['01'];579            keybut.elem = elem;580            keybut.onclick = function() { self.VKI_show(this.elem); };581        elem.parentNode.insertBefore(keybut, (elem.dir == "rtl") ? elem : elem.nextSibling);582      } else elem.onfocus = function() { if (self.VKI_target != this) self.VKI_show(this); };583      elem.VKI_attached = true;584      if (this.VKI_isIE) {585        elem.onclick = elem.onselect = elem.onkeyup = function(e) {586          if ((e || event).type != "keyup" || !this.readOnly)587            this.range = document.selection.createRange();588        };589      }590    };591592593    /* ***** Find tagged input & textarea elements ***************** */594    var inputElems = [595      document.getElementsByTagName('input'),596      document.getElementsByTagName('textarea')597    ];598    for (var x = 0, elem; elem = inputElems[x++];)599      for (var y = 0, ex; ex = elem[y++];)600        if ((ex.nodeName == "TEXTAREA" || ex.type == "text" || ex.type == "password") && ex.className.indexOf("keyboardInput") > -1)601          this.VKI_attachKeyboard(ex);602603604    /* ***** Build the keyboard interface ************************** */605    this.VKI_keyboard = document.createElement('table');606    this.VKI_keyboard.id = "keyboardInputMaster";607    this.VKI_keyboard.dir = "ltr";608    this.VKI_keyboard.cellSpacing = this.VKI_keyboard.border = "0";609610    var thead = document.createElement('thead');611      var tr = document.createElement('tr');612        var th = document.createElement('th');613          var abbr = document.createElement('abbr');614              //abbr.title = this.VKI_i18n['00'];615             // abbr.appendChild(document.createTextNode('VKI'));616            th.appendChild(abbr);617618          var kblist = document.createElement('select');619              kblist.title = this.VKI_i18n['02'];620            for (ktype in this.VKI_layout) {621              if (typeof this.VKI_layout[ktype] == "object") {622                if (!this.VKI_layout[ktype].lang) this.VKI_layout[ktype].lang = [];623                var opt = document.createElement('option');624                    opt.value = ktype;625                    opt.appendChild(document.createTextNode(ktype));626                  kblist.appendChild(opt);627              }628            }629            if (kblist.options.length) {630                kblist.value = this.VKI_kt;631                kblist.onchange = function() {632                  self.VKI_kts = self.VKI_kt = this.value;633                  self.VKI_buildKeys();634                  self.VKI_position(true);635                };636              th.appendChild(kblist);637            }638639          if (this.VKI_sizeAdj) {640            this.VKI_size = Math.min(5, Math.max(1, this.VKI_size));641            var kbsize = document.createElement('select');642                kbsize.title = this.VKI_i18n['10'];643              for (var x = 1; x <= 5; x++) {644                var opt = document.createElement('option');645                    opt.value = x;646                    opt.appendChild(document.createTextNode(x));647                  kbsize.appendChild(opt);648              } kbsize.value = this.VKI_size;649                kbsize.change = function() {650                  self.VKI_size = this.value;651                  self.VKI_keyboard.className = self.VKI_keyboard.className.replace(/ ?keyboardInputSize\d ?/, "");652                  if (this.value != 2) self.VKI_keyboard.className += " keyboardInputSize" + this.value;653                  self.VKI_position(true);654                };655                kbsize.onchange = kbsize.change;656            th.appendChild(kbsize);657          }658659            var label = document.createElement('label');660              var checkbox = document.createElement('input');661                  checkbox.type = "checkbox";662                  checkbox.title = this.VKI_i18n['03'] + ": " + ((this.VKI_deadkeysOn) ? this.VKI_i18n['04'] : this.VKI_i18n['05']);663                  checkbox.defaultChecked = this.VKI_deadkeysOn;664                  checkbox.onclick = function() {665                    self.VKI_deadkeysOn = this.checked;666                    this.title = self.VKI_i18n['03'] + ": " + ((this.checked) ? self.VKI_i18n['04'] : self.VKI_i18n['05']);667                    self.VKI_modify("");668                    return true;669                  };670                label.appendChild(this.VKI_deadkeysElem = checkbox);671                  checkbox.checked = this.VKI_deadkeysOn;672            th.appendChild(label);673          tr.appendChild(th);674675        var td = document.createElement('td');676          var clearer = document.createElement('span');677              clearer.id = "keyboardInputClear";678              clearer.appendChild(document.createTextNode(this.VKI_i18n['07']));679              clearer.title = this.VKI_i18n['08'];680              clearer.onmousedown = function() { this.className = "pressed"; };681              clearer.onmouseup = function() { this.className = ""; };682              clearer.onclick = function() {683                self.VKI_target.value = "";684                self.VKI_target.focus();685                return false;686              };687            td.appendChild(clearer);688689          var closer = document.createElement('strong');690              closer.id = "keyboardInputClose";691              closer.appendChild(document.createTextNode('X'));692              closer.title = this.VKI_i18n['06'];693              closer.onmousedown = function() { this.className = "pressed"; };694              closer.onmouseup = function() { this.className = ""; };695              closer.onclick = function() { self.VKI_close(); };696            td.appendChild(closer);697698          tr.appendChild(td);699        thead.appendChild(tr);700    this.VKI_keyboard.appendChild(thead);701702    var tbody = document.createElement('tbody');703      var tr = document.createElement('tr');704        var td = document.createElement('td');705            td.colSpan = "2";706          var div = document.createElement('div');707              div.id = "keyboardInputLayout";708            td.appendChild(div);709          if (this.VKI_showVersion) {710            var div = document.createElement('div');711              var ver = document.createElement('var');712                  ver.title = this.VKI_i18n['09'] + " " + this.VKI_version;713                  ver.appendChild(document.createTextNode("v" + this.VKI_version));714                div.appendChild(ver);715              td.appendChild(div);716          }717          tr.appendChild(td);718        tbody.appendChild(tr);719    this.VKI_keyboard.appendChild(tbody);720721    if (this.VKI_isIE6) {722      this.VKI_iframe = document.createElement('iframe');723      this.VKI_iframe.style.position = "absolute";724      this.VKI_iframe.style.border = "0px none";725      this.VKI_iframe.style.filter = "mask()";726      this.VKI_iframe.style.zIndex = "999999";727      this.VKI_iframe.src = this.VKI_imageURI;728    }729730731    /* ****************************************************************732     * Build or rebuild the keyboard keys733     *734     */735    this.VKI_buildKeys = function() {736      this.VKI_shift = this.VKI_shiftlock = this.VKI_altgr = this.VKI_altgrlock = this.VKI_dead = false;737      this.VKI_deadkeysOn = (this.VKI_layout[this.VKI_kt].DDK) ? false : this.VKI_keyboard.getElementsByTagName('label')[0].getElementsByTagName('input')[0].checked;738739      var container = this.VKI_keyboard.tBodies[0].getElementsByTagName('div')[0];740      while (container.firstChild) container.removeChild(container.firstChild);741742      for (var x = 0, hasDeadKey = false, lyt; lyt = this.VKI_layout[this.VKI_kt][x++];) {743        var table = document.createElement('table');744            table.cellSpacing = table.border = "0";745        if (lyt.length <= this.VKI_keyCenter) table.className = "keyboardInputCenter";746          var tbody = document.createElement('tbody');747            var tr = document.createElement('tr');748            for (var y = 0, lkey; lkey = lyt[y++];) {749              var td = document.createElement('td');750                if (this.VKI_symbol[lkey[0]]) {751                  var span = document.createElement('span');752                      span.className = lkey[0];753                      span.appendChild(document.createTextNode(this.VKI_symbol[lkey[0]]));754                    td.appendChild(span);755                } else td.appendChild(document.createTextNode(lkey[0] || "\xa0"));756757                var className = [];758                if (this.VKI_deadkeysOn)759                  for (key in this.VKI_deadkey)760                    if (key === lkey[0]) { className.push("alive"); break; }761                if (lyt.length > this.VKI_keyCenter && y == lyt.length) className.push("last");762                if (lkey[0] == " ") className.push("space");763                  td.className = className.join(" ");764765                  td.VKI_clickless = 0;766                  if (!td.click) {767                    td.click = function() {768                      var evt = this.ownerDocument.createEvent('MouseEvents');769                      evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);770                      this.dispatchEvent(evt);771                    };772                  }773                  td.onmouseover = function() {774                    if (self.VKI_clickless) {775                      var _self = this;776                      clearTimeout(this.VKI_clickless);777                      this.VKI_clickless = setTimeout(function() { _self.click(); }, self.VKI_clickless);778                    }779                    if ((this.firstChild.nodeValue || this.firstChild.className) != "\xa0") this.className += " hover";780                  };781                  td.onmouseout = function() {782                    if (self.VKI_clickless) clearTimeout(this.VKI_clickless);783                    this.className = this.className.replace(/ ?(hover|pressed)/g, "");784                  };785                  td.onmousedown = function() {786                    if (self.VKI_clickless) clearTimeout(this.VKI_clickless);787                    if ((this.firstChild.nodeValue || this.firstChild.className) != "\xa0") this.className += " pressed";788                  };789                  td.onmouseup = function() {790                    if (self.VKI_clickless) clearTimeout(this.VKI_clickless);791                    this.className = this.className.replace(/ ?pressed/g, "");792                  };793                  td.ondblclick = function() { return false; };794                switch (lkey[1]) {795                  case rcmail.gettext('caps','vkeyboard'): case rcmail.gettext('shift','vkeyboard'):796                  case "Alt": case "AltGr": case "AltLk":797                    td.onclick = (function(type) { return function() { self.VKI_modify(type); return false; }; })(lkey[1]);798                    break;799                  case rcmail.gettext('tab','vkeyboard'):800                    td.onclick = function() { self.VKI_insert("\t"); return false; };801                    break;802                  case rcmail.gettext('bksp','vkeyboard'):803                    td.onclick = function() {804                      self.VKI_target.focus();805                      if (self.VKI_target.setSelectionRange) {806                        if (self.VKI_target.readOnly && self.VKI_isWebKit) {807                          var rng = [self.VKI_target.selStart || 0, self.VKI_target.selEnd || 0];808                        } else var rng = [self.VKI_target.selectionStart, self.VKI_target.selectionEnd];809                        if (rng[0] < rng[1]) rng[0]++;810                        self.VKI_target.value = self.VKI_target.value.substr(0, rng[0] - 1) + self.VKI_target.value.substr(rng[1]);811                        self.VKI_target.setSelectionRange(rng[0] - 1, rng[0] - 1);812                        if (self.VKI_target.readOnly && self.VKI_isWebKit) {813                          var range = window.getSelection().getRangeAt(0);814                          self.VKI_target.selStart = range.startOffset;815                          self.VKI_target.selEnd = range.endOffset;816                        }817                      } else if (self.VKI_target.createTextRange) {818                        try {819                          self.VKI_target.range.select();820                        } catch(e) { self.VKI_target.range = document.selection.createRange(); }821                        if (!self.VKI_target.range.text.length) self.VKI_target.range.moveStart('character', -1);822                        self.VKI_target.range.text = "";823                      } else self.VKI_target.value = self.VKI_target.value.substr(0, self.VKI_target.value.length - 1);824                      if (self.VKI_shift) self.VKI_modify(rcmail.gettext('shift','vkeyboard'));825                      if (self.VKI_altgr) self.VKI_modify("AltGr");826                      self.VKI_target.focus();827                      return true;828                    };829                    break;830                  case rcmail.gettext('enter','vkeyboard'):831                    td.onclick = function() {832                      if (self.VKI_target.nodeName != "TEXTAREA") {833                        $("form").submit();834                        self.VKI_close();835                        this.className = this.className.replace(/ ?(hover|pressed)/g, "");836                      } else self.VKI_insert("\n");837                      return true;838                    };839                    break;840                  default:841                    td.onclick = function() {842                      var character = this.firstChild.nodeValue || this.firstChild.className;843                      if (self.VKI_deadkeysOn && self.VKI_dead) {844                        if (self.VKI_dead != character) {845                          for (key in self.VKI_deadkey) {846                            if (key == self.VKI_dead) {847                              if (character != " ") {848                                for (var z = 0, rezzed = false, dk; dk = self.VKI_deadkey[key][z++];) {849                                  if (dk[0] == character) {850                                    self.VKI_insert(dk[1]);851                                    rezzed = true;852                                    break;853                                  }854                                }855                              } else {856                                self.VKI_insert(self.VKI_dead);857                                rezzed = true;858                              } break;859                            }860                          }861                        } else rezzed = true;862                      } self.VKI_dead = false;863864                      if (!rezzed && character != "\xa0") {865                        if (self.VKI_deadkeysOn) {866                          for (key in self.VKI_deadkey) {867                            if (key == character) {868                              self.VKI_dead = key;869                              this.className += " dead";870                              if (self.VKI_shift) self.VKI_modify(rcmail.gettext('shift','vkeyboard'));871                              if (self.VKI_altgr) self.VKI_modify("AltGr");872                              break;873                            }874                          }875                          if (!self.VKI_dead) self.VKI_insert(character);876                        } else self.VKI_insert(character);877                      }878879                      self.VKI_modify("");880                      if (self.VKI_isOpera) {881                        this.style.width = "50px";882                        var foo = this.offsetWidth;883                        this.style.width = "";884                      }885                      return false;886                    };887888                }889                tr.appendChild(td);890              tbody.appendChild(tr);891            table.appendChild(tbody);892893            for (var z = 0; z < 4; z++)894              if (this.VKI_deadkey[lkey[z] = lkey[z] || "\xa0"]) hasDeadKey = true;895        }896        container.appendChild(table);897      }898      this.VKI_deadkeysElem.style.display = (!this.VKI_layout[this.VKI_kt].DDK && hasDeadKey) ? "inline" : "none";899    };900901    this.VKI_buildKeys();902    VKI_disableSelection(this.VKI_keyboard);903904905    /* ****************************************************************906     * Controls modifier keys907     *908     */909    this.VKI_modify = function(type) {910      switch (type) {911        case "Alt":912        case "AltGr": this.VKI_altgr = !this.VKI_altgr; break;913        case "AltLk": this.VKI_altgrlock = !this.VKI_altgrlock; break;914        case rcmail.gettext('caps','vkeyboard'): this.VKI_shiftlock = !this.VKI_shiftlock; break;915        case rcmail.gettext('shift','vkeyboard'): this.VKI_shift = !this.VKI_shift; break;916      } var vchar = 0;917      if (!this.VKI_shift != !this.VKI_shiftlock) vchar += 1;918      if (!this.VKI_altgr != !this.VKI_altgrlock) vchar += 2;919920      var tables = this.VKI_keyboard.getElementsByTagName('table');921      for (var x = 0; x < tables.length; x++) {922        var tds = tables[x].getElementsByTagName('td');923        for (var y = 0; y < tds.length; y++) {924          var className = [], lkey = this.VKI_layout[this.VKI_kt][x][y];925926          if (tds[y].className.indexOf('hover') > -1) className.push("hover");927928          switch (lkey[1]) {929            case "Alt":930            case "AltGr":931              if (this.VKI_altgr) className.push("dead");932              break;933            case "AltLk":934              if (this.VKI_altgrlock) className.push("dead");935              break;936            case rcmail.gettext('shift','vkeyboard'):937              if (this.VKI_shift) className.push("dead");938              break;939            case rcmail.gettext('caps','vkeyboard'):940              if (this.VKI_shiftlock) className.push("dead");941              break;942            case rcmail.gettext('tab','vkeyboard'): case rcmail.gettext('enter','vkeyboard'): case rcmail.gettext('bksp','vkeyboard'): break;943            default:944              if (type) {945                tds[y].removeChild(tds[y].firstChild);946                if (this.VKI_symbol[lkey[vchar]]) {947                  var span = document.createElement('span');948                      span.className = lkey[vchar];949                      span.appendChild(document.createTextNode(this.VKI_symbol[lkey[vchar]]));950                    tds[y].appendChild(span);951                } else tds[y].appendChild(document.createTextNode(lkey[vchar]));952              }953              if (this.VKI_deadkeysOn) {954                var character = tds[y].firstChild.nodeValue || tds[y].firstChild.className;955                if (this.VKI_dead) {956                  if (character == this.VKI_dead) className.push("dead");957                  for (var z = 0; z < this.VKI_deadkey[this.VKI_dead].length; z++) {958                    if (character == this.VKI_deadkey[this.VKI_dead][z][0]) {959                      className.push("target");960                      break;961                    }962                  }963                }964                for (key in this.VKI_deadkey)965                  if (key === character) { className.push("alive"); break; }966              }967          }968969          if (y == tds.length - 1 && tds.length > this.VKI_keyCenter) className.push("last");970          if (lkey[0] == " ") className.push("space");971          tds[y].className = className.join(" ");972        }973      }974    };975976977    /* ****************************************************************978     * Insert text at the cursor979     *980     */981    this.VKI_insert = function(text) {982      this.VKI_target.focus();983      if (this.VKI_target.maxLength) this.VKI_target.maxlength = this.VKI_target.maxLength;984      if (typeof this.VKI_target.maxlength == "undefined" ||985          this.VKI_target.maxlength < 0 ||986          this.VKI_target.value.length < this.VKI_target.maxlength) {987        if (this.VKI_target.setSelectionRange) {988          if (this.VKI_target.readOnly && this.VKI_isWebKit) {989            var rng = [this.VKI_target.selStart || 0, this.VKI_target.selEnd || 0];990          } else var rng = [this.VKI_target.selectionStart, this.VKI_target.selectionEnd];991          this.VKI_target.value = this.VKI_target.value.substr(0, rng[0]) + text + this.VKI_target.value.substr(rng[1]);992          if (text == "\n" && window.opera) rng[0]++;993          this.VKI_target.setSelectionRange(rng[0] + text.length, rng[0] + text.length);994          if (this.VKI_target.readOnly && this.VKI_isWebKit) {995            var range = window.getSelection().getRangeAt(0);996            this.VKI_target.selStart = range.startOffset;997            this.VKI_target.selEnd = range.endOffset;998          }999        } else if (this.VKI_target.createTextRange) {1000          try {1001            this.VKI_target.range.select();1002          } catch(e) { this.VKI_target.range = document.selection.createRange(); }1003          this.VKI_target.range.text = text;1004          this.VKI_target.range.collapse(true);1005          this.VKI_target.range.select();1006        } else this.VKI_target.value += text;1007        if (this.VKI_shift) this.VKI_modify(rcmail.gettext('shift','vkeyboard'));1008        if (this.VKI_altgr) this.VKI_modify("AltGr");1009        this.VKI_target.focus();1010      } else if (this.VKI_target.createTextRange && this.VKI_target.range)1011        this.VKI_target.range.select();1012    };101310141015    /* ****************************************************************1016     * Show the keyboard interface1017     *1018     */1019    this.VKI_show = function(elem) {1020      if (!this.VKI_target) {1021        this.VKI_target = elem;1022        if (this.VKI_langAdapt && this.VKI_target.lang) {1023          var chg = false, sub = [];1024          for (ktype in this.VKI_layout) {1025            if (typeof this.VKI_layout[ktype] == "object") {1026              for (var x = 0; x < this.VKI_layout[ktype].lang.length; x++) {1027                if (this.VKI_layout[ktype].lang[x].toLowerCase() == this.VKI_target.lang.toLowerCase()) {1028                  chg = kblist.value = this.VKI_kt = ktype;1029                  break;1030                } else if (this.VKI_layout[ktype].lang[x].toLowerCase().indexOf(this.VKI_target.lang.toLowerCase()) == 0)1031                  sub.push([this.VKI_layout[ktype].lang[x], ktype]);1032              }1033            } if (chg) break;1034          } if (sub.length) {1035            sub.sort(function (a, b) { return a[0].length - b[0].length; });1036            chg = kblist.value = this.VKI_kt = sub[0][1];1037          } if (chg) this.VKI_buildKeys();1038        }1039        if (this.VKI_isIE) {1040          if (!this.VKI_target.range) {1041            this.VKI_target.range = this.VKI_target.createTextRange();1042            this.VKI_target.range.moveStart('character', this.VKI_target.value.length);1043          } this.VKI_target.range.select();1044        }1045        try { this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard); } catch (e) {}1046        if (this.VKI_clearPasswords && this.VKI_target.type == "password") this.VKI_target.value = "";10471048        var elem = this.VKI_target;1049        this.VKI_target.keyboardPosition = "absolute";1050        do {1051          if (VKI_getStyle(elem, "position") == "fixed") {1052            this.VKI_target.keyboardPosition = "fixed";1053            break;1054          }1055        } while (elem = elem.offsetParent);10561057        if (this.VKI_isIE6) document.body.appendChild(this.VKI_iframe);1058        document.body.appendChild(this.VKI_keyboard);1059        this.VKI_keyboard.style.position = this.VKI_target.keyboardPosition;1060        if (this.VKI_isOpera) {1061          if (this.VKI_sizeAdj) kbsize.value = this.VKI_size;1062          kblist.value = this.VKI_kt;1063        }10641065        this.VKI_position(true);1066        if (self.VKI_isMoz || self.VKI_isWebKit) this.VKI_position(true);1067        this.VKI_target.focus();1068      } else this.VKI_close();1069    };107010711072    /* ****************************************************************1073     * Position the keyboard1074     *1075     */1076    this.VKI_position = function(force) {1077      if (self.VKI_target) {1078        var kPos = VKI_findPos(self.VKI_keyboard), wDim = VKI_innerDimensions(), sDis = VKI_scrollDist();1079        var place = false, fudge = self.VKI_target.offsetHeight + 3;1080        if (force !== true) {1081          if (kPos[1] + self.VKI_keyboard.offsetHeight - sDis[1] - wDim[1] > 0) {1082            place = true;1083            fudge = -self.VKI_keyboard.offsetHeight - 3;1084          } else if (kPos[1] - sDis[1] < 0) place = true;1085        }1086        if (place || force === true) {1087          var iPos = VKI_findPos(self.VKI_target);1088          self.VKI_keyboard.style.top = iPos[1] - ((self.VKI_target.keyboardPosition == "fixed" && !self.VKI_isIE && !self.VKI_isMoz) ? sDis[1] : 0) + fudge + "px";1089          self.VKI_keyboard.style.left = Math.max(10, Math.min(wDim[0] - self.VKI_keyboard.offsetWidth - 25, iPos[0])) + "px";1090          if (self.VKI_isIE6) {1091            self.VKI_iframe.style.width = self.VKI_keyboard.offsetWidth + "px";1092            self.VKI_iframe.style.height = self.VKI_keyboard.offsetHeight + "px";1093            self.VKI_iframe.style.top = self.VKI_keyboard.style.top;1094            self.VKI_iframe.style.left = self.VKI_keyboard.style.left;1095          }1096        }1097        if (force === true) self.VKI_position();1098      }1099    };110011011102    if (window.addEventListener) {1103      window.addEventListener('resize', this.VKI_position, false);1104      window.addEventListener('scroll', this.VKI_position, false);1105    } else if (window.attachEvent) {1106      window.attachEvent('onresize', this.VKI_position);1107      window.attachEvent('onscroll', this.VKI_position);1108    }1109    if (this.VKI_sizeAdj) kbsize.change();111011111112    /* ****************************************************************1113     * Close the keyboard interface1114     *1115     */1116    this.VKI_close = VKI_close = function() {1117      if (this.VKI_target) {1118        try {1119          this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard);1120          if (this.VKI_isIE6) this.VKI_iframe.parentNode.removeChild(this.VKI_iframe);1121        } catch (e) {}1122        if (this.VKI_kt != this.VKI_kts) {1123          kblist.value = this.VKI_kt = this.VKI_kts;1124          this.VKI_buildKeys();1125        }1126        this.VKI_target.focus();1127        this.VKI_target = false;1128      }1129    };1130  }11311132  function VKI_findPos(obj) {1133    var curleft = curtop = 0;1134    do {1135      curleft += obj.offsetLeft;1136      curtop += obj.offsetTop;1137    } while (obj = obj.offsetParent);1138    return [curleft, curtop];1139  }11401141  function VKI_innerDimensions() {1142    if (self.innerHeight) {1143      return [self.innerWidth, self.innerHeight];1144    } else if (document.documentElement && document.documentElement.clientHeight) {1145      return [document.documentElement.clientWidth, document.documentElement.clientHeight];1146    } else if (document.body)1147      return [document.body.clientWidth, document.body.clientHeight];1148    return [0, 0];1149  }11501151  function VKI_scrollDist() {1152    var html = document.getElementsByTagName('html')[0];1153    if (html.scrollTop && document.documentElement.scrollTop) {1154      return [html.scrollLeft, html.scrollTop];1155    } else if (html.scrollTop || document.documentElement.scrollTop) {1156      return [html.scrollLeft + document.documentElement.scrollLeft, html.scrollTop + document.documentElement.scrollTop];1157    } else if (document.body.scrollTop)1158      return [document.body.scrollLeft, document.body.scrollTop];1159    return [0, 0];1160  }11611162  function VKI_getStyle(obj, styleProp) {1163    if (obj.currentStyle) {1164      var y = obj.currentStyle[styleProp];1165    } else if (window.getComputedStyle)1166      var y = window.getComputedStyle(obj, null)[styleProp];1167    return y;1168  }11691170  function VKI_disableSelection(elem) {1171    elem.onselectstart = function() { return false; };1172    elem.unselectable = "on";1173    elem.style.MozUserSelect = "none";1174    elem.style.cursor = "default";1175    if (window.opera) elem.onmousedown = function() { return false; };
...

Full Screen

Full Screen

pga_schedule.js

Source:pga_schedule.js Github

copy

Full Screen

1/////////////////////////////////////////////////////////////2//3// pgAdmin 4 - PostgreSQL Tools4//5// Copyright (C) 2013 - 2019, The pgAdmin Development Team6// This software is released under the PostgreSQL Licence7//8//////////////////////////////////////////////////////////////9define('pgadmin.node.pga_schedule', [10  'sources/gettext', 'sources/url_for', 'jquery', 'underscore',11  'underscore.string', 'sources/pgadmin', 'moment', 'pgadmin.browser', 'alertify',12  'pgadmin.backform', 'pgadmin.backgrid',13], function(14  gettext, url_for, $, _, S, pgAdmin, moment, pgBrowser, Alertify, Backform,15  Backgrid16) {17  if (!pgBrowser.Nodes['coll-pga_schedule']) {18    pgBrowser.Nodes['coll-pga_schedule'] =19      pgBrowser.Collection.extend({20        node: 'pga_schedule',21        label: gettext('Schedules'),22        type: 'coll-pga_schedule',23        columns: ['jscid', 'jscname', 'jscenabled'],24        hasStatistics: false,25      });26  }27  if (!pgBrowser.Nodes['pga_schedule']) {28    var weekdays = [29        gettext('Sunday'), gettext('Monday'), gettext('Tuesday'),30        gettext('Wednesday'), gettext('Thursday'), gettext('Friday'),31        gettext('Saturday'),32      ],33      monthdays = [34        gettext('1st'), gettext('2nd'), gettext('3rd'),35        gettext('4th'), gettext('5th'), gettext('6th'),36        gettext('7th'), gettext('8th'), gettext('9th'),37        gettext('10th'), gettext('11th'), gettext('12th'),38        gettext('13th'), gettext('14th'), gettext('15th'),39        gettext('16th'), gettext('17th'), gettext('18th'),40        gettext('19th'), gettext('20th'), gettext('21st'),41        gettext('22nd'), gettext('23rd'), gettext('24th'),42        gettext('25th'), gettext('26th'), gettext('27th'),43        gettext('28th'), gettext('29th'), gettext('30th'),44        gettext('31st'), gettext('Last day'),45      ],46      months = [47        gettext('January'), gettext('February'), gettext('March'),48        gettext('April'), gettext('May'), gettext('June'),49        gettext('July'), gettext('August'), gettext('September'),50        gettext('October'), gettext('November'), gettext('December'),51      ],52      hours = [53        gettext('00'), gettext('01'), gettext('02'), gettext('03'),54        gettext('04'), gettext('05'), gettext('06'), gettext('07'),55        gettext('08'), gettext('09'), gettext('10'), gettext('11'),56        gettext('12'), gettext('13'), gettext('14'), gettext('15'),57        gettext('16'), gettext('17'), gettext('18'), gettext('19'),58        gettext('20'), gettext('21'), gettext('22'), gettext('23'),59      ],60      minutes = [61        gettext('00'), gettext('01'), gettext('02'), gettext('03'),62        gettext('04'), gettext('05'), gettext('06'), gettext('07'),63        gettext('08'), gettext('09'), gettext('10'), gettext('11'),64        gettext('12'), gettext('13'), gettext('14'), gettext('15'),65        gettext('16'), gettext('17'), gettext('18'), gettext('19'),66        gettext('20'), gettext('21'), gettext('22'), gettext('23'),67        gettext('24'), gettext('25'), gettext('26'), gettext('27'),68        gettext('28'), gettext('29'), gettext('30'), gettext('31'),69        gettext('32'), gettext('33'), gettext('34'), gettext('35'),70        gettext('36'), gettext('37'), gettext('38'), gettext('39'),71        gettext('40'), gettext('41'), gettext('42'), gettext('43'),72        gettext('44'), gettext('45'), gettext('46'), gettext('47'),73        gettext('48'), gettext('49'), gettext('50'), gettext('51'),74        gettext('52'), gettext('53'), gettext('54'), gettext('55'),75        gettext('56'), gettext('57'), gettext('58'), gettext('59'),76      ],77      AnyDatetimeCell = Backgrid.Extension.MomentCell.extend({78        editor: Backgrid.Extension.DatetimePickerEditor,79        render: function() {80          this.$el.empty();81          var model = this.model;82          this.$el.text(this.formatter.fromRaw(model.get(this.column.get('name')), model) || gettext('<any>'));83          this.delegateEvents();84          return this;85        },86      }),87      DatetimeCell = Backgrid.Extension.MomentCell.extend({88        editor: Backgrid.Extension.DatetimePickerEditor,89      }),90      BooleanArrayFormatter = function(selector, indexes) {91        var self = this;92        self.selector = selector;93        self.indexes = indexes;94        this.fromRaw = function(rawData) {95          if (!_.isArray(rawData)) {96            return rawData;97          }98          var res = [], idx = 0, resIdx = [];99          for (; idx < rawData.length; idx++) {100            if (!rawData[idx])101              continue;102            res.push(self.selector[idx]);103            resIdx.push(idx + 1);104          }105          return self.indexes ? resIdx : res.join(', ');106        };107        this.toRaw = function(d) {108          if (!self.indexes)109            return d;110          var res = [], i = 0, l = self.selector.length;111          for (; i < l; i++) {112            res.push(_.indexOf(d, String(i + 1)) != -1);113          }114          return res;115        };116        return self;117      },118      BooleanArrayOptions = function(ctrl) {119        var selector = ctrl.field.get('selector'),120          val = ctrl.model.get(ctrl.field.get('name')),121          res = [];122        if (selector) {123          res = _.map(124            selector, function(v, i) {125              return {label: v, value: i + 1, selected: val[i]};126            }127          );128        }129        return res;130      },131      ExceptionModel = pgBrowser.Node.Model.extend({132        defaults: {133          jexid: undefined,134          jexdate: null,135          jextime: null,136        },137        idAttribute: 'jexid',138        schema: [{139          id: 'jexdate', type: 'text', label: gettext('Date'),140          editable: true, placeholder: gettext('<any>'),141          cell: AnyDatetimeCell, options: {format: 'YYYY-MM-DD'},142          displayFormat: 'YYYY-MM-DD', modelFormat: 'YYYY-MM-DD',143          cellHeaderClasses:'width_percent_50', allowEmpty: true,144        },{145          id: 'jextime', type: 'text', placeholder: gettext('<any>'),146          label: gettext('Time'), editable: true, cell: AnyDatetimeCell,147          options: {format: 'HH:mm', buttons: {148            showToday: false,149          }}, displayFormat: 'HH:mm',150          modelFormat: 'HH:mm:ss', displayInUTC: true, allowEmpty: true,151          cellHeaderClasses:'width_percent_50', modalInUTC: true,152        }],153        validate: function() {154          var self = this, exceptions = this.collection,155            errMsg, hasExceptionErr = false,156            d = (this.get('jexdate') || '<any>'),157            t = this.get('jextime') || '<any>',158            id = this.get('jexid') || this.cid;159          self.errorModel.unset('jscdate');160          if (d == t && d == '<any>') {161            errMsg = gettext('Please specify date/time.');162            self.errorModel.set('jscdate', errMsg);163            return errMsg ;164          }165          exceptions.each(function(ex) {166            if (hasExceptionErr || id == (ex.get('jexid') || ex.cid))167              return;168            if (169              d == (ex.get('jexdate') || '<any>') &&170                t == (ex.get('jextime') || '<any>')171            ) {172              errMsg = gettext('Please specify unique set of exceptions.');173              if (ex.errorModel.get('jscdate') != errMsg)174                self.errorModel.set('jscdate', errMsg);175              hasExceptionErr = true;176            }177          });178          return errMsg;179        },180      });181    var CustomInfoControl = Backform.Control.extend({182      template: _.template([183        '<div>',184        '  <%=infotext%>',185        '</div>',186      ].join('\n')),187      className: 'pgadmin-control-group',188    });189    pgBrowser.Nodes['pga_schedule'] = pgBrowser.Node.extend({190      parent_type: 'pga_job',191      type: 'pga_schedule',192      dialogHelp: url_for('help.static', {'filename': 'pgagent_jobs.html'}),193      hasSQL: true,194      hasDepends: false,195      hasStatistics: false,196      canDrop: true,197      label: gettext('Schedule'),198      node_image: 'icon-pga_schedule',199      Init: function() {200        /* Avoid mulitple registration of menus */201        if (this.initialized)202          return;203        this.initialized = true;204        pgBrowser.add_menus([{205          name: 'create_pga_schedule_on_job', node: 'pga_job', module: this,206          applies: ['object', 'context'], callback: 'show_obj_properties',207          category: 'create', priority: 4, label: gettext('Schedule...'),208          icon: 'wcTabIcon icon-pga_schedule', data: {action: 'create'},209        },{210          name: 'create_pga_schedule_on_coll', node: 'coll-pga_schedule', module: this,211          applies: ['object', 'context'], callback: 'show_obj_properties',212          category: 'create', priority: 4, label: gettext('Schedule...'),213          icon: 'wcTabIcon icon-pga_schedule', data: {action: 'create'},214        },{215          name: 'create_pga_schedule', node: 'pga_schedule', module: this,216          applies: ['object', 'context'], callback: 'show_obj_properties',217          category: 'create', priority: 4, label: gettext('Schedule...'),218          icon: 'wcTabIcon icon-pga_schedule', data: {action: 'create'},219        }]);220      },221      model: pgBrowser.Node.Model.extend({222        defaults: {223          jscid: null,224          jscjobid: null,225          jscname: '',226          jscdesc: '',227          jscenabled: true,228          jscstart: null,229          jscend: null,230          jscweekdays: _.map(weekdays, function() { return false; }),231          jscmonthdays: _.map(monthdays, function() { return false; }),232          jscmonths: _.map(months, function() { return false; }),233          jschours: _.map(hours, function() { return false; }),234          jscminutes: _.map(minutes, function() { return false; }),235          jscexceptions: [],236        },237        idAttribute: 'jscid',238        parse: function(d) {239          d.jscexceptions = [];240          if (d.jexid && d.jexid.length) {241            var idx = 0;242            for (; idx < d.jexid.length; idx++) {243              d.jscexceptions.push({244                'jexid': d.jexid[idx],245                'jexdate': d.jexdate[idx],246                'jextime': d.jextime[idx],247              });248            }249          }250          delete d.jexid;251          delete d.jexdate;252          delete d.jextime;253          return pgBrowser.Node.Model.prototype.parse.apply(this, arguments);254        },255        schema: [{256          id: 'jscid', label: gettext('ID'), type: 'int',257          cellHeaderClasses: 'width_percent_5', mode: ['properties'],258        },{259          id: 'jscname', label: gettext('Name'), type: 'text',260          cellHeaderClasses: 'width_percent_45',261          disabled: function() { return false; },262        },{263          id: 'jscenabled', label: gettext('Enabled?'), type: 'switch',264          disabled: function() { return false; },265          cellHeaderClasses: 'width_percent_5',266        },{267          id: 'jscstart', label: gettext('Start'), type: 'text',268          control: 'datetimepicker', cell: DatetimeCell,269          disabled: function() { return false; }, displayInUTC: false,270          displayFormat: 'YYYY-MM-DD HH:mm:ss Z',271          modelFormat: 'YYYY-MM-DD HH:mm:ss Z', options: {272            format: 'YYYY-MM-DD HH:mm:ss Z',273            minDate: moment().add(0, 'm'),274          }, cellHeaderClasses: 'width_percent_25',275        },{276          id: 'jscend', label: gettext('End'), type: 'text',277          control: 'datetimepicker', cell: DatetimeCell,278          disabled: function() { return false; }, displayInUTC: false,279          displayFormat: 'YYYY-MM-DD HH:mm:ss Z', options: {280            format: 'YYYY-MM-DD HH:mm:ss Z',281            minDate: moment().add(0, 'm'),282          }, cellHeaderClasses: 'width_percent_25',283          modelFormat: 'YYYY-MM-DD HH:mm:ss Z',284        },{285          id: 'jscweekdays', label: gettext('Week days'), type: 'text',286          control: Backform.Control.extend({287            formatter: new BooleanArrayFormatter(weekdays, false),288          }), mode: ['properties'],289        },{290          id: 'jscmonthdays', label: gettext('Month days'), type: 'text',291          control: Backform.Control.extend({292            formatter: new BooleanArrayFormatter(monthdays, false),293          }), mode: ['properties'],294        },{295          id: 'jscmonths', label: gettext('Months'), type: 'text',296          control: Backform.Control.extend({297            formatter: new BooleanArrayFormatter(months, false),298          }), mode: ['properties'],299        },{300          id: 'jschours', label: gettext('Hours'), type: 'text',301          control: Backform.Control.extend({302            formatter: new BooleanArrayFormatter(hours, false),303          }), mode: ['properties'],304        },{305          id: 'jscminutes', label: gettext('Minutes'), type: 'text',306          control: Backform.Control.extend({307            formatter: new BooleanArrayFormatter(minutes, false),308          }), mode: ['properties'],309        },{310          id: 'jscexceptions', label: gettext('Exceptions'), type: 'text',311          control: Backform.Control.extend({312            formatter: new function() {313              this.fromRaw = function(rawData) {314                var res = '', idx = 0, d;315                if (!rawData) {316                  return res;317                }318                for (; idx < rawData.length; idx++) {319                  d = rawData[idx];320                  if (idx)321                    res += ', ';322                  res += '[' + String((d.jexdate || '') + ' ' + (d.jextime || '')).replace(/^\s+|\s+$/g, '') + ']';323                }324                return res;325              };326              this.toRaw = function(data) { return data; };327              return this;328            },329          }), mode: ['properties'],330        },{331          type: 'control',  mode: ['create', 'edit'], group: gettext('Repeat'),332          infotext: gettext('Schedules are specified using a <b>cron-style</b> format.<br/><ul><li>For each selected time or date element, the schedule will execute.<br/>e.g. To execute at 5 minutes past every hour, simply select ‘05’ in the Minutes list box.<br/></li><li>Values from more than one field may be specified in order to further control the schedule.<br/>e.g. To execute at 12:05 and 14:05 every Monday and Thursday, you would click minute 05, hours 12 and 14, and weekdays Monday and Thursday.</li><li>For additional flexibility, the Month Days check list includes an extra Last Day option. This matches the last day of the month, whether it happens to be the 28th, 29th, 30th or 31st.</li></ul>'),333          control: CustomInfoControl,334        },{335          type: 'nested', label: gettext('Days'), group: gettext('Repeat'),336          mode: ['create', 'edit'],337          control: Backform.FieldsetControl.extend({338            render: function() {339              var res = Backform.FieldsetControl.prototype.render.apply(340                this, arguments341              );342              // $(343              //   '<div>' +344              //     gettext('Schedules are specified using a <b>cron-style</b> format.<br/><ul><li>For each selected time or date element, the schedule will execute.<br/>e.g. To execute at 5 minutes past every hour, simply select ‘05’ in the Minutes list box.<br/></li><li>Values from more than one field may be specified in order to further control the schedule.<br/>e.g. To execute at 12:05 and 14:05 every Monday and Thursday, you would click minute 05, hours 12 and 14, and weekdays Monday and Thursday.</li><li>For additional flexibility, the Month Days check list includes an extra Last Day option. This matches the last day of the month, whether it happens to be the 28th, 29th, 30th or 31st.</li></ul>') +345              //   '</div>'346              // ).insertBefore(this.$el);347              return res;348            },349          }),350          schema:[{351            id: 'jscweekdays', label: gettext('Week Days'), cell: 'select2',352            group: gettext('Days'), control: 'select2', type: 'array',353            select2: {354              first_empty: false,355              multiple: true,356              allowClear: true,357              placeholder: gettext('Select the weekdays...'),358              width: 'style',359              dropdownAdapter: $.fn.select2.amd.require(360                'select2/selectAllAdapter'361              ),362            },363            selector: weekdays,364            formatter: new BooleanArrayFormatter(weekdays, true),365            options: BooleanArrayOptions,366          },{367            id: 'jscmonthdays', label: gettext('Month Days'), cell: 'select2',368            group: gettext('Days'), control: 'select2', type: 'array',369            select2: {370              first_empty: false,371              multiple: true,372              allowClear: true,373              placeholder: gettext('Select the month days...'),374              width: 'style',375              dropdownAdapter: $.fn.select2.amd.require(376                'select2/selectAllAdapter'377              ),378            },379            formatter: new BooleanArrayFormatter(monthdays, true),380            selector: monthdays, options: BooleanArrayOptions,381          },{382            id: 'jscmonths', label: gettext('Months'), cell: 'select2',383            group: gettext('Days'), control: 'select2', type: 'array',384            select2: {385              first_empty: false,386              multiple: true,387              allowClear: true,388              placeholder: gettext('Select the months...'),389              width: 'style',390              dropdownAdapter: $.fn.select2.amd.require(391                'select2/selectAllAdapter'392              ),393            },394            formatter: new BooleanArrayFormatter(months, true),395            selector: months, options: BooleanArrayOptions,396          }],397        },{398          type: 'nested', control: 'fieldset', label: gettext('Times'),399          group: gettext('Repeat'), mode: ['create', 'edit'],400          schema:[{401            id: 'jschours', label: gettext('Hours'), cell: 'select2',402            group: gettext('Times'), control: 'select2', type: 'array',403            select2: {404              first_empty: false,405              multiple: true,406              allowClear: true,407              placeholder: gettext('Select the hours...'),408              width: 'style',409              dropdownAdapter: $.fn.select2.amd.require(410                'select2/selectAllAdapter'411              ),412            },413            formatter: new BooleanArrayFormatter(hours, true),414            selector: hours, options: BooleanArrayOptions,415          },{416            id: 'jscminutes', label: gettext('Minutes'), cell: 'select2',417            group: gettext('Times'), control: 'select2', type: 'array',418            select2: {419              first_empty: false,420              multiple: true,421              allowClear: true,422              placeholder: gettext('Select the minutes...'),423              width: 'style',424              dropdownAdapter: $.fn.select2.amd.require(425                'select2/selectAllAdapter'426              ),427            },428            formatter: new BooleanArrayFormatter(minutes, true),429            selector: minutes, options: BooleanArrayOptions,430          }],431        },{432          id: 'jscexceptions', type: 'collection', mode: ['edit', 'create'],433          label: '', canEdit: false, model: ExceptionModel, canAdd: true,434          group: gettext('Exceptions'), canDelete: true,435          cols: ['jexdate', 'jextime'], control: 'sub-node-collection',436        },{437          id: 'jscdesc', label: gettext('Comment'), type: 'multiline',438        }],439        validate: function() {440          var val = this.get('jscname'),441            errMsg = null, msg;442          if (_.isUndefined(val) || _.isNull(val) ||443            String(val).replace(/^\s+|\s+$/g, '') == '') {444            msg = gettext('Name cannot be empty.');445            this.errorModel.set('jscname', msg);446            errMsg = msg;447          } else {448            this.errorModel.unset('jscname');449          }450          val = this.get('jscstart');451          if (_.isUndefined(val) || _.isNull(val) ||452            String(val).replace(/^\s+|\s+$/g, '') == '') {453            msg = gettext('Please enter the start time.');454            if (val == '') {455              this.set('jscstart', undefined);456            }457            this.errorModel.set('jscstart', msg);458            errMsg = errMsg || msg;459          } else {460            this.errorModel.unset('jscstart');461          }462          // End time must be greater than Start time463          if(!errMsg) {464            val = this.get('jscend');465            // No further validation required if end date is not provided by466            // the user467            if (_.isUndefined(val) || _.isNull(val) ||468              String(val).replace(/^\s+|\s+$/g, '') == '') {469              if (val == '') {470                this.set('jscend', undefined);471              }472              return;473            }474            var start_time = this.get('jscstart'),475              end_time = this.get('jscend'),476              start_time_js =  start_time.split(' '),477              end_time_js =  end_time.split(' ');478            start_time_js = moment(start_time_js[0] + ' ' + start_time_js[1]);479            end_time_js = moment(end_time_js[0] + ' ' + end_time_js[1]);480            if(end_time_js.isBefore(start_time_js)) {481              errMsg = gettext('Start time must be less than end time');482              this.errorModel.set('jscstart', errMsg);483            }484          }485          return errMsg;486        },487      }),488    });489  }490  return pgBrowser.Nodes['pga_schedule'];...

Full Screen

Full Screen

lang.js

Source:lang.js Github

copy

Full Screen

1{% load i18n %}2if (window.GeoExt && GeoExt.Lang) {3    GeoExt.Lang.set("{{ LANGUAGE_CODE }}");4}5if (window.GeoNode && GeoNode.plugins && GeoNode.plugins.Save) {6    Ext.apply(GeoNode.plugins.Save.prototype, {7        metadataFormCancelText : gettext("Cancel"),8        metadataFormSaveAsCopyText : gettext("Save as Copy"),9        metaDataHeader: gettext("About this Map"),10        metaDataMapAbstract: gettext("Abstract"),11        metadataFormSaveText : gettext("Save"),12        metaDataMapTitle: gettext("Title")13    });14}15if (window.GeoNode && GeoNode.plugins && GeoNode.plugins.XHRTrouble) {16    Ext.apply(GeoNode.plugins.XHRTrouble.prototype, {17        connErrorTitleText: gettext("Connection Error"),18        connErrorText: gettext("The server returned an error"),19        connErrorDetailsText: gettext("Details...")20    });21}22if (window.GeoExplorer) {23    Ext.apply(GeoExplorer.prototype, {24        addLayersButtonText: gettext("Add Layers"),25        areaActionText: gettext("Area"),26        backgroundContainerText: gettext("Background"),27        capGridAddLayersText: gettext("Add Layers"),28        capGridDoneText: gettext("Done"),29        capGridText: gettext("Available Layers"),30        exportDialogMessage: '<p>Your map is ready to be published to the web! </p>' + '<p> Simply copy the following HTML to embed the map in your website: </p>',31        heightLabel: gettext("Height"),32        infoButtonText: gettext("Get Feature Info"),33        largeSizeLabel: gettext("Large"),34        layerAdditionLabel: gettext("or add a new server."),35        layerContainerText: gettext("Map Layers"),36        layerSelectionLabel: gettext("View available data from:"),37        layersContainerText: gettext("Data"),38        layersPanelText: gettext("Layers"),39        legendPanelText: gettext("Legend"),40        lengthActionText: gettext("Length"),41        loadingMapMessage: gettext("Loading Map..."),42        mapSizeLabel: gettext("Map Size"), 43        measureSplitText: gettext("Measure"),44        metaDataMapContact: gettext("Contact"),45        metaDataMapId: gettext("Permalink"),46        miniSizeLabel: gettext("Mini"),47        navActionTipText: gettext("Pan Map"),48        navNextAction: gettext("Zoom to Next Extent"),49        navPreviousActionText: gettext("Zoom to Previous Extent"),50        noPermalinkText: gettext("This map has not yet been saved."),51        permalinkLabel: gettext("Permalink"),52        premiumSizeLabel: gettext("Premium"),53        printTipText: gettext("Print Map"),54        printWindowTitleText: gettext("Print Preview"),55        propertiesText: gettext("Properties"),56        publishActionText: gettext("Publish Map"),57        removeLayerActionText: gettext("Remove Layer"),58        removeLayerActionTipText: gettext("Remove Layer"),59        saveFailMessage: gettext("Sorry, your map could not be saved."),60        saveFailTitle: gettext("Error While Saving"),61        saveMapText: gettext("Save Map"),62        saveNotAuthorizedMessage: gettext("You must be logged in to save this map."),63        smallSizeLabel: gettext("Small"),64        sourceLoadFailureMessage: gettext("Error contacting server.\n Please check the url and try again."),65        layerPropertiesText: gettext('Layer Properties'),66        layerPropertiesTipText: gettext('Change layer format and style'),67        layerStylesText: gettext('Edit Styles'),68        layerStylesTipText: gettext('Edit layer styles'),69        switchTo3DActionText: gettext("Switch to Google Earth 3D Viewer"),70        unknownMapMessage: gettext("The map that you are trying to load does not exist.  Creating a new map instead."),71        unknownMapTitle: gettext("Unknown Map"),72        widthLabel: gettext("Width"),73        zoomInActionText: gettext("Zoom In"),74        zoomOutActionText: gettext("Zoom Out"),75        zoomSelectorText: gettext("Zoom level"),76        zoomSliderTipText: gettext("Zoom Level"),77        zoomToLayerExtentText: gettext("Zoom to Layer Extent"),78        zoomVisibleButtonText: gettext("Zoom to Visible Extent")79    });80}81if (window.Embed) {82  Ext.apply(Embed.prototype, {83      zoomLevelText: gettext("Zoom Level {zoom}")84  });85}86if (window.GeoNode && GeoNode.MapGrid) {87    Ext.apply(GeoNode.MapGrid.prototype, {88        createMapText : gettext("Create Map"),89        exportMapText: gettext("Export Map"),90        mapAbstractLabelText: gettext("Abstract"),91        mapContactLabelText: gettext("Contact"),92        mapGridText : gettext("Map"),93        mapLinkLabelText: gettext("View this Map"),94        mapTitleLabelText: gettext("Title"),95        openMapText : gettext("Open Map")96    });97}98if (window.GeoExplorer && GeoExplorer.CapabilitiesGrid) {99    Ext.apply(GeoExplorer.CapabilitiesGrid.prototype, {100        nameHeaderText : gettext("Name"),101        queryableHeaderText : gettext("Queryable"),102        titleHeaderText : gettext("Title")103    });104}105if (window.GeoNode && GeoNode.ConfigManager) {106    Ext.apply(GeoNode.ConfigManager.prototype, {107        backgroundDisabledText : gettext("No background")108    });109}110if (window.gxp && gxp.EmbedMapDialog) {111    Ext.apply(gxp.EmbedMapDialog.prototype, {112        heightLabel: gettext("Height"),113        largeSizeLabel: gettext("Large"),114        mapSizeLabel: gettext("Map Size"),115        miniSizeLabel: gettext("Mini"),116        premiumSizeLabel: gettext("Premium"),117        publishActionText: gettext("Publish Map"),118        publishMessage: gettext('Your map is ready to be published to the web!  Simply copy the following HTML to embed the map in your website:'),119        smallSizeLabel: gettext("Small"),120        widthLabel: gettext("Width")121    });122}123if (window.GeoExplorer && GeoExplorer.CapabilitiesRowExpander) {124    Ext.apply(GeoExplorer.CapabilitiesRowExpander.prototype, {125        abstractText: gettext("Abstract:"),126        attributionEmptyText: gettext("No attribution information is provided for this layer."),127        attributionText: gettext("Provided by:"),128        downloadText : gettext("Download:"),129        keywordEmptyText: gettext("No keywords are listed for this layer."),130        keywordText: gettext("Keywords:"),131        metadataEmptyText: gettext("No metadata URLs are defined for this layer."),132        metadataText: gettext("Metadata Links:")133    });134}135if (window.GeoExt && GeoExt.ux && GeoExt.ux.PrintPreview) {136    Ext.apply(GeoExt.ux.PrintPreview.prototype, {137        paperSizeText: gettext("Paper size:"),138        resolutionText: gettext("Resolution:"),139        printText: gettext("Print"),140        emptyTitleText: gettext("Enter map title here."),141        includeLegendText: gettext("Include legend?"),142        emptyCommentText: gettext("Enter comments here."),143        creatingPdfText: gettext("Creating PDF...")144    });145}146if (window.GeoNode && GeoNode.MapSearchTable) {147    Ext.apply(GeoNode.MapSearchTable.prototype, {148        titleHeaderText: gettext('Title'),149        contactHeaderText: gettext("Contact"),150        lastModifiedHeaderText: gettext("Last Modified"),151        mapAbstractLabelText: gettext("Abstract"),152        mapLinkLabelText: gettext("View this Map"),153        previousText: gettext('Prev'),154        nextText: gettext('Next'),155        ofText: gettext('of'),156        noResultsText: gettext('Your search did not match any items.'),157        searchLabelText: gettext('Search Maps'),158        searchButtonText: gettext('Search'),159        showingText: gettext('Showing'),160        loadingText: gettext('Loading'),161        permalinkText: gettext('permalink')162    });163}164if (window.GeoNode && GeoNode.SearchTable) {165    Ext.apply(GeoNode.SearchTable.prototype, {166        selectHeaderText: gettext('Select'),167        nameHeaderText: gettext('Name'),168        titleHeaderText: gettext('Title'),169        selectText: gettext('Select:'),170        selectAllText: gettext('All'),171        selectNoneText: gettext('None'),172        previousText: gettext('Prev'),173        nextText: gettext('Next'),174        ofText: gettext('of'),175        noResultsText: gettext('Your search did not match any items.'),176        searchButtonText: gettext('Search'),177        showingText: gettext('Showing'),178        loadingText: gettext("Loading..."),179        permalinkText: gettext('permalink'),180        unviewableTooltip: gettext('You do not have permission to view this data'),181        remoteTooltip: gettext('This data is stored on a remote server')    182    });183}184if (window.GeoNode && GeoNode.SearchTableRowExpander) {185    Ext.apply(GeoNode.SearchTableRowExpander.prototype, {186        abstractText: gettext("Abstract:"),187        abstractEmptyText: gettext('No abstract is provided for this layer.'),188        attributionEmptyText: gettext("No attribution information is provided for this layer."),189        attributionText: gettext("Provided by:"),190        downloadText : gettext("Download:"),191        downloadEmptyText: gettext("No download URLs are definied for this layer."),192        keywordEmptyText: gettext("No keywords are listed for this layer."),193        keywordText: gettext("Keywords:"),194        metadataEmptyText: gettext("No metadata URLs are defined for this layer."),195        metadataText: gettext("Metadata Links:"),196        dataDetailText: 'Click here for more information about this layer.'197    });198}199if (window.GeoNode && GeoNode.DataCart) {200    Ext.apply(GeoNode.DataCart.prototype, {201        selectedLayersText: gettext('Selected Layers'),202        emptySelectionText: gettext('No Layers Selected'),203        titleText: gettext('Title'),204        clearSelectedButtonText: gettext('Clear Selected'),205        clearAllButtonText: gettext('Clear All') 206    });207}208if (window.GeoNode && GeoNode.DataCartOps) {209    Ext.apply(GeoNode.DataCartOps.prototype, {210        failureText: gettext('Operation Failed'),211        noLayersText: gettext('No layers are currently selected.')212    });213}214if (window.GeoNode && GeoNode.BatchDownloadWidget) {215    Ext.apply(GeoNode.BatchDownloadWidget.prototype, {216        downloadingText: gettext('Downloading...'),217        cancelText: gettext('Cancel'),218        windowMessageText: gettext('Please wait')219    });220}221{% block extra_lang %}...

Full Screen

Full Screen

strings.js

Source:strings.js Github

copy

Full Screen

1export const BibFieldTitles = {2    'abstract': gettext('Abstract'),3    'addendum': gettext('Addendum'),4    'afterword': gettext('Afterword'),5    'annotation': gettext('Annotation'),6    'annotator': gettext('Annotations author(s)'),7    'author': gettext('Author(s)'),8    'authortype': gettext('Author type'),9    'bookauthor': gettext('Book author(s)'),10    'bookpagination': gettext('Book pagination'),11    'booksubtitle': gettext('Book subtitle'),12    'booktitle': gettext('Book title'),13    'booktitleaddon': gettext('Book title annex'),14    'chapter': gettext('Chapter or section'),15    'commentator': gettext('Author(s) of a commentary'),16    'date': gettext('Publication date'),17    'doi': gettext('Digital Object Identifier'),18    'edition': gettext('Edition'),19    'editor': gettext('Editor(s)'),20    'editora': gettext('Secondary editor'),21    'editorb': gettext('Secondary editor 2'),22    'editorc': gettext('Secondary editor 3'),23    'editortype': gettext('Role of editor(s)'),24    'editoratype': gettext('Role of secondary editor'),25    'editorbtype': gettext('Role of secondary editor 2'),26    'editorctype': gettext('Role of secondary editor 3'),27    'eid': gettext('Electronic identifier of an article'),28    'entrysubtype': gettext('Entry subtype'),29    'eprint': gettext('Electronic identifier of an online publication'),30    'eprintclass': gettext('Additional information to an online publication'),31    'eprinttype': gettext('Eprint identifier type'),32    'eventdate': gettext('Event date'),33    'eventtitle': gettext('Event title'),34    'file': gettext('Local link to the work'),35    'foreword': gettext('Foreword author(s)'),36    'holder': gettext('Patent holder(s)'),37    'howpublished': gettext('Publication notice'),38    'indextitle': gettext('Title for indexing'),39    'institution': gettext('Institution'),40    'introduction': gettext('Author(s) of an introduction to the work'),41    'isan': gettext('ISAN'),42    'isbn': gettext('ISBN'),43    'ismn': gettext('ISMN'),44    'isrn': gettext('ISRN'),45    'issn': gettext('ISSN'),46    'issue': gettext('Issue'),47    'issuesubtitle': gettext('Issue subtitle'),48    'issuetitle': gettext('Issue title'),49    'iswc': gettext('ISWC'),50    'journalsubtitle': gettext('Subtitle of publication'),51    'journaltitle': gettext('Title of publication'),52    'keywords': gettext('Keywords'),53    'label': gettext('Label'),54    'language': gettext('Language(s) of work'),55    'langid': gettext('Language of bibliography item'),56    'library': gettext('Library information'),57    'location': gettext('Location(s) of publication'),58    'mainsubtitle': gettext('Main subtitle'),59    'maintitle': gettext('Maintitle'),60    'maintitleaddon': gettext('Annex to the maintitle'),61    'nameaddon': gettext('author name addon'),62    'note': gettext('Note'),63    'number': gettext('Number of the work in a series'),64    'organization': gettext('Organization(s)'),65    'origdate': gettext('Publication date of the original work'),66    'origlanguage': gettext('Language of the original work'),67    'origlocation': gettext('Publication location of the original edition'),68    'origpublisher': gettext('Publisher of the original edition'),69    'origtitle': gettext('Title of the original work'),70    'pages': gettext('Pages'),71    'pagetotal': gettext('Total number of pages'),72    'pagination': gettext('Pagination'),73    'part': gettext('Number of a partial volume'),74    'publisher': gettext('Publisher(s)'),75    'pubstate': gettext('Publication state of the work'),76    'reprinttitle': gettext('Title of reprint'),77    'series': gettext('Name of series'),78    'shortauthor': gettext('Abbreviated author(s)'),79    'shorteditor': gettext('Abbreviated editor(s)'),80    'shorthand': gettext('Shorthand'),81    'shorthandintro': gettext('Shorthand intro'),82    'shortjournal': gettext('Acronym of the publication\'s title'),83    'shortseries': gettext('Acronym of the series'),84    'shorttitle': gettext('Abridged title'),85    'subtitle': gettext('Subtitle'),86    'title': gettext('Title'),87    'titleaddon': gettext('Title addon'),88    'translator': gettext('Translator(s)'),89    'type': gettext('Manual type'),90    'url': gettext('URL'),91    'urldate': gettext('Access date'),92    'venue': gettext('Location of a conference'),93    'version': gettext('Version'),94    'volume': gettext('Volume'),95    'volumes': gettext('Total number of volumes')96}97const edtfExplanation = gettext(98    'In <em>Extended Date Time Format</em> (EDTF) 1.0<br>Level 0 or 1'99)100const nameExplanation = gettext(101    'Prefixed is "used" when it is used in cases where only the last name is used. \102    For example: "Ludwig van Beethoven" turns into "Beethoven", so the prefix "van" \103    is not used. "Vincent van Gogh" turns into "van Gogh", so the prefix "van" is used.'104)105export const BibFieldHelp = {106    'date': edtfExplanation,107    'origdate': edtfExplanation,108    'pages': gettext('Range or single page, column, paragraph, section, line'),109    'author': nameExplanation,110    'editor': nameExplanation,111    'editora': nameExplanation,112    'editorb': nameExplanation,113    'editorc': nameExplanation,114    'translator': nameExplanation115}116export const BibTypeTitles = {117    'article': gettext('Article'),118    'book': gettext('Book'),119    'mvbook': gettext('Multi-volume book'),120    'inbook': gettext('In book'),121    'bookinbook': gettext('Book in book'),122    'suppbook': gettext('Supplemental material in a book'),123    'booklet': gettext('Booklet'),124    'collection': gettext('Collection'),125    'mvcollection': gettext('Multi-volume collection'),126    'incollection': gettext('In collection'),127    'suppcollection': gettext('Supplemental material in a collection'),128    'manual': gettext('Manual'),129    'misc': gettext('Miscellany'),130    'online': gettext('Online resource'),131    'patent': gettext('Patent'),132    'periodical': gettext('Periodical'),133    'suppperiodical': gettext('Supplemental material in a periodical'),134    'proceedings': gettext('Proceedings'),135    'mvproceedings': gettext('Multi-volume proceedings'),136    'inproceedings': gettext('Article in a proceedings'),137    'reference': gettext('Reference'),138    'mvreference': gettext('Multi-volume work of reference'),139    'inreference': gettext('Article in a work of reference'),140    'report': gettext('Report'),141    'thesis': gettext('Thesis'),142    'unpublished': gettext('Unpublished'),143    'article-magazine': gettext('Magazine article'),144    'article-newspaper': gettext('Newspaper article'),145    'article-journal': gettext('Journal article'),146    'entry-encyclopedia': gettext('Encyclopedia entry'),147    'entry-dictionary': gettext('Dictionary entry'),148    'post-weblog': gettext('Blog post'),149    'post': gettext('Forum post')150}151export const BibOptionTitles = {152    'manual': gettext('Manual'),153    'patent': gettext('Patent'),154    'report': gettext('Report'),155    'thesis': gettext('Thesis'),156    'editor': gettext('Editor'),157    'compiler': gettext('Compiler'),158    'founder': gettext('Founder'),159    'continuator': gettext('Continuator'),160    'redactor': gettext('Redactor'),161    'reviser': gettext('Reviser'),162    'collaborator': gettext('Collaborator'),163    'page': gettext('Page'),164    'column': gettext('Column'),165    'section': gettext('Section'),166    'paragraph': gettext('Paragraph'),167    'verse': gettext('Verse'),168    'line': gettext('Line'),169    'inpreparation': gettext('In preparation'),170    'submitted': gettext('Submitted'),171    'forthcoming': gettext('Forthcoming'),172    'inpress': gettext('In press'),173    'prepublished': gettext('Pre-published'),174    'mathesis': gettext('M.A. thesis'),175    'phdthesis': gettext('Ph.D. thesis'),176    'candthesis': gettext('Candidate thesis'),177    'techreport': gettext('Technical report'),178    'resreport': gettext('Research report'),179    'software': gettext('Computer software'),180    'datacd': gettext('Data CD'),181    'audiocd': gettext('Audio CD'),182    "acadian": gettext('Acadian'),183    "afrikaans": gettext('Afrikaans'),184    "arabic": gettext('Arabic'),185    "basque": gettext('Basque'),186    "bulgarian": gettext('Bulgarian'),187    "catalan": gettext('Catalan'),188    "chinese": gettext('Chinese'),189    "pinyin": gettext('Chinese'),190    "croatian": gettext('Croatian'),191    "czech": gettext('Czech'),192    "danish": gettext('Danish'),193    "dutch": gettext('Dutch'),194    "auenglish": gettext('Australian English'),195    "caenglish": gettext('Canadian English'),196    "nzenglish": gettext('New Zealand English'),197    "ukenglish": gettext('UK English'),198    "english": gettext('UK English'),199    "american": gettext('US English'),200    "usenglish": gettext('US English'),201    "estonian": gettext('Estonian'),202    "farsi": gettext('Farsi'),203    "finnish": gettext('Finnish'),204    "french": gettext('French'),205    "cafrench": gettext('Canadian French'),206    "german": gettext('German'),207    "atgerman": gettext('Austrian German'),208    "greek": gettext('Greek'),209    "hebrew": gettext('Hebrew'),210    "hungarian": gettext('Hungarian'),211    "icelandic": gettext('Icelandic'),212    "italian": gettext('Italian'),213    "japanese": gettext('Japanese'),214    "latin": gettext('Latin'),215    "latvian": gettext('Latvian'),216    "lithuanian": gettext('Lithuanian'),217    "magyar": gettext('Magyar'),218    "mongolian": gettext('Mongolian'),219    "norwegian": gettext('Norwegian'),220    "newnorwegian": gettext('New Norwegian'),221    "polish": gettext('Polish'),222    "portuguese": gettext('Portuguese'),223    "brazilian": gettext('Brazilian Portuguese'),224    "brportuguese": gettext('Brazilian Portuguese'),225    "romanian": gettext('Romanian'),226    "russian": gettext('Russian'),227    "serbian": gettext('Serbian'),228    "cyrillicserbian": gettext('Cyrillic Serbian'),229    "slovak": gettext('Slovak'),230    "slovene": gettext('Slovene'),231    "spanish": gettext('Spanish'),232    "swedish": gettext('Swedish'),233    "thai": gettext('Thai'),234    "turkish": gettext('Turkish'),235    "ukrainian": gettext('Ukrainian'),236    "vietnamese": gettext('Vietnamese')...

Full Screen

Full Screen

images.module.js

Source:images.module.js Github

copy

Full Screen

1/**2 * (c) Copyright 2015 Hewlett-Packard Development Company, L.P.3 *4 * Licensed under the Apache License, Version 2.0 (the "License"); you may5 * not use this file except in compliance with the License. You may obtain6 * a copy of the License at7 *8 *    http://www.apache.org/licenses/LICENSE-2.09 *10 * Unless required by applicable law or agreed to in writing, software11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the13 * License for the specific language governing permissions and limitations14 * under the License.15 */16(function() {17  'use strict';18  /**19   * @ngdoc overview20   * @ngname horizon.app.core.images21   *22   * @description23   * Provides all of the services and widgets required24   * to support and display images related content.25   */26  angular27    .module('horizon.app.core.images', [28      'ngRoute',29      'horizon.app.core.images.actions',30      'horizon.app.core.images.details'31    ])32    .constant('horizon.app.core.images.events', events())33    .constant('horizon.app.core.images.non_bootable_image_types', ['aki', 'ari'])34    .constant('horizon.app.core.images.validationRules', validationRules())35    .constant('horizon.app.core.images.imageFormats', imageFormats())36    .constant('horizon.app.core.images.resourceType', 'OS::Glance::Image')37    .constant('horizon.app.core.images.statuses', {38      'active': gettext('Active'),39      'saving': gettext('Saving'),40      'queued': gettext('Queued'),41      'pending_delete': gettext('Pending Delete'),42      'killed': gettext('Killed'),43      'deactivated': gettext('Deactivated'),44      'deleted': gettext('Deleted')45    })46    .constant('horizon.app.core.images.transitional-statuses', [47      "saving",48      "queued",49      "pending_delete"50    ])51    .run(run)52    .config(config);53  run.$inject = [54    'horizon.framework.conf.resource-type-registry.service',55    'horizon.app.core.images.basePath',56    'horizon.app.core.images.service',57    'horizon.app.core.images.statuses',58    'horizon.app.core.images.resourceType',59    'horizon.framework.util.filters.$memoize',60    'horizon.app.core.openstack-service-api.keystone'61  ];62  function run(registry,63               basePath,64               imagesService,65               statuses,66               imageResourceType,67               $memoize,68               keystone) {69    registry.getResourceType(imageResourceType)70      .setNames('Image', 'Images', ngettext('Image', 'Images', 1))71      .setSummaryTemplateUrl(basePath + 'details/drawer.html')72      .setDefaultIndexUrl('/project/images/')73      .setItemInTransitionFunction(imagesService.isInTransition)74      .setProperties(imageProperties(imagesService, statuses))75      .setListFunction(imagesService.getImagesPromise)76      .setNeedsFilterFirstFunction(imagesService.getFilterFirstSettingPromise)77      .tableColumns78      .append({79        id: 'owner',80        priority: 1,81        filters: [$memoize(keystone.getProjectName)],82        policies: [{rules: [['identity', 'identity:get_project']]}]83      })84      .append({85        id: 'name',86        priority: 1,87        sortDefault: true,88        classes: "word-wrap",89        urlFunction: imagesService.getDetailsPath90      })91      .append({92        id: 'type',93        priority: 194      })95      .append({96        id: 'status',97        priority: 1,98        itemInTransitionFunction: imagesService.isInTransition99      })100      .append({101        id: 'visibility',102        priority: 1103      })104      .append({105        id: 'protected',106        priority: 1107      })108      .append({109        id: 'disk_format',110        priority: 2111      })112      .append({113        id: 'size',114        priority: 2115      });116    registry.getResourceType(imageResourceType).filterFacets117      .append({118        label: gettext('Name'),119        name: 'name',120        isServer: true,121        singleton: true,122        persistent: true123      })124      .append({125        label: gettext('Status'),126        name: 'status',127        isServer: true,128        singleton: true,129        options: [130          {label: gettext('Active'), key: 'active'},131          {label: gettext('Saving'), key: 'saving'},132          {label: gettext('Queued'), key: 'queued'},133          {label: gettext('Pending Delete'), key: 'pending_delete'},134          {label: gettext('Killed'), key: 'killed'},135          {label: gettext('Deactivated'), key: 'deactivated'},136          {label: gettext('Deleted'), key: 'deleted'}137        ]138      })139      .append({140        label: gettext('Visibility'),141        name: 'visibility',142        isServer: true,143        singleton: true,144        options: [145          {label: gettext('Public'), key: 'public'},146          {label: gettext('Private'), key: 'private'},147          {label: gettext('Shared With Project'), key: 'shared'},148          {label: gettext('Community'), key: 'community'}149        ]150      })151      .append({152        label: gettext('Protected'),153        name: 'protected',154        isServer: true,155        singleton: true,156        options: [157          {label: gettext('Yes'), key: 'true'},158          {label: gettext('No'), key: 'false'}159        ]160      })161      .append({162        label: gettext('Format'),163        name: 'disk_format',164        isServer: true,165        singleton: true,166        options: [167          {label: gettext('AKI'), key: 'aki'},168          {label: gettext('AMI'), key: 'ami'},169          {label: gettext('ARI'), key: 'ari'},170          {label: gettext('Docker'), key: 'docker'},171          {label: gettext('ISO'), key: 'iso'},172          {label: gettext('OVA'), key: 'ova'},173          {label: gettext('PLOOP'), key: 'ploop'},174          {label: gettext('QCOW2'), key: 'qcow2'},175          {label: gettext('Raw'), key: 'raw'},176          {label: gettext('VDI'), key: 'vdi'},177          {label: gettext('VHD'), key: 'vhd'},178          {label: gettext('VMDK'), key: 'vmdk'}179        ]180      })181      .append({182        label: gettext('Min. Size (bytes)'),183        name: 'size_min',184        isServer: true,185        singleton: true186      })187      .append({188        label: gettext('Max. Size (bytes)'),189        name: 'size_max',190        isServer: true,191        singleton: true192      });193  }194  /**195   * @ngdoc constant196   * @name horizon.app.core.images.validationRules197   * @description constants for use in validation fields198   */199  function validationRules() {200    return {201      integer: /^[0-9]+$/,202      fieldMaxLength: 255203    };204  }205  /**206   * @ngdoc constant207   * @name horizon.app.core.images.imageFormats208   * @description constants for list of image types in dropdowns209   */210  function imageFormats() {211    return {212      iso: gettext('ISO - Optical Disk Image'),213      ova: gettext('OVA - Open Virtual Appliance'),214      ploop: gettext('PLOOP - Virtuozzo/Parallels Loopback Disk'),215      qcow2: gettext('QCOW2 - QEMU Emulator'),216      raw: gettext('Raw'),217      vdi: gettext('VDI - Virtual Disk Image'),218      vhd: gettext('VHD - Virtual Hard Disk'),219      vmdk: gettext('VMDK - Virtual Machine Disk'),220      aki: gettext('AKI - Amazon Kernel Image'),221      ami: gettext('AMI - Amazon Machine Image'),222      ari: gettext('ARI - Amazon Ramdisk Image'),223      docker: gettext('Docker')224    };225  }226  /**227   * @name imageProperties228   * @description resource properties for image module229   */230  function imageProperties(imagesService, statuses) {231    return {232      id: gettext('ID'),233      checksum: gettext('Checksum'),234      members: gettext('Members'),235      min_disk: gettext('Min. Disk'),236      min_ram: gettext('Min. RAM'),237      name: gettext('Name'),238      owner: gettext('Owner'),239      tags: gettext('Tags'),240      'updated_at': {label: gettext('Updated At'), filters: ['simpleDate'] },241      virtual_size: gettext('Virtual Size'),242      visibility: gettext('Visibility'),243      description: gettext('Description'),244      architecture: gettext('Architecture'),245      kernel_id: gettext('Kernel ID'),246      ramdisk_id: gettext('Ramdisk ID'),247      'created_at': {label: gettext('Created At'), filters: ['simpleDate'] },248      container_format: { label: gettext('Container Format'), filters: ['uppercase'] },249      disk_format: { label: gettext('Disk Format'), filters: ['noValue', 'uppercase'] },250      is_public: { label: gettext('Is Public'), filters: ['yesno'] },251      type: { label: gettext('Type')},252      'protected': { label: gettext('Protected'), filters: ['yesno'] },253      size: { label: gettext('Size'), filters: ['bytes'] },254      status: { label: gettext('Status'), values: statuses }255    };256  }257  /**258   * @ngdoc value259   * @name horizon.app.core.images.events260   * @description a list of events for images261   * @returns {Object} The event object262   */263  function events() {264    return {265      IMAGE_UPLOAD_PROGRESS: 'horizon.app.core.images.IMAGE_UPLOAD_PROGRESS'266    };267  }268  config.$inject = [269    '$provide',270    '$windowProvider',271    '$routeProvider',272    'horizon.app.core.detailRoute'273  ];274  /**275   * @name config276   * @param {Object} $provide277   * @param {Object} $windowProvider278   * @param {Object} $routeProvider279   * @description Routes used by this module.280   * @returns {undefined} Returns nothing281   */282  function config($provide, $windowProvider, $routeProvider, detailRoute) {283    var path = $windowProvider.$get().STATIC_URL + 'app/core/images/';284    $provide.constant('horizon.app.core.images.basePath', path);285    $routeProvider.when('/project/images/:id', {286      redirectTo: goToAngularDetails287    });288    $routeProvider.when('/admin/images/:id/detail', {289      redirectTo: goToAngularDetails290    });291    $routeProvider.when('/project/images', {292      templateUrl: path + 'panel.html'293    });294    $routeProvider.when('/admin/images', {295      templateUrl: path + 'admin-panel.html'296    });297    function goToAngularDetails(params) {298      return detailRoute + 'OS::Glance::Image/' + params.id;299    }300  }...

Full Screen

Full Screen

user_profile.spec.js

Source:user_profile.spec.js Github

copy

Full Screen

...17            return MM.openSideMenu();18        }).then(function () {19            return MM.clickOnElement($('a[userid="56"]'));20        }).then(function () {21            expect(MM.getNavBar().getText()).toMatch('Barbara Gardner');22            expect(MM.getView().getText()).toContain('Barbara Gardner');23            expect(MM.getView().getText()).toContain('Orange City, Australia');24        }).then(function () {25            done();26        });27    });28    it('View user details page', function (done) {29        return MM.loginAsStudent().then(function () {30            return MM.openSideMenu();31        }).then(function () {32            return MM.clickOnElement($('a[userid="56"]'));33        }).then(function () {34            return MM.clickOn('Details');35        }).then(function () {36            expect(MM.getView().getText()).toContain('Contact');37            expect(MM.getView().getText()).toContain('Email address');38            expect(MM.getView().getText()).toContain('User details');39            expect(MM.getView().getText()).toContain('Interests');40            expect(MM.getView().getText()).toContain('music, horses, friends, Films');41            expect(MM.getView().getText()).toContain("Description");42            expect(MM.getView().getText()).toContain("I'm Barbara but friends call me B");43        }).then(function () {44            done();45        });46    });47    it('View user learning plans incompetent one', function (done) {48        return MM.loginAsStudent().then(function () {49            return MM.openSideMenu();50        }).then(function () {51            return MM.clickOnElement($('a[userid="56"]'));52        }).then(function () {53            return MM.clickOn('Learning plans');54        }).then(function () {55            expect(MM.getNavBar().getText()).toMatch('Learning plans');56            return MM.clickOn('Digital Literacies Basics');57        }).then(function () {58            expect(MM.getNavBar().getText()).toMatch('Digital Literacies Basics');59            expect($('progress').isDisplayed()).toBeTruthy();60            expect(MM.getView().getText()).toContain('Learning plan competencies');61        }).then(function () {62            return MM.clickOn('220221072');63        }).then(function () {64            expect(MM.getNavBar().getText()).toContain('220221072');65            expect(MM.getView().getText()).toContain('remix content into something new');66            expect(MM.getView().getText()).toContain('Proficient');67            expect(MM.getView().getText()).toContain('No');68            expect(MM.getView().getText()).toContain('Cross-referenced competencies');69            expect(MM.getView().getText()).toContain('Digital Literacies (Starter level)');70        }).then(function () {71            done();72        });73    });74    it('View user learning plans competent one', function (done) {75        return MM.loginAsStudent().then(function () {76            return MM.openSideMenu();77        }).then(function () {78            return MM.clickOnElement($('a[userid="56"]'));79        }).then(function () {80            return MM.clickOn('Learning plans');81        }).then(function () {82            expect(MM.getNavBar().getText()).toMatch('Learning plans');83            return MM.clickOn('Digital Literacies Basics');84        }).then(function () {85            expect(MM.getNavBar().getText()).toMatch('Digital Literacies Basics');86            expect($('progress').isDisplayed()).toBeTruthy();87            expect(MM.getView().getText()).toContain('Learning plan competencies');88        }).then(function () {89            return MM.clickOn('220220174');90        }).then(function () {91            expect(MM.getNavBar().getText()).toContain('220220174');92            expect(MM.getView().getText()).toContain('get involved locally and nationally');93            expect(MM.getView().getText()).toContain('Proficient');94            expect(MM.getView().getText()).toContain('Yes');95            expect(MM.getView().getText()).toContain('Cross-referenced competencies');96            expect(MM.getView().getText()).toContain('Competent');97            expect(MM.getView().getText()).toContain('Digital Literacies (Starter level)');98        }).then(function () {99            done();100        });101    });102    it('View user badge page', function (done) {103        return MM.loginAsStudent().then(function () {104            return MM.openSideMenu();105        }).then(function () {106            return MM.clickOnElement($('a[userid="56"]'));107        }).then(function () {108            return MM.clickOn('Badges');109        }).then(function () {110            expect(MM.getNavBar().getText()).toContain('Badges');111            expect(MM.getView().getText()).toContain('Analysis');112            expect(MM.getView().getText()).toContain('2014');113            expect(MM.getView().getText()).toContain('Subject Knowledge');114            expect(MM.getView().getText()).toContain('Moodle Support Hero');115            expect(MM.getView().getText()).toContain('Assignment Superstar');116        }).then(function () {117            return MM.clickOn('Analysis');118        }).then(function () {119            expect(MM.getNavBar().getText()).toContain('Analysis');120            expect($('img[ng-src="http://school.demo.moodle.net/pluginfile.php/411/user/icon/boost/f1?rev=2472"]').isPresent()).toBeTruthy();121            expect(MM.getView().getText()).toContain('Recipient details');122            expect(MM.getView().getText()).toContain('Barbara Gardner');123            expect(MM.getView().getText()).toContain('Issuer details');124            expect(MM.getView().getText()).toContain('Mount Orange school');125        }).then(function () {126            done();127        });128    });...

Full Screen

Full Screen

index.js

Source:index.js Github

copy

Full Screen

1module.exports = angular.module('stf.device-status', [])2  .filter('statusNameAction', function(gettext) {3    return function(text) {4      return {5        absent: gettext('Disconnected'),6        present: gettext('Connected'),7        offline: gettext('Offline'),8        unauthorized: gettext('Unauthorized'),9        preparing: gettext('Preparing'),10        ready: gettext('Ready'),11        using: gettext('Stop Using'),12        busy: gettext('Busy'),13        available: gettext('Use'),14        automation: gettext('Stop Automation')15      }[text] || gettext('Unknown')16    }17  })18  .filter('statusNamePassive', function(gettext) {19    return function(text) {20      return {21        absent: gettext('Disconnected'),22        present: gettext('Connected'),23        offline: gettext('Offline'),24        unauthorized: gettext('Unauthorized'),25        preparing: gettext('Preparing'),26        ready: gettext('Ready'),27        using: gettext('Using'),28        busy: gettext('Busy'),29        available: gettext('Available'),30        automation: gettext('Automating'),31      }[text] || gettext('Unknown')32    }33  })34 .filter('likelyLeaveReason', function(gettext) {35    return function(text) {36      return {37        ungroup_request: gettext('You (or someone else) kicked the device.'),38        owner_change: gettext('Someone stole your device.'),39        automatic_timeout: gettext('Device was kicked by automatic timeout.	'),40        device_absent: gettext('Device is not present anymore for some reason.'),41        status_change: gettext('Device is present but offline.')42      }[text] || gettext('Unknown reason.')43    }44  })45  .filter('batteryHealth', function(gettext) {46    return function(text) {47      return {48        cold: gettext('Cold'),49        good: gettext('Good'),50        dead: gettext('Dead'),51        over_voltage: gettext('Over Voltage'),52        overheat: gettext('Overheat'),53        unspecified_failure: gettext('Unspecified Failure')54      }[text] || gettext('-')55    }56  })57  .filter('batterySource', function(gettext) {58    return function(text) {59      return {60        ac: gettext('AC'),61        usb: gettext('USB'),62        wireless: gettext('Wireless')63      }[text] || gettext('-')64    }65  })66  .filter('batteryStatus', function(gettext) {67    return function(text) {68      return {69        charging: gettext('Charging'),70        discharging: gettext('Discharging'),71        full: gettext('Full'),72        not_charging: gettext('Not Charging')73      }[text] || gettext('-')74    }75  })76  .filter('displayDensity', function() {77    return function(text) {78      return {79        '0.5': 'LDPI', // (120 dpi)80        '1': 'MDPI', // (160 dpi)81        '1.5': 'HDPI', // (240 dpi)82        '2': 'XHDPI', // (320 dpi)83        '3': 'XXHDPI', // (480 dpi)84        '4': 'XXXHDPI' // (640 dpi)85      }[text] || text86    }87  })88  .filter('networkType', function(gettext) {89    return function(text) {90      return {91        bluetooth: gettext('Bluetooth'),92        dummy: gettext('Dummy'),93        ethernet: gettext('Ethernet'),94        mobile: gettext('Mobile'),95        mobile_dun: gettext('Mobile DUN'),96        mobile_hipri: gettext('Mobile High Priority'),97        mobile_mms: gettext('Mobile MMS'),98        mobile_supl: gettext('Mobile SUPL'),99        mobile_wifi: gettext('WiFi'),100        wimax: gettext('WiMAX')101      }[text] || text102    }103  })104  .filter('networkSubType', function(gettext) {105    return function(text) {106      return {107        mobile_wifi: gettext('WiFi')108      }[text] || text109    }110  })111  .filter('humanizedBool', function(gettext) {112    return function(text) {113      switch (text) {114        case true:115          return gettext('Yes')116        case false:117          return gettext('No')118        default:119          return gettext('-')120      }121    }...

Full Screen

Full Screen

browser_editor_movelines.js

Source:browser_editor_movelines.js Github

copy

Full Screen

...10    ed.setText(simpleProg);11    // Move first line up12    ed.setCursor({ line: 0, ch: 0 });13    ed.moveLineUp();14    is(ed.getText(0), "function foo() {", "getText(num)");15    ch(ed.getCursor(), { line: 0, ch: 0 }, "getCursor");16    // Move last line down17    ed.setCursor({ line: 4, ch: 0 });18    ed.moveLineDown();19    is(ed.getText(4), "}", "getText(num)");20    ch(ed.getCursor(), { line: 4, ch: 0 }, "getCursor");21    // Move line 2 up22    ed.setCursor({ line: 1, ch: 5});23    ed.moveLineUp();24    is(ed.getText(0), "  let i = 1;", "getText(num)");25    is(ed.getText(1), "function foo() {", "getText(num)");26    ch(ed.getCursor(), { line: 0, ch: 5 }, "getCursor");27    // Undo previous move by moving line 1 down28    ed.moveLineDown();29    is(ed.getText(0), "function foo() {", "getText(num)");30    is(ed.getText(1), "  let i = 1;", "getText(num)");31    ch(ed.getCursor(), { line: 1, ch: 5 }, "getCursor");32    // Move line 2 and 3 up33    ed.setSelection({ line: 1, ch: 0 }, { line: 2, ch: 0 });34    ed.moveLineUp();35    is(ed.getText(0), "  let i = 1;", "getText(num)");36    is(ed.getText(1), "  let j = 2;", "getText(num)");37    is(ed.getText(2), "function foo() {", "getText(num)");38    ch(ed.getCursor("start"), { line: 0, ch: 0 }, "getCursor(string)");39    ch(ed.getCursor("end"), { line: 1, ch: 0 }, "getCursor(string)");40    // Move line 1 to 3 down twice41    ed.dropSelection();42    ed.setSelection({ line: 0, ch: 7 }, { line: 2, ch: 5 });43    ed.moveLineDown();44    ed.moveLineDown();45    is(ed.getText(0), "  return bar;", "getText(num)");46    is(ed.getText(1), "}", "getText(num)");47    is(ed.getText(2), "  let i = 1;", "getText(num)");48    is(ed.getText(3), "  let j = 2;", "getText(num)");49    is(ed.getText(4), "function foo() {", "getText(num)");50    ch(ed.getCursor("start"), { line: 2, ch: 7 }, "getCursor(string)");51    ch(ed.getCursor("end"), { line: 4, ch: 5 }, "getCursor(string)");52    teardown(ed, win);53  });...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriver = require('selenium-webdriver'),2    until = webdriver.until;3var driver = new webdriver.Builder()4    .forBrowser('chrome')5    .build();6driver.findElement(By.name('q')).sendKeys('webdriver');7driver.findElement(By.name('btnG')).click();8driver.wait(until.titleIs('webdriver - Google Search'), 1000);9driver.quit();10driver.findElement(By.id("com.example.android.contactmanager:id/addContactButton")).click();11driver.findElement(By.id("com.example.android.contactmanager:id/contactNameEditText")).sendKeys("Rajesh");12driver.findElement(By.id("com.example.android.contactmanager:id/contactPhoneEditText")).sendKeys("1234567890");13driver.findElement(By.id("com.example.android.contactmanager:id/contactEmailEditText")).sendKeys("

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriverio = require('webdriverio');2var options = {3  desiredCapabilities: {4  }5};6var client = webdriverio.remote(options);7  .init()8  .getText('android=new UiSelector().text("Add Contact")', function(err, text) {9    console.log(text);10  })11  .end();12var webdriverio = require('webdriverio');13var options = {14  desiredCapabilities: {15  }16};17var client = webdriverio.remote(options);18  .init()19  .getText('android=new UiSelector().resourceId("com.example.android.contactmanager:id/addContactButton")', function(err, text) {20    console.log(text);21  })22  .end();

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.getText().then(function(text) {2    console.log("Text is: " + text);3});4driver.getText().then(function(text) {5    console.log("Text is: " + text);6});7driver.getText().then(function(text) {8    console.log("Text is: " + text);9});10driver.getText().then(function(text) {11    console.log("Text is: " + text);12});13driver.getText().then(function(text) {14    console.log("Text is: " + text);15});16driver.getText().then(function(text) {17    console.log("Text is: " + text);18});19driver.getText().then(function(text) {20    console.log("Text is: " + text);21});22driver.getText().then(function(text) {23    console.log("Text is: " + text);24});25driver.getText().then(function(text) {26    console.log("Text is: " + text);27});28driver.getText().then(function(text) {29    console.log("Text is: " + text);30});31driver.getText().then(function(text) {32    console.log("Text is: " + text);33});34driver.getText().then(function(text) {35    console.log("Text is: " + text);36});37driver.getText().then(function(text) {38    console.log("Text is: " + text);39});40driver.getText().then(function(text) {41    console.log("Text is: " + text);42});43driver.getText().then(function(text) {44    console.log("Text is: " + text);45});46driver.getText().then

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.getText("android.widget.TextView", "text", "Hello World!");2driver.getText("UIAStaticText", "name", "Hello World!");3driver.getText("Text", "name", "Hello World!");4driver.getText("StaticText", "name", "Hello World!");5driver.getText("h1", "text", "Hello World!");6driver.getText("h1", "text", "Hello World!");7driver.getText("h1", "text", "Hello World!");8driver.getText("h1", "text", "Hello World!");9driver.getText("h1", "text", "Hello World!");10driver.getText("h1", "text", "Hello World!");11driver.getText("h1", "text", "Hello World!");12driver.getText("h1", "text", "Hello World!");13driver.getText("h1", "text", "Hello World!");14driver.getText("h1", "text", "Hello World!");15driver.getText("h1", "text", "Hello World!");16driver.getText("h1", "text", "Hello World!");17driver.getText("h1", "text", "Hello World!");18driver.getText("h1", "text", "Hello World!");19driver.getText("h1", "text", "Hello World!");

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.getText("com.example.package:id/elementId")2.then(function(text) {3  console.log(text);4});5driver.getText("elementId")6.then(function(text) {7  console.log(text);8});9driver.findElement(By.id("elementId")).getText()10.then(function(text) {11  console.log(text);12});13driver.getText("elementId")14.then(function(text) {15  console.log(text);16});17driver.findElement(By.id("elementId")).getText();18System.out.println(text);19driver.find_element_by_id("elementId").text20print(text)21driver.find_element(:id, 'elementId').text22$driver->findElement(WebDriverBy::id('elementId'))->getText();23echo $text;24driver.FindElement(By.Id("elementId")).Text;25Console.WriteLine(text);26driver.FindElement(By.Id("elementId")).Text();27Console.WriteLine(text);28$driver->find_element_by_id('elementId')->text();29print $text;30driver.findElement(By.id("elementId")).getText()31println(text)32driver.findElement(By.id("elementId")).getText()33driver.findElement(By.id("elementId")).getText()34println(text)35driver.find_element(By::Id("elementId")).text();36println!("{}", text);37driver.findElement(By.id("elementId")).text()38print(text)39driver.findElement(By.id("elementId")).text40print(text)41[driver findElementById:@"elementId"].text;42NSLog(@"%@", text);43driver$find_element("id", "elementId")$text()44print(text)

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.getText("xpath", "xpath of the element", function(err, text) {2  console.log("Text of the element is: " + text);3});4driver.getAttribute("xpath", "xpath of the element", "attribute name", function(err, text) {5  console.log("Attribute value of the element is: " + text);6});7driver.getValue("xpath", "xpath of the element", function(err, text) {8  console.log("Value of the element is: " + text);9});10driver.getTagName("xpath", "xpath of the element", function(err, text) {11  console.log("Tag name of the element is: " + text);12});13driver.getCssProperty("xpath", "xpath of the element", "css property name", function(err, text) {14  console.log("Css property value of the element is: " + text);15});16driver.getSize("xpath", "xpath of the element", function(err, text) {17  console.log("Size of the element is: " + text);18});19driver.getLocation("xpath", "xpath of the element", function(err, text) {20  console.log("Location of the element is: " + text);21});22driver.getLocationInView("xpath", "xpath of the element", function(err, text) {23  console.log("Location in view of the element is: " + text);24});25driver.getOrientation(function(err, text) {26  console.log("Orientation of the device is: " + text);27});28driver.setOrientation("LANDSCAPE", function(err, text) {29  console.log("Orientation of the device is set to: " + text);30});31driver.getGeoLocation(function(err, text) {32  console.log("Geo location of the device is: " + text);33});

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.getText("id", "com.example.test:id/textView1", function(err, text) {2    console.log(text);3});4driver.getText("id", "com.example.test:id/textView1", function(err, text) {5    console.log(text);6});7driver.getText("id", "com.example.test:id/textView1", function(err, text) {8    console.log(text);9});10driver.getText("id", "com.example.test:id/textView1", function(err, text) {11    console.log(text);12});13driver.getText("id", "com.example.test:id/textView1", function(err, text) {14    console.log(text);15});16driver.getText("id", "com.example.test:id/textView1", function(err, text) {17    console.log(text);18});19driver.getText("id", "com.example.test:id/textView1", function(err, text) {20    console.log(text);21});22driver.getText("id", "com.example.test:id/textView1", function(err, text) {23    console.log(text);24});25driver.getText("id", "com.example.test:id/textView1", function(err, text) {26    console.log(text);27});28driver.getText("id", "com.example.test:id/textView1", function(err, text) {29    console.log(text);30});31driver.getText("id", "com.example.test:id/textView1", function(err, text) {32    console.log(text);33});34driver.getText("id", "com.example.test:id/textView

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.getText().then(function(text){2    console.log(text);3});4driver.quit();5{ platform: 'Android',6  resetKeyboard: true }

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Appium Android Driver automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful