Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: third_party/google_input_tools/src/chrome/os/inputview/config/util.js

Issue 674153004: Add third_party/google-input-tools: Take 2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@google_input_tools
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The ChromeOS IME Authors. All Rights Reserved.
2 // limitations under the License.
3 // See the License for the specific language governing permissions and
4 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5 // distributed under the License is distributed on an "AS-IS" BASIS,
6 // Unless required by applicable law or agreed to in writing, software
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // You may obtain a copy of the License at
11 // you may not use this file except in compliance with the License.
12 // Licensed under the Apache License, Version 2.0 (the "License");
13 //
14 goog.provide('i18n.input.chrome.inputview.content.util');
15
16 goog.require('goog.array');
17 goog.require('i18n.input.chrome.inputview.Css');
18 goog.require('i18n.input.chrome.inputview.Direction');
19 goog.require('i18n.input.chrome.inputview.SpecNodeName');
20 goog.require('i18n.input.chrome.inputview.StateType');
21 goog.require('i18n.input.chrome.inputview.elements.ElementType');
22
23 goog.scope(function() {
24 var ElementType = i18n.input.chrome.inputview.elements.ElementType;
25 var SpecNodeName = i18n.input.chrome.inputview.SpecNodeName;
26
27
28 /**
29 * The prefix of the key id.
30 *
31 * @type {string}
32 * @private
33 */
34 i18n.input.chrome.inputview.content.util.keyIdPrefix_ = 'sk-';
35
36
37 /**
38 * Creates the hide keyboard key.
39 *
40 * @return {!Object} The hide keyboard key.
41 */
42 i18n.input.chrome.inputview.content.util.createHideKeyboardKey = function() {
43 var spec = {};
44 spec[SpecNodeName.ICON_CSS_CLASS] =
45 i18n.input.chrome.inputview.Css.HIDE_KEYBOARD_ICON;
46 spec[SpecNodeName.TYPE] = ElementType.HIDE_KEYBOARD_KEY;
47 spec[SpecNodeName.ID] = 'HideKeyboard';
48 return i18n.input.chrome.inputview.content.util.createKey(spec);
49 };
50
51
52 /**
53 * Creates a shift key.
54 *
55 * @param {boolean} isLeft True if this is the left shift key.
56 * @param {boolean=} opt_supportSticky True if support sticky shift key.
57 * @return {!Object} The shift key.
58 */
59 i18n.input.chrome.inputview.content.util.createShiftKey = function(isLeft,
60 opt_supportSticky) {
61 var spec = {};
62 spec[SpecNodeName.TO_STATE] = i18n.input.chrome.inputview.StateType.SHIFT;
63 spec[SpecNodeName.ICON_CSS_CLASS] =
64 i18n.input.chrome.inputview.Css.SHIFT_ICON;
65 spec[SpecNodeName.TYPE] = ElementType.MODIFIER_KEY;
66 spec[SpecNodeName.ID] = isLeft ? 'ShiftLeft' : 'ShiftRight';
67 spec[SpecNodeName.SUPPORT_STICKY] = !!opt_supportSticky;
68 return i18n.input.chrome.inputview.content.util.createKey(spec);
69 };
70
71
72 /**
73 * Creates a globe key.
74 *
75 * @return {!Object} The globe key.
76 */
77 i18n.input.chrome.inputview.content.util.createGlobeKey = function() {
78 var spec = {};
79 spec[SpecNodeName.ICON_CSS_CLASS] =
80 i18n.input.chrome.inputview.Css.GLOBE_ICON;
81 spec[SpecNodeName.TYPE] = ElementType.GLOBE_KEY;
82 spec[SpecNodeName.ID] = 'Globe';
83 return i18n.input.chrome.inputview.content.util.createKey(spec);
84 };
85
86
87 /**
88 * Creates a menu key.
89 *
90 * @param {string=} opt_toKeyset The compact keyboard id.
91 * @return {!Object} The menu key.
92 */
93 i18n.input.chrome.inputview.content.util.createMenuKey = function(
94 opt_toKeyset) {
95 var spec = {};
96 spec[SpecNodeName.ICON_CSS_CLASS] =
97 i18n.input.chrome.inputview.Css.MENU_ICON;
98 spec[SpecNodeName.TO_KEYSET] = opt_toKeyset;
99 spec[SpecNodeName.TYPE] = ElementType.MENU_KEY;
100 spec[SpecNodeName.ID] = 'Menu';
101 return i18n.input.chrome.inputview.content.util.createKey(spec);
102 };
103
104
105 /**
106 * Create the Emoji switch key.
107 *
108 * @param {string} id The emoji key id.
109 * @param {number} toKeyset The keyset that the tabbar represents.
110 * @param {i18n.input.chrome.inputview.Css}
111 * iconCssClass The icon css for the tabbar.
112 * @return {!Object} The emoji key.
113 */
114 i18n.input.chrome.inputview.content.util.createTabBarKey =
115 function(id, toKeyset, iconCssClass) {
116 var spec = {};
117 spec[SpecNodeName.ICON_CSS_CLASS] = iconCssClass;
118 spec[SpecNodeName.TYPE] = ElementType.TAB_BAR_KEY;
119 spec[SpecNodeName.ID] = id;
120 spec[SpecNodeName.TO_KEYSET] = toKeyset;
121 return i18n.input.chrome.inputview.content.util.createKey(spec);
122 };
123
124
125 /**
126 * Create the indicator
127 *
128 * @param {string} id The indicator id.
129 * @return {!Object} The indicator.
130 */
131 i18n.input.chrome.inputview.content.util.createPageIndicator =
132 function(id) {
133 var spec = {};
134 spec[SpecNodeName.TYPE] = ElementType.PAGE_INDICATOR;
135 spec[SpecNodeName.ID] = id;
136 return i18n.input.chrome.inputview.content.util.createKey(spec);
137 };
138
139
140 /**
141 * Create the back key for emoji
142 *
143 * @return {!Object} The back key.
144 */
145 i18n.input.chrome.inputview.content.util.createBackKey = function() {
146 var spec = {};
147 spec[SpecNodeName.ICON_CSS_CLASS] =
148 i18n.input.chrome.inputview.Css.EMOJI_BACK;
149 spec[SpecNodeName.TYPE] = ElementType.BACK_BUTTON;
150 spec[SpecNodeName.ID] = 'backkey';
151 return i18n.input.chrome.inputview.content.util.createKey(spec);
152 };
153
154
155 /**
156 * Creates a ctrl key.
157 *
158 * @return {!Object} The ctrl key.
159 */
160 i18n.input.chrome.inputview.content.util.createCtrlKey = function() {
161 var spec = {};
162 spec[SpecNodeName.TO_STATE] = i18n.input.chrome.inputview.StateType.CTRL;
163 spec[SpecNodeName.NAME] = 'ctrl';
164 spec[SpecNodeName.TYPE] = ElementType.MODIFIER_KEY;
165 spec[SpecNodeName.ID] = 'ControlLeft';
166 return i18n.input.chrome.inputview.content.util.createKey(spec);
167 };
168
169
170 /**
171 * Creates a alt key.
172 *
173 * @return {!Object} The alt key.
174 */
175 i18n.input.chrome.inputview.content.util.createAltKey = function() {
176 var spec = {};
177 spec[SpecNodeName.TO_STATE] = i18n.input.chrome.inputview.StateType.ALT;
178 spec[SpecNodeName.NAME] = 'alt';
179 spec[SpecNodeName.TYPE] = ElementType.MODIFIER_KEY;
180 spec[SpecNodeName.ID] = 'AltLeft';
181 return i18n.input.chrome.inputview.content.util.createKey(spec);
182 };
183
184
185 /**
186 * Creates a altgr key.
187 *
188 * @return {!Object} The altgr key.
189 */
190 i18n.input.chrome.inputview.content.util.createAltgrKey = function() {
191 var spec = {};
192 spec[SpecNodeName.TO_STATE] = i18n.input.chrome.inputview.StateType.ALTGR;
193 spec[SpecNodeName.NAME] = 'alt gr';
194 spec[SpecNodeName.TYPE] = ElementType.MODIFIER_KEY;
195 spec[SpecNodeName.ID] = 'AltRight';
196 return i18n.input.chrome.inputview.content.util.createKey(spec);
197 };
198
199
200 /**
201 * Creates a key used to switch to english.
202 *
203 * @return {!Object} The enSwitcher key.
204 */
205 i18n.input.chrome.inputview.content.util.createEnSwitcherKey =
206 function() {
207 var spec = {};
208 spec[SpecNodeName.TYPE] = ElementType.EN_SWITCHER;
209 spec[SpecNodeName.ID] = 'enSwitcher';
210 return i18n.input.chrome.inputview.content.util.createKey(spec);
211 };
212
213
214 /**
215 * Creates a capslock key.
216 *
217 * @return {!Object} The capslock key.
218 */
219 i18n.input.chrome.inputview.content.util.createCapslockKey = function() {
220 var spec = {};
221 spec[SpecNodeName.TO_STATE] = i18n.input.chrome.inputview.StateType.CAPSLOCK;
222 spec[SpecNodeName.NAME] = 'caps lock';
223 spec[SpecNodeName.TYPE] = ElementType.MODIFIER_KEY;
224 spec[SpecNodeName.ID] = 'OsLeft';
225 return i18n.input.chrome.inputview.content.util.createKey(spec);
226 };
227
228
229 /**
230 * Creates a enter key.
231 *
232 * @return {!Object} The enter key.
233 */
234 i18n.input.chrome.inputview.content.util.createEnterKey = function() {
235 var spec = {};
236 spec[SpecNodeName.ICON_CSS_CLASS] =
237 i18n.input.chrome.inputview.Css.ENTER_ICON;
238 spec[SpecNodeName.TYPE] = ElementType.ENTER_KEY;
239 spec[SpecNodeName.ID] = 'Enter';
240 return i18n.input.chrome.inputview.content.util.createKey(spec);
241 };
242
243
244 /**
245 * Creates a tab key.
246 *
247 * @return {!Object} The tab key.
248 */
249 i18n.input.chrome.inputview.content.util.createTabKey = function() {
250 var spec = {};
251 spec[SpecNodeName.ICON_CSS_CLASS] = i18n.input.chrome.inputview.Css.TAB_ICON;
252 spec[SpecNodeName.TYPE] = ElementType.TAB_KEY;
253 spec[SpecNodeName.ID] = 'Tab';
254 return i18n.input.chrome.inputview.content.util.createKey(spec);
255 };
256
257
258 /**
259 * Creates a backspace key.
260 *
261 * @return {!Object} The backspace key.
262 */
263 i18n.input.chrome.inputview.content.util.createBackspaceKey = function() {
264 var spec = {};
265 spec[SpecNodeName.ICON_CSS_CLASS] =
266 i18n.input.chrome.inputview.Css.BACKSPACE_ICON;
267 spec[SpecNodeName.TYPE] = ElementType.BACKSPACE_KEY;
268 spec[SpecNodeName.ID] = 'Backspace';
269 return i18n.input.chrome.inputview.content.util.createKey(spec);
270 };
271
272
273 /**
274 * Creates a space key.
275 *
276 * @return {!Object} The space key.
277 */
278 i18n.input.chrome.inputview.content.util.createSpaceKey = function() {
279 var spec = {};
280 spec[SpecNodeName.NAME] = ' ';
281 spec[SpecNodeName.TYPE] = ElementType.SPACE_KEY;
282 spec[SpecNodeName.ID] = 'Space';
283 return i18n.input.chrome.inputview.content.util.createKey(spec);
284 };
285
286
287 /**
288 * Create an IME switch key.
289 *
290 * @param {string} id .
291 * @param {string} name .
292 * @param {string} css .
293 * @return {!Object} The JP IME switch key.
294 */
295 i18n.input.chrome.inputview.content.util.createIMESwitchKey =
296 function(id, name, css) {
297 var spec = {};
298 spec[SpecNodeName.NAME] = name;
299 spec[SpecNodeName.TYPE] = ElementType.IME_SWITCH;
300 spec[SpecNodeName.ID] = id;
301 spec[SpecNodeName.TEXT_CSS_CLASS] = css;
302 return i18n.input.chrome.inputview.content.util.createKey(spec);
303 };
304
305
306 /**
307 * Creates a normal key.
308 *
309 * @param {!Object} spec The specification.
310 * @return {!Object} The normal key.
311 */
312 i18n.input.chrome.inputview.content.util.createNormalKey = function(spec) {
313 spec[SpecNodeName.TYPE] = ElementType.CHARACTER_KEY;
314 return i18n.input.chrome.inputview.content.util.createKey(spec);
315 };
316
317
318 /**
319 * Creates an arrow key.
320 *
321 * @param {!i18n.input.chrome.inputview.Direction} direction The direction.
322 * @return {!Object} The arrow key.
323 */
324 i18n.input.chrome.inputview.content.util.createArrowKey = function(direction) {
325 var spec = {};
326 spec[SpecNodeName.ICON_CSS_CLASS] =
327 i18n.input.chrome.inputview.Css.ARROW_KEY + ' ';
328 if (direction == i18n.input.chrome.inputview.Direction.UP) {
329 spec[SpecNodeName.ID] = 'ArrowUp';
330 spec[SpecNodeName.ICON_CSS_CLASS] += i18n.input.chrome.inputview.Css.UP_KEY;
331 spec[SpecNodeName.TYPE] = ElementType.ARROW_UP;
332 } else if (direction == i18n.input.chrome.inputview.Direction.DOWN) {
333 spec[SpecNodeName.ID] = 'ArrowDown';
334 spec[SpecNodeName.ICON_CSS_CLASS] +=
335 i18n.input.chrome.inputview.Css.DOWN_KEY;
336 spec[SpecNodeName.TYPE] = ElementType.ARROW_DOWN;
337 } else if (direction == i18n.input.chrome.inputview.Direction.LEFT) {
338 spec[SpecNodeName.ID] = 'ArrowLeft';
339 spec[SpecNodeName.ICON_CSS_CLASS] +=
340 i18n.input.chrome.inputview.Css.LEFT_KEY;
341 spec[SpecNodeName.TYPE] = ElementType.ARROW_LEFT;
342 } else if (direction == i18n.input.chrome.inputview.Direction.RIGHT) {
343 spec[SpecNodeName.ID] = 'ArrowRight';
344 spec[SpecNodeName.ICON_CSS_CLASS] +=
345 i18n.input.chrome.inputview.Css.RIGHT_KEY;
346 spec[SpecNodeName.TYPE] = ElementType.ARROW_RIGHT;
347 }
348 return i18n.input.chrome.inputview.content.util.createKey(spec);
349 };
350
351
352 /**
353 * Creates a soft key.
354 *
355 * @param {!Object} spec The specification.
356 * @return {!Object} The soft key.
357 */
358 i18n.input.chrome.inputview.content.util.createKey = function(spec) {
359 var newSpec = {};
360 for (var key in spec) {
361 newSpec[key] = spec[key];
362 }
363 return {
364 'spec': newSpec
365 };
366 };
367
368
369 /**
370 * The physical key codes.
371 *
372 * @type {!Array.<string>}
373 */
374 i18n.input.chrome.inputview.content.util.KEY_CODES_101 = [
375 'Backquote',
376 'Digit1',
377 'Digit2',
378 'Digit3',
379 'Digit4',
380 'Digit5',
381 'Digit6',
382 'Digit7',
383 'Digit8',
384 'Digit9',
385 'Digit0',
386 'Minus',
387 'Equal',
388 'KeyQ',
389 'KeyW',
390 'KeyE',
391 'KeyR',
392 'KeyT',
393 'KeyY',
394 'KeyU',
395 'KeyI',
396 'KeyO',
397 'KeyP',
398 'BracketLeft',
399 'BracketRight',
400 'Backslash',
401 'KeyA',
402 'KeyS',
403 'KeyD',
404 'KeyF',
405 'KeyG',
406 'KeyH',
407 'KeyJ',
408 'KeyK',
409 'KeyL',
410 'Semicolon',
411 'Quote',
412 'KeyZ',
413 'KeyX',
414 'KeyC',
415 'KeyV',
416 'KeyB',
417 'KeyN',
418 'KeyM',
419 'Comma',
420 'Period',
421 'Slash'
422 ];
423
424
425 /**
426 * The physical key codes for 102 keyboard.
427 *
428 * @type {!Array.<string>}
429 */
430 i18n.input.chrome.inputview.content.util.KEY_CODES_102 = [
431 'Backquote',
432 'Digit1',
433 'Digit2',
434 'Digit3',
435 'Digit4',
436 'Digit5',
437 'Digit6',
438 'Digit7',
439 'Digit8',
440 'Digit9',
441 'Digit0',
442 'Minus',
443 'Equal',
444 'KeyQ',
445 'KeyW',
446 'KeyE',
447 'KeyR',
448 'KeyT',
449 'KeyY',
450 'KeyU',
451 'KeyI',
452 'KeyO',
453 'KeyP',
454 'BracketLeft',
455 'BracketRight',
456 'KeyA',
457 'KeyS',
458 'KeyD',
459 'KeyF',
460 'KeyG',
461 'KeyH',
462 'KeyJ',
463 'KeyK',
464 'KeyL',
465 'Semicolon',
466 'Quote',
467 'Backslash',
468 'IntlBackslash',
469 'KeyZ',
470 'KeyX',
471 'KeyC',
472 'KeyV',
473 'KeyB',
474 'KeyN',
475 'KeyM',
476 'Comma',
477 'Period',
478 'Slash'
479 ];
480
481
482 /**
483 * Creates the key data.
484 *
485 * @param {!Array.<!Array.<string>>} keyCharacters The key characters.
486 * @param {string} viewIdPrefix The prefix of the view.
487 * @param {boolean} is102 True if it is a 102 keyboard.
488 * @param {boolean} hasAltGrKey True if there is altgr key.
489 * @param {!Array.<!Array.<number>>=} opt_keyCodes The key codes.
490 * @param {string=} opt_compactKeyboardId The compact keyboard id.
491 * @return {!Object} The key data.
492 */
493 i18n.input.chrome.inputview.content.util.createData = function(keyCharacters,
494 viewIdPrefix, is102, hasAltGrKey, opt_keyCodes, opt_compactKeyboardId) {
495 var keyList = [];
496 var mapping = {};
497 var keyCodes = opt_keyCodes || [];
498 var keyIds = is102 ? i18n.input.chrome.inputview.content.util.KEY_CODES_102 :
499 i18n.input.chrome.inputview.content.util.KEY_CODES_101;
500 for (var i = 0; i < keyCharacters.length - 1; i++) {
501 var spec = {};
502 spec[SpecNodeName.ID] = keyIds[i];
503 spec[SpecNodeName.TYPE] = ElementType.CHARACTER_KEY;
504 spec[SpecNodeName.CHARACTERS] = keyCharacters[i];
505 spec[SpecNodeName.KEY_CODE] = keyCodes[i];
506 var key = i18n.input.chrome.inputview.content.util.createKey(spec);
507 keyList.push(key);
508 }
509
510 i18n.input.chrome.inputview.content.util.insertModifierKeys_(keyList,
511 is102, opt_compactKeyboardId);
512 for (var i = 0; i < keyList.length; i++) {
513 var key = keyList[i];
514 mapping[key['spec'][SpecNodeName.ID]] = viewIdPrefix + i;
515 }
516 var layout = is102 ? '102kbd' : '101kbd';
517 var result = [];
518 result[SpecNodeName.KEY_LIST] = keyList;
519 result[SpecNodeName.MAPPING] = mapping;
520 result[SpecNodeName.LAYOUT] = layout;
521 result[SpecNodeName.HAS_ALTGR_KEY] = hasAltGrKey;
522 result[SpecNodeName.HAS_COMPACT_KEYBOARD] = !!opt_compactKeyboardId;
523 result[SpecNodeName.SHOW_MENU_KEY] = true;
524 return result;
525 };
526
527
528 /**
529 * Creates a switcher key which will switch between keyboards.
530 *
531 * @param {string} id The id.
532 * @param {string} name The name.
533 * @param {string|undefined} toKeyset The id of keyset this swicher key should
534 * switch to.
535 * @param {string} toKeysetName The name of the keyset.
536 * @param {string=} opt_iconCssClass The css class for the icon.
537 * @param {boolean=} opt_record True to record and next time the keyset will
538 * be recalled.
539 * @return {!Object} The switcher key.
540 */
541 i18n.input.chrome.inputview.content.util.createSwitcherKey = function(
542 id, name, toKeyset, toKeysetName, opt_iconCssClass, opt_record) {
543 var spec = {};
544 spec[SpecNodeName.ID] = id;
545 spec[SpecNodeName.NAME] = name;
546 spec[SpecNodeName.TO_KEYSET] = toKeyset;
547 spec[SpecNodeName.TO_KEYSET_NAME] = toKeysetName;
548 spec[SpecNodeName.ICON_CSS_CLASS] = opt_iconCssClass;
549 spec[SpecNodeName.TYPE] = ElementType.SWITCHER_KEY;
550 spec[SpecNodeName.RECORD] = !!opt_record;
551 return i18n.input.chrome.inputview.content.util.createKey(spec);
552 };
553
554
555 /**
556 * Inserts modifier keys into the key list.
557 *
558 * @param {!Array.<!Object>} keyList The key list.
559 * @param {boolean} is102 True if it is a 102 keyboard.
560 * @param {string=} opt_compactKeyboardId The compact keyboard id.
561 * @private
562 */
563 i18n.input.chrome.inputview.content.util.insertModifierKeys_ = function(
564 keyList, is102, opt_compactKeyboardId) {
565 goog.array.insertAt(keyList, i18n.input.chrome.inputview.content.util.
566 createBackspaceKey(), 13);
567 goog.array.insertAt(keyList, i18n.input.chrome.inputview.content.util.
568 createTabKey(), 14);
569 goog.array.insertAt(keyList, i18n.input.chrome.inputview.content.util.
570 createCapslockKey(), is102 ? 27 : 28);
571 goog.array.insertAt(keyList, i18n.input.chrome.inputview.content.util.
572 createEnterKey(), 40);
573 goog.array.insertAt(keyList, i18n.input.chrome.inputview.content.util.
574 createShiftKey(true), 41);
575 keyList.push(i18n.input.chrome.inputview.content.util.createShiftKey(false));
576 i18n.input.chrome.inputview.content.util.addLastRowKeys(
577 keyList, is102, opt_compactKeyboardId);
578 };
579
580
581 /**
582 * Inserts modifier keys into the key list.
583 *
584 * @param {!Array.<!Object>} keyList The key list.
585 * @param {boolean} is102 True if it is a 102 keyboard.
586 * @param {string=} opt_compactKeyboardId The compact keyboard id.
587 */
588 i18n.input.chrome.inputview.content.util.addLastRowKeys =
589 function(keyList, is102, opt_compactKeyboardId) {
590 keyList.push(i18n.input.chrome.inputview.content.util.createGlobeKey());
591 keyList.push(i18n.input.chrome.inputview.content.util.createMenuKey(
592 opt_compactKeyboardId));
593 keyList.push(i18n.input.chrome.inputview.content.util.createCtrlKey());
594 keyList.push(i18n.input.chrome.inputview.content.util.createAltKey());
595 keyList.push(i18n.input.chrome.inputview.content.util.createSpaceKey());
596 keyList.push(i18n.input.chrome.inputview.content.util.createEnSwitcherKey());
597 keyList.push(i18n.input.chrome.inputview.content.util.createAltgrKey());
598 keyList.push(i18n.input.chrome.inputview.content.util.createArrowKey(
599 i18n.input.chrome.inputview.Direction.LEFT));
600 keyList.push(i18n.input.chrome.inputview.content.util.createArrowKey(
601 i18n.input.chrome.inputview.Direction.RIGHT));
602 keyList.push(i18n.input.chrome.inputview.content.util.
603 createHideKeyboardKey());
604 };
605 }); // goog.scope
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698