/////////////////////////////////////////////////////////////////////////// // Copyright © 2014 - 2018 Esri. 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. /////////////////////////////////////////////////////////////////////////// define(['dojo/Evented', 'dojo/_base/declare', 'dijit/_WidgetBase', 'dijit/_TemplatedMixin', 'dijit/_WidgetsInTemplateMixin', 'dojo/_base/lang', 'dojo/_base/html', 'dojo/on', 'dojo/query', "dojo/i18n",// i18n.getLocalization 'dojo/_base/Color', "dijit/a11yclick", "dojo/i18n!dojo/nls/colors"// translations ], function (Evented, declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, lang, html, on, query, i18n, Color, a11yclick) { return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Evented], { templateString: '
' + '' + '' + '' + '' + '
' + '
', baseClass: 'jimu-color-chooser', declaredClass: 'jimu.dijit.ColorChooser', uid: "", colorsArray: [ ["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"], ["rgb(0,0,1)", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"] ], postCreate: function () { this.inherited(arguments); this.colorTitleNls = i18n.getLocalization("dojo", "colors"/*, dojo.locale*/); this._createColorsBlocks(); }, _createColorsBlocks: function () { this._row = this.colorsArray.length; this._col = this.colorsArray[0].length; for (var j = 0; j < this._row; j++) { var row = html.create('tr', { //'tabindex': j, 'role': "row" }, this.gridNode); for (var i = 0; i < this._col; i++) { var alias = this.colorsArray[j][i]; var colorValue = Color.named[alias]; var dataTitle = ""; if (colorValue) { dataTitle = alias; } else if (alias === "rgb(0,0,1)") {//name in _palettes, to cheat editor dataTitle = "black"; colorValue = "rgb(0,0,1)"; } var title = this.colorTitleNls[dataTitle]; var rgbaVal = new Color(colorValue).toString(); this["record" + i] = html.create('td', { 'class': 'dijitPaletteCell', //'tabindex': i, 'data-title': rgbaVal, 'role': "gridcell" }, row); var span = html.create('span', { 'class': 'dijitInline dijitPaletteImg' }, this["record" + i]); html.create('img', { 'class': "dijitColorPaletteSwatch", 'src': require.toUrl("dojo/resources/blank.gif"), "alt": title, "title": title, "data-title": dataTitle, "width": "16px", "height": "16px", "style": "background-color: " + rgbaVal }, span); } } //must use a11yclick, if not the first click maybe Invalid this.own(on(this.gridNode, /*"click"*/a11yclick, lang.hitch(this, this.onColorClick))); }, onColorClick: function (evt) { var target = evt.target; while(target.tagName !== "TD"){ if(!target.parentNode || target === this.gridNode){// probably can never happen, but just in case return; } target = target.parentNode; } var color = html.getAttr(target, "data-title"); color = new Color(color).toString(); //console.log("color==>" + color); this.setColor(color); evt.stopPropagation(); evt.preventDefault(); }, _onChange: function (color) { this.emit("change", color); }, setColor: function (color, isOnChange) { //selected style var newColor = new Color(color); var td = null; var tds = query("td", this.domNode); //clean selected for (var i = 0, len = tds.length; i < len; i++) { html.removeClass(tds[i], "dijitPaletteCellSelected"); } //find td for (i = 0, len = tds.length; i < len; i++) { if (newColor.toString() === html.getAttr(tds[i], "data-title")) { td = tds[i]; break; } } //set color if (td) { html.addClass(td, "dijitPaletteCellSelected"); } //emit if (td && typeof isOnChange === "undefined" || true === isOnChange) { this._onChange(newColor); } } }); });