Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dijit.ColorPalette"] = true;dojo.provide("dijit.ColorPalette");dojo.require("dijit._Widget");dojo.require("dijit._Templated");dojo.require("dojo.colors");dojo.require("dojo.i18n");dojo.requireLocalization("dojo", "colors", null, "ko,zh,ja,zh-tw,ru,it,hu,ROOT,fr,pt,pl,es,de,cs");dojo.declare("dijit.ColorPalette",[dijit._Widget, dijit._Templated],{// summary// Grid showing various colors, so the user can pick a certain color// defaultTimeout: Number// number of milliseconds before a held key or button becomes typematicdefaultTimeout: 500,// timeoutChangeRate: Number// fraction of time used to change the typematic timer between events// 1.0 means that each typematic event fires at defaultTimeout intervals// < 1.0 means that each typematic event fires at an increasing faster ratetimeoutChangeRate: 0.90,// palette: String// Size of grid, either "7x10" or "3x4".palette: "7x10",//_value: String// The value of the selected color.value: null,//_currentFocus: Integer// Index of the currently focused color._currentFocus: 0,// _xDim: Integer// This is the number of colors horizontally across._xDim: null,// _yDim: Integer/// This is the number of colors vertically down._yDim: null,// _palettes: Map// This represents the value of the colors.// The first level is a hashmap of the different arrays available// The next two dimensions represent the columns and rows of colors._palettes: {"7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan", "lavender", "plum"],["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"],["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", "skyblue", "mediumslateblue","orchid"],["gray", "red", "orangered", "darkorange", "yellow", "limegreen", "darkseagreen", "royalblue", "slateblue", "mediumorchid"],["dimgray", "crimson", "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"],["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ],["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"]],"3x4": [["white", "lime", "green", "blue"],["silver", "yellow", "fuchsia", "navy"],["gray", "red", "purple", "black"]]},// _imagePaths: Map// This is stores the path to the palette images_imagePaths: {"7x10": dojo.moduleUrl("dijit", "templates/colors7x10.png"),"3x4": dojo.moduleUrl("dijit", "templates/colors3x4.png")},// _paletteCoords: Map// This is a map that is used to calculate the coordinates of the// images that make up the palette._paletteCoords: {"leftOffset": 4, "topOffset": 4,"cWidth": 20, "cHeight": 20},// templatePath: String// Path to the template of this widget.templateString:"<div class=\"dijitInline dijitColorPalette\">\n\t<div class=\"dijitColorPaletteInner\" dojoAttachPoint=\"divNode\" waiRole=\"grid\" tabIndex=\"-1\">\n\t\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\">\n\t</div>\t\n</div>\n",// _paletteDims: Object// Size of the supported palettes for alignment purposes._paletteDims: {"7x10": {"width": "206px", "height": "145px"},"3x4": {"width": "86px", "height": "64px"}},postCreate: function(){// A name has to be given to the colorMap, this needs to be unique per Palette.dojo.mixin(this.divNode.style, this._paletteDims[this.palette]);this.imageNode.setAttribute("src", this._imagePaths[this.palette]);var choices = this._palettes[this.palette];this.domNode.style.position = "relative";this._highlightNodes = [];this.colorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang);var url= dojo.moduleUrl("dijit", "templates/blank.gif");var colorObject = new dojo.Color(),coords = this._paletteCoords;for(var row=0; row < choices.length; row++){for(var col=0; col < choices[row].length; col++) {var highlightNode = document.createElement("img");highlightNode.src = url;dojo.addClass(highlightNode, "dijitPaletteImg");var color = choices[row][col],colorValue = colorObject.setColor(dojo.Color.named[color]);highlightNode.alt = this.colorNames[color];highlightNode.color = colorValue.toHex();var highlightStyle = highlightNode.style;highlightStyle.color = highlightStyle.backgroundColor = highlightNode.color;dojo.forEach(["Dijitclick", "MouseOut", "MouseOver", "Blur", "Focus"], function(handler) {this.connect(highlightNode, "on" + handler.toLowerCase(), "_onColor" + handler);}, this);this.divNode.appendChild(highlightNode);highlightStyle.top = coords.topOffset + (row * coords.cHeight) + "px";highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px";highlightNode.setAttribute("tabIndex", "-1");highlightNode.title = this.colorNames[color];dijit.setWaiRole(highlightNode, "gridcell");highlightNode.index = this._highlightNodes.length;this._highlightNodes.push(highlightNode);}}this._highlightNodes[this._currentFocus].tabIndex = 0;this._xDim = choices[0].length;this._yDim = choices.length;// Now set all events// The palette itself is navigated to with the tab key on the keyboard// Keyboard navigation within the Palette is with the arrow keys// Spacebar selects the color.// For the up key the index is changed by negative the x dimension.var keyIncrementMap = {UP_ARROW: -this._xDim,// The down key the index is increase by the x dimension.DOWN_ARROW: this._xDim,// Right and left move the index by 1.RIGHT_ARROW: 1,LEFT_ARROW: -1};for(var key in keyIncrementMap){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{keyCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false},this,function(){var increment = keyIncrementMap[key];return function(count){ this._navigateByKey(increment, count); };}(),this.timeoutChangeRate, this.defaultTimeout));}},focus: function(){// summary:// Focus this ColorPalette.dijit.focus(this._highlightNodes[this._currentFocus]);},onChange: function(color){// summary:// Callback when a color is selected.// color: String// Hex value corresponding to color.// console.debug("Color selected is: "+color);},_onColorDijitclick: function(/*Event*/ evt){// summary:// Handler for click, enter key & space key. Selects the color.// evt:// The event.var target = evt.currentTarget;if (this._currentFocus != target.index){this._currentFocus = target.index;dijit.focus(target);}this._selectColor(target);dojo.stopEvent(evt);},_onColorMouseOut: function(/*Event*/ evt){// summary:// Handler for onMouseOut. Removes highlight.// evt:// The mouse event.dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight");},_onColorMouseOver: function(/*Event*/ evt){// summary:// Handler for onMouseOver. Highlights the color.// evt:// The mouse event.var target = evt.currentTarget;target.tabIndex = 0;target.focus();},_onColorBlur: function(/*Event*/ evt){// summary:// Handler for onBlur. Removes highlight and sets// the first color as the palette's tab point.// evt:// The blur event.dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight");evt.currentTarget.tabIndex = -1;this._currentFocus = 0;this._highlightNodes[0].tabIndex = 0;},_onColorFocus: function(/*Event*/ evt){// summary:// Handler for onFocus. Highlights the color.// evt:// The focus event.if(this._currentFocus != evt.currentTarget.index){this._highlightNodes[this._currentFocus].tabIndex = -1;}this._currentFocus = evt.currentTarget.index;dojo.addClass(evt.currentTarget, "dijitPaletteImgHighlight");},_selectColor: function(selectNode){// summary:// This selects a color. It triggers the onChange event// area:// The area node that covers the color being selected.this.onChange(this.value = selectNode.color);},_navigateByKey: function(increment, typeCount){// summary:we// This is the callback for typematic.// It changes the focus and the highlighed color.// increment:// How much the key is navigated.// typeCount:// How many times typematic has fired.// typecount == -1 means the key is released.if(typeCount == -1){ return; }var newFocusIndex = this._currentFocus + increment;if(newFocusIndex < this._highlightNodes.length && newFocusIndex > -1){var focusNode = this._highlightNodes[newFocusIndex];focusNode.tabIndex = 0;focusNode.focus();}}});}