/////////////////////////////////////////////////////////////////////////// // 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/_base/Color', 'dojo/cookie', 'dojo/text!./templates/ColorRecords.html', "dijit/a11yclick" ], function (Evented, declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, lang, html, on, query, Color, cookie, template, a11yclick) { return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Evented], { templateString: template, baseClass: 'jimu-color-records', declaredClass: 'jimu.dijit.ColorRecords', uid: "", recordsLength: 10, colorList: null, postCreate: function () { this.inherited(arguments); this.colorList = []; this._createCoustomRecord(); if (this.uid === "") { this.uid = "wab_colorRecords"; } this.refresh(); }, push: function (color) { this.colorList.unshift(color); if (this.colorList.length > this.recordsLength) { this.colorList.pop(); } this._setColors(); }, selecteColor: function (color) { //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], "title")) { td = tds[i]; break; } } //set color if (td) { html.addClass(td, "dijitPaletteCellSelected"); this.onChoose(newColor); } }, refresh: function(){ this._getCookie(this.uid); this._setColors(); }, _setColors: function () { for (var i = 0; i < this.recordsLength; i++) { var src = this["record" + i]; if (src && this.colorList[i] && this.colorList[i].toString) { var color = this.colorList[i].toString(); html.setAttr(src, "title", color); var img = this._findImg(src); html.setStyle(img, "background-color", color); html.setAttr(img, "alt", color); html.setAttr(img, "title", color); } } this._setCookie(this.uid); }, _createCoustomRecord: function () { for (var i = 0; i < this.recordsLength; i++) { this["record" + i] = html.create('td', { 'class': 'dijitPaletteCell', 'tabindex': i, 'title': "", 'role': "gridcell" }, this.container); 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": "", "style": "background-color: #ffffff" }, span); } //must use a11yclick, if not the first click maybe Invalid this.own(on(this.gridNode, /*"click"*/a11yclick, lang.hitch(this, this.onRecordClick))); }, onRecordClick: 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, "title"); color = new Color(color).toString(); this.onChoose(color); evt.stopPropagation(); evt.preventDefault(); }, onChoose: function (color) { this.emit("choose", color); }, _findImg: function (src) { var img = null; if (src.nodeName && "IMG" === src.nodeName.toUpperCase()) { return src; } else { img = query('.dijitColorPaletteSwatch', src)[0]; return img; } }, _setCookie: function (uid) { var cookieList = []; for (var i = 0, len = this.recordsLength; i < len; i++) { var one = this.colorList[i]; if (one && one.toString) { cookieList[i] = one.toString(); } } this._cleanCookie(uid); try { var cookieListStr = JSON.stringify(cookieList); cookie(uid, cookieListStr, { expires: 1000, path: '/' }); } catch (error) { console.error('ColorRecords: cookieList JSON.stringify error.' + error.stack); } }, _getCookie: function (uid) { var cookieList = cookie(uid); if ("undefined" === typeof cookieList) { return; } try { var cookieListArry = JSON.parse(cookieList); if (cookieListArry && "undefined" !== typeof cookieListArry.length) { for (var i = 0, len = this.recordsLength; i < len; i++) { var one = cookieListArry[i]; if (one && one.toString) { this.colorList[i] = new Color(one.toString()); } } } } catch (error) { console.error('ColorRecords: cookieList JSON.parse error.' + error.stack); } }, _cleanCookie: function (uid) { cookie(uid, null, { expires: -1 }); } }); });