///////////////////////////////////////////////////////////////////////////
// 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);
}
}
});
});