aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/ui/charpicker.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/ui/charpicker.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/ui/charpicker.js822
1 files changed, 0 insertions, 822 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/ui/charpicker.js b/contexts/data/lib/closure-library/closure/goog/ui/charpicker.js
deleted file mode 100644
index 1987c20..0000000
--- a/contexts/data/lib/closure-library/closure/goog/ui/charpicker.js
+++ /dev/null
@@ -1,822 +0,0 @@
-// Copyright 2009 The Closure Library Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS-IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/**
- * @fileoverview Character Picker widget for picking any Unicode character.
- *
- * @see ../demos/charpicker.html
- */
-
-goog.provide('goog.ui.CharPicker');
-
-goog.require('goog.array');
-goog.require('goog.dom');
-goog.require('goog.events');
-goog.require('goog.events.EventHandler');
-goog.require('goog.events.EventType');
-goog.require('goog.events.InputHandler');
-goog.require('goog.events.KeyHandler');
-goog.require('goog.i18n.CharListDecompressor');
-goog.require('goog.i18n.uChar');
-goog.require('goog.i18n.uChar.NameFetcher');
-goog.require('goog.structs.Set');
-goog.require('goog.style');
-goog.require('goog.ui.Button');
-goog.require('goog.ui.Component');
-goog.require('goog.ui.ContainerScroller');
-goog.require('goog.ui.FlatButtonRenderer');
-goog.require('goog.ui.HoverCard');
-goog.require('goog.ui.LabelInput');
-goog.require('goog.ui.Menu');
-goog.require('goog.ui.MenuButton');
-goog.require('goog.ui.MenuItem');
-goog.require('goog.ui.Tooltip.ElementTooltipPosition');
-
-
-
-/**
- * Character Picker Class. This widget can be used to pick any Unicode
- * character by traversing a category-subcategory structure or by inputing its
- * hex value.
- *
- * See charpicker.html demo for example usage.
- * @param {goog.i18n.CharPickerData} charPickerData Category names and charlist.
- * @param {!goog.i18n.uChar.NameFetcher} charNameFetcher Object which fetches
- * the names of the characters that are shown in the widget. These names
- * may be stored locally or come from an external source.
- * @param {Array.<string>=} opt_recents List of characters to be displayed in
- * resently selected characters area.
- * @param {number=} opt_initCategory Sequence number of initial category.
- * @param {number=} opt_initSubcategory Sequence number of initial subcategory.
- * @param {number=} opt_rowCount Number of rows in the grid.
- * @param {number=} opt_columnCount Number of columns in the grid.
- * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
- * @constructor
- * @extends {goog.ui.Component}
- */
-goog.ui.CharPicker = function(charPickerData, charNameFetcher, opt_recents,
- opt_initCategory, opt_initSubcategory,
- opt_rowCount, opt_columnCount, opt_domHelper) {
- goog.ui.Component.call(this, opt_domHelper);
-
- /**
- * Object used to retrieve character names.
- * @type {!goog.i18n.uChar.NameFetcher}
- * @private
- */
- this.charNameFetcher_ = charNameFetcher;
-
- /**
- * Object containing character lists and category names.
- * @type {goog.i18n.CharPickerData}
- * @private
- */
- this.data_ = charPickerData;
-
- /**
- * The category number to be used on widget init.
- * @type {number}
- * @private
- */
- this.initCategory_ = opt_initCategory || 0;
-
- /**
- * The subcategory number to be used on widget init.
- * @type {number}
- * @private
- */
- this.initSubcategory_ = opt_initSubcategory || 0;
-
- /**
- * Number of columns in the grid.
- * @type {number}
- * @private
- */
- this.columnCount_ = opt_columnCount || 10;
-
- /**
- * Number of entries to be added to the grid.
- * @type {number}
- * @private
- */
- this.gridsize_ = (opt_rowCount || 10) * this.columnCount_;
-
- /**
- * Number of the recently selected characters displayed.
- * @type {number}
- * @private
- */
- this.recentwidth_ = this.columnCount_ + 1;
-
- /**
- * List of recently used characters.
- * @type {Array.<string>}
- * @private
- */
- this.recents_ = opt_recents || [];
-
- /**
- * Handler for events.
- * @type {goog.events.EventHandler}
- * @private
- */
- this.eventHandler_ = new goog.events.EventHandler(this);
-
- /**
- * Decompressor used to get the list of characters from a base88 encoded
- * character list.
- * @type {Object}
- * @private
- */
- this.decompressor_ = new goog.i18n.CharListDecompressor();
-};
-goog.inherits(goog.ui.CharPicker, goog.ui.Component);
-
-
-/**
- * The last selected character.
- * @type {?string}
- * @private
- */
-goog.ui.CharPicker.prototype.selectedChar_ = null;
-
-
-/**
- * Set of formatting characters whose display need to be swapped with nbsp
- * to prevent layout issues.
- * @type {goog.structs.Set}
- * @private
- */
-goog.ui.CharPicker.prototype.layoutAlteringChars_ = null;
-
-
-/**
- * The top category menu.
- * @type {goog.ui.Menu}
- * @private
- */
-goog.ui.CharPicker.prototype.menu_ = null;
-
-
-/**
- * The top category menu button.
- * @type {goog.ui.MenuButton}
- * @private
- */
-goog.ui.CharPicker.prototype.menubutton_ = null;
-
-
-/**
- * The subcategory menu.
- * @type {goog.ui.Menu}
- * @private
- */
-goog.ui.CharPicker.prototype.submenu_ = null;
-
-
-/**
- * The subcategory menu button.
- * @type {goog.ui.MenuButton}
- * @private
- */
-goog.ui.CharPicker.prototype.submenubutton_ = null;
-
-
-/**
- * The element representing the number of rows visible in the grid.
- * This along with goog.ui.CharPicker.stick_ would help to create a scrollbar
- * of right size.
- * @type {Element}
- * @private
- */
-goog.ui.CharPicker.prototype.stickwrap_ = null;
-
-
-/**
- * The component containing all the buttons for each character in display.
- * @type {goog.ui.Component}
- * @private
- */
-goog.ui.CharPicker.prototype.grid_ = null;
-
-
-/**
- * The component used for extra information about the character set displayed.
- * @type {goog.ui.Component}
- * @private
- */
-goog.ui.CharPicker.prototype.notice_ = null;
-
-
-/**
- * Grid displaying recently selected characters.
- * @type {goog.ui.Component}
- * @private
- */
-goog.ui.CharPicker.prototype.recentgrid_ = null;
-
-
-/**
- * Input field for entering the hex value of the character.
- * @type {goog.ui.Component}
- * @private
- */
-goog.ui.CharPicker.prototype.input_ = null;
-
-
-/**
- * OK button for entering hex value of the character.
- * @type {goog.ui.Component}
- * @private
- */
-goog.ui.CharPicker.prototype.okbutton_ = null;
-
-
-/**
- * Element displaying character name in preview.
- * @type {Element}
- * @private
- */
-goog.ui.CharPicker.prototype.charNameEl_ = null;
-
-
-/**
- * Element displaying character in preview.
- * @type {Element}
- * @private
- */
-goog.ui.CharPicker.prototype.zoomEl_ = null;
-
-
-/**
- * Element displaying character number (codepoint) in preview.
- * @type {Element}
- * @private
- */
-goog.ui.CharPicker.prototype.unicodeEl_ = null;
-
-
-/**
- * Hover card for displaying the preview of a character.
- * Preview would contain character in large size and its U+ notation. It would
- * also display the name, if available.
- * @type {goog.ui.HoverCard}
- * @private
- */
-goog.ui.CharPicker.prototype.hc_ = null;
-
-
-/**
- * Gets the last selected character.
- * @return {?string} The last selected character.
- */
-goog.ui.CharPicker.prototype.getSelectedChar = function() {
- return this.selectedChar_;
-};
-
-
-/**
- * Gets the list of characters user selected recently.
- * @return {Array.<string>} The recent character list.
- */
-goog.ui.CharPicker.prototype.getRecentChars = function() {
- return this.recents_;
-};
-
-
-/** @override */
-goog.ui.CharPicker.prototype.createDom = function() {
- goog.ui.CharPicker.superClass_.createDom.call(this);
-
- this.decorateInternal(this.getDomHelper().createElement('div'));
-};
-
-
-/** @override */
-goog.ui.CharPicker.prototype.disposeInternal = function() {
- this.hc_.dispose();
- this.hc_ = null;
- this.eventHandler_.dispose();
- this.eventHandler_ = null;
- goog.ui.CharPicker.superClass_.disposeInternal.call(this);
-};
-
-
-/** @override */
-goog.ui.CharPicker.prototype.decorateInternal = function(element) {
- goog.ui.CharPicker.superClass_.decorateInternal.call(this, element);
-
- // The chars below cause layout disruption or too narrow to hover:
- // \u0020, \u00AD, \u2000 - \u200f, \u2028 - \u202f, \u3000, \ufeff
- var chrs = this.decompressor_.toCharList(':2%C^O80V1H2s2G40Q%s0');
- this.layoutAlteringChars_ = new goog.structs.Set(chrs);
-
- this.menu_ = new goog.ui.Menu();
-
- var categories = this.data_.categories;
- for (var i = 0; i < this.data_.categories.length; i++) {
- this.menu_.addChild(this.createMenuItem_(i, categories[i]), true);
- }
-
- this.menubutton_ = new goog.ui.MenuButton('Category Menu', this.menu_);
- this.addChild(this.menubutton_, true);
-
- this.submenu_ = new goog.ui.Menu();
-
- this.submenubutton_ = new goog.ui.MenuButton('Subcategory Menu',
- this.submenu_);
- this.addChild(this.submenubutton_, true);
-
- // The containing compnent for grid component and the scroller.
- var gridcontainer = new goog.ui.Component();
- this.addChild(gridcontainer, true);
-
- var stickwrap = new goog.ui.Component();
- gridcontainer.addChild(stickwrap, true);
- this.stickwrap_ = stickwrap.getElement();
-
- var stick = new goog.ui.Component();
- stickwrap.addChild(stick, true);
- this.stick_ = stick.getElement();
-
- this.grid_ = new goog.ui.Component();
- gridcontainer.addChild(this.grid_, true);
-
- this.notice_ = new goog.ui.Component();
- this.notice_.setElementInternal(goog.dom.createDom('div'));
- this.addChild(this.notice_, true);
-
- // The component used for displaying 'Recent Selections' label.
- /**
- * @desc The text label above the list of recently selected characters.
- */
- var MSG_CHAR_PICKER_RECENT_SELECTIONS = goog.getMsg('Recent Selections:');
- var recenttext = new goog.ui.Component();
- recenttext.setElementInternal(goog.dom.createDom('span', null,
- MSG_CHAR_PICKER_RECENT_SELECTIONS));
- this.addChild(recenttext, true);
-
- this.recentgrid_ = new goog.ui.Component();
- this.addChild(this.recentgrid_, true);
-
- // The component used for displaying 'U+'.
- var uplus = new goog.ui.Component();
- uplus.setElementInternal(goog.dom.createDom('span', null, 'U+'));
- this.addChild(uplus, true);
-
- /**
- * @desc The text inside the input box to specify the hex code of a character.
- */
- var MSG_CHAR_PICKER_HEX_INPUT = goog.getMsg('Hex Input');
- this.input_ = new goog.ui.LabelInput(MSG_CHAR_PICKER_HEX_INPUT);
- this.addChild(this.input_, true);
-
- this.okbutton_ = new goog.ui.Button('OK');
- this.addChild(this.okbutton_, true);
- this.okbutton_.setEnabled(false);
-
- this.zoomEl_ = goog.dom.createDom('div',
- {id: 'zoom', className: goog.getCssName('goog-char-picker-char-zoom')});
-
- this.charNameEl_ = goog.dom.createDom('div',
- {id: 'charName', className: goog.getCssName('goog-char-picker-name')});
-
- this.unicodeEl_ = goog.dom.createDom('div',
- {id: 'unicode', className: goog.getCssName('goog-char-picker-unicode')});
-
- var card = goog.dom.createDom('div', {'id': 'preview'}, this.zoomEl_,
- this.charNameEl_, this.unicodeEl_);
- goog.style.showElement(card, false);
- this.hc_ = new goog.ui.HoverCard({'DIV': 'char'});
- this.hc_.setElement(card);
- var self = this;
-
- /**
- * Function called by hover card just before it is visible to collect data.
- */
- function onBeforeShow() {
- var trigger = self.hc_.getAnchorElement();
- var ch = self.getChar_(trigger);
- if (ch) {
- self.zoomEl_.innerHTML = self.displayChar_(ch);
- self.unicodeEl_.innerHTML = goog.i18n.uChar.toHexString(ch);
- // Clear the character name since we don't want to show old data because
- // it is retrieved asynchronously and the DOM object is re-used
- self.charNameEl_.innerHTML = '';
- self.charNameFetcher_.getName(ch, function(charName) {
- if (charName) {
- self.charNameEl_.innerHTML = charName;
- }
- });
- }
- }
-
- goog.events.listen(this.hc_, goog.ui.HoverCard.EventType.BEFORE_SHOW,
- onBeforeShow);
-
- goog.dom.classes.add(element, goog.getCssName('goog-char-picker'));
- goog.dom.classes.add(this.stick_, goog.getCssName('goog-stick'));
- goog.dom.classes.add(this.stickwrap_, goog.getCssName('goog-stickwrap'));
- goog.dom.classes.add(gridcontainer.getElement(),
- goog.getCssName('goog-char-picker-grid-container'));
- goog.dom.classes.add(this.grid_.getElement(),
- goog.getCssName('goog-char-picker-grid'));
- goog.dom.classes.add(this.recentgrid_.getElement(),
- goog.getCssName('goog-char-picker-grid'));
- goog.dom.classes.add(this.recentgrid_.getElement(),
- goog.getCssName('goog-char-picker-recents'));
-
- goog.dom.classes.add(this.notice_.getElement(),
- goog.getCssName('goog-char-picker-notice'));
- goog.dom.classes.add(uplus.getElement(),
- goog.getCssName('goog-char-picker-uplus'));
- goog.dom.classes.add(this.input_.getElement(),
- goog.getCssName('goog-char-picker-input-box'));
- goog.dom.classes.add(this.okbutton_.getElement(),
- goog.getCssName('goog-char-picker-okbutton'));
- goog.dom.classes.add(card, goog.getCssName('goog-char-picker-hovercard'));
- this.hc_.className = goog.getCssName('goog-char-picker-hovercard');
-
- this.grid_.buttoncount = this.gridsize_;
- this.recentgrid_.buttoncount = this.recentwidth_;
- this.populateGridWithButtons_(this.grid_);
- this.populateGridWithButtons_(this.recentgrid_);
-
- this.updateGrid_(this.recentgrid_, this.recents_);
- this.setSelectedCategory_(this.initCategory_, this.initSubcategory_);
- new goog.ui.ContainerScroller(this.menu_);
- new goog.ui.ContainerScroller(this.submenu_);
-
- goog.dom.classes.add(this.menu_.getElement(),
- goog.getCssName('goog-char-picker-menu'));
- goog.dom.classes.add(this.submenu_.getElement(),
- goog.getCssName('goog-char-picker-menu'));
-};
-
-
-/** @override */
-goog.ui.CharPicker.prototype.enterDocument = function() {
- goog.ui.CharPicker.superClass_.enterDocument.call(this);
- var inputkh = new goog.events.InputHandler(this.input_.getElement());
- this.keyHandler_ = new goog.events.KeyHandler(this.input_.getElement());
-
- // Stop the propagation of ACTION events at menu and submenu buttons.
- // If stopped at capture phase, the button will not be set to normal state.
- // If not stopped, the user widget will receive the event, which is
- // undesired. User widget should receive an event only on the character
- // click.
- this.eventHandler_.
- listen(
- this.menubutton_,
- goog.ui.Component.EventType.ACTION,
- goog.events.Event.stopPropagation).
- listen(
- this.submenubutton_,
- goog.ui.Component.EventType.ACTION,
- goog.events.Event.stopPropagation).
- listen(
- this,
- goog.ui.Component.EventType.ACTION,
- this.handleSelectedItem_,
- true).
- listen(
- inputkh,
- goog.events.InputHandler.EventType.INPUT,
- this.handleInput_).
- listen(
- this.keyHandler_,
- goog.events.KeyHandler.EventType.KEY,
- this.handleEnter_);
-
- goog.events.listen(this.okbutton_.getElement(),
- goog.events.EventType.MOUSEDOWN, this.handleOkClick_, true, this);
-
- goog.events.listen(this.stickwrap_, goog.events.EventType.SCROLL,
- this.handleScroll_, true, this);
-};
-
-
-/**
- * On scroll, updates the grid with characters correct to the scroll position.
- * @param {goog.events.Event} e Scroll event to handle.
- * @private
- */
-goog.ui.CharPicker.prototype.handleScroll_ = function(e) {
- var height = e.target.scrollHeight;
- var top = e.target.scrollTop;
- var itempos = Math.ceil(top * this.items.length / (this.columnCount_ *
- height)) * this.columnCount_;
- if (this.itempos != itempos) {
- this.itempos = itempos;
- this.modifyGridWithItems_(this.grid_, this.items, itempos);
- }
- e.stopPropagation();
-};
-
-
-/**
- * On a menu click, sets correct character set in the grid; on a grid click
- * accept the character as the selected one and adds to recent selection, if not
- * already present.
- * @param {goog.events.Event} e Event for the click on menus or grid.
- * @private
- */
-goog.ui.CharPicker.prototype.handleSelectedItem_ = function(e) {
- if (e.target.getParent() == this.menu_) {
- this.menu_.setVisible(false);
- this.setSelectedCategory_(e.target.getValue());
- } else if (e.target.getParent() == this.submenu_) {
- this.submenu_.setVisible(false);
- this.setSelectedSubcategory_(e.target.getValue());
- } else if (e.target.getParent() == this.grid_) {
- var button = e.target.getElement();
- this.selectedChar_ = this.getChar_(button);
- this.updateRecents_(this.selectedChar_);
- } else if (e.target.getParent() == this.recentgrid_) {
- this.selectedChar_ = this.getChar_(e.target.getElement());
- }
-};
-
-
-/**
- * When user types the characters displays the preview. Enables the OK button,
- * if the character is valid.
- * @param {goog.events.Event} e Event for typing in input field.
- * @private
- */
-goog.ui.CharPicker.prototype.handleInput_ = function(e) {
- var ch = this.getInputChar();
- if (ch) {
- var unicode = goog.i18n.uChar.toHexString(ch);
- this.zoomEl_.innerHTML = ch;
- this.unicodeEl_.innerHTML = unicode;
- this.charNameEl_.innerHTML = '';
- var coord =
- new goog.ui.Tooltip.ElementTooltipPosition(this.input_.getElement());
- this.hc_.setPosition(coord);
- this.hc_.triggerForElement(this.input_.getElement());
- this.okbutton_.setEnabled(true);
- } else {
- this.hc_.cancelTrigger();
- this.hc_.setVisible(false);
- this.okbutton_.setEnabled(false);
- }
-};
-
-
-/**
- * On OK click accepts the character and updates the recent char list.
- * @param {goog.events.Event=} opt_event Event for click on OK button.
- * @return {boolean} Indicates whether to propagate event.
- * @private
- */
-goog.ui.CharPicker.prototype.handleOkClick_ = function(opt_event) {
- var ch = this.getInputChar();
- if (ch && ch.charCodeAt(0)) {
- this.selectedChar_ = ch;
- this.updateRecents_(ch);
- return true;
- }
- return false;
-};
-
-
-/**
- * Behaves exactly like the OK button on Enter key.
- * @param {goog.events.KeyEvent} e Event for enter on the input field.
- * @return {boolean} Indicates whether to propagate event.
- * @private
- */
-goog.ui.CharPicker.prototype.handleEnter_ = function(e) {
- if (e.keyCode == goog.events.KeyCodes.ENTER) {
- return this.handleOkClick_() ?
- this.dispatchEvent(goog.ui.Component.EventType.ACTION) : false;
- }
- return false;
-};
-
-
-/**
- * Gets the character from the event target.
- * @param {Element} e Event target containing the 'char' attribute.
- * @return {string} The character specified in the event.
- * @private
- */
-goog.ui.CharPicker.prototype.getChar_ = function(e) {
- return e.getAttribute('char');
-};
-
-
-/**
- * Creates a menu entry for either the category listing or subcategory listing.
- * @param {number} id Id to be used for the entry.
- * @param {string} caption Text displayed for the menu item.
- * @return {goog.ui.MenuItem} Menu item to be added to the menu listing.
- * @private
- */
-goog.ui.CharPicker.prototype.createMenuItem_ = function(id, caption) {
- var item = new goog.ui.MenuItem(caption);
- item.setValue(id);
- item.setVisible(true);
- return item;
-};
-
-
-/**
- * Sets the category and updates the submenu items and grid accordingly.
- * @param {number} category Category index used to index the data tables.
- * @param {number=} opt_subcategory Subcategory index used with category index.
- * @private
- */
-goog.ui.CharPicker.prototype.setSelectedCategory_ = function(category,
- opt_subcategory) {
- this.category = category;
- this.menubutton_.setCaption(this.data_.categories[category]);
- while (this.submenu_.hasChildren()) {
- this.submenu_.removeChildAt(0, true).dispose();
- }
-
- var subcategories = this.data_.subcategories[category];
- var charList = this.data_.charList[category];
- for (var i = 0; i < subcategories.length; i++) {
- var subtitle = charList[i].length == 0;
- var item = this.createMenuItem_(i, subcategories[i]);
- this.submenu_.addChild(item, true);
- }
- this.setSelectedSubcategory_(opt_subcategory || 0);
-};
-
-
-/**
- * Sets the subcategory and updates the grid accordingly.
- * @param {number} subcategory Sub-category index used to index the data tables.
- * @private
- */
-goog.ui.CharPicker.prototype.setSelectedSubcategory_ = function(subcategory) {
- var subcategories = this.data_.subcategories;
- var name = subcategories[this.category][subcategory];
- this.submenubutton_.setCaption(name);
- this.setSelectedGrid_(this.category, subcategory);
-};
-
-
-/**
- * Updates the grid according to a given category and subcategory.
- * @param {number} category Index to the category table.
- * @param {number} subcategory Index to the subcategory table.
- * @private
- */
-goog.ui.CharPicker.prototype.setSelectedGrid_ = function(category,
- subcategory) {
- var charLists = this.data_.charList;
- var charListStr = charLists[category][subcategory];
- var content = this.decompressor_.toCharList(charListStr);
- this.charNameFetcher_.prefetch(charListStr);
- this.updateGrid_(this.grid_, content);
-};
-
-
-/**
- * Updates the grid with new character list.
- * @param {goog.ui.Component} grid The grid which is updated with a new set of
- * characters.
- * @param {Array.<string>} items Characters to be added to the grid.
- * @private
- */
-goog.ui.CharPicker.prototype.updateGrid_ = function(grid, items) {
- if (grid == this.grid_) {
- /**
- * @desc The message used when there are invisible characters like space
- * or format control characters.
- */
- var MSG_PLEASE_HOVER =
- goog.getMsg('Please hover over each cell for the character name.');
-
- this.notice_.getElement().innerHTML =
- this.charNameFetcher_.isNameAvailable(items[0]) ? MSG_PLEASE_HOVER : '';
- this.items = items;
- if (this.stickwrap_.offsetHeight > 0) {
- this.stick_.style.height =
- this.stickwrap_.offsetHeight * items.length / this.gridsize_ + 'px';
- } else {
- // This is the last ditch effort if height is not avaialble.
- // Maximum of 3em is assumed to the the cell height. Extra space after
- // last character in the grid is OK.
- this.stick_.style.height = 3 * this.columnCount_ * items.length /
- this.gridsize_ + 'em';
- }
- this.stickwrap_.scrollTop = 0;
- }
-
- this.modifyGridWithItems_(grid, items, 0);
-};
-
-
-/**
- * Updates the grid with new character list for a given starting point.
- * @param {goog.ui.Component} grid The grid which is updated with a new set of
- * characters.
- * @param {Array.<string>} items Characters to be added to the grid.
- * @param {number} start The index from which the characters should be
- * displayed.
- * @private
- */
-goog.ui.CharPicker.prototype.modifyGridWithItems_ = function(grid, items,
- start) {
- for (var buttonpos = 0, itempos = start;
- buttonpos < grid.buttoncount && itempos < items.length;
- buttonpos++, itempos++) {
- this.modifyCharNode_(grid.getChildAt(buttonpos), items[itempos]);
- }
-
- for (; buttonpos < grid.buttoncount; buttonpos++) {
- grid.getChildAt(buttonpos).setVisible(false);
- }
- var first = grid.getChildAt(0);
- goog.dom.setFocusableTabIndex(first.getElement(), true);
-};
-
-
-/**
- * Creates the grid for characters to displayed for selection.
- * @param {goog.ui.Component} grid The grid which is updated with a new set of
- * characters.
- * @private
- */
-goog.ui.CharPicker.prototype.populateGridWithButtons_ = function(grid) {
- for (var i = 0; i < grid.buttoncount; i++) {
- var button = new goog.ui.Button(' ',
- goog.ui.FlatButtonRenderer.getInstance());
- grid.addChild(button, true);
- button.setVisible(false);
-
- var buttonEl = button.getElement();
- goog.dom.a11y.setRole(buttonEl, 'gridcell');
- }
-};
-
-
-/**
- * Updates the grid cell with new character.
- * @param {goog.ui.Component} button This button is proped up for new character.
- * @param {string} ch Character to be displayed by the button.
- * @private
- */
-goog.ui.CharPicker.prototype.modifyCharNode_ = function(button, ch) {
- var text = this.displayChar_(ch);
- var buttonEl = button.getElement();
- buttonEl.innerHTML = text;
- buttonEl.setAttribute('char', ch);
- goog.dom.setFocusableTabIndex(buttonEl, false);
- button.setVisible(true);
-};
-
-
-/**
- * Adds a given character to the recent character list.
- * @param {string} character Character to be added to the recent list.
- * @private
- */
-goog.ui.CharPicker.prototype.updateRecents_ = function(character) {
- if (character && character.charCodeAt(0) &&
- !goog.array.contains(this.recents_, character)) {
- this.recents_.unshift(character);
- if (this.recents_.length > this.recentwidth_) {
- this.recents_.pop();
- }
- this.updateGrid_(this.recentgrid_, this.recents_);
- }
-};
-
-
-/**
- * Gets the user inputed unicode character.
- * @return {string} Unicode character inputed by user.
- */
-goog.ui.CharPicker.prototype.getInputChar = function() {
- var text = this.input_.getValue();
- var code = parseInt(text, 16);
- return /** @type {string} */ (goog.i18n.uChar.fromCharCode(code));
-};
-
-
-/**
- * Gets the display character for the given character.
- * @param {string} ch Character whose display is fetched.
- * @return {string} The display of the given character.
- * @private
- */
-goog.ui.CharPicker.prototype.displayChar_ = function(ch) {
- return this.layoutAlteringChars_.contains(ch) ? '\u00A0' : ch;
-};