Publish Vulpes Preview 15 sources for desktop, Android and Tundra

Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,89 @@
Keyboards.af = {
label: 'Afrikaans',
shortLabel: 'Afr.',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'af',
menuLabel: 'Afrikaans',
pages: [ { // default page
alt: {
a: 'áàäâåãæ',
c: 'ç',
e: 'ëêéè€',
i: 'ïíî',
o: 'ôóòöõø',
u: 'üûú',
s: 'ßš$',
S: 'Š$',
n: ['\'n', 'ñ'],
l: '£',
y: 'ýÿ¥',
'.': ',?!\'-;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // symbol page 1
alt: {
'1': ['1ste'],
'2': ['2de'],
'3': ['3de'],
'4': ['4de'],
'5': ['5de'],
'6': ['6de'],
'7': ['7de'],
'8': ['8ste'],
'9': ['9de'],
'$': ['€', '£', '¢', '¥'],
'"': ['“', '”', '„'],
'\'': ['‘', '’', '’n'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}]
};

View file

@ -0,0 +1,73 @@
Keyboards.ar = {
label: 'Arabic',
shortLabel: 'Ar',
menuLabel: 'العربية',
secondLayout: true,
specificCssRule: true,
types: ['text', 'url', 'email'],
alternateLayoutKey: '123',
basicLayoutKey: 'أ ب ج',
width: 11,
lang: 'ar',
alt : {
'غ': 'إ آ',
'ا': 'أ ء',
'ى': 'ئ',
'و': 'ؤ',
'ط': 'ظ'
},
keys: [
[
{ value: 'ض' }, { value: 'ص' }, { value: 'ث' }, { value: 'ق' },
{ value: 'ف' }, { value: 'غ' } , { value: 'ع' }, { value: 'ه' },
{ value: 'خ' }, { value: 'ح' }, { value: 'ج' }
], [
{ value: 'ش' }, { value: 'س' }, { value: 'ي' }, { value: 'ب' },
{ value: 'ل' } , { value: 'ا' }, { value: 'ت' }, { value: 'ن' },
{ value: 'م' }, { value: 'ك' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ذ' }, { value: 'د' }, { value: 'ر' }, { value: 'ى' },
{ value: 'ة' }, { value: 'و' }, { value: 'ز' }, { value: 'ط' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
upperCase: {
ض: 'َ',
ص: 'ً',
ث: 'ُ',
ق: 'ٌ',
ف: 'ْ',
غ: 'ّ',
ع: 'ِ',
ه: 'ٍ',
خ: '’',
ح: ',',
ج: '؛',
ش: '\\',
س: ']',
ي: '[',
ب: 'ـ',
ل: 'إ',
ا: 'أ',
ت: 'آ',
ن: '،',
م: '/',
ك: ':',
ة: '\"',
ء: 'ئ',
ظ: 'ؤ',
ط: '؟',
ذ: '=',
د: '-',
ز: '×',
ر: '÷',
و: '+'
},
textLayoutOverwrite: {
',': '،'
}
};

View file

@ -0,0 +1,33 @@
Keyboards['bg-BDS'] = {
label: 'Bulgarian (BDS)',
shortLabel: 'Bg',
menuLabel: 'Български (БДС)',
types: ['text', 'url', 'email'],
imEngine: 'latin',
autoCorrectLanguage: 'bg',
basicLayoutKey: 'AБB',
width: 11,
lang: 'bg',
alt: {
'и': 'ѝ'
},
keys: [
[
{ value: 'у' }, { value: 'е' }, { value: 'и' }, { value: 'ш' },
{ value: 'щ' }, { value: 'к' }, { value: 'с' }, { value: 'д' },
{ value: 'з' }, { value: 'ц' }, { value: 'б' }
], [
{ value: 'ь' }, { value: 'я' }, { value: 'а' }, { value: 'о' },
{ value: 'ж' }, { value: 'г' }, { value: 'т' }, { value: 'н' },
{ value: 'в' }, { value: 'м' }, { value: 'ч' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ю' }, { value: 'й' }, { value: 'ъ' }, { value: 'ф' },
{ value: 'х' }, { value: 'п' }, { value: 'р' }, { value: 'л' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,33 @@
Keyboards['bg-Pho-Ban'] = {
label: 'Bulgarian (New)',
shortLabel: 'Bg',
menuLabel: 'Български (БАН)',
types: ['text', 'url', 'email', 'password'],
imEngine: 'latin',
autoCorrectLanguage: 'bg',
basicLayoutKey: 'AБB',
width: 11,
lang: 'bg',
alt: {
'и': 'ѝ'
},
keys: [
[
{ value: 'ч' }, { value: 'ш' }, { value: 'е' }, { value: 'р' },
{ value: 'т' }, { value: 'ъ' }, { value: 'у' }, { value: 'и' },
{ value: 'о' }, { value: 'п' }, { value: 'я' }
], [
{ value: 'а' }, { value: 'с' }, { value: 'д' }, { value: 'ф' },
{ value: 'г' }, { value: 'х' }, { value: 'й' }, { value: 'к' },
{ value: 'л' }, { value: 'щ' }, { value: 'ь' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'з' }, { value: 'ж' }, { value: 'ц' }, { value: 'в' },
{ value: 'б' }, { value: 'н' }, { value: 'м' }, { value: 'ю' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,33 @@
Keyboards['bg-Pho-Trad'] = {
label: 'Bulgarian (Phonetic)',
shortLabel: 'Bg',
menuLabel: 'Български (Фонетична)',
types: ['text', 'url', 'email', 'password'],
imEngine: 'latin',
autoCorrectLanguage: 'bg',
basicLayoutKey: 'AБB',
width: 11,
lang: 'bg',
alt: {
'и': 'ѝ'
},
keys: [
[
{ value: 'я' }, { value: 'в' }, { value: 'е' }, { value: 'р' },
{ value: 'т' }, { value: 'ъ' }, { value: 'у' }, { value: 'и' },
{ value: 'о' }, { value: 'п' }, { value: 'ч' }
], [
{ value: 'а' }, { value: 'с' }, { value: 'д' }, { value: 'ф' },
{ value: 'г' }, { value: 'х' }, { value: 'й' }, { value: 'к' },
{ value: 'л' }, { value: 'ш' }, { value: 'щ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'з' }, { value: 'ь' }, { value: 'ц' }, { value: 'ж' },
{ value: 'б' }, { value: 'н' }, { value: 'м' }, { value: 'ю' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,108 @@
Keyboards['bn-Avro'] = {
label: 'Bangla - Avro',
shortLabel: 'Bn',
imEngine: 'jsavrophonetic',
menuLabel: 'বাংলা - অভ্র',
alternateLayoutKey: '?১২৩',
basicLayoutKey: 'কখগ',
types: ['text', 'url'],
lang: 'bn',
alt: {
a: 'A',
b: 'B',
c: 'C',
d: 'D',
e: 'E',
f: 'F',
g: 'H',
i: 'I',
j: 'J',
k: 'K',
l: 'L',
m: 'M',
n: 'N',
o: 'O',
p: 'P',
q: 'Q',
r: 'R',
s: 'S',
t: 'T',
u: 'U',
v: 'V',
w: 'W',
x: 'X',
y: 'Y',
z: 'Z',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ঁ' }
], [
{ value: '⇪', ratio: 1.25, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: '`', ratio: 0.85 }, { value: 'z', ratio: 0.95 }, { value: 'x', ratio: 0.95 },
{ value: 'c', ratio: 0.95 }, { value: 'v', ratio: 0.95 }, { value: 'b', ratio: 0.95 },
{ value: 'n', ratio: 0.95 }, { value: 'm', ratio: 0.95 },
{ value: '⌫', ratio: 1.25, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 7, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '।' },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'০': ['º'],
'১': ['1'],
'২': ['2'],
'৩': ['3'],
'৪': ['4'],
'৫': ['5'],
'৬': ['6'],
'৭': ['7'],
'৮': ['8'],
'৯': ['9'],
'৳': ['₹', '$', '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout, with top row modifed, $ localized and & replaced.
keys: [
[
{ value: '১' }, { value: '২' }, { value: '৩' }, { value: '৪' },
{ value: '৫' }, { value: '৬' }, { value: '৭' }, { value: '৮' },
{ value: '৯' }, { value: '০' }
], [
{ value: '@' }, { value: '#' },
{ value: '৳', className: 'alternate-indicator' }, { value: 'ঃ' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,114 @@
Keyboards['bn-Probhat'] = {
label: 'Bangla - Probhat',
shortLabel: 'Bn',
menuLabel: 'বাংলা - প্রভাত',
alternateLayoutKey: '?১২',
basicLayoutKey: 'কখগ',
specificCssRule: true,
types: ['text', 'url', 'email'],
lang: 'bn',
keys: [
[
{ value: 'দ' }, { value: 'ূ' }, { value: 'ী' } , { value: 'র' },
{ value: 'ট' } , { value: 'এ' }, { value: 'ু' } , { value: 'ি' },
{ value: 'ও' }, { value: 'প' }
], [
{ value: 'া' }, { value: 'স' }, { value: 'ড' }, { value: 'ত' },
{ value: 'গ' } , { value: 'হ' }, { value: 'জ' }, { value: 'ক' },
{ value: 'ল' }, { value: 'ে' }
], [
{ value: '্' }, { value: 'য়', ratio: 0.9 }, { value: 'শ', ratio: 0.9 }, { value: 'চ', ratio: 0.9 }, { value: 'আ', ratio: 1.1 },
{ value: 'ব', ratio: 0.9 }, { value: 'ন', ratio: 0.9 }, { value: 'ম', ratio: 0.9 }, { value: 'ো', ratio: 1.15 },
{ value: '⌫', ratio: 1.35, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 7, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '।' },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
alt: {
'দ': 'ধ',
'ূ': 'ঊ',
'ী': 'ঈ',
'র': 'ড়',
'ট': 'ঠ',
'এ': 'ঐ',
'ু': 'উ',
'ি': 'ই',
'ও': 'ঔ',
'প': 'ফ',
'া': 'অ',
'স': 'ষ',
'ড': 'ঢ',
'ত': 'থ ৎ',
'গ': 'ঘ',
'হ': 'ঃ',
'জ': 'ঝ',
'ক': 'খ',
'ল': 'ং ঞ',
'য়': 'য',
'শ': 'ঢ়',
'চ': 'ছ',
'আ': 'ৃ ঋ',
'ব': 'ভ',
'ন': 'ণ',
'ম': 'ঙ ঞ',
'ে': 'ৈ',
'ো': 'ৌ',
'্': 'ঁ',
'।': '॥',
'ঞ': 'ঋ',
'.': ',?!;:…'
},
pages: [undefined, {
alt: {
'০': ['0', 'º'],
'১': ['১ম', '1'],
'২': ['২য়', '2'],
'৩': ['৩য়', '3'],
'৪': ['৪র্থ', '4'],
'৫': ['৫ম', '5'],
'৬': ['৬ষ্ঠ', '6'],
'৭': ['৭ম', '7'],
'৮': ['৮ম', '8'],
'৯': ['৯ম', '9'],
'৳': ['₹', '$', '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout, with top row modifed and $ localized.
keys: [
[
{ value: '১' }, { value: '২' }, { value: '৩' }, { value: '৪' },
{ value: '৫' }, { value: '৬' }, { value: '৭' }, { value: '৮' },
{ value: '৯' }, { value: '০' }
], [
{ value: '@' }, { value: '#' },
{ value: '৳', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,39 @@
Keyboards.bs = {
label: 'Bosnian',
shortLabel: 'Bs',
imEngine: 'latin',
types: ['text', 'url', 'email'],
autoCorrectLanguage: 'bs',
menuLabel: 'Bosanski',
lang: 'bs',
alt: {
c: 'čć',
d: 'đ',
e: 'ë€',
i: 'íîïì',
o: 'ó',
u: 'ú',
s: 'šş',
z: 'ž',
'.': ',?!;:'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'z' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
};

View file

@ -0,0 +1,98 @@
Keyboards.ca = {
label: 'Catalan',
shortLabel: 'Ca',
menuLabel: 'Català',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'ca',
lang: 'ca',
alt: {
a: 'àáâäåãāæª@',
c: 'çćč',
e: 'èéêëēę€ɛ',
i: 'íïìîīį',
o: 'òóöôōœøɵº',
u: 'úüùûū',
s: 'ßśš$',
S: 'ŚŠŞ',
n: 'ñń',
l: 'l·l ł £',
y: 'ÿ¥',
z: 'žźż',
'?': '!¿¡',
'.': ',;:·…',
"'": '"«»',
'-': '—_'
},
width: 11,
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }, { value: '?' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ç' },
{ value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' }, { value: '-' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'1': ['1r', '1a'],
'2': ['2n', '2a'],
'3': ['3r', '3a'],
'4': ['4t', '4a'],
'5': ['5è', '5a', '5é'],
'6': ['6è', '6a', '6é'],
'7': ['7è', '7a', '7é'],
'8': ['8è', '8a', '8é'],
'9': ['9è', '9a', '9é'],
'€': ['$', '£', '¢', '¥'],
'"': ['“', '”', '«', '»'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±'],
'.': ['·']
},
// These are based on the en layout, with $ localized.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '€', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,44 @@
Keyboards['cs-qwerty'] = {
label: 'Czech (QWERTY)',
shortLabel: 'Cs',
menuLabel: 'Česká (QWERTY)',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'cs',
lang: 'cs',
alt: {
a: 'á',
c: 'č',
d: 'ď',
e: 'éě',
i: 'í',
n: 'ň',
o: 'ó',
r: 'ř',
s: 'š',
t: 'ť',
u: 'úů',
y: 'ý',
z: 'ž',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,44 @@
Keyboards.cs = {
label: 'Czech',
shortLabel: 'Cs',
menuLabel: 'Česká',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'cs',
lang: 'cs',
alt: {
a: 'á',
c: 'č',
d: 'ď',
e: 'éě',
i: 'í',
n: 'ň',
o: 'ó',
r: 'ř',
s: 'š',
t: 'ť',
u: 'úů',
y: 'ý',
z: 'ž',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'z' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,45 @@
Keyboards.cy = {
label: 'Welsh',
shortLabel: 'Cy',
menuLabel: 'Cymraeg',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'cy',
//autoCorrectPunctuation: false,
lang: 'fr',
alt: {
a: 'âäáàåãāæ',
c: 'çćč',
e: 'êëéèēę€ɛ',
i: 'îïíìīį',
o: 'ôöóòõōœøɵ',
u: 'ûüúùū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
w: 'ŵẅẃẁ',
y: 'ŷÿýỳ¥',
z: 'žźż',
'.': ',?!-;:'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,46 @@
Keyboards.da = {
label: 'Danish',
shortLabel: 'Da',
menuLabel: 'Dansk',
imEngine: 'latin',
autoCorrectLanguage: 'da',
types: ['text', 'url', 'email', 'password'],
lang: 'da',
alt: {
a: 'äáàâąã',
e: 'éèêëę€',
i: 'íìîï',
o: 'öóòôõ',
u: 'üúùûū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ńñň',
c: 'çćč',
d: 'ðď',
r: 'ř',
t: 'ťþ',
z: 'źžż',
l: 'ł',
v: 'w'
},
width: 11,
keys: [
[
{ value: 'q' },{ value: 'w' },{ value: 'e' },{ value: 'r' },
{ value: 't' },{ value: 'y' },{ value: 'u' },{ value: 'i' },
{ value: 'o' },{ value: 'p' },{ value: 'å' }
], [
{ value: 'a' },{ value: 's' },{ value: 'd' },{ value: 'f' },
{ value: 'g' },{ value: 'h' },{ value: 'j' },{ value: 'k' },
{ value: 'l' },{ value: 'æ' },{ value: 'ø' }
], [
{ value: '⇪', ratio: 2, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' },{ value: 'x' },{ value: 'c' },{ value: 'v' },
{ value: 'b' },{ value: 'n' },{ value: 'm' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,119 @@
Keyboards['de-Neo'] = {
label: 'German - Neo',
shortLabel: 'De',
menuLabel: 'Deutsch - Neo',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'de',
lang: 'de',
alt: {
a: 'äáàâåãāæ',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'ïíìîīį',
o: 'öóòôōœøɵ',
u: 'üúùûū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'x' }, { value: 'v' }, { value: 'l' } , { value: 'c' },
{ value: 'w' }, { value: 'k' }, { value: 'h' } , { value: 'g' },
{ value: 'f' }, { value: 'q' }
], [
{ value: 'u' }, { value: 'i', }, { value: 'a' }, { value: 'e' },
{ value: 'o' }, { value: 's', }, { value: 'n' }, { value: 'r' },
{ value: 't' }, { value: 'd', }
], [
{ value: '⇪', ratio: 2, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'p' }, { value: 'z' }, { value: 'b' },
{ value: 'm' }, { value: 'j' }, { value: 'y' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
needsCommaKey: true,
alt: {
'1': ['¹', '1.'],
'2': ['²', '2.'],
'3': ['³', '3.'],
'4': ['⁴', '4.'],
'5': ['⁵', '5.'],
'6': ['⁶', '6.'],
'7': ['⁷', '7.'],
'8': ['⁸', '8.'],
'9': ['⁹', '9.'],
'0': ['⁰', 'º'],
'$': [ '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±'],
'/': '\\'
},
keys: [
[
{ value: ':' }, { value: '&' },
{ value: '#' }, { value: '$' }, { value: '!' },
{ value: '7' }, { value: '8' }, { value: '9' },
{ value: '/' }, { value: '*' }
], [
{ value: ';' }, { value: '@' },
{ value: '(' }, { value: ')' }, { value: '?' },
{ value: '4' }, { value: '5' }, { value: '6' },
{ value: '+' }, { value: '-' }
], [
{ value: 'Alt', ratio: 2,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '%' }, { value: '"' }, { value: "'" },
{ value: '1' }, { value: '2' }, { value: '3' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
alt: {
'®': ['™']
},
needsCommaKey: true,
keys: [
[
{ value: '§' }, { value: '_' }, { value: '[' }, { value: ']' },
{ value: '^' }, { value: '<' }, { value: '>' }, { value: '=' },
{ value: '¥' }, { value: '€' }
], [
{ value: '©' }, { value: '®' }, { value: '{' }, { value: '}' },
{ value: '`' }, { value: '«' }, { value: '»' }, { value: '±' },
{ value: '£' }, { value: '$' }
],
[
{ value: 'Alt', ratio: 2,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{ value: '|' }, { value: '~' }, { value: 'º' },
{ value: '¹' }, { value: '²' }, { value: '³' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,40 @@
Keyboards.de = {
label: 'German',
shortLabel: 'De',
menuLabel: 'Deutsch',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'de',
lang: 'de',
alt: {
a: 'äàáâãåāæ',
c: 'çćč',
e: 'èéêëē€',
i: 'ìíîïī',
o: 'öòóôõōœø',
u: 'üùúûū',
s: 'ßśšş',
S: 'ŚŠŞ',
n: 'ńñň',
'.': ',?!;:'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'z' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,130 @@
Keyboards['dz-BT'] = {
label: 'Dzongkha',
shortLabel: 'Dz',
menuLabel: 'རྫོང་ཁ',
alternateLayoutKey: '༡༢༣',
specificCssRule: true,
basicLayoutKey: 'ཀཁག',
types: ['text', 'url', 'email'],
width: 12,
lang: 'dz',
keys: [
[
{ value: 'ཀ' }, { value: 'ཁ' }, { value: 'ག' } , { value: 'ང' },
{ value: 'ི' } , { value: 'ུ' }, { value: 'ེ' } , { value: 'ོ' },
{ value: 'ཅ' }, { value: 'ཆ' }, { value: 'ཇ' }, { value: 'ཉ' }
], [
{ value: 'ཏ' }, { value: 'ཐ' }, { value: 'ད' }, { value: 'ན' },
{ value: 'པ' } , { value: 'ཕ' }, { value: 'བ' }, { value: 'མ' },
{ value: 'ཙ' }, { value: 'ཚ'}, { value: 'ཛ' }, { value: 'ཝ' },
], [
{ value: 'ཞ' }, { value: 'ཟ' }, { value: 'འ' }, { value: 'ཡ' }, { value: 'ར' },
{ value: 'ལ' }, { value: 'ཤ' }, { value: 'ས' }, { value: 'ཧ' }, { value: 'ཨ' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 7, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '་', ratio: 2 }, { value: '།' },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
alt: {
'ཀ': 'ྐ',
'ཁ': 'ྑ',
'ག': 'ྒ',
'ང': 'ྔ',
'ི': 'ྀ',
'ུ': '྄',
'ེ': 'ཻ',
'ོ': 'ཽ',
'ཅ': 'ྕ',
'ཆ': 'ྖ',
'ཇ': 'ྗ',
'ཉ': 'ྙ ཨ྅',
'ཏ': 'ྟ ཊ ྚ',
'ཐ': 'ྠ ཋ ྛ',
'ད': 'ྡ ཌ ྜ',
'ན': 'ྣ ཎ ྞ',
'པ': 'ྤ',
'ཕ': 'ྥ',
'བ': 'ྦ',
'མ': 'ྨ ཨཾ ཨྃ ༷ ༵',
'ཙ': 'ྩ ༹',
'ཚ': 'ྪ',
'ཛ': 'ྫ',
'ཝ': 'ྭ ྺ',
'ཞ': 'ྮ',
'ཟ': 'ྯ',
'འ': 'ཱ',
'ཡ': 'ྱ',
'ར': 'ྲ ཪ',
'ལ': 'ླ',
'ཤ': 'ྴ ཥ',
'ས': 'ྶ',
'ཧ': 'ྷ',
'ཨ': 'ྸ ༁',
'་': '࿒',
'།': '༎'
},
pages: [undefined, {
needsCommaKey: true,
specificCssRule: true,
alt: {
'༡': ['1'],
'༢': ['2'],
'༣': ['3'],
'༤': ['4'],
'༥': ['5'],
'༦': ['6'],
'༧': ['7'],
'༨': ['8'],
'༩': ['9'],
'༠': ['0'],
'༆': ['༄ ', '༅', '@'],
'༉': ['࿑', '༊', '࿐', '#'],
'༈': ['-', '_'],
'₨': ['$', '€', '£', '¢', '¥'],
'༴': ['྾', '%'],
'ཿ': ['&'],
'༷': [ '༵', '*'],
'༔': ['+'],
'༼': ['('],
'༽': [')'],
'༃': ['༂ ', '!'],
'༑': ['༏', '༐', '\''],
'྅': ['ྊ', 'ྋ', '"'],
'ྈ': [':'],
'ྉ': [';'],
'࿙': ['/'],
'྿': ['?']
},
keys: [
[
{ value: '༡' }, { value: '༢' }, { value: '༣' }, { value: '༤' },
{ value: '༥' }, { value: '༦' }, { value: '༧' }, { value: '༨' },
{ value: '༩' }, { value: '༠' }
], [
{ value: '༆'}, { value: '༉' }, { value: '༈' },
{ value: '₨', className: 'alternate-indicator' }, { value: '༴' },
{ value: 'ཿ' }, { value: '༷' },
{ value: '༔' }, { value: '༼' }, { value: '༽' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '༃' }, { value: '༑' }, { value: '྅' }, { value: 'ྈ' },
{ value: 'ྉ' }, { value: '࿙' }, { value: '྿' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,85 @@
Keyboards.el = {
label: 'Greek',
shortLabel: 'El',
menuLabel: 'Ελληνικό',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
basicLayoutKey: 'ABΓ',
autoCorrectLanguage: 'el',
lang: 'el',
upperCase: {
'ς': 'ς'
},
alt: {
α: 'ά',
ε: 'έ€',
ω: 'ώ',
ο: 'ό',
Υ: 'ΎΫ',
υ: 'ύϋΰ',
Ι: 'ΊΪ',
ι: 'ίϊΐ',
η: 'ή',
'.': ',?!;:'
},
keys: [
[
{ value: ';' }, { value: 'ς' }, { value: 'ε' } , { value: 'ρ' },
{ value: 'τ' } , { value: 'υ' }, { value: 'θ' } , { value: 'ι' },
{ value: 'ο' }, { value: 'π' }
], [
{ value: 'α' }, { value: 'σ' }, { value: 'δ' }, { value: 'φ' },
{ value: 'γ' } , { value: 'η' }, { value: 'ξ' }, { value: 'κ' },
{ value: 'λ' }, { value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ζ' }, { value: 'χ' }, { value: 'ψ' }, { value: 'ω' },
{ value: 'β' }, { value: 'ν' }, { value: 'μ' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};
// This special layout is used when composing SMS messages in Greek, so that
// it would allow 160 characters in one message
Keyboards['el-sms'] = {
label: 'Greek SMS',
menuLabel: 'Ελληνικό για SMS',
imEngine: 'latin',
// No autocorrect for this layout
// autoCorrectLanguage: undefined,
alt: {
'.': ',?!;:'
},
keys: [
[
{ value: ';' }, { value: 'Ε', keyCode: 0x45 /* ASCII E */ } ,
{ value: 'Ρ', keyCode: 0x50 /* ASCII P */ },
{ value: 'Τ', keyCode: 0x54 /* ASCII T */ },
{ value: 'Υ', keyCode: 0x59 /* ASCII Y */ },
{ value: 'Θ' }, { value: 'Ι', keyCode: 0x49 /* ASCII I */},
{ value: 'Ο', keyCode: 0x4F /* ASCII O */ }, { value: 'Π' }
], [
{ value: 'Α', keyCode: 0x41 /* ASCII A */ }, { value: 'Σ' },
{ value: 'Δ' }, { value: 'Φ'},
{ value: 'Γ' }, { value: 'Η', keyCode: 0x48 /* ASCII H */ },
{ value: 'Ξ' }, { value: 'Κ', keyCode: 0x4B /* ASCII K */ },
{ value: 'Λ' }, { value: "'"}
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK,
disabled: true },
{ value: 'Ζ', keyCode: 0x5A /* ASCII Z */ },
{ value: 'Χ', keyCode: 0x58 /* ASCII X */ }, { value: 'Ψ' },
{ value: 'Ω' }, { value: 'Β', keyCode: 0x42 /* ASCII B */ },
{ value: 'Ν', keyCode: 0x4E /* ASCII N */ },
{ value: 'Μ', keyCode: 0x4D /* ASCII M */ },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,687 @@
Keyboards.emoji = {
label: 'Emoji',
types: ['text', 'url', 'email'],
menuLabelL10nId: 'emoji',
imEngine: 'emoji',
menuLabel: 'Emoji',
pages: [{
updateByIMEngine: true,
panelKeys: [ /* To be filled by emoji.js */ ],
keys: [
[
{
value: '',
keyCode: -3,
className: 'emoji-ime-switch'
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-recent active',
targetPage: 0
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-people',
targetPage: 1
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-nature',
targetPage: 2
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-object',
targetPage: 3
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-place',
targetPage: 4
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-symbol',
targetPage: 5
},
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
]
]}, { // Page 0 - People
panelKeys: [{ compositeKey: '🌂', type: 'emoji' }, { compositeKey: '🌟', type: 'emoji' },
{ compositeKey: '🎀', type: 'emoji' }, { compositeKey: '🎔', type: 'emoji' },
{ compositeKey: '🎩', type: 'emoji' }, { compositeKey: '🎽', type: 'emoji' },
{ compositeKey: '🏃', type: 'emoji' }, { compositeKey: '👀', type: 'emoji' },
{ compositeKey: '👁', type: 'emoji' }, { compositeKey: '👂', type: 'emoji' },
{ compositeKey: '👃', type: 'emoji' }, { compositeKey: '👄', type: 'emoji' },
{ compositeKey: '👅', type: 'emoji' }, { compositeKey: '👆', type: 'emoji' },
{ compositeKey: '👇', type: 'emoji' }, { compositeKey: '👈', type: 'emoji' },
{ compositeKey: '👉', type: 'emoji' }, { compositeKey: '👊', type: 'emoji' },
{ compositeKey: '👋', type: 'emoji' }, { compositeKey: '👌', type: 'emoji' },
{ compositeKey: '👍', type: 'emoji' }, { compositeKey: '👎', type: 'emoji' },
{ compositeKey: '👏', type: 'emoji' }, { compositeKey: '👐', type: 'emoji' },
{ compositeKey: '👑', type: 'emoji' }, { compositeKey: '👒', type: 'emoji' },
{ compositeKey: '👓', type: 'emoji' }, { compositeKey: '👔', type: 'emoji' },
{ compositeKey: '👕', type: 'emoji' }, { compositeKey: '👖', type: 'emoji' },
{ compositeKey: '👗', type: 'emoji' }, { compositeKey: '👘', type: 'emoji' },
{ compositeKey: '👙', type: 'emoji' }, { compositeKey: '👚', type: 'emoji' },
{ compositeKey: '👛', type: 'emoji' }, { compositeKey: '👜', type: 'emoji' },
{ compositeKey: '👝', type: 'emoji' }, { compositeKey: '👞', type: 'emoji' },
{ compositeKey: '👟', type: 'emoji' }, { compositeKey: '👠', type: 'emoji' },
{ compositeKey: '👡', type: 'emoji' }, { compositeKey: '👢', type: 'emoji' },
{ compositeKey: '👣', type: 'emoji' }, { compositeKey: '👤', type: 'emoji' },
{ compositeKey: '👥', type: 'emoji' }, { compositeKey: '👦', type: 'emoji' },
{ compositeKey: '👧', type: 'emoji' }, { compositeKey: '👨', type: 'emoji' },
{ compositeKey: '👩', type: 'emoji' }, { compositeKey: '👪', type: 'emoji' },
{ compositeKey: '👫', type: 'emoji' }, { compositeKey: '👬', type: 'emoji' },
{ compositeKey: '👭', type: 'emoji' }, { compositeKey: '👮', type: 'emoji' },
{ compositeKey: '👯', type: 'emoji' }, { compositeKey: '👰', type: 'emoji' },
{ compositeKey: '👱', type: 'emoji' }, { compositeKey: '👲', type: 'emoji' },
{ compositeKey: '👳', type: 'emoji' }, { compositeKey: '👴', type: 'emoji' },
{ compositeKey: '👵', type: 'emoji' }, { compositeKey: '👶', type: 'emoji' },
{ compositeKey: '👷', type: 'emoji' }, { compositeKey: '👸', type: 'emoji' },
{ compositeKey: '👹', type: 'emoji' }, { compositeKey: '👺', type: 'emoji' },
{ compositeKey: '👼', type: 'emoji' }, { compositeKey: '👽', type: 'emoji' },
{ compositeKey: '👿', type: 'emoji' }, { compositeKey: '💀', type: 'emoji' },
{ compositeKey: '💁', type: 'emoji' }, { compositeKey: '💂', type: 'emoji' },
{ compositeKey: '💃', type: 'emoji' }, { compositeKey: '💄', type: 'emoji' },
{ compositeKey: '💅', type: 'emoji' }, { compositeKey: '💆', type: 'emoji' },
{ compositeKey: '💇', type: 'emoji' }, { compositeKey: '💋', type: 'emoji' },
{ compositeKey: '💌', type: 'emoji' }, { compositeKey: '💍', type: 'emoji' },
{ compositeKey: '💎', type: 'emoji' }, { compositeKey: '💏', type: 'emoji' },
{ compositeKey: '💑', type: 'emoji' }, { compositeKey: '💓', type: 'emoji' },
{ compositeKey: '💔', type: 'emoji' }, { compositeKey: '💕', type: 'emoji' },
{ compositeKey: '💖', type: 'emoji' }, { compositeKey: '💗', type: 'emoji' },
{ compositeKey: '💘', type: 'emoji' }, { compositeKey: '💙', type: 'emoji' },
{ compositeKey: '💚', type: 'emoji' }, { compositeKey: '💛', type: 'emoji' },
{ compositeKey: '💜', type: 'emoji' }, { compositeKey: '💞', type: 'emoji' },
{ compositeKey: '💢', type: 'emoji' }, { compositeKey: '💤', type: 'emoji' },
{ compositeKey: '💥', type: 'emoji' }, { compositeKey: '💦', type: 'emoji' },
{ compositeKey: '💧', type: 'emoji' }, { compositeKey: '💨', type: 'emoji' },
{ compositeKey: '💩', type: 'emoji' }, { compositeKey: '💪', type: 'emoji' },
{ compositeKey: '💫', type: 'emoji' }, { compositeKey: '💬', type: 'emoji' },
{ compositeKey: '💭', type: 'emoji' }, { compositeKey: '💼', type: 'emoji' },
{ compositeKey: '😀', type: 'emoji' }, { compositeKey: '😁', type: 'emoji' },
{ compositeKey: '😂', type: 'emoji' }, { compositeKey: '😃', type: 'emoji' },
{ compositeKey: '😄', type: 'emoji' }, { compositeKey: '😅', type: 'emoji' },
{ compositeKey: '😆', type: 'emoji' }, { compositeKey: '😇', type: 'emoji' },
{ compositeKey: '😈', type: 'emoji' }, { compositeKey: '😉', type: 'emoji' },
{ compositeKey: '😊', type: 'emoji' }, { compositeKey: '😋', type: 'emoji' },
{ compositeKey: '😌', type: 'emoji' }, { compositeKey: '😍', type: 'emoji' },
{ compositeKey: '😎', type: 'emoji' }, { compositeKey: '😏', type: 'emoji' },
{ compositeKey: '😐', type: 'emoji' }, { compositeKey: '😑', type: 'emoji' },
{ compositeKey: '😒', type: 'emoji' }, { compositeKey: '😓', type: 'emoji' },
{ compositeKey: '😔', type: 'emoji' }, { compositeKey: '😕', type: 'emoji' },
{ compositeKey: '😖', type: 'emoji' }, { compositeKey: '😗', type: 'emoji' },
{ compositeKey: '😘', type: 'emoji' }, { compositeKey: '😙', type: 'emoji' },
{ compositeKey: '😚', type: 'emoji' }, { compositeKey: '😛', type: 'emoji' },
{ compositeKey: '😜', type: 'emoji' }, { compositeKey: '😝', type: 'emoji' },
{ compositeKey: '😞', type: 'emoji' }, { compositeKey: '😟', type: 'emoji' },
{ compositeKey: '😠', type: 'emoji' }, { compositeKey: '😡', type: 'emoji' },
{ compositeKey: '😢', type: 'emoji' }, { compositeKey: '😣', type: 'emoji' },
{ compositeKey: '😤', type: 'emoji' }, { compositeKey: '😥', type: 'emoji' },
{ compositeKey: '😦', type: 'emoji' }, { compositeKey: '😧', type: 'emoji' },
{ compositeKey: '😨', type: 'emoji' }, { compositeKey: '😩', type: 'emoji' },
{ compositeKey: '😪', type: 'emoji' }, { compositeKey: '😫', type: 'emoji' },
{ compositeKey: '😬', type: 'emoji' }, { compositeKey: '😭', type: 'emoji' },
{ compositeKey: '😮', type: 'emoji' }, { compositeKey: '😯', type: 'emoji' },
{ compositeKey: '😰', type: 'emoji' }, { compositeKey: '😱', type: 'emoji' },
{ compositeKey: '😲', type: 'emoji' }, { compositeKey: '😳', type: 'emoji' },
{ compositeKey: '😴', type: 'emoji' }, { compositeKey: '😵', type: 'emoji' },
{ compositeKey: '😶', type: 'emoji' }, { compositeKey: '😷', type: 'emoji' },
{ compositeKey: '😸', type: 'emoji' }, { compositeKey: '😹', type: 'emoji' },
{ compositeKey: '😺', type: 'emoji' }, { compositeKey: '😻', type: 'emoji' },
{ compositeKey: '😼', type: 'emoji' }, { compositeKey: '😽', type: 'emoji' },
{ compositeKey: '😾', type: 'emoji' }, { compositeKey: '😿', type: 'emoji' },
{ compositeKey: '🙀', type: 'emoji' }, { compositeKey: '🙁', type: 'emoji' },
{ compositeKey: '🙂', type: 'emoji' }, { compositeKey: '🙅', type: 'emoji' },
{ compositeKey: '🙆', type: 'emoji' }, { compositeKey: '🙇', type: 'emoji' },
{ compositeKey: '🙈', type: 'emoji' }, { compositeKey: '🙉', type: 'emoji' },
{ compositeKey: '🙊', type: 'emoji' }, { compositeKey: '🙋', type: 'emoji' },
{ compositeKey: '🙌', type: 'emoji' }, { compositeKey: '🙍', type: 'emoji' },
{ compositeKey: '🙎', type: 'emoji' }, { compositeKey: '🙏', type: 'emoji' },
{ compositeKey: '🚶', type: 'emoji' }, { compositeKey: '\u261d\ufe0f', type: 'emoji' },
{ compositeKey: '\u263a\ufe0f', type: 'emoji' }, { compositeKey: '\u263b\ufe0f', type: 'emoji' },
{ compositeKey: '\u270a\ufe0f', type: 'emoji' }, { compositeKey: '\u270b\ufe0f', type: 'emoji' },
{ compositeKey: '\u270c\ufe0f', type: 'emoji' }, { compositeKey: '\u2728\ufe0f', type: 'emoji' },
{ compositeKey: '\u2764\ufe0f', type: 'emoji' }
],
keys: [
[
{
value: '',
keyCode: -3,
className: 'emoji-ime-switch'
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-recent',
targetPage: 0
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-people active',
targetPage: 1
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-nature',
targetPage: 2
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-object',
targetPage: 3
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-place',
targetPage: 4
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-symbol',
targetPage: 5
},
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
]
]}, { // Page 1 - Nature
panelKeys: [{ compositeKey: '🌀', type: 'emoji' }, { compositeKey: '🌁', type: 'emoji' },
{ compositeKey: '🌈', type: 'emoji' }, { compositeKey: '🌊', type: 'emoji' },
{ compositeKey: '🌋', type: 'emoji' }, { compositeKey: '🌌', type: 'emoji' },
{ compositeKey: '🌍', type: 'emoji' }, { compositeKey: '🌎', type: 'emoji' },
{ compositeKey: '🌏', type: 'emoji' }, { compositeKey: '🌐', type: 'emoji' },
{ compositeKey: '🌑', type: 'emoji' }, { compositeKey: '🌒', type: 'emoji' },
{ compositeKey: '🌓', type: 'emoji' }, { compositeKey: '🌔', type: 'emoji' },
{ compositeKey: '🌕', type: 'emoji' }, { compositeKey: '🌖', type: 'emoji' },
{ compositeKey: '🌗', type: 'emoji' }, { compositeKey: '🌘', type: 'emoji' },
{ compositeKey: '🌙', type: 'emoji' }, { compositeKey: '🌚', type: 'emoji' },
{ compositeKey: '🌛', type: 'emoji' }, { compositeKey: '🌜', type: 'emoji' },
{ compositeKey: '🌝', type: 'emoji' }, { compositeKey: '🌞', type: 'emoji' },
{ compositeKey: '🌠', type: 'emoji' }, { compositeKey: '🌰', type: 'emoji' },
{ compositeKey: '🌱', type: 'emoji' }, { compositeKey: '🌲', type: 'emoji' },
{ compositeKey: '🌳', type: 'emoji' }, { compositeKey: '🌴', type: 'emoji' },
{ compositeKey: '🌵', type: 'emoji' }, { compositeKey: '🌷', type: 'emoji' },
{ compositeKey: '🌸', type: 'emoji' }, { compositeKey: '🌹', type: 'emoji' },
{ compositeKey: '🌺', type: 'emoji' }, { compositeKey: '🌻', type: 'emoji' },
{ compositeKey: '🌼', type: 'emoji' }, { compositeKey: '🌾', type: 'emoji' },
{ compositeKey: '🌿', type: 'emoji' }, { compositeKey: '🍀', type: 'emoji' },
{ compositeKey: '🍁', type: 'emoji' }, { compositeKey: '🍂', type: 'emoji' },
{ compositeKey: '🍃', type: 'emoji' }, { compositeKey: '🍄', type: 'emoji' },
{ compositeKey: '🍣', type: 'emoji' }, { compositeKey: '🐀', type: 'emoji' },
{ compositeKey: '🐁', type: 'emoji' }, { compositeKey: '🐂', type: 'emoji' },
{ compositeKey: '🐃', type: 'emoji' }, { compositeKey: '🐄', type: 'emoji' },
{ compositeKey: '🐅', type: 'emoji' }, { compositeKey: '🐆', type: 'emoji' },
{ compositeKey: '🐇', type: 'emoji' }, { compositeKey: '🐈', type: 'emoji' },
{ compositeKey: '🐉', type: 'emoji' }, { compositeKey: '🐊', type: 'emoji' },
{ compositeKey: '🐋', type: 'emoji' }, { compositeKey: '🐌', type: 'emoji' },
{ compositeKey: '🐍', type: 'emoji' }, { compositeKey: '🐎', type: 'emoji' },
{ compositeKey: '🐏', type: 'emoji' }, { compositeKey: '🐐', type: 'emoji' },
{ compositeKey: '🐑', type: 'emoji' }, { compositeKey: '🐒', type: 'emoji' },
{ compositeKey: '🐓', type: 'emoji' }, { compositeKey: '🐔', type: 'emoji' },
{ compositeKey: '🐕', type: 'emoji' }, { compositeKey: '🐖', type: 'emoji' },
{ compositeKey: '🐗', type: 'emoji' }, { compositeKey: '🐘', type: 'emoji' },
{ compositeKey: '🐙', type: 'emoji' }, { compositeKey: '🐚', type: 'emoji' },
{ compositeKey: '🐛', type: 'emoji' }, { compositeKey: '🐜', type: 'emoji' },
{ compositeKey: '🐝', type: 'emoji' }, { compositeKey: '🐞', type: 'emoji' },
{ compositeKey: '🐟', type: 'emoji' }, { compositeKey: '🐠', type: 'emoji' },
{ compositeKey: '🐡', type: 'emoji' }, { compositeKey: '🐢', type: 'emoji' },
{ compositeKey: '🐣', type: 'emoji' }, { compositeKey: '🐤', type: 'emoji' },
{ compositeKey: '🐥', type: 'emoji' }, { compositeKey: '🐦', type: 'emoji' },
{ compositeKey: '🐧', type: 'emoji' }, { compositeKey: '🐨', type: 'emoji' },
{ compositeKey: '🐩', type: 'emoji' }, { compositeKey: '🐪', type: 'emoji' },
{ compositeKey: '🐫', type: 'emoji' }, { compositeKey: '🐬', type: 'emoji' },
{ compositeKey: '🐭', type: 'emoji' }, { compositeKey: '🐮', type: 'emoji' },
{ compositeKey: '🐯', type: 'emoji' }, { compositeKey: '🐰', type: 'emoji' },
{ compositeKey: '🐱', type: 'emoji' }, { compositeKey: '🐲', type: 'emoji' },
{ compositeKey: '🐳', type: 'emoji' }, { compositeKey: '🐴', type: 'emoji' },
{ compositeKey: '🐵', type: 'emoji' }, { compositeKey: '🐶', type: 'emoji' },
{ compositeKey: '🐷', type: 'emoji' }, { compositeKey: '🐸', type: 'emoji' },
{ compositeKey: '🐹', type: 'emoji' }, { compositeKey: '🐺', type: 'emoji' },
{ compositeKey: '🐻', type: 'emoji' }, { compositeKey: '🐼', type: 'emoji' },
{ compositeKey: '🐽', type: 'emoji' }, { compositeKey: '🐾', type: 'emoji' },
{ compositeKey: '💐', type: 'emoji' }, { compositeKey: '🔥', type: 'emoji' },
{ compositeKey: '\u2600\ufe0f', type: 'emoji' }, { compositeKey: '\u2601\ufe0f', type: 'emoji' },
{ compositeKey: '\u2606\ufe0f', type: 'emoji' }, { compositeKey: '\u2614\ufe0f', type: 'emoji' },
{ compositeKey: '\u26a1\ufe0f', type: 'emoji' }, { compositeKey: '\u26c4\ufe0f', type: 'emoji' },
{ compositeKey: '\u26c5\ufe0f', type: 'emoji' }, { compositeKey: '\u2744\ufe0f', type: 'emoji' },
{ compositeKey: '\u2b50\ufe0f', type: 'emoji' }
],
keys: [
[
{
value: '',
keyCode: -3,
className: 'emoji-ime-switch'
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-recent',
targetPage: 0
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-people',
targetPage: 1
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-nature active',
targetPage: 2
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-object',
targetPage: 3
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-place',
targetPage: 4
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-symbol',
targetPage: 5
},
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
]
]}, { // Page 2 - Object
panelKeys: [{ compositeKey: '🀄\ufe0f', type: 'emoji' }, { compositeKey: '🃏', type: 'emoji' },
{ compositeKey: '🌽', type: 'emoji' }, { compositeKey: '🍅', type: 'emoji' },
{ compositeKey: '🍆', type: 'emoji' }, { compositeKey: '🍇', type: 'emoji' },
{ compositeKey: '🍈', type: 'emoji' }, { compositeKey: '🍉', type: 'emoji' },
{ compositeKey: '🍊', type: 'emoji' }, { compositeKey: '🍋', type: 'emoji' },
{ compositeKey: '🍌', type: 'emoji' }, { compositeKey: '🍍', type: 'emoji' },
{ compositeKey: '🍎', type: 'emoji' }, { compositeKey: '🍏', type: 'emoji' },
{ compositeKey: '🍐', type: 'emoji' }, { compositeKey: '🍑', type: 'emoji' },
{ compositeKey: '🍒', type: 'emoji' }, { compositeKey: '🍓', type: 'emoji' },
{ compositeKey: '🍔', type: 'emoji' }, { compositeKey: '🍕', type: 'emoji' },
{ compositeKey: '🍖', type: 'emoji' }, { compositeKey: '🍗', type: 'emoji' },
{ compositeKey: '🍘', type: 'emoji' }, { compositeKey: '🍙', type: 'emoji' },
{ compositeKey: '🍚', type: 'emoji' }, { compositeKey: '🍛', type: 'emoji' },
{ compositeKey: '🍜', type: 'emoji' }, { compositeKey: '🍝', type: 'emoji' },
{ compositeKey: '🍞', type: 'emoji' }, { compositeKey: '🍟', type: 'emoji' },
{ compositeKey: '🍠', type: 'emoji' }, { compositeKey: '🍡', type: 'emoji' },
{ compositeKey: '🍢', type: 'emoji' }, { compositeKey: '🍤', type: 'emoji' },
{ compositeKey: '🍥', type: 'emoji' }, { compositeKey: '🍦', type: 'emoji' },
{ compositeKey: '🍧', type: 'emoji' }, { compositeKey: '🍨', type: 'emoji' },
{ compositeKey: '🍩', type: 'emoji' }, { compositeKey: '🍪', type: 'emoji' },
{ compositeKey: '🍫', type: 'emoji' }, { compositeKey: '🍬', type: 'emoji' },
{ compositeKey: '🍭', type: 'emoji' }, { compositeKey: '🍮', type: 'emoji' },
{ compositeKey: '🍯', type: 'emoji' }, { compositeKey: '🍰', type: 'emoji' },
{ compositeKey: '🍱', type: 'emoji' }, { compositeKey: '🍲', type: 'emoji' },
{ compositeKey: '🍳', type: 'emoji' }, { compositeKey: '🍴', type: 'emoji' },
{ compositeKey: '🍵', type: 'emoji' }, { compositeKey: '🍶', type: 'emoji' },
{ compositeKey: '🍷', type: 'emoji' }, { compositeKey: '🍸', type: 'emoji' },
{ compositeKey: '🍹', type: 'emoji' }, { compositeKey: '🍺', type: 'emoji' },
{ compositeKey: '🍻', type: 'emoji' }, { compositeKey: '🍼', type: 'emoji' },
{ compositeKey: '🎁', type: 'emoji' }, { compositeKey: '🎂', type: 'emoji' },
{ compositeKey: '🎃', type: 'emoji' }, { compositeKey: '🎄', type: 'emoji' },
{ compositeKey: '🎅', type: 'emoji' }, { compositeKey: '🎆', type: 'emoji' },
{ compositeKey: '🎇', type: 'emoji' }, { compositeKey: '🎈', type: 'emoji' },
{ compositeKey: '🎉', type: 'emoji' }, { compositeKey: '🎊', type: 'emoji' },
{ compositeKey: '🎋', type: 'emoji' }, { compositeKey: '🎌', type: 'emoji' },
{ compositeKey: '🎍', type: 'emoji' }, { compositeKey: '🎎', type: 'emoji' },
{ compositeKey: '🎏', type: 'emoji' }, { compositeKey: '🎐', type: 'emoji' },
{ compositeKey: '🎑', type: 'emoji' }, { compositeKey: '🎒', type: 'emoji' },
{ compositeKey: '🎓', type: 'emoji' }, { compositeKey: '🎣', type: 'emoji' },
{ compositeKey: '🎤', type: 'emoji' }, { compositeKey: '🎥', type: 'emoji' },
{ compositeKey: '🎧', type: 'emoji' }, { compositeKey: '🎨', type: 'emoji' },
{ compositeKey: '🎬', type: 'emoji' }, { compositeKey: '🎮', type: 'emoji' },
{ compositeKey: '🎯', type: 'emoji' }, { compositeKey: '🎱', type: 'emoji' },
{ compositeKey: '🎲', type: 'emoji' }, { compositeKey: '🎳', type: 'emoji' },
{ compositeKey: '🎴', type: 'emoji' }, { compositeKey: '🎵', type: 'emoji' },
{ compositeKey: '🎶', type: 'emoji' }, { compositeKey: '🎷', type: 'emoji' },
{ compositeKey: '🎸', type: 'emoji' }, { compositeKey: '🎹', type: 'emoji' },
{ compositeKey: '🎺', type: 'emoji' }, { compositeKey: '🎻', type: 'emoji' },
{ compositeKey: '🎼', type: 'emoji' }, { compositeKey: '🎾', type: 'emoji' },
{ compositeKey: '🎿', type: 'emoji' }, { compositeKey: '🏀', type: 'emoji' },
{ compositeKey: '🏂', type: 'emoji' }, { compositeKey: '🏄', type: 'emoji' },
{ compositeKey: '🏆', type: 'emoji' }, { compositeKey: '🏇', type: 'emoji' },
{ compositeKey: '🏈', type: 'emoji' }, { compositeKey: '🏉', type: 'emoji' },
{ compositeKey: '🏊', type: 'emoji' }, { compositeKey: '👔', type: 'emoji' },
{ compositeKey: '👻', type: 'emoji' }, { compositeKey: '👾', type: 'emoji' },
{ compositeKey: '💉', type: 'emoji' }, { compositeKey: '💊', type: 'emoji' },
{ compositeKey: '💝', type: 'emoji' }, { compositeKey: '💡', type: 'emoji' },
{ compositeKey: '💣', type: 'emoji' }, { compositeKey: '💰', type: 'emoji' },
{ compositeKey: '💳', type: 'emoji' }, { compositeKey: '💴', type: 'emoji' },
{ compositeKey: '💵', type: 'emoji' }, { compositeKey: '💶', type: 'emoji' },
{ compositeKey: '💷', type: 'emoji' }, { compositeKey: '💸', type: 'emoji' },
{ compositeKey: '💻', type: 'emoji' }, { compositeKey: '💽', type: 'emoji' },
{ compositeKey: '💾', type: 'emoji' }, { compositeKey: '💿', type: 'emoji' },
{ compositeKey: '📀', type: 'emoji' }, { compositeKey: '📁', type: 'emoji' },
{ compositeKey: '📂', type: 'emoji' }, { compositeKey: '📃', type: 'emoji' },
{ compositeKey: '📄', type: 'emoji' }, { compositeKey: '📅', type: 'emoji' },
{ compositeKey: '📆', type: 'emoji' }, { compositeKey: '📇', type: 'emoji' },
{ compositeKey: '📈', type: 'emoji' }, { compositeKey: '📉', type: 'emoji' },
{ compositeKey: '📊', type: 'emoji' }, { compositeKey: '📋', type: 'emoji' },
{ compositeKey: '📌', type: 'emoji' }, { compositeKey: '📎', type: 'emoji' },
{ compositeKey: '📏', type: 'emoji' }, { compositeKey: '📐', type: 'emoji' },
{ compositeKey: '📑', type: 'emoji' }, { compositeKey: '📒', type: 'emoji' },
{ compositeKey: '📓', type: 'emoji' }, { compositeKey: '📔', type: 'emoji' },
{ compositeKey: '📕', type: 'emoji' }, { compositeKey: '📖', type: 'emoji' },
{ compositeKey: '📗', type: 'emoji' }, { compositeKey: '📘', type: 'emoji' },
{ compositeKey: '📙', type: 'emoji' }, { compositeKey: '📚', type: 'emoji' },
{ compositeKey: '📛', type: 'emoji' }, { compositeKey: '📜', type: 'emoji' },
{ compositeKey: '📝', type: 'emoji' }, { compositeKey: '📞', type: 'emoji' },
{ compositeKey: '📟', type: 'emoji' }, { compositeKey: '📠', type: 'emoji' },
{ compositeKey: '📡', type: 'emoji' }, { compositeKey: '📢', type: 'emoji' },
{ compositeKey: '📣', type: 'emoji' }, { compositeKey: '📤', type: 'emoji' },
{ compositeKey: '📥', type: 'emoji' }, { compositeKey: '📦', type: 'emoji' },
{ compositeKey: '📧', type: 'emoji' }, { compositeKey: '📨', type: 'emoji' },
{ compositeKey: '📩', type: 'emoji' }, { compositeKey: '📪', type: 'emoji' },
{ compositeKey: '📫', type: 'emoji' }, { compositeKey: '📬', type: 'emoji' },
{ compositeKey: '📭', type: 'emoji' }, { compositeKey: '📮', type: 'emoji' },
{ compositeKey: '📯', type: 'emoji' }, { compositeKey: '📰', type: 'emoji' },
{ compositeKey: '📱', type: 'emoji' }, { compositeKey: '📲', type: 'emoji' },
{ compositeKey: '📷', type: 'emoji' }, { compositeKey: '📹', type: 'emoji' },
{ compositeKey: '📺', type: 'emoji' }, { compositeKey: '📻', type: 'emoji' },
{ compositeKey: '📼', type: 'emoji' }, { compositeKey: '🔅', type: 'emoji' },
{ compositeKey: '🔆', type: 'emoji' }, { compositeKey: '🔇', type: 'emoji' },
{ compositeKey: '🔈', type: 'emoji' }, { compositeKey: '🔉', type: 'emoji' },
{ compositeKey: '🔊', type: 'emoji' }, { compositeKey: '🔋', type: 'emoji' },
{ compositeKey: '🔌', type: 'emoji' }, { compositeKey: '🔍', type: 'emoji' },
{ compositeKey: '🔎', type: 'emoji' }, { compositeKey: '🔏', type: 'emoji' },
{ compositeKey: '🔐', type: 'emoji' }, { compositeKey: '🔑', type: 'emoji' },
{ compositeKey: '🔒', type: 'emoji' }, { compositeKey: '🔓', type: 'emoji' },
{ compositeKey: '🔔', type: 'emoji' }, { compositeKey: '🔕', type: 'emoji' },
{ compositeKey: '🔖', type: 'emoji' }, { compositeKey: '🔦', type: 'emoji' },
{ compositeKey: '🔧', type: 'emoji' }, { compositeKey: '🔨', type: 'emoji' },
{ compositeKey: '🔩', type: 'emoji' }, { compositeKey: '🔪', type: 'emoji' },
{ compositeKey: '🔫', type: 'emoji' }, { compositeKey: '🔬', type: 'emoji' },
{ compositeKey: '🔭', type: 'emoji' }, { compositeKey: '🔮', type: 'emoji' },
{ compositeKey: '🕻', type: 'emoji' }, { compositeKey: '🕿', type: 'emoji' },
{ compositeKey: '🖪', type: 'emoji' }, { compositeKey: '🚪', type: 'emoji' },
{ compositeKey: '🚬', type: 'emoji' }, { compositeKey: '🚴', type: 'emoji' },
{ compositeKey: '🚽', type: 'emoji' }, { compositeKey: '🚿', type: 'emoji' },
{ compositeKey: '🛀', type: 'emoji' }, { compositeKey: '🛁', type: 'emoji' },
{ compositeKey: '\u231a\ufe0f', type: 'emoji' }, { compositeKey: '\u231b\ufe0f', type: 'emoji' },
{ compositeKey: '\u23f3\ufe0f', type: 'emoji' }, { compositeKey: '\u260e\ufe0f', type: 'emoji' },
{ compositeKey: '\u2615\ufe0f', type: 'emoji' }, { compositeKey: '\u26bd\ufe0f', type: 'emoji' },
{ compositeKey: '\u26be\ufe0f', type: 'emoji' }, { compositeKey: '\u26f3\ufe0f', type: 'emoji' },
{ compositeKey: '\u2702\ufe0f', type: 'emoji' }, { compositeKey: '\u2709\ufe0f', type: 'emoji' },
{ compositeKey: '\u270f\ufe0f', type: 'emoji' }, { compositeKey: '\u2712\ufe0f', type: 'emoji' }
],
keys: [
[
{
value: '',
keyCode: -3,
className: 'emoji-ime-switch'
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-recent',
targetPage: 0
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-people',
targetPage: 1
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-nature',
targetPage: 2
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-object active',
targetPage: 3
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-place',
targetPage: 4
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-symbol',
targetPage: 5
},
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
]
]
}, { // Page 3 - Places
panelKeys: [{ compositeKey: '🇨🇳', type: 'emoji' }, { compositeKey: '🇫🇷', type: 'emoji' },
{ compositeKey: '🇬🇧', type: 'emoji' }, { compositeKey: '🇮🇹', type: 'emoji' },
{ compositeKey: '🇯🇵', type: 'emoji' }, { compositeKey: '🇰🇷', type: 'emoji' },
{ compositeKey: '🇷🇺', type: 'emoji' }, { compositeKey: '🇪🇸', type: 'emoji' },
{ compositeKey: '🇺🇸', type: 'emoji' }, { compositeKey: '🌃', type: 'emoji' },
{ compositeKey: '🌄', type: 'emoji' }, { compositeKey: '🌅', type: 'emoji' },
{ compositeKey: '🌆', type: 'emoji' }, { compositeKey: '🌇', type: 'emoji' },
{ compositeKey: '🌉', type: 'emoji' }, { compositeKey: '🎠', type: 'emoji' },
{ compositeKey: '🎡', type: 'emoji' }, { compositeKey: '🎢', type: 'emoji' },
{ compositeKey: '🎪', type: 'emoji' }, { compositeKey: '🎫', type: 'emoji' },
{ compositeKey: '🎭', type: 'emoji' }, { compositeKey: '🎰', type: 'emoji' },
{ compositeKey: '🏠', type: 'emoji' }, { compositeKey: '🏡', type: 'emoji' },
{ compositeKey: '🏢', type: 'emoji' }, { compositeKey: '🏣', type: 'emoji' },
{ compositeKey: '🏤', type: 'emoji' }, { compositeKey: '🏥', type: 'emoji' },
{ compositeKey: '🏦', type: 'emoji' }, { compositeKey: '🏨', type: 'emoji' },
{ compositeKey: '🏩', type: 'emoji' }, { compositeKey: '🏪', type: 'emoji' },
{ compositeKey: '🏫', type: 'emoji' }, { compositeKey: '🏬', type: 'emoji' },
{ compositeKey: '🏭', type: 'emoji' }, { compositeKey: '🏮', type: 'emoji' },
{ compositeKey: '🏯', type: 'emoji' }, { compositeKey: '🏰', type: 'emoji' },
{ compositeKey: '💈', type: 'emoji' }, { compositeKey: '💒', type: 'emoji' },
{ compositeKey: '💺', type: 'emoji' }, { compositeKey: '📍', type: 'emoji' },
{ compositeKey: '🔰', type: 'emoji' }, { compositeKey: '🗻', type: 'emoji' },
{ compositeKey: '🗼', type: 'emoji' }, { compositeKey: '🗽', type: 'emoji' },
{ compositeKey: '🗾', type: 'emoji' }, { compositeKey: '🗿', type: 'emoji' },
{ compositeKey: '🚀', type: 'emoji' }, { compositeKey: '🚁', type: 'emoji' },
{ compositeKey: '🚂', type: 'emoji' }, { compositeKey: '🚃', type: 'emoji' },
{ compositeKey: '🚄', type: 'emoji' }, { compositeKey: '🚅', type: 'emoji' },
{ compositeKey: '🚆', type: 'emoji' }, { compositeKey: '🚇', type: 'emoji' },
{ compositeKey: '🚈', type: 'emoji' }, { compositeKey: '🚉', type: 'emoji' },
{ compositeKey: '🚊', type: 'emoji' }, { compositeKey: '🚋', type: 'emoji' },
{ compositeKey: '🚌', type: 'emoji' }, { compositeKey: '🚍', type: 'emoji' },
{ compositeKey: '🚎', type: 'emoji' }, { compositeKey: '🚏', type: 'emoji' },
{ compositeKey: '🚐', type: 'emoji' }, { compositeKey: '🚑', type: 'emoji' },
{ compositeKey: '🚒', type: 'emoji' }, { compositeKey: '🚓', type: 'emoji' },
{ compositeKey: '🚔', type: 'emoji' }, { compositeKey: '🚕', type: 'emoji' },
{ compositeKey: '🚖', type: 'emoji' }, { compositeKey: '🚗', type: 'emoji' },
{ compositeKey: '🚘', type: 'emoji' }, { compositeKey: '🚙', type: 'emoji' },
{ compositeKey: '🚚', type: 'emoji' }, { compositeKey: '🚛', type: 'emoji' },
{ compositeKey: '🚜', type: 'emoji' }, { compositeKey: '🚝', type: 'emoji' },
{ compositeKey: '🚞', type: 'emoji' }, { compositeKey: '🚟', type: 'emoji' },
{ compositeKey: '🚠', type: 'emoji' }, { compositeKey: '🚡', type: 'emoji' },
{ compositeKey: '🚢', type: 'emoji' }, { compositeKey: '🚣', type: 'emoji' },
{ compositeKey: '🚤', type: 'emoji' }, { compositeKey: '🚥', type: 'emoji' },
{ compositeKey: '🚦', type: 'emoji' }, { compositeKey: '🚧', type: 'emoji' },
{ compositeKey: '🚨', type: 'emoji' }, { compositeKey: '🚩', type: 'emoji' },
{ compositeKey: '🚲', type: 'emoji' }, { compositeKey: '\u2668\ufe0f', type: 'emoji' },
{ compositeKey: '\u2693\ufe0f', type: 'emoji' }, { compositeKey: '\u26a0\ufe0f', type: 'emoji' },
{ compositeKey: '\u26ea\ufe0f', type: 'emoji' }, { compositeKey: '\u26f2\ufe0f', type: 'emoji' },
{ compositeKey: '\u26f5\ufe0f', type: 'emoji' }, { compositeKey: '\u26fa\ufe0f', type: 'emoji' },
{ compositeKey: '\u26fd\ufe0f', type: 'emoji' }, { compositeKey: '\u2708\ufe0f', type: 'emoji' }
],
keys: [
[
{
value: '',
keyCode: -3,
className: 'emoji-ime-switch'
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-recent',
targetPage: 0
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-people',
targetPage: 1
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-nature',
targetPage: 2
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-object',
targetPage: 3
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-place active',
targetPage: 4
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-symbol',
targetPage: 5
},
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
]
]
}, { // Page 4 - Symbols
panelKeys: [{ compositeKey: '🅰\ufe0f', type: 'emoji' }, { compositeKey: '🅱\ufe0f', type: 'emoji' },
{ compositeKey: '🅾\ufe0f', type: 'emoji' }, { compositeKey: '🅿\ufe0f', type: 'emoji' },
{ compositeKey: '🆎', type: 'emoji' }, { compositeKey: '🆑', type: 'emoji' },
{ compositeKey: '🆒', type: 'emoji' }, { compositeKey: '🆓', type: 'emoji' },
{ compositeKey: '🆔', type: 'emoji' }, { compositeKey: '🆕', type: 'emoji' },
{ compositeKey: '🆖', type: 'emoji' }, { compositeKey: '🆗', type: 'emoji' },
{ compositeKey: '🆘', type: 'emoji' }, { compositeKey: '🆙', type: 'emoji' },
{ compositeKey: '🆚', type: 'emoji' }, { compositeKey: '🈁', type: 'emoji' },
{ compositeKey: '🈂\ufe0f', type: 'emoji' }, { compositeKey: '🈚\ufe0f', type: 'emoji' },
{ compositeKey: '🈯\ufe0f', type: 'emoji' }, { compositeKey: '🈲\ufe0f', type: 'emoji' },
{ compositeKey: '🈳\ufe0f', type: 'emoji' }, { compositeKey: '🈴\ufe0f', type: 'emoji' },
{ compositeKey: '🈵\ufe0f', type: 'emoji' }, { compositeKey: '🈶\ufe0f', type: 'emoji' },
{ compositeKey: '🈷\ufe0f', type: 'emoji' }, { compositeKey: '🈸\ufe0f', type: 'emoji' },
{ compositeKey: '🈹', type: 'emoji' }, { compositeKey: '🈺', type: 'emoji' },
{ compositeKey: '🉐', type: 'emoji' }, { compositeKey: '🉑', type: 'emoji' },
{ compositeKey: '🎦', type: 'emoji' }, { compositeKey: '🏧', type: 'emoji' },
{ compositeKey: '💟', type: 'emoji' }, { compositeKey: '💠', type: 'emoji' },
{ compositeKey: '💮', type: 'emoji' }, { compositeKey: '💯', type: 'emoji' },
{ compositeKey: '💱', type: 'emoji' }, { compositeKey: '💲', type: 'emoji' },
{ compositeKey: '💹', type: 'emoji' }, { compositeKey: '📳', type: 'emoji' },
{ compositeKey: '📴', type: 'emoji' }, { compositeKey: '📵', type: 'emoji' },
{ compositeKey: '📶', type: 'emoji' }, { compositeKey: '🔀', type: 'emoji' },
{ compositeKey: '🔁', type: 'emoji' }, { compositeKey: '🔂', type: 'emoji' },
{ compositeKey: '🔃', type: 'emoji' }, { compositeKey: '🔄', type: 'emoji' },
{ compositeKey: '🔗', type: 'emoji' }, { compositeKey: '🔘', type: 'emoji' },
{ compositeKey: '🔙', type: 'emoji' }, { compositeKey: '🔚', type: 'emoji' },
{ compositeKey: '🔛', type: 'emoji' }, { compositeKey: '🔜', type: 'emoji' },
{ compositeKey: '🔝', type: 'emoji' }, { compositeKey: '🔞', type: 'emoji' },
{ compositeKey: '🔟', type: 'emoji' }, { compositeKey: '🔠', type: 'emoji' },
{ compositeKey: '🔡', type: 'emoji' }, { compositeKey: '🔢', type: 'emoji' },
{ compositeKey: '🔣', type: 'emoji' }, { compositeKey: '🔤', type: 'emoji' },
{ compositeKey: '🔯', type: 'emoji' }, { compositeKey: '🔱', type: 'emoji' },
{ compositeKey: '🔲', type: 'emoji' }, { compositeKey: '🔳', type: 'emoji' },
{ compositeKey: '🔴', type: 'emoji' }, { compositeKey: '🔵', type: 'emoji' },
{ compositeKey: '🔶', type: 'emoji' }, { compositeKey: '🔷', type: 'emoji' },
{ compositeKey: '🔸', type: 'emoji' }, { compositeKey: '🔹', type: 'emoji' },
{ compositeKey: '🔺', type: 'emoji' }, { compositeKey: '🔻', type: 'emoji' },
{ compositeKey: '🔼', type: 'emoji' }, { compositeKey: '🔽', type: 'emoji' },
{ compositeKey: '🕐', type: 'emoji' }, { compositeKey: '🕑', type: 'emoji' },
{ compositeKey: '🕒', type: 'emoji' }, { compositeKey: '🕓', type: 'emoji' },
{ compositeKey: '🕕', type: 'emoji' }, { compositeKey: '🕖', type: 'emoji' },
{ compositeKey: '🕛', type: 'emoji' }, { compositeKey: '🕜', type: 'emoji' },
{ compositeKey: '🕝', type: 'emoji' }, { compositeKey: '🕞', type: 'emoji' },
{ compositeKey: '🕟', type: 'emoji' }, { compositeKey: '🕠', type: 'emoji' },
{ compositeKey: '🕡', type: 'emoji' }, { compositeKey: '🕧', type: 'emoji' },
{ compositeKey: '🚫', type: 'emoji' }, { compositeKey: '🚭', type: 'emoji' },
{ compositeKey: '🚮', type: 'emoji' }, { compositeKey: '🚯', type: 'emoji' },
{ compositeKey: '🚰', type: 'emoji' }, { compositeKey: '🚱', type: 'emoji' },
{ compositeKey: '🚳', type: 'emoji' }, { compositeKey: '🚷', type: 'emoji' },
{ compositeKey: '🚸', type: 'emoji' }, { compositeKey: '🚹', type: 'emoji' },
{ compositeKey: '🚺', type: 'emoji' }, { compositeKey: '🚻', type: 'emoji' },
{ compositeKey: '🚼', type: 'emoji' }, { compositeKey: '🚾', type: 'emoji' },
{ compositeKey: '🛂', type: 'emoji' }, { compositeKey: '🛃', type: 'emoji' },
{ compositeKey: '🛄', type: 'emoji' }, { compositeKey: '🛅', type: 'emoji' },
{ compositeKey: '\u203c\ufe0f', type: 'emoji' }, { compositeKey: '\u2049\ufe0f', type: 'emoji' },
{ compositeKey: '\u2139\ufe0f', type: 'emoji' }, { compositeKey: '\u2194\ufe0f', type: 'emoji' },
{ compositeKey: '\u2195\ufe0f', type: 'emoji' }, { compositeKey: '\u2196\ufe0f', type: 'emoji' },
{ compositeKey: '\u2197\ufe0f', type: 'emoji' }, { compositeKey: '\u2198\ufe0f', type: 'emoji' },
{ compositeKey: '\u21a9\ufe0f', type: 'emoji' }, { compositeKey: '\u21aa\ufe0f', type: 'emoji' },
{ compositeKey: '\u23e9\ufe0f', type: 'emoji' }, { compositeKey: '\u23ea\ufe0f', type: 'emoji' },
{ compositeKey: '\u23eb\ufe0f', type: 'emoji' }, { compositeKey: '\u23ec\ufe0f', type: 'emoji' },
{ compositeKey: '\u23f0\ufe0f', type: 'emoji' }, { compositeKey: '\u24c2\ufe0f', type: 'emoji' },
{ compositeKey: '\u25aa\ufe0f', type: 'emoji' }, { compositeKey: '\u25ab\ufe0f', type: 'emoji' },
{ compositeKey: '\u25b6\ufe0f', type: 'emoji' }, { compositeKey: '\u25c0\ufe0f', type: 'emoji' },
{ compositeKey: '\u25fb\ufe0f', type: 'emoji' }, { compositeKey: '\u25fc\ufe0f', type: 'emoji' },
{ compositeKey: '\u25fd\ufe0f', type: 'emoji' }, { compositeKey: '\u25fe\ufe0f', type: 'emoji' },
{ compositeKey: '\u2611\ufe0f', type: 'emoji' }, { compositeKey: '\u2648\ufe0f', type: 'emoji' },
{ compositeKey: '\u2649\ufe0f', type: 'emoji' }, { compositeKey: '\u264a\ufe0f', type: 'emoji' },
{ compositeKey: '\u264b\ufe0f', type: 'emoji' }, { compositeKey: '\u264c\ufe0f', type: 'emoji' },
{ compositeKey: '\u264d\ufe0f', type: 'emoji' }, { compositeKey: '\u264e\ufe0f', type: 'emoji' },
{ compositeKey: '\u264f\ufe0f', type: 'emoji' }, { compositeKey: '\u2650\ufe0f', type: 'emoji' },
{ compositeKey: '\u2651\ufe0f', type: 'emoji' }, { compositeKey: '\u2652\ufe0f', type: 'emoji' },
{ compositeKey: '\u2653\ufe0f', type: 'emoji' }, { compositeKey: '\u2660\ufe0f', type: 'emoji' },
{ compositeKey: '\u2663\ufe0f', type: 'emoji' }, { compositeKey: '\u2665\ufe0f', type: 'emoji' },
{ compositeKey: '\u2666\ufe0f', type: 'emoji' }, { compositeKey: '\u267b\ufe0f', type: 'emoji' },
{ compositeKey: '\u267f\ufe0f', type: 'emoji' }, { compositeKey: '\u26aa\ufe0f', type: 'emoji' },
{ compositeKey: '\u26ab\ufe0f', type: 'emoji' }, { compositeKey: '\u26ce\ufe0f', type: 'emoji' },
{ compositeKey: '\u26d4\ufe0f', type: 'emoji' }, { compositeKey: '\u2705\ufe0f', type: 'emoji' },
{ compositeKey: '\u2714\ufe0f', type: 'emoji' }, { compositeKey: '\u2716\ufe0f', type: 'emoji' },
{ compositeKey: '\u2733\ufe0f', type: 'emoji' }, { compositeKey: '\u2734\ufe0f', type: 'emoji' },
{ compositeKey: '\u2748\ufe0f', type: 'emoji' }, { compositeKey: '\u274c\ufe0f', type: 'emoji' },
{ compositeKey: '\u274e\ufe0f', type: 'emoji' }, { compositeKey: '\u2753\ufe0f', type: 'emoji' },
{ compositeKey: '\u2754\ufe0f', type: 'emoji' }, { compositeKey: '\u2755\ufe0f', type: 'emoji' },
{ compositeKey: '\u2757\ufe0f', type: 'emoji' }, { compositeKey: '\u2795\ufe0f', type: 'emoji' },
{ compositeKey: '\u2796\ufe0f', type: 'emoji' }, { compositeKey: '\u2797\ufe0f', type: 'emoji' },
{ compositeKey: '\u27a1\ufe0f', type: 'emoji' }, { compositeKey: '\u27b0\ufe0f', type: 'emoji' },
{ compositeKey: '\u27bf\ufe0f', type: 'emoji' }, { compositeKey: '\u2934\ufe0f', type: 'emoji' },
{ compositeKey: '\u2935\ufe0f', type: 'emoji' }, { compositeKey: '\u2b05\ufe0f', type: 'emoji' },
{ compositeKey: '\u2b1b\ufe0f', type: 'emoji' }, { compositeKey: '\u2b1c\ufe0f', type: 'emoji' },
{ compositeKey: '\u2b55\ufe0f', type: 'emoji' }, { compositeKey: '\u3030\ufe0f', type: 'emoji' },
{ compositeKey: '\u303d\ufe0f', type: 'emoji' }, { compositeKey: '\u3297\ufe0f', type: 'emoji' },
{ compositeKey: '\u3299\ufe0f', type: 'emoji' }
],
keys: [
[
{
value: '',
keyCode: -3,
className: 'emoji-ime-switch'
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-recent',
targetPage: 0
},
{
value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-people',
targetPage: 1
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-nature',
targetPage: 2
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-object',
targetPage: 3
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-place',
targetPage: 4
},
{ value: '',
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'emoji-symbol active',
targetPage: 5
},
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
]
]
}
]
};

View file

@ -0,0 +1,92 @@
Keyboards['en-Africa'] = {
label: 'English (Africa)',
shortLabel: 'En',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'en_gb',
menuLabel: 'English (Africa)',
lang: 'en-GB',
pages: [ {
alt: {
a: 'áàâäåãāæ',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'ïíìîīį',
o: 'öõóòôōœøɵ',
u: 'üúùûū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, {
alt: {
'1': ['¹', '1st'],
'2': ['²', '2nd'],
'3': ['³', '3rd'],
'4': ['⁴', '4th'],
'5': ['⁵', '5th'],
'6': ['⁶', '6th'],
'7': ['⁷', '7th'],
'8': ['⁸', '8th'],
'9': ['⁹', '9th'],
'0': ['⁰', 'º'],
'$': [ '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,44 @@
Keyboards['en-Colemak'] = {
label: 'English - Colemak',
shortLabel: 'En',
menuLabel: 'Colemak',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'en_us',
lang: 'en-US',
alt: {
a: 'áàâäåãāæ',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'ïíìîīį',
o: 'öóòôōőœøɵ',
u: 'üúùûűū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!:)(…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'f' } , { value: 'p' },
{ value: 'g' } , { value: 'j' }, { value: 'l' } , { value: 'u' },
{ value: 'y' }, { value: ';' }
], [
{ value: 'a' }, { value: 'r' }, { value: 's' }, { value: 't' },
{ value: 'd' } , { value: 'h' }, { value: 'n' }, { value: 'e' },
{ value: 'i' },
{ value: 'o',}
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'k' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,43 @@
Keyboards['en-Dvorak'] = {
label: 'English - Dvorak',
shortLabel: 'En',
menuLabel: 'Dvorak',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'en_us',
lang: 'en-US',
alt: {
a: 'àáâãäåāæ',
c: 'çćč',
e: 'èéêëē€',
i: 'ìíîïī',
o: 'òóôõöōœø',
u: 'ùúûüū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ńñň'
},
textLayoutOverwrite: {
',': "'",
'.': false
},
keys: [
[
{ value: ',' }, { value: '.' } , { value: 'p' }, { value: 'y' },
{ value: 'f' }, { value: 'g' } , { value: 'c' }, { value: 'r' },
{ value: 'l' }, { value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: 'a' }, { value: 'o' }, { value: 'e' }, { value: 'u' },
{ value: 'i' } , { value: 'd' }, { value: 'h' }, { value: 't' },
{ value: 'n' }, { value: 's' }
], [
{ value: '⇪', ratio: 1, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'q' }, { value: 'j' }, { value: 'k' }, { value: 'x' },
{ value: 'b' }, { value: 'm' }, { value: 'w' }, { value: 'v' },
{ value: 'z' }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,92 @@
Keyboards['en-GB'] = {
label: 'English (UK)',
shortLabel: 'En',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'en_gb',
menuLabel: 'English (UK)',
lang: 'en-GB',
pages: [ {
alt: {
a: 'áàâäåãāæ',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'ïíìîīį',
o: 'öõóòôōœøɵ',
u: 'üúùûū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, {
alt: {
'1': ['¹', '1st'],
'2': ['²', '2nd'],
'3': ['³', '3rd'],
'4': ['⁴', '4th'],
'5': ['⁵', '5th'],
'6': ['⁶', '6th'],
'7': ['⁷', '7th'],
'8': ['⁸', '8th'],
'9': ['⁹', '9th'],
'0': ['⁰', 'º'],
'£': [ '€', '$', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '£', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,119 @@
Keyboards['en-Neo'] = {
label: 'English - Neo',
shortLabel: 'En',
menuLabel: 'English - Neo',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'en_us',
lang: 'en-US',
alt: {
a: 'áàâäåãāæ',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'ïíìîīį',
o: 'öóòôōœøɵ',
u: 'üúùûū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'x' }, { value: 'v' }, { value: 'l' } , { value: 'c' },
{ value: 'w' }, { value: 'k' }, { value: 'h' } , { value: 'g' },
{ value: 'f' }, { value: 'q' }
], [
{ value: 'u' }, { value: 'i', }, { value: 'a' }, { value: 'e' },
{ value: 'o' }, { value: 's', }, { value: 'n' }, { value: 'r' },
{ value: 't' }, { value: 'd', }
], [
{ value: '⇪', ratio: 2, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'p' }, { value: 'z' }, { value: 'b' },
{ value: 'm' }, { value: 'j' }, { value: 'y' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
needsCommaKey: true,
alt: {
'1': ['¹', '1st'],
'2': ['²', '2nd'],
'3': ['³', '3rd'],
'4': ['⁴', '4th'],
'5': ['⁵', '5th'],
'6': ['⁶', '6th'],
'7': ['⁷', '7th'],
'8': ['⁸', '8th'],
'9': ['⁹', '9th'],
'0': ['⁰', 'º'],
'$': [ '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±'],
'/': '\\'
},
keys: [
[
{ value: ':' }, { value: '&' },
{ value: '#' }, { value: '$' }, { value: '!' },
{ value: '7' }, { value: '8' }, { value: '9' },
{ value: '/' }, { value: '*' }
], [
{ value: ';' }, { value: '@' },
{ value: '(' }, { value: ')' }, { value: '?' },
{ value: '4' }, { value: '5' }, { value: '6' },
{ value: '+' }, { value: '-' }
], [
{ value: 'Alt', ratio: 2,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '%' }, { value: '"' }, { value: "'" },
{ value: '1' }, { value: '2' }, { value: '3' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
alt: {
'®': ['™']
},
needsCommaKey: true,
keys: [
[
{ value: '§' }, { value: '_' }, { value: '[' }, { value: ']' },
{ value: '^' }, { value: '<' }, { value: '>' }, { value: '=' },
{ value: '¥' }, { value: '€' }
], [
{ value: '©' }, { value: '®' }, { value: '{' }, { value: '}' },
{ value: '`' }, { value: '«' }, { value: '»' }, { value: '±' },
{ value: '£' }, { value: '$' }
],
[
{ value: 'Alt', ratio: 2,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{ value: '|' }, { value: '~' }, { value: 'º' },
{ value: '¹' }, { value: '²' }, { value: '³' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,91 @@
Keyboards.en = {
label: 'English',
shortLabel: 'En',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'en_us',
menuLabel: 'English',
lang: 'en',
alt: {
a: 'áàâäåãāæ',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'ïíìîīį',
o: 'öõóòôōœøɵ',
u: 'üúùûū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'1': ['¹', '1st'],
'2': ['²', '2nd'],
'3': ['³', '3rd'],
'4': ['⁴', '4th'],
'5': ['⁵', '5th'],
'6': ['⁶', '6th'],
'7': ['⁷', '7th'],
'8': ['⁸', '8th'],
'9': ['⁹', '9th'],
'0': ['⁰', 'º'],
'$': [ '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,51 @@
Keyboards.eo = {
label: 'Esperanto',
menuLabel: 'Esperanto',
shortLabel: 'Eo',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
lang: 'eo',
alt: {
a: 'àáâãäåæāăą',
c: 'çćċč',
d: 'ðďđ',
e: 'èéêëēėęě',
g: 'ğġģ',
h: 'ĥħ',
i: 'ìíîïĩīįıij',
k: 'ķĸ',
l: 'ĺļľŀł',
n: 'ñńņňʼnŋ',
o: 'òóôõöøōőœ',
'ŝ': 'q',
r: 'ŕŗř',
s: 'śşšșß',
S: 'ŚŞŠȘ',
t: 'þţťŧț',
u: 'ùúûüũūůűų',
'ĝ': 'wŵ',
'ĉ': 'x',
'ŭ': 'yýÿŷ',
z: 'źżž',
'.': ',?!;:…'
},
keys: [
[
{ value: 'ŝ' }, { value: 'ĝ' }, { value: 'e' } , { value: 'r' },
{ value: 't' }, { value: 'ŭ' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ĵ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'ĉ' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,117 @@
Keyboards['es-Americas'] = {
label: 'Spanish (Latin America)',
shortLabel: 'Es',
menuLabel: 'Español (Latinoamérica)',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'es',
lang: 'es',
alt: {
a: 'áªàâäåãāæ',
c: 'ç',
e: 'é€èêëēęɛ',
i: 'íïìîīį',
o: 'óºöòôōœøɵ',
u: 'úüùûū',
s: '$ßš',
S: '$Š',
l: '£ l·l',
n: 'ń',
y: '¥',
'.': ',¿?¡!;:·',
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ñ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'$': ['€', '£', '¢', '¥'],
'0': ['º'],
'1': ['1º', '1ª'],
'2': ['2º', '2ª'],
'3': ['3º', '3ª'],
'4': ['4º', '4ª'],
'5': ['5º', '5ª'],
'6': ['6º', '6ª'],
'7': ['7º', '7ª'],
'8': ['8º', '8ª'],
'9': ['9º', '9ª'],
'.': ['·'],
'"': ['“', '”'],
'\'':['‘', '’'],
},
// These are based on the es layout.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '-' }, { value: '/' }, { value: ':' }, { value: ';' },
{ value: '(' }, { value: ')' }, { value: '$', className: 'alternate-indicator' },
{ value: '&' }, { value: '@' }, { value: '%' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '*',
supportsSwitching: {
value: ','
}
},
{ value: '¿' }, { value: '?' }, { value: '¡' }, { value: '!' },
{ value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
alt: {
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '[' }, { value: ']' }, { value: '{' }, { value: '}' },
{ value: '#' }, { value: '%' }, { value: '^' }, { value: '+' },
{ value: '=' }, { value: '°' }
], [
{ value: '_' }, { value: '\\' }, { value: '|' }, { value: '~' },
{ value: '<' }, { value: '>' }, { value: '€' }, { value: '£' },
{ value: '¥' }, { value: '•' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{value: '*' }, { value: '¿' }, { value: '?' },
{ value: '¡' }, { value: '!' },
{ value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,120 @@
Keyboards.es = {
label: 'Spanish',
shortLabel: 'Es',
menuLabel: 'Español',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'es',
lang: 'es',
alt: {
a: 'áªàâäåãāæ',
c: 'ç',
e: 'é€èêëēęɛ',
i: 'íïìîīį',
o: 'óºöòôōœøɵ',
u: 'úüùûū',
s: '$ßš',
S: '$Š',
l: '£ l·l',
n: 'ń',
y: '¥',
'.': ',¿?¡!;:·',
':)': ':) :D :( ;D :* :/'
/* '.com': '.es .org .eu' XXX: commented to avoid overflows for the demo */
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ñ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
// { value: ':)', compositeKey:':)', ratio: 2 },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'€': ['$', '£', '¢', '¥'],
'0': ['º'],
'1': ['1º', '1ª'],
'2': ['2º', '2ª'],
'3': ['3º', '3ª'],
'4': ['4º', '4ª'],
'5': ['5º', '5ª'],
'6': ['6º', '6ª'],
'7': ['7º', '7ª'],
'8': ['8º', '8ª'],
'9': ['9º', '9ª'],
'.': ['·'],
'"': ['“', '”'],
'\'':['‘', '’'],
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '-' }, { value: '/' }, { value: ':' }, { value: ';' },
{ value: '(' }, { value: ')' }, { value: '€', className: 'alternate-indicator' },
{ value: '&' }, { value: '@' }, { value: '%' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '*',
supportsSwitching: {
value: ','
}
},
{ value: '¿' }, { value: '?' }, { value: '¡' },
{ value: '!' }, { value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
alt: {
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '[' }, { value: ']' }, { value: '{' }, { value: '}' },
{ value: '#' }, { value: '%' }, { value: '^' }, { value: '+' },
{ value: '=' }, { value: '°' }
], [
{ value: '_' }, { value: '\\' }, { value: '|' }, { value: '~' },
{ value: '<' }, { value: '>' }, { value: '$' }, { value: '£' },
{ value: '¥' }, { value: '•' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{value: '*' }, { value: '¿' }, { value: '?' },
{ value: '¡' }, { value: '!' },
{ value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,109 @@
Keyboards.eu = {
label: 'Basque',
shortLabel: 'Eu',
menuLabel: 'Euskara',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'eu',
lang: 'eu',
alt: {
a: 'áªàâäåãāæ',
c: 'ç',
e: 'é€èêëēęɛ',
i: 'íïìîīį',
o: 'óºöòôōœøɵ',
u: 'úüùûū',
s: '$ßš',
S: '$Š',
l: '£ l·l',
n: 'ń',
y: '¥',
'.': ',¿?¡!;:·',
':)': ':) :D :( ;D :* :/'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ñ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'€': ['$', '£', '¢', '¥'],
'0': ['º'],
'.': ['·'],
'"': ['“', '”'],
'\'':['‘', '’'],
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '-' }, { value: '/' }, { value: ':' }, { value: ';' },
{ value: '(' }, { value: ')' }, { value: '€', className: 'alternate-indicator' },
{ value: '&' }, { value: '@' }, { value: '%' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '*',
supportsSwitching: {
value: ','
}
},
{ value: '¿' }, { value: '?' }, { value: '¡' },
{ value: '!' }, { value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
alt: {
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '[' }, { value: ']' }, { value: '{' }, { value: '}' },
{ value: '#' }, { value: '%' }, { value: '^' }, { value: '+' },
{ value: '=' }, { value: '°' }
], [
{ value: '_' }, { value: '\\' }, { value: '|' }, { value: '~' },
{ value: '<' }, { value: '>' }, { value: '$' }, { value: '£' },
{ value: '¥' }, { value: '•' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{value: '*' }, { value: '¿' }, { value: '?' },
{ value: '¡' }, { value: '!' },
{ value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,100 @@
Keyboards.fa = {
label: 'Persian',
shortLabel: 'فا',
menuLabel: 'فارسی',
secondLayout: true,
types: ['text', 'url', 'email'],
alternateLayoutKey: '۱۲۳',
basicLayoutKey: 'اب‌پ',
lang: 'fa',
pages: [ { // Default Page
width: 11,
specificCssRule: true,
needsCommaKey: true,
alt : {
'ض': ['۱', '1'],
'ص': ['۲', '2'],
'ث': ['۳', '3'],
'ق': ['۴', '4'],
'ف': ['۵', '5'],
'غ': ['۶', '6'],
'ع': ['۷', '7'],
'ه': ['ۀ', 'ة', '۸', '8'],
'خ': ['۹', '9'],
'ح': ['۰', '0'],
'ا': ['آ', 'أ', 'ء'],
'ی': ['ئ','ي'],
'ت': 'ة',
'ک': 'ك',
'.': 'ًٌٍَُِّْءٔٓ',
'،': ':!؟؛-«»'
},
textLayoutOverwrite: {
',': '،'
},
keys: [
[
{ value: 'ض' }, { value: 'ص' }, { value: 'ث' }, { value: 'ق' },
{ value: 'ف' }, { value: 'غ' }, { value: 'ع' }, { value: 'ه' },
{ value: 'خ' }, { value: 'ح' }, { value: 'ج' }
], [
{ value: 'ش' }, { value: 'س' }, { value: 'ی' }, { value: 'ب' },
{ value: 'ل' }, { value: 'ا' }, { value: 'ت' }, { value: 'ن' },
{ value: 'م' }, { value: 'ک' }, { value: 'گ' }
], [
{ value: 'ظ' }, { value: 'ط' }, { value: 'ژ' }, { value: 'ز' },
{ value: 'ر' }, { value: 'ذ' }, { value: 'د' }, { value: 'پ' },
{ value: 'و' }, { value: 'چ' }, { value: '⌫', ratio: 1, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '\u25C2\u2507\u25B8', ratio: 1, keyCode: '8204', ariaLabel: 'نیم‌فاصله' },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, { // Symbols Page
specificCssRule: true,
alt: {
'۱': ['1', '¹'],
'۲': ['2', '²'],
'۳': ['3', '³'],
'۴': ['4', '⁴'],
'۵': ['5', '⁵'],
'۶': ['6', '⁶'],
'۷': ['7', '⁷'],
'۸': ['8', '⁸'],
'۹': ['9', '⁹'],
'۰': ['0', '⁰'],
'﷼': ['$', '€', '£', '¢', '¥'],
'»': ['"', '“', '”'],
'«': ['\'', '‘', '’'],
'؟': ['?', '¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±'],
'؛': [';'],
'.': 'ًٌٍَُِّْءٔٓ'
},
keys: [
[
{ value: '۱' }, { value: '۲' }, { value: '۳' }, { value: '۴' },
{ value: '۵' }, { value: '۶' }, { value: '۷' }, { value: '۸' },
{ value: '۹' }, { value: '۰' },
], [
{ value: '@' }, { value: '#' }, { value: '﷼', className: 'alternate-indicator' },
{ value: '+' }, { value: '%' }, { value: '*' }, { value: '-' },
{ value: '/' }, { value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '&' }, { value: ':' }, { value: '؛' }, { value: '«' },
{ value: '»' }, { value: '!' }, { value: '؟' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 7, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '_' }, { value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,44 @@
Keyboards.ff = {
label: 'Fulah',
shortLabel: 'Ff',
menuLabel: 'Pulaar-Fulfulde',
imEngine: 'latin',
autoCorrectLanguage: 'ff',
types: ['text', 'url', 'email', 'password'],
lang: 'ff',
alt: {
a: 'àâæáãäåā',
c: 'çćč',
e: 'éèêë€ē',
i: 'îïìíī',
o: 'ôœòóõöōø',
u: 'ùûüúū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ñńň',
ɗ: 'z',
ƴ: 'x',
ŋ: 'q',
ɓ: 'v',
'.': ',?!-;:'
},
keys: [
[
{ value: 'a' }, { value: 'ɗ' }, { value: 'e' }, { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'ŋ' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'm' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'w' }, { value: 'ƴ' }, { value: 'c' }, { value: 'ɓ' },
{ value: 'b' }, { value: 'n' }, { value: "'", keyCode: 39 },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,92 @@
Keyboards['fr-CA'] = {
label: 'French (Canadian)',
shortLabel: 'Fr',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'fr',
autoCorrectPunctuation: false,
menuLabel: 'Français (Canadien)',
lang: 'fr-CA',
alt: {
a: 'áàâäåãāæ',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'ïíìîīį',
o: 'öõóòôōœøɵ',
u: 'üúùûū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'1': ['¹', '1st'],
'2': ['²', '2nd'],
'3': ['³', '3rd'],
'4': ['⁴', '4th'],
'5': ['⁵', '5th'],
'6': ['⁶', '6th'],
'7': ['⁷', '7th'],
'8': ['⁸', '8th'],
'9': ['⁹', '9th'],
'0': ['⁰', 'º'],
'$': [ '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,40 @@
Keyboards['fr-CH'] = {
label: 'French (Switzerland)',
shortLabel: 'Fr',
menuLabel: 'Français (Suisse)',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'fr',
autoCorrectPunctuation: false,
lang: 'fr',
alt: {
a: 'àâæáãäåā',
c: 'çćč',
e: 'éèêë€ē',
i: 'îïìíī',
o: 'ôœöòóõōø',
u: 'ùûüúū',
s: 'ßśšş',
S: 'ŚŠŞ',
n: 'ñńň'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' } , { value: 'z' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,41 @@
Keyboards['fr-Dvorak-bepo'] = {
label: 'French - Bépo',
shortLabel: 'Fr',
menuLabel: 'Bépo',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'fr',
autoCorrectPunctuation: false,
lang: 'fr',
alt: {
a: 'àâæáãäåā',
c: 'çćč',
e: 'éèêë€ē',
i: 'îïìíī',
o: 'ôœòóõöōø',
u: 'ùûüúū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ńñň',
'.': ',?!-;:…'
},
keys: [
[
{ value: 'b' }, { value: 'é' }, { value: 'p' }, { value: 'o' },
{ value: 'v' }, { value: 'd' }, { value: 'l' }, { value: 'j' },
{ value: 'z' }, { value: 'w' }
], [
{ value: 'a' }, { value: 'u' }, { value: 'i' }, { value: 'e' },
{ value: 'c' }, { value: 't' }, { value: 's' }, { value: 'r' },
{ value: 'n' }, { value: 'm' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'k' }, { value: 'q' },
{ value: 'g' }, { value: 'h' }, { value: 'f' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,41 @@
Keyboards.fr = {
label: 'French',
shortLabel: 'Fr',
menuLabel: 'Français',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'fr',
autoCorrectPunctuation: false,
lang: 'fr',
alt: {
a: 'àâæáãäåā',
c: 'çćč',
e: 'éèêë€ē',
i: 'îïìíī',
o: 'ôœòóõöōø',
u: 'ùûüúū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ńñň',
'.': ',?!-;:…'
},
keys: [
[
{ value: 'a' }, { value: 'z' }, { value: 'e' }, { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'q' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'm' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'w' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: "'", keyCode: 39 },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,42 @@
Keyboards.fy = {
label: 'Frisian',
shortLabel: 'Fy',
menuLabel: 'Frysk',
imEngine: 'latin',
autoCorrectLanguage: 'fy',
types: ['text', 'url', 'email', 'password'],
lang: 'fy',
pages: [ { // default page
alt: {
a: 'âäáàæãåā',
e: 'êéëèęėē€',
i: 'íïìîįīij',
o: 'ôóöòõœøō',
u: 'ûúüùū',
s: '$',
n: 'ñń',
l: '£',
y: 'ýij¥',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}]
};

View file

@ -0,0 +1,99 @@
Keyboards.ga = {
label: 'Irish',
shortLabel: 'Ga',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'ga',
menuLabel: 'Gaeilge',
lang: 'ga',
alt: {
a: 'áàâäåãāæ',
b: 'ḃ',
c: 'ċçćč',
d: 'ḋ',
e: 'éèêëēęɛ€',
f: 'ḟ',
g: 'ġ',
i: 'íìïîīį',
m: 'ṁ',
o: 'óòöôōœøɵ',
p: 'ṗ',
u: 'úùüûū',
s: 'ṡßśš$',
S: 'ṠŚŠ$',
t: 'ṫ',
n: 'ñń',
l: '£ł',
w: 'ŵ',
y: 'ŷÿ¥',
z: 'žźż',
'.': '-\',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'1': ['1ú'],
'2': ['2ú'],
'3': ['3ú'],
'4': ['4ú'],
'5': ['5ú'],
'6': ['6ú'],
'7': ['7ú'],
'8': ['8ú'],
'9': ['9ú'],
'€': ['£', '$', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '€', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,100 @@
Keyboards.gd = {
label: 'Scottish Gaelic',
shortLabel: 'Gd',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'gd',
lang: 'gd',
menuLabel: 'Gàidhlig',
alt: {
a: 'àáâäåãāæ',
b: 'ḃ',
c: 'ċçćč',
d: 'ḋ',
e: 'èéêëēęɛ€',
f: 'ḟ',
g: 'ġ',
i: 'ìíïîīį',
m: 'ṁ',
o: 'òóöôōœøɵ',
p: 'ṗ',
u: 'ùúüûū',
s: 'ṡßśš$',
S: 'ṠŚŠ$',
t: 'ṫ',
n: 'ñń',
l: '£ł',
w: 'ŵ',
y: 'ŷÿ¥',
z: 'žźż',
'.': '-\',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'1': ['1d'],
'2': ['2na'],
'3': ['3as'],
'4': ['4mh'],
'5': ['5mh'],
'6': ['6mh'],
'7': ['7mh'],
'8': ['8mh'],
'9': ['9mh'],
'&': ['⁊'],
'£': ['€', '$', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '£', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,117 @@
Keyboards.gl = {
label: ' Galician',
shortLabel: 'Gl',
menuLabel: 'Galego',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'gl',
lang: 'gl',
pages: [ { // default page
alt: {
a: 'áªàâäåãāæ',
c: 'ç',
e: 'é€èêëēęɛ',
i: 'íïìîīį',
o: 'óºöòôōœøɵ',
u: 'úüùûū',
s: '$ßš',
S: '$Š',
l: '£ l·l',
n: 'ń',
y: '¥',
'.': ',¿?¡!;:·'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ñ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, { // symbol page 1
alt: {
'€': ['$', '£', '¢', '¥'],
'0': ['º'],
'1': ['1º', '1ª'],
'2': ['2º', '2ª'],
'3': ['3º', '3ª'],
'4': ['4º', '4ª'],
'5': ['5º', '5ª'],
'6': ['6º', '6ª'],
'7': ['7º', '7ª'],
'8': ['8º', '8ª'],
'9': ['9º', '9ª'],
'.': ['·'],
'"': ['“', '”'],
'\'':['‘', '’'],
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '-' }, { value: '/' }, { value: ':' }, { value: ';' },
{ value: '(' }, { value: ')' }, { value: '€', className: 'alternate-indicator' },
{ value: '&' }, { value: '@' }, { value: '%' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '*',
supportsSwitching: {
value: ','
}
},
{ value: '¿' }, { value: '?' }, { value: '¡' },
{ value: '!' }, { value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // symbol page 2
alt: {
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '[' }, { value: ']' }, { value: '{' }, { value: '}' },
{ value: '#' }, { value: '%' }, { value: '^' }, { value: '+' },
{ value: '=' }, { value: '°' }
], [
{ value: '_' }, { value: '\\' }, { value: '|' }, { value: '~' },
{ value: '<' }, { value: '>' }, { value: '$' }, { value: '£' },
{ value: '¥' }, { value: '•' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{value: '*' }, { value: '¿' }, { value: '?' },
{ value: '¡' }, { value: '!' },
{ value: '"' }, { value: '\'' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,100 @@
Keyboards.gv = {
label: 'Manx Gaelic',
shortLabel: 'Gv',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'gv',
lang: 'gv',
menuLabel: 'Gaelg',
alt: {
a: 'àáâäåãāæ',
b: 'ḃ',
c: 'ċçćč',
d: 'ḋ',
e: 'èéêëēęɛ€',
f: 'ḟ',
g: 'ġ',
i: 'ìíïîīį',
m: 'ṁ',
o: 'òóöôōœøɵ',
p: 'ṗ',
u: 'ùúüûū',
s: 'ṡßśš$',
S: 'ṠŚŠ$',
t: 'ṫ',
n: 'ñń',
l: '£ł',
w: 'ŵ',
y: 'ŷÿ¥',
z: 'žźż',
'.': '-\',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'1': ['1d'],
'2': ['2h'],
'3': ['3ss'],
'4': ['4oo'],
'5': ['5oo'],
'6': ['6oo'],
'7': ['7oo'],
'8': ['8oo'],
'9': ['9oo'],
'&': ['⁊'],
'£': ['€', '$', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '£', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,29 @@
Keyboards.he = {
label: 'Hebrew',
shortLabel: 'He',
types: ['text', 'url', 'email'],
menuLabel: 'עִבְרִית',
basicLayoutKey: 'אבג',
lang: 'he',
alt: {
// incomplete
},
keys: [
[
{ value: 'ק' }, { value: 'ר' }, { value: 'א' }, { value: 'ט' },
{ value: 'ו' }, { value: 'ן' }, { value: 'ם' }, { value: 'פ' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: 'ש' }, { value: 'ד' }, { value: 'ג' }, { value: 'כ' },
{ value: 'ע' }, { value: 'י' }, { value: 'ח' }, { value: 'ל' },
{ value: 'ך' }, { value: 'ף' }
], [
{ value: 'ז' }, { value: 'ס' }, { value: 'ב' }, { value: 'ה' },
{ value: 'נ' }, { value: 'מ' }, { value: 'צ' }, { value: 'ת' },
{ value: 'ץ' }, { value: '?' }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,127 @@
Keyboards.hi = {
label: 'Hindi',
shortLabel: 'Hi',
imEngine: 'india',
menuLabel: 'हिन्दी',
secondLayout: true,
specificCssRule: true,
alternateLayoutKey: '?१२३',
basicLayoutKey: 'कखग',
types: ['text', 'url', 'email'],
width: 11,
lang: 'hi',
alt: {
'र': 'ॠऋ',
'म': 'ॐ',
'न': 'ङ',
'ल': 'ऌॡ',
'य': 'य़',
'ओ': 'ऒ',
'ए': 'ऍऎ',
'ळ': 'ऴ',
'ृ': 'ॄ'
},
upperCase: {
'ौ':'औ',
'ै':'ऐ',
'ा':'आ',
'ी':'ई',
'ू':'ऊ',
'ब':'भ',
'ह':'ः',
'ग':'घ',
'द':'ध',
'ज':'झ',
'ड':'ढ',
'ो':'ओ',
'े':'ए',
'्':'अ',
'ि':'इ',
'ु':'उ',
'प':'फ',
'र':'ऱ',
'क':'ख',
'त':'थ',
'च':'छ',
'ट':'ठ',
'ॉ':'ऑ',
'ं':'ँ',
'म':'ण',
'न':'ऩ',
'व':'ळ',
'ल':'श',
'स':'ष',
'य':'ृ',
'़':'ञ'
},
keys: [
[
{ value: 'ौ' }, { value: 'ै' }, { value: 'ा' }, { value: 'ी' },
{ value: 'ू' }, { value: 'ब' }, { value: 'ह' }, { value: 'ग' },
{ value: 'द' }, { value: 'ज' }, { value: 'ड' }
], [
{ value: 'ो' }, { value: 'े' }, { value: '्' }, { value: 'ि' },
{ value: 'ु' }, { value: 'प' }, { value: 'र' }, { value: 'क' },
{ value: 'त' }, { value: 'च' }, { value: 'ट' }
], [
{ value: '⇪', keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ॉ' }, { value: 'ं' }, { value: 'म' }, { value: 'न' },
{ value: 'व' }, { value: 'ल' }, { value: 'स' }, { value: 'य' },
{ value: '़' }, { value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'१': ['1'],
'२': ['2'],
'३': ['3'],
'४': ['4'],
'५': ['5'],
'६': ['6'],
'७': ['7'],
'८': ['8'],
'९': ['9'],
'०': ['0'],
'₹': ['$', '€', '£', '¢', '¥', '৳'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout, with top row modifed and $ localized.
keys: [
[
{ value: '१' }, { value: '२' }, { value: '३' }, { value: '४' },
{ value: '५' }, { value: '६' }, { value: '७' }, { value: '८' },
{ value: '९' }, { value: '०' }
], [
{ value: '@' }, { value: '#' },
{ value: '₹', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?'},
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,39 @@
Keyboards.hr = {
label: 'Croatian',
shortLabel: 'Hr',
menuLabel: 'Hrvatski',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'hr',
lang: 'hr',
alt: {
c: 'čćç',
d: 'đ',
s: 'šśß$',
S: 'ŠŚ$',
n: 'ñń',
l: '£',
y: '¥',
z: 'žźż',
'.': ',?!;:'
},
keys: [ // qwertz
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'z' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,83 @@
Keyboards.hu = {
label: 'Hungarian',
shortLabel: 'Hu',
menuLabel: 'Magyar',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'hu',
lang: 'hu',
alt: {
a: 'áàâäåãāæª',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'íïìîīį',
o: 'óöőòôōœøɵ',
u: 'úüűùûū',
s: '$ßśš',
S: 'ŚŠŞ',
n: 'ñń',
l: '£ł',
y: '¥ÿ',
z: 'žźż',
'.': ',?!;:()/…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'z' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'$': [ '€', '£', '¢', '¥'],
'"': ['„', '“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['.', '¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,36 @@
Keyboards.ig = {
label: 'Igbo',
shortLabel: 'Ig',
menuLabel: 'Asụsụ Igbo',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
lang: 'ig',
pages: [ { // default page
alt: {
i: 'ị',
n: 'ṅ',
o: 'ọ',
u: 'ụ',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,92 @@
Keyboards.it = {
label: 'Italian',
shortLabel: 'It',
menuLabel: 'Italiano',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'it',
lang: 'it',
alt: {
a: 'à@',
c: 'ç',
e: 'èéê€',
i: 'ì',
o: 'òó',
u: 'ù',
s: '$',
l: '£',
y: '¥',
'.': ',;:\'?!…',
"'": '"«»',
'-': '—_'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'1': ['1°', '1ª'],
'2': ['2°', '2ª'],
'3': ['3°', '3ª'],
'4': ['4°', '4ª'],
'5': ['5°', '5ª'],
'6': ['6°', '6ª'],
'7': ['7°', '7ª'],
'8': ['8°', '8ª'],
'9': ['9°', '9ª'],
'€': [ '$', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±'],
'.': '·'
},
// These are based on the en layout with $ localized.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '€', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,117 @@
Keyboards['jp-kanji'] = {
label: 'Japanese - Kanji',
shortLabel: 'Ja',
menuLabel: 'Japanese - Kanji',
imEngine: 'jskanji',
types: ['text', 'url', 'email'],
needsCandidatePanel: true,
disableAlternateLayout: true,
hidesSwitchKey: true,
lang: 'ja',
pages: [ { // JP panel
width: 10,
keys: [
[
{ value: '戻す', keyCode: -10, ratio: 2 },
{ value: 'あ', ratio: 2 },
{ value: 'か', ratio: 2 },
{ value: 'さ', ratio: 2 },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE, ratio: 2 }
], [
{ value: '←', keyCode: -11, ratio: 2 },
{ value: 'た', ratio: 2 },
{ value: 'な', ratio: 2 },
{ value: 'は', ratio: 2 },
{ value: '→', keyCode: -12, ratio: 2 }
], [
{ value: '記号', keyCode: -13, ratio: 1 },
{ value: 'カナ', keyCode: -18, ratio: 1 },
{ value: 'ま', ratio: 2 },
{ value: 'や', ratio: 2 },
{ value: 'ら', ratio: 2 },
{ value: '└─┘', keyCode: -14, ratio: 2 }
], [
{ value: '&#x1f310;', keyCode: -3},
{ value: 'あ', keyCode: KeyEvent.DOM_VK_ALT, targetPage: 1 },
{ value: '小゛゜', keyCode: -16, ratio: 2 },
{ value: 'わ', ratio: 2 },
{ value: '、', ratio: 2},
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, { // EN panel
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: '⇪',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 2
}, { value: 'a' }, { value: 's' },
{ value: 'd' }, { value: 'f' }, { value: 'g' }, { value: 'h' },
{ value: 'j' }, { value: 'k' }, { value: 'l' }
], [
{ value: '記号', keyCode: -13, ratio: 1.5 },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&#x1f310;', keyCode: -3},
{ value: 'A', keyCode: KeyEvent.DOM_VK_ALT, targetPage: 3 },
{ value: '&nbsp', keyCode: KeyEvent.DOM_VK_SPACE, ratio: 6},
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // EN-CAPS panel
keys: [
[
{ value: 'Q' }, { value: 'W' }, { value: 'E' } , { value: 'R' },
{ value: 'T' } , { value: 'Y' }, { value: 'U' } , { value: 'I' },
{ value: 'O' }, { value: 'P' }
], [
{ value: '⇪',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 1
}, { value: 'A' }, { value: 'S' },
{ value: 'D' }, { value: 'F' }, { value: 'G' }, { value: 'H' },
{ value: 'J' }, { value: 'K' }, { value: 'L' }
], [
{ value: '記号', keyCode: -13, ratio: 1.5 },
{ value: 'Z' }, { value: 'X' }, { value: 'C' }, { value: 'V' },
{ value: 'B' }, { value: 'N' }, { value: 'M' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&#x1f310;', keyCode: -3},
{ value: 'A', keyCode: KeyEvent.DOM_VK_ALT, targetPage: 3 },
{ value: '&nbsp', keyCode: KeyEvent.DOM_VK_SPACE, ratio: 6},
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // NUM panel
typeInsensitive: true,
keys: [
[
{ value: '戻す', keyCode: -10, ratio: 2 },
{ value: '1', ratio: 2 }, { value: '2', ratio: 2 },
{ value: '3', ratio: 2 },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE, ratio: 2 }
], [
{ value: '←', keyCode: -11, ratio: 2 }, { value: '4', ratio: 2 },
{ value: '5', ratio: 2 }, { value: '6', ratio: 2 },
{ value: '→', keyCode: -12, ratio: 2 }
], [
{ value: '記号', keyCode: -13, ratio: 2 },
{ value: '7', ratio: 2 }, { value: '8', ratio: 2 },
{ value: '9', ratio: 2 }, { value: '└─┘', keyCode: -14, ratio: 2 }
], [
{ value: '&#x1f310;', keyCode: -3},
{ value: '1', keyCode: KeyEvent.DOM_VK_ALT, targetPage: 0, ratio: 1 },
{ value: '*', ratio: 2 },
{ value: '0', ratio: 2 }, { value: '#', ratio: 2},
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,38 @@
Keyboards.ko = {
label: 'Korean',
shortLabel: 'Ko',
secondLayout: true,
basicLayoutKey: 'ㄱㄴㄷ',
imEngine: 'jshangul',
types: ['text', 'url', 'email'],
menuLabel: '한국어',
lang: 'ko',
upperCase: {
'ㅂ': 'ㅃ',
'ㅈ': 'ㅉ',
'ㄷ': 'ㄸ',
'ㄱ': 'ㄲ',
'ㅅ': 'ㅆ',
'ㅐ': 'ㅒ',
'ㅔ': 'ㅖ'
},
keys: [
[
{ value: 'ㅂ' } , { value: 'ㅈ' } , { value: 'ㄷ' } , { value: 'ㄱ' } ,
{ value: 'ㅅ' } , { value: 'ㅛ' } , { value: 'ㅕ' } , { value: 'ㅑ' } ,
{ value: 'ㅐ' } , { value: 'ㅔ' }
], [
{ value: 'ㅁ' } , { value: 'ㄴ' } , { value: 'ㅇ' } , { value: 'ㄹ' } ,
{ value: 'ㅎ' } , { value: 'ㅗ' } , { value: 'ㅓ' } , { value: 'ㅏ' } ,
{ value: 'ㅣ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ㅋ' } , { value: 'ㅌ' } , { value: 'ㅊ' } , { value: 'ㅍ' } ,
{ value: 'ㅠ' } , { value: 'ㅜ' } , { value: 'ㅡ' } ,
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,80 @@
Keyboards.lt = {
label: 'Lithuanian',
shortLabel: 'Lt',
menuLabel: 'Lietuvių',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'lt',
lang: 'lt',
alt: {
a: 'ą',
c: 'č',
e: 'ęė€',
i: 'į',
u: 'ųū',
s: 'š$',
l: '£',
y: '¥',
z: 'ž',
'.': ',–?!;:„“…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'-': '–',
'$': [ '€', '£', '¢', '¥'],
'"': ['„', '“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,106 @@
Keyboards.lv = {
label: 'Latvian',
shortLabel: 'Lv',
menuLabel: 'Latviešu',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'lv',
lang: 'lv',
pages: [ { // default page
alt: {
a: 'ā',
c: 'č',
e: 'ē',
g: 'ģ',
i: 'ī',
k: 'ķ',
l: 'ļ',
n: 'ņ',
s: 'š',
u: 'ū',
z: 'ž',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // symbol page 1
alt: {
'€': [ '$', '£', '¢', '¥'],
'-': '–',
'"': ['„', '“', '”'],
'\'':['‘', '’']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '-' }, { value: '/' }, { value: ':' }, { value: ';' },
{ value: '(' }, { value: ')' }, { value: '€', className: 'alternate-indicator' },
{ value: '&' }, { value: '@' }, { value: '%' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '*',
supportsSwitching: {
value: ','
}
},
{ value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // symbol page 2
alt: {
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '[' }, { value: ']' }, { value: '{' }, { value: '}' },
{ value: '#' }, { value: '%' }, { value: '^' }, { value: '+' },
{ value: '=' }, { value: '°' }
], [
{ value: '_' }, { value: '\\' }, { value: '|' }, { value: '~' },
{ value: '<' }, { value: '>' }, { value: '$' }, { value: '£' },
{ value: '¥' }, { value: '•' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{ value: '*' }, { value: ':' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,33 @@
Keyboards.mk = {
label: 'Macedonian',
shortLabel: 'Mk',
menuLabel: 'Македонски',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
basicLayoutKey: 'АБВ',
lang: 'mk',
alt: {
'е': 'ѐ',
'и': 'ѝ'
},
width: 11,
keys: [
[
{ value: 'љ' }, { value: 'њ' }, { value: 'е' }, { value: 'р' },
{ value: 'т' }, { value: 'ѕ' }, { value: 'у' }, { value: 'и' },
{ value: 'о' }, { value: 'п' }, { value: 'ш' }
], [
{ value: 'а' }, { value: 'с' }, { value: 'д' }, { value: 'ф' },
{ value: 'г' }, { value: 'х' }, { value: 'ј' }, { value: 'к' },
{ value: 'л' }, { value: 'ч' }, { value: 'ќ' }
], [
{ value: '⇪', keyCode: KeyEvent.DOM_VK_CAPS_LOCK }, { value: 'з' },
{ value: 'џ' }, { value: 'ц' }, { value: 'в' }, { value: 'б' },
{ value: 'н' }, { value: 'м' }, { value: 'ѓ' }, { value: 'ж' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,139 @@
Keyboards.my = {
label: 'Myanmar',
shortLabel: 'My',
menuLabel: '\u1019\u103C\u1014\u103A\u1019\u102C', /*မြန်မာ*/
basicLayoutKey: '\u1000\u1001\u1002', /*ကခဂ*/
alternateLayoutKey: '\u1041\u1042\u1043', /*၁၂၃*/
imEngine: 'myanmar',
types: ['text', 'url', 'email'],
lang: 'my',
pages: [ {
secondLayout: true,
specificCssRule: true,
width: 11,
textLayoutOverwrite: {
'.': '\u104A'/*၊*/
},
upperCase: {
'\u1006'/*ဆ*/: '\u1008'/*ဈ*/,
'\u1010'/*တ*/: '\u101D'/*ဝ*/,
'\u1014'/*န*/: '\u1023'/*ဣ*/,
'\u1019'/*မ*/: '\u104E'/*၎*/,
'\u1021'/*အ*/: '\u1024'/*ဤ*/,
'\u1015'/*ပ*/: '\u104C'/*၌*/,
'\u1000'/*က*/: '\u1025'/*ဥ*/,
'\u1004'/*င*/: '\u104D'/*၍*/,
'\u101E'/*သ*/: '\u100E'/*ဎ*/,
'\u1005'/*စ*/: '\u100F'/*ဏ*/,
'\u101F'/*ဟ*/: '\u1027'/*ဧ*/,
'\u1031'/*ေ*/: '\u1017'/*ဗ*/,
'\u103B'/*ျ*/: '\u103E'/*ှ*/,
'\u102D'/*ိ*/: '\u102E'/*ီ*/,
'\u103A'/*်*/: '\u1039'/*္*/,
'\u102B'/*ါ*/: '\u103D'/*ွ*/,
'\u1037'/*့*/: '\u1036'/*ံ*/,
'\u103C'/*ြ*/: '\u1032'/*ဲ*/,
'\u102F'/*ု*/: '\u1012'/*ဒ*/,
'\u1030'/*ူ*/: '\u1013'/*ဓ*/,
'\u1038'/*း*/: '\u1002'/*ဂ*/,
'\u1016'/*ဖ*/: '\u1007'/*ဇ*/,
'\u1011'/*ထ*/: '\u100C'/*ဌ*/,
'\u1001'/*ခ*/: '\u1003'/*ဃ*/,
'\u101C'/*လ*/: '\u1020'/*ဠ*/,
'\u1018'/*ဘ*/: '\u101A'/*ယ*/,
'\u100A'/*ည*/: '\u1009'/*ဉ*/,
'\u102C'/*ာ*/: '\u1026'/*ဦ*/,
'\u101B'/*ရ*/: '\u104F'/*၏*/,
'\u104A'/*၊*/: '\u104B'/*။*/
},
keys: [
[
{ value: '\u1006'/*ဆ*/ }, { value: '\u1010'/*တ*/ },
{ value: '\u1014'/*န*/ }, { value: '\u1019'/*မ*/ },
{ value: '\u1021'/*အ*/ }, { value: '\u1015'/*ပ*/ },
{ value: '\u1000'/*က*/ }, { value: '\u1004'/*င*/ },
{ value: '\u101E'/*သ*/ }, { value: '\u1005'/*စ*/ },
{ value: '\u101F'/*ဟ*/ }
], [
{ value: '\u1031'/*ေ*/ }, { value: '\u103B'/*ျ*/ },
{ value: '\u102D'/*ိ*/ }, { value: '\u103A'/*်*/ },
{ value: '\u102B'/*ါ*/ } , { value: '\u1037'/*့*/ },
{ value: '\u103C'/*ြ*/ }, { value: '\u102F'/*ု*/ },
{ value: '\u1030'/*ူ*/ }, { value: '\u1038'/*း*/ },
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: '\u1016'/*ဖ*/ }, { value: '\u1011'/*ထ*/ },
{ value: '\u1001'/*ခ*/ }, { value: '\u101C'/*လ*/ },
{ value: '\u1018'/*ဘ*/ }, { value: '\u100A'/*ည*/ },
{ value: '\u102C'/*ာ*/ }, { value: '\u101B'/*ရ*/},
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
textLayoutOverwrite: {
'.': '\u104A'/*၊*/
},
keys: [
[
{ value: '\u1041'/*၁*/ }, { value: '\u1042'/*၂*/ },
{ value: '\u1043'/*၃*/ }, { value: '\u1044'/*၄*/ },
{ value: '\u1045'/*၅*/ }, { value: '\u1046'/*၆*/ },
{ value: '\u1047'/*၇*/ }, { value: '\u1048'/*၈*/ },
{ value: '\u1049'/*၉*/ }, { value: '\u1040'/*၀*/ }
], [
{ value: '\u1050'/*ၐ*/ }, { value: '\u1051'/*ၑ*/ },
{ value: '\u1052'/*ၒ*/ }, { value: '\u1053'/*ၓ*/ },
{ value: '\u1054'/*ၔ*/ }, { value: '\u1055'/*ၕ*/ },
{ value: '\u1056'/*ၖ*/ }, { value: '\u1057'/*ၗ*/ },
{ value: '\u1058'/*ၘ*/ }, { value: '\u1059'/*ၙ*/ }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '\u100D'/*ဍ*/ }, { value: '\u100B'/*ဋ*/ },
{ value: '\u103F'/*ဿ*/, ratio: 1.5},
{ value: '\u1029'/*ဩ*/, ratio: 1.5 },
{ value: '\u102A'/*ဪ*/, ratio: 2 },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
needsCommaKey: true,
alt: {
'"': ['“', '”'],
'\'':['‘', '’'],
'$': ['€', '£', '¢', '¥'],
'/': ['\\'],
'-': ['_'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '!' }, { value: '@' }, { value: '#' }, { value: '$' },
{ value: '%' }, { value: '^' }, { value: '&' }, { value: '*' },
{ value: '(' }, { value: ')' }
], [
{ value: '~' }, { value: '|' }, { value: '/' }, { value: '\"' },
{ value: '\'' }, { value: '-' }, { value: '+' }, { value: '=' },
{ value: '{' }, { value: '}' }
], [
{ value: '\u1041\u1042\u1043'/*၁၂၃*/, ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT, targetPage: 1 },
{ value: '[' }, { value: ']' }, { value: '<' }, { value: '>' },
{ value: '?' }, { value: ':' }, {value: ';' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,47 @@
Keyboards.nb = {
label: 'Norwegian Bokmal',
shortLabel: 'Nb',
menuLabel: 'Norsk',
imEngine: 'latin',
autoCorrectLanguage: 'nb',
types: ['text', 'url', 'email', 'password'],
lang: 'nb',
alt: {
a: 'äáàâąã',
e: 'éèêëę€',
i: 'íìîï',
o: 'öóòôõ',
u: 'üúùûū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ńñň',
c: 'çćč',
d: 'ðď',
r: 'ř',
t: 'ťþ',
z: 'źžż',
l: 'ł',
v: 'w',
'æ': 'œ'
},
width: 11,
keys: [
[
{ value: 'q' },{ value: 'w' },{ value: 'e' },{ value: 'r' },
{ value: 't' },{ value: 'y' },{ value: 'u' },{ value: 'i' },
{ value: 'o' },{ value: 'p' },{ value: 'å' }
], [
{ value: 'a' },{ value: 's' },{ value: 'd' },{ value: 'f' },
{ value: 'g' },{ value: 'h' },{ value: 'j' },{ value: 'k' },
{ value: 'l' },{ value: 'ø' },{ value: 'æ' }
], [
{ value: '⇪', ratio: 2, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' },{ value: 'x' },{ value: 'c' },{ value: 'v' },
{ value: 'b' },{ value: 'n' },{ value: 'm' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,40 @@
Keyboards.nl = {
label: 'Dutch',
shortLabel: 'Nl',
menuLabel: 'Nederlands',
imEngine: 'latin',
autoCorrectLanguage: 'nl',
types: ['text', 'url', 'email', 'password'],
lang: 'nl',
alt: {
a: 'áäâàæãåā',
e: 'éëêèęėē€',
i: 'íïìîįīij',
o: 'óôöòõœøō',
u: 'úûüùū',
s: '$',
n: 'ñń',
l: '£',
y: 'ýij¥',
'.': ',?!;:'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,83 @@
Keyboards.pl = {
label: 'Polish',
shortLabel: 'Pl',
imEngine: 'latin',
types: ['text', 'url' , 'email', 'password'],
autoCorrectLanguage: 'pl',
menuLabel: 'Polski',
lang: 'pl',
alt: {
a: 'ąáàâäåãāæ',
c: 'ćčç',
e: 'ę€éèêëē',
i: 'ïíìîīį',
o: 'óöòôōœø',
u: 'üúùûū',
s: 'śš$ß',
S: 'ŚŠŞ',
n: 'ńñ',
l: 'ł£',
y: '¥',
z: 'żźž',
'.': ',?!;:…',
',': '„”'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'$': [ '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,93 @@
Keyboards['pt-BR'] = {
label: 'Portuguese',
shortLabel: 'Pt',
menuLabel: 'Português (do Brasil)',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'pt_br',
lang: 'pt-BR',
alt: {
a: 'áãàâäåæª',
c: 'çćč',
e: 'éêèęėēëɛ',
i: 'íîìïįī',
o: 'óõôòöœøōɵ',
u: 'úüùûū',
s: '$ßśš',
S: '$ŚŠ',
n: 'ñń',
l: '£ł',
y: '¥ÿ',
z: 'žźż',
r: 'R$ ',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ç' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'1': ['1º', '1ª'],
'2': ['2º', '2ª'],
'3': ['3º', '3ª'],
'4': ['4º', '4ª'],
'5': ['5º', '5ª'],
'6': ['6º', '6ª'],
'7': ['7º', '7ª'],
'8': ['8º', '8ª'],
'9': ['9º', '9ª'],
'R$': [ '€', '$', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on en layout except $ is replaced by R$.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: 'R$', compositeKey: 'R$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,91 @@
Keyboards['pt-PT'] = {
label: 'Portuguese (European)',
shortLabel: 'Pt',
menuLabel: 'Português (Europeu)',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'pt_pt',
lang: 'pt-PT',
alt: {
a: 'áàãâäåāæª',
c: 'çćč',
e: 'éèêëēę€ɛ',
i: 'íìîīïį',
o: 'õôóòöōœøɵº',
u: 'úùûüū',
s: 'ßśš$',
S: 'ŚŠ$',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ç' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'1': ['1º', '1ª', '¹'],
'2': ['2º', '2ª', '²'],
'3': ['3º', '3ª', '³'],
'4': ['4º', '4ª', '⁴'],
'5': ['5º', '5ª', '⁵'],
'6': ['6º', '6ª', '⁶'],
'7': ['7º', '7ª', '⁷'],
'8': ['8º', '8ª', '⁸'],
'9': ['9º', '9ª', '⁹'],
'0': ['º', '⁰'],
'€': ['$', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '€', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,78 @@
Keyboards.ro = {
label: 'Romanian',
shortLabel: 'Ro',
menuLabel: 'Română',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'ro',
lang: 'ro',
alt: {
a: 'ăâ',
d: 'đ',
e: '€',
i: 'î',
l: 'ł',
s: 'ș',
t: 'ț',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': 'º',
'$': [ '€', '£', '¢', '¥'],
'"': ['„', '“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,34 @@
Keyboards.ru = {
label: 'Russian',
shortLabel: 'Ru',
menuLabel: 'Pусский',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'ru',
basicLayoutKey: 'АБВ',
lang: 'ru',
alt: {
е: 'ё',
ь: 'ъ'
},
width: 11,
keys: [
[
{ value: 'й' }, { value: 'ц' }, { value: 'у' }, { value: 'к' },
{ value: 'е' }, { value: 'н' }, { value: 'г' }, { value: 'ш' },
{ value: 'щ' }, { value: 'з' }, { value: 'х' }
], [
{ value: 'ф' }, { value: 'ы' }, { value: 'в' }, { value: 'а' },
{ value: 'п' }, { value: 'р' }, { value: 'о' }, { value: 'л' },
{ value: 'д' }, { value: 'ж' }, { value: 'э' }
], [
{ value: '⇪', keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'я' }, { value: 'ч' }, { value: 'с' }, { value: 'м' },
{ value: 'и' }, { value: 'т' }, { value: 'ь' }, { value: 'б' },
{ value: 'ю' }, { value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,44 @@
Keyboards.sk = {
label: 'Slovak',
shortLabel: 'Sk',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'sk',
menuLabel: 'Slovenčina',
lang: 'sk',
alt: {
a: 'áä',
c: 'č',
d: 'ď',
e: 'é',
i: 'í',
l: 'ľĺ',
n: 'ň',
o: 'óô',
r: 'ŕ',
s: 'š',
t: 'ť',
u: 'ú',
y: 'ý',
z: 'ž'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,83 @@
Keyboards.sq = {
label: 'Albanian',
shortLabel: 'Sq',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'sq',
menuLabel: 'Shqip',
width: 11,
lang: 'sq',
alt: {
a: 'áàâäåãāæ',
c: 'ćč',
e: '€éèêēęɛ',
i: 'ïíìîīį',
o: 'öóòôōœøɵ',
u: 'üúùûū',
s: 'ßśš$',
S: '$ŚŠ',
n: 'ñń',
l: 'ł£',
y: 'ÿ¥',
z: 'žźż',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'z' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }, { value: 'ç' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'ë' }
], [
{ value: '⇪', ratio: 2, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'y' }, { value: 'x' }, { value: 'c' },
{ value: 'v' }, { value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'€': [ '$', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout with $ localized.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '€', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,33 @@
Keyboards['sr-Cyrl'] = {
label: 'Serbian (Cyrillic)',
shortLabel: 'Sr',
menuLabel: 'Српски',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'sr-Cyrl',
basicLayoutKey: 'АБВ',
lang: 'sr-Cyrl',
alt: {
// incomplete
},
width: 11,
keys: [
[
{ value: 'љ' }, { value: 'њ' }, { value: 'е' }, { value: 'р' },
{ value: 'т' }, { value: 'з' }, { value: 'у' }, { value: 'и' },
{ value: 'о' }, { value: 'п' }, { value: 'ш' }
], [
{ value: 'а' }, { value: 'с' }, { value: 'д' }, { value: 'ф' },
{ value: 'г' }, { value: 'х' }, { value: 'ј' }, { value: 'к' },
{ value: 'л' }, { value: 'ч' }, { value: 'ћ' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'џ' }, { value: 'ц' }, { value: 'в' }, { value: 'б' },
{ value: 'н' }, { value: 'м' }, { value: 'ђ' }, { value: 'ж' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,75 @@
Keyboards['sr-Latn'] = {
label: 'Serbian (Latin)',
shortLabel: 'Sr',
menuLabel: 'Srpski',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'sr-Latn',
lang: 'sr-Latn',
alt: {
c: 'čć',
d: 'đ',
s: 'š',
z: 'ž',
'.': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: '"' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
pages: [undefined, {
alt: {
'0': ['º'],
'$': [ '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’'],
'?': ['¿'],
'!': ['¡'],
'+': ['-', '×', '÷', '±']
},
// These are based on the en layout.
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '$', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,48 @@
Keyboards.sv = {
label: 'Swedish',
shortLabel: 'Sv',
menuLabel: 'Svenska',
imEngine: 'latin',
autoCorrectLanguage: 'sv',
types: ['text', 'url', 'email', 'password'],
lang: 'sv',
alt: {
a: 'äáàâąã',
e: 'éèêëę€',
i: 'íìîï',
o: 'öóòôõ',
u: 'üúùûū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ńñň',
c: 'çćč',
d: 'ðď',
r: 'ř',
t: 'ťþ',
z: 'źžż',
l: 'ł',
v: 'w',
'ä': 'œæ',
'ö': 'ø'
},
width: 11,
keys: [
[
{ value: 'q' },{ value: 'w' },{ value: 'e' },{ value: 'r' },
{ value: 't' },{ value: 'y' },{ value: 'u' },{ value: 'i' },
{ value: 'o' },{ value: 'p' },{ value: 'å' }
], [
{ value: 'a' },{ value: 's' },{ value: 'd' },{ value: 'f' },
{ value: 'g' },{ value: 'h' },{ value: 'j' },{ value: 'k' },
{ value: 'l' },{ value: 'ö' },{ value: 'ä' }
], [
{ value: '⇪', ratio: 2, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' },{ value: 'x' },{ value: 'c' },{ value: 'v' },
{ value: 'b' },{ value: 'n' },{ value: 'm' },
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,64 @@
Keyboards.ta = {
label: 'Tamil',
shortLabel: 'Ta',
imEngine: 'india',
menuLabel: 'தமிழ்',
secondLayout: true,
specificCssRule: true,
basicLayoutKey: 'அஆஇ',
types: ['text', 'url', 'email'],
lang: 'ta',
upperCase: {
'ஒ':'ொ',
'ஔ':'ௌ',
'ஐ':'ை',
'ஶ':'ா',
'ஆ':'ீ',
'ஈ':'ூ',
'ப':'ஊ',
'ஹ':'ங',
'ஜ':'ஂ',
'ஞ':'ௗ',
'ஓ':'ோ',
'ஏ':'ே',
'அ':'்',
'இ':'ி',
'உ':'ு',
'ர':'ற',
'க':'&',
'த':'ஃ',
'ச':'?',
'ட':'!',
'எ':'ெ',
'ம':'ண',
'ந':'ன',
'வ':'ழ',
'ல':'ள',
'ஸ':'ஷ',
'ய':'₹'
},
alt: {
'₹': '$ € £ ¥ ৳'
},
keys: [
[
{ value: 'ஒ' }, { value: 'ஔ' }, { value: 'ஐ' }, { value: 'ஶ' },
{ value: 'ஆ' }, { value: 'ஈ' }, { value: 'ப' }, { value: 'ஹ' },
{ value: 'ஜ' }, { value: 'ஞ' }
], [
{ value: 'ஓ' }, { value: 'ஏ' }, { value: 'அ' }, { value: 'இ' },
{ value: 'உ' }, { value: 'ர' }, { value: 'க' }, { value: 'த' },
{ value: 'ச' }, { value: 'ட' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'எ' }, { value: 'ம' }, { value: 'ந' }, { value: 'வ' },
{ value: 'ல' }, { value: 'ஸ' }, { value: 'ய' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,109 @@
Keyboards.te = {
label: 'Telugu',
shortLabel: 'Te',
imEngine: 'india',
menuLabel: 'తెలుగు',
secondLayout: true,
specificCssRule: true,
alternateLayoutKey: '?౧౨౩',
basicLayoutKey: 'అఆఇ',
types: ['text', 'url', 'email'],
width: 11,
lang: 'te',
upperCase: {
'ౌ':'ఔ',
'ై':'ణ',
'ా':'ఆ',
'ీ':'ఈ',
'ూ':'ీఊ',
'బ':'భ',
'హ':'ఙ',
'గ':'ఘ',
'ద':'ధ',
'జ':'ఝ',
'డ':'ఢ',
'ో':'ఓ',
'ే':'ఏ',
'్':'అ',
'ి':'ఇ',
'ు':'ఉ',
'ప':'ఫ',
'ర':'ఱ',
'క':'ఖ',
'త':'థ',
'చ':'ఛ',
'ట':'ఠ',
'ృ':'ఋ',
'ं':'',
'మ':'ణ',
'న':'న',
'వ':'ళ',
'ల':'శ',
'స':'ష',
'య':'',
'़':''
},
keys: [
[
{ value: 'ౌ' }, { value: 'ై' }, { value: 'ా' }, { value: 'ీ' },
{ value: 'ూ' }, { value: 'బ' }, { value: 'హ' }, { value: 'గ' },
{ value: 'ద' }, { value: 'జ' }, { value: 'డ' }
], [
{ value: 'ో' }, { value: 'ే' }, { value: '్' }, { value: 'ి' },
{ value: 'ు' }, { value: 'ప' }, { value: 'ర' }, { value: 'క' },
{ value: 'త' }, { value: 'చ' }, { value: 'ట' }
], [
{ value: '⇪', keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ృ' }, { value: 'ं' }, { value: 'మ' }, { value: 'న' },
{ value: 'వ' }, { value: 'ల' }, { value: 'స' }, { value: 'య' },
{ value: '़' }, { value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
alternateLayout: {
alt: {
'౧': '1',
'౨': '2',
'౩': '3',
'౪': '4',
'౫': '5',
'౬': '6',
'౭': '7',
'౮': '8',
'౯': '9',
'౦': '0',
'?': '¿',
'!': '¡',
'₹': '$ € £ ¥ ৳'
},
keys: [
[
{ value: '१' }, { value: '२' }, { value: '३' }, { value: '४' },
{ value: '५' }, { value: '६' }, { value: '७' }, { value: '८' },
{ value: '९' }, { value: '०' }
], [
{ value : '@' , hidden: ['email'] }, { value : '#' },
{ value: '₹', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5, keyCode: KeyEvent.DOM_VK_ALT },
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '?' }, { value: '!' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}
};

View file

@ -0,0 +1,85 @@
Keyboards.th = {
label: 'Thai',
shortLabel: 'Th',
menuLabel: 'ไทย', /*ไทย*/
basicLayoutKey: 'กขค', /*กขค*/
types: ['text', 'url', 'email'],
lang: 'th',
pages: [ { // default page
width: 11,
secondLayout: true,
alt: {
'ช': ['๏', '๚', '๛']
},
keys: [
[
{ value: 'ๅ' }, { value: 'ฃ' }, { value: 'ภ' }, { value: 'ถ' },
{ value: 'ุ' }, { value: 'ึ' }, { value: 'ค' }, { value: 'ต' },
{ value: 'จ' }, { value: 'ข' },
{ value: 'ช', className: 'alternate-indicator' }
], [
{ value: 'ไ' }, { value: 'ำ' }, { value: 'พ' }, { value: 'ะ' },
{ value: 'ั' }, { value: 'ี' }, { value: 'ร' }, { value: 'น' },
{ value: 'ย' }, { value: 'บ' }, { value: 'ล' }
], [
{ value: 'ฟ' }, { value: 'ห' }, { value: 'ก' }, { value: 'ด' },
{ value: 'เ' }, { value: '้' }, { value: '่' }, { value: 'า' },
{ value: 'ส' }, { value: 'ว' }, { value: 'ง' }
], [
{ value: '⇪', keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ป' }, { value: 'แ' }, { value: 'อ' }, { value: 'ิ' },
{ value: 'ื' }, { value: 'ท' }, { value: 'ม' },
{ value: 'ใ' }, { value: 'ฝ' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
upperCase: {
'ๅ': '๑',
'ฃ': '๒',
'ภ': '๓',
'ถ': '๔',
'ุ': '๕',
'ึ': 'ู',
'ค': '๖',
'ต': '๗',
'จ': '๘',
'ข': '๙',
'ช': '๐',
'ไ': 'ๆ',
'ำ': 'ฎ',
'พ': 'ฑ',
'ะ': 'ธ',
'ั': 'ํ',
'ี': '๊',
'ร': 'ณ',
'น': 'ฯ',
'ย': 'ญ',
'บ': 'ฐ',
'ล': 'ฅ',
'ฟ': 'ฤ',
'ห': 'ฆ',
'ก': 'ฏ',
'ด': 'โ',
'เ': 'ฌ',
'้': '็',
'่': '๋',
'า': 'ษ',
'ส': 'ศ',
'ว': 'ซ',
'ง': ',',
'ป': '฿',
'แ': 'ผ',
'อ': 'ฉ',
'ิ': 'ฮ',
'ื': 'ฺ',
'ท': '์',
'ม': 'ฒ',
'ใ': 'ฬ',
'ฝ': 'ฦ'
}
}
]
};

View file

@ -0,0 +1,44 @@
Keyboards['tr-F'] = {
label: 'Turkish F',
shortLabel: 'Tr',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'tr',
menuLabel: 'Türkçe F',
lang: 'tr',
upperCase: {
'i': 'İ'
},
alt: {
d: '¥',
i: 'ß',
f: '@',
j: '«',
ö: '»',
p: '£',
s: 'μ',
v: '¢',
u: 'æ',
'.': ',?!;:'
},
width: 12,
keys: [
[
{ value: 'f' }, { value: 'g' }, { value: 'ğ' }, { value: 'ı' },
{ value: 'o' }, { value: 'd' }, { value: 'r' }, { value: 'n' },
{ value: 'h' }, { value: 'p' }, { value: 'q' }, { value: 'w' }
], [
{ value: 'u' }, { value: 'i' }, { value: 'e' }, { value: 'a' },
{ value: 'ü' }, { value: 't' }, { value: 'k' }, { value: 'm' },
{ value: 'l' }, { value: 'y' }, { value: 'ş' }, { value: 'x' }
], [
{ value: '⇪', ratio: 2, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'j' }, { value: 'ö' }, { value: 'v' }, { value: 'c' },
{ value: 'ç' }, { value: 'z' }, { value: 's' }, { value: 'b'},
{ value: '⌫', ratio: 2, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 10.0, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2.0, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,42 @@
Keyboards['tr-Q'] = {
label: 'Turkish Q',
shortLabel: 'Tr',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
autoCorrectLanguage: 'tr',
menuLabel: 'Türkçe Q',
lang: 'tr',
upperCase: {
'i': 'İ'
},
alt: {
a: 'â',
c: 'çćč',
g: 'ğ',
i: 'īįıìíîï',
'İ': 'ĪĮIÌÍÎÏ',
s: 'śšşß',
S: 'ŚŠŞ',
o: 'òóôõöōœø',
u: 'ùúûüū'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: "'", keyCode: 39 }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,72 @@
Keyboards.uk = {
label: 'Ukrainian',
shortLabel: 'Uk',
menuLabel: 'Українська',
imEngine: 'latin',
types: ['text', 'url', 'email'],
basicLayoutKey: 'АБВ',
lang: 'uk',
pages: [ { //default page
alt: {
а: '@',
г: 'ґ'
},
width: 12,
keys: [
[
{ value: 'й' }, { value: 'ц' }, { value: 'у' }, { value: 'к' },
{ value: 'е' }, { value: 'н' }, { value: 'г' }, { value: 'ш' },
{ value: 'щ' }, { value: 'з' }, { value: 'х' }, { value: 'ї' }
], [
{ value: 'ф' }, { value: 'і' }, { value: 'в' }, { value: 'а' },
{ value: 'п' }, { value: 'р' }, { value: 'о' }, { value: 'л' },
{ value: 'д' }, { value: 'ж' }, { value: 'є' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'я' }, { value: 'ч' }, { value: 'с' }, { value: 'м' },
{ value: 'и' }, { value: 'т' }, { value: 'ь' }, { value: 'б' },
{ value: 'ю' }, { value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 10, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, { // symbol page 1
alt: {
'0': ['º'],
'₴': ['$', '€', '£', '¢', '¥'],
'"': ['“', '”'],
'\'':['‘', '’']
},
// These are based on the en layout
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' }, { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' }, { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' },
{ value: '₴', className: 'alternate-indicator' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt', ratio: 1.5,
keyCode: KeyboardEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '+',
supportsSwitching: {
value: ','
}
}, { value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}
]
};

View file

@ -0,0 +1,41 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Keyboards['vi-Qwerty'] = {
label: 'Vietnamese',
shortLabel: 'Vi',
menuLabel: 'Tiếng Việt (QWERTY)',
imEngine: 'vietnamese',
needsCandidatePanel: true,
width: 10,
types: ['text', 'url', 'email'],
lang: 'vi',
alt: {
'a': 'ăâ',
'd': 'đ',
'e': 'ê',
'o': 'ôơ',
'u': 'ư',
'.': ',?!-;:'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' }, { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,27 @@
Keyboards['vi-Telex'] = {
label: 'Vietnamese (Telex)',
shortLabel: 'Vi',
menuLabel: 'Tiếng Việt (Telex)',
imEngine: 'jstelex',
types: ['text', 'url', 'email'],
lang: 'vi',
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'z' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,41 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// This is a traditional Vietnamese typewriter layout.
Keyboards['vi-Typewriter'] = {
label: 'Vietnamese',
shortLabel: 'Vi',
menuLabel: 'Tiếng Việt',
imEngine: 'vietnamese',
needsCandidatePanel: true,
width: 10,
types: ['text', 'url', 'email'],
lang: 'vi',
alt: {
'đ': 'z',
'ư': 'f',
'ơ': 'j',
'ă': 'w',
'.': ',?!-;:'
},
keys: [
[
{ value: 'a' }, { value: 'đ' }, { value: 'e' }, { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'q' }, { value: 's' }, { value: 'd' }, { value: 'ư' },
{ value: 'g' } , { value: 'h' }, { value: 'ơ' }, { value: 'k' },
{ value: 'l' }, { value: 'm' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'ă' }, { value: 'x' }, { value: 'c' }, { value: 'v' },
{ value: 'b' }, { value: 'n' }, { value: '^', keyCode: 94 },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
};

View file

@ -0,0 +1,44 @@
Keyboards.wo = {
label: 'Wolof',
shortLabel: 'Wo',
menuLabel: 'Wolof',
imEngine: 'latin',
types: ['text', 'url', 'email', 'password'],
lang: 'wo',
pages: [ {
alt: {
a: 'àâæáãäåā',
c: 'çćč',
e: 'éèêë€ē',
i: 'îïìíī',
o: 'óôœòõöōø',
u: 'ùûüúū',
s: 'śšşß',
S: 'ŚŠŞ',
n: 'ñńň',
é: 'z',
ë: 'h',
ŋ: 'v',
'.': ',?!-;:',
},
keys: [
[
{ value: 'a' }, { value: 'é' }, { value: 'e' }, { value: 'r' },
{ value: 't' }, { value: 'y' }, { value: 'u' }, { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'q' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' }, { value: 'ë' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }, { value: 'm' }
], [
{ value: '⇪', ratio: 1.5, keyCode: KeyEvent.DOM_VK_CAPS_LOCK },
{ value: 'w' }, { value: 'x' }, { value: 'c' }, { value: 'ŋ' },
{ value: 'b' }, { value: 'n' }, { value: '\''},
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,178 @@
Keyboards['zh-Hans-Handwriting'] = {
label: 'Chinese - Simplified - Handwriting',
shortLabel: '写',
menuLabel: '手写简体',
needsCandidatePanel: true,
needsCommaKey: true,
imEngine: 'handwriting',
types: ['text'],
lang: 'zh-Hans',
pages: [ { // basic page for handwriting pad
needsCommaKey: true,
width: 10,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
alt: {
'.': ',?!;:',
'。': ',?!;:…'
},
handwritingLanguage: 'zh-Hans',
handwritingPadOptions: {
ratio: 8.5,
rowspan: 3
},
keys: [
[
{ value: '!', ratio: 1.5 }
], [
{ value: '?', ratio: 1.5 }
], [
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE, ratio: 1.5 }
], [
{ value: '', keyCode: KeyEvent.DOM_VK_SPACE, ratio: 8 },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, { // Chinese symbol 1
needsCommaKey: true,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '?' }, { value: '!' }, { value: ':' }, { value: ';' },
{ value: '……', compositeKey: '……', className: 'pinyin-ch-ellipsis' },
{ value: '~' }, { value: '(' }, { value: ')' },
{ value: '“' }, { value: '”' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half">半</div> \
<div class="zh-encode-switcher \
zh-encode-switcher-selected">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 3
},
{ value: '、' }, { value: '@' }, { value: '&' }, { value: '^' },
{ value: '#' }, { value: '%' }, { value: '/' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // Chinese symbol 2
needsCommaKey: true,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '+' }, { value: '-' }, { value: '_' }, { value: '=' },
{ value: '$' }, { value: '¥' }, { value: '《' }, { value: '》' },
{ value: '{' }, { value: '}' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half">半</div> \
<div class="zh-encode-switcher \
zh-encode-switcher-selected">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 4
},
{ value: '【' }, { value: '】' }, { value: '「' }, { value: '」' },
{ value: '*' }, { value: '·' }, { value: '|' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, {
needsCommaKey: true,
width: 10,
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '?' }, { value: '!' }, { value: ':' }, { value: ';' },
{ value: '…' }, { value: '~' }, { value: '(' }, { value: ')' },
{ value: '\'' }, { value: '"' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 4
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half \
zh-encode-switcher-selected">半</div> \
<div class="zh-encode-switcher">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 1
},
{ value: '\\' }, { value: '@' }, { value: '&' }, { value: '^' },
{ value: '#' }, { value: '%' }, { value: '/' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
needsCommaKey: true,
width: 10,
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '+' }, { value: '-' }, { value: '_' }, { value: '=' },
{ value: '$' }, { value: '¥' }, { value: '<' }, { value: '>' },
{ value: '{' }, { value: '}' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 3
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half \
zh-encode-switcher-selected">半</div> \
<div class="zh-encode-switcher">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 2
},
{ value: '[' }, { value: ']' }, { value: '「' }, { value: '」' },
{ value: '*' }, { value: '`' }, { value: '|' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,181 @@
Keyboards['zh-Hans-Pinyin'] = {
label: 'Chinese - Simplified - Pinyin',
shortLabel: '拼',
menuLabel: '拼音',
needsCandidatePanel: true,
imEngine: 'jspinyin',
types: ['text', 'url', 'email'],
lang: 'zh-Hans',
pages: [ { // basic page for pinyin alphabets
needsCommaKey: true,
width: 10,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
alt: {
'.': ',?!;:',
'。': ',?!;:…'
},
keys: [
[
{ value: 'q' }, { value: 'w' }, { value: 'e' } , { value: 'r' },
{ value: 't' } , { value: 'y' }, { value: 'u' } , { value: 'i' },
{ value: 'o' }, { value: 'p' }
], [
{ value: 'a' }, { value: 's' }, { value: 'd' }, { value: 'f' },
{ value: 'g' } , { value: 'h' }, { value: 'j' }, { value: 'k' },
{ value: 'l' }
], [
/*use 'A' keycode for this special symbol, so that it won't conflict with "'" in symbol page */
{ value: "'", ratio: 1.5, keyCode: 65 },
{ value: 'z' },
{ value: 'x' }, { value: 'c' }, { value: 'v' }, { value: 'b' },
{ value: 'n' }, { value: 'm' },
{ value: '⌫', ratio: 1.5, keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', keyCode: KeyEvent.DOM_VK_SPACE, ratio: 8 },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // Chinese symbol 1
needsCommaKey: true,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '?' }, { value: '!' }, { value: ':' }, { value: ';' },
{ value: '……', compositeKey: '……', className: 'pinyin-ch-ellipsis' },
{ value: '~' }, { value: '(' }, { value: ')' },
{ value: '“' }, { value: '”' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half">半</div> \
<div class="zh-encode-switcher \
zh-encode-switcher-selected">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 3
},
{ value: '、' }, { value: '@' }, { value: '&' }, { value: '^' },
{ value: '#' }, { value: '%' }, { value: '/' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // Chinese symbol 2
needsCommaKey: true,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '+' }, { value: '-' }, { value: '_' }, { value: '=' },
{ value: '$' }, { value: '¥' }, { value: '《' }, { value: '》' },
{ value: '{' }, { value: '}' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half">半</div> \
<div class="zh-encode-switcher \
zh-encode-switcher-selected">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 4
},
{ value: '【' }, { value: '】' }, { value: '「' }, { value: '」' },
{ value: '*' }, { value: '·' }, { value: '|' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
],
}, {
needsCommaKey: true,
width: 10,
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '?' }, { value: '!' }, { value: ':' }, { value: ';' },
{ value: '…' }, { value: '~' }, { value: '(' }, { value: ')' },
{ value: '\'' }, { value: '"' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 4
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half \
zh-encode-switcher-selected">半</div> \
<div class="zh-encode-switcher">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 1
},
{ value: '\\' }, { value: '@' }, { value: '&' }, { value: '^' },
{ value: '#' }, { value: '%' }, { value: '/' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
needsCommaKey: true,
width: 10,
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '+' }, { value: '-' }, { value: '_' }, { value: '=' },
{ value: '$' }, { value: '¥' }, { value: '<' }, { value: '>' },
{ value: '{' }, { value: '}' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 3
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half \
zh-encode-switcher-selected">半</div> \
<div class="zh-encode-switcher">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 2
},
{ value: '[' }, { value: ']' }, { value: '「' }, { value: '」' },
{ value: '*' }, { value: '`' }, { value: '|' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};

View file

@ -0,0 +1,192 @@
Keyboards['zh-Hant-Zhuyin'] = {
label: 'Chinese - Traditional - Zhuyin',
shortLabel: '注',
menuLabel: '注音',
basicLayoutKey: 'ㄅㄆㄇ',
needsCandidatePanel: true,
imEngine: 'jszhuyin',
types: ['text', 'url', 'email'],
lang: 'zh-Hant',
pages: [ { // basic Zhuyin symbols
needsCommaKey: true,
width: 11,
specificCssRule: true,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
alt: {
'.': ',?!;:',
'。': ',?!;:…'
},
keys: [
[
{ value: 'ㄅ'},{ value: 'ㄉ'},{ value: 'ˇ'},{ value: 'ˋ'},
{ value: 'ㄓ'},{ value: 'ˊ'},{ value: '˙'},{ value: 'ㄚ'},
{ value: 'ㄞ'},{ value: 'ㄢ'}, { value: 'ㄦ'}
], [
{ value: 'ㄆ'},{ value: 'ㄊ'},{ value: 'ㄍ'},{ value: 'ㄐ'},
{ value: 'ㄔ'},{ value: 'ㄗ'},{ value: 'ㄧ'},{ value: 'ㄛ'},
{ value: 'ㄟ'},{ value: 'ㄣ'}, { value: '?'}
], [
{ value: 'ㄇ'},{ value: 'ㄋ'},{ value: 'ㄎ'},{ value: 'ㄑ'},
{ value: 'ㄕ'},{ value: 'ㄘ'},{ value: 'ㄨ'},{ value: 'ㄜ'},
{ value: 'ㄠ'},{ value: 'ㄤ'}, { value: '!'}
], [
{ value: 'ㄈ'},{ value: 'ㄌ'},{ value: 'ㄏ'},{ value: 'ㄒ'},
{ value: 'ㄖ'},{ value: 'ㄙ'},{ value: 'ㄩ'},{ value: 'ㄝ'},
{ value: 'ㄡ'},{ value: 'ㄥ'},
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 9, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // Chinese symbol 1
width: 10,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' }, { value: '$' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 2
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half">半</div> \
<div class="zh-encode-switcher \
zh-encode-switcher-selected">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 3
},
{ value: '+',
supportsSwitching: {
value: ','
}
},
{ value: ':' }, { value: ';' }, { value: '「' },
{ value: '」' }, { value: '!' }, { value: '?' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, { // Chinese symbol 2
width: 10,
textLayoutOverwrite: {
',': ',',
'.': '。'
},
keys: [
[
{ value: '€' }, { value: '£' } , { value: '¢' }, { value: '¥' },
{ value: '%' }, { value: '©' } , { value: '®' }, { value: '·' },
{ value: '|' }, { value: '\' }
], [
{ value: '~' }, { value: '℃' }, { value: '℉' }, { value: '°' },
{ value: '<' }, { value: '>' }, { value: '[' }, { value: ']' },
{ value: '{' }, { value: '}' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 1
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half">半</div> \
<div class="zh-encode-switcher \
zh-encode-switcher-selected">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 4
},
{ value: '+' }, { value: '=' }, { value: '`' }, { value: '^' },
{ value: '§' }, { value: '《' }, { value: '》' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
width: 10,
keys: [
[
{ value: '1' }, { value: '2' }, { value: '3' } , { value: '4' },
{ value: '5' }, { value: '6' }, { value: '7' } , { value: '8' },
{ value: '9' }, { value: '0' }
], [
{ value: '@' }, { value: '#' }, { value: '$' }, { value: '&' },
{ value: '*' }, { value: '-' }, { value: '_' }, { value: '/' },
{ value: '(' }, { value: ')' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 4
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half \
zh-encode-switcher-selected">半</div> \
<div class="zh-encode-switcher">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 1
},
{ value: '+',
supportsSwitching: {
value: ','
}
},
{ value: ':' }, { value: ';' }, { value: '"' },
{ value: '\'' }, { value: '!' }, { value: '?' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
}, {
width: 10,
keys: [
[
{ value: '€' }, { value: '£' } , { value: '¢' }, { value: '¥' },
{ value: '%' }, { value: '©' } , { value: '®' }, { value: '·' },
{ value: '|' }, { value: '\\' }
], [
{ value: '~' }, { value: '℃' }, { value: '℉' }, { value: '°' },
{ value: '<' }, { value: '>' }, { value: '[' }, { value: ']' },
{ value: '{' }, { value: '}' }
], [
{ value: 'Alt',
keyCode: KeyEvent.DOM_VK_ALT,
className: 'page-switch-key',
targetPage: 3
},
{ value: '<div class="zh-encode-switcher \
zh-encode-switcher-half \
zh-encode-switcher-selected">半</div> \
<div class="zh-encode-switcher">全</div>',
keyCode: KeyEvent.DOM_VK_ALT,
targetPage: 2
},
{ value: '+' }, { value: '=' }, { value: '`' }, { value: '^' },
{ value: '§' }, { value: '«' }, { value: '»' },
{ value: '⌫', keyCode: KeyEvent.DOM_VK_BACK_SPACE }
], [
{ value: '&nbsp', ratio: 8, keyCode: KeyboardEvent.DOM_VK_SPACE },
{ value: '↵', ratio: 2, keyCode: KeyEvent.DOM_VK_RETURN }
]
]
} ]
};