/////////////////////////////////////////////////////////////////////////// // 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', 'dojo/_base/lang', 'dojo/_base/html', 'dojo/on', 'dojo/_base/Color', "jimu/dijit/ColorSelector" ], function (Evented, declare, _WidgetBase, _TemplatedMixin, lang, html, on, Color, ColorSelector) { return declare([_WidgetBase, _TemplatedMixin, Evented], { baseClass: 'jimu-color-picker', declaredClass: 'jimu.dijit.ColorPicker', templateString: '
', _isTooltipDialogOpened: false, //options: color: null, //dojo.Color or hex string showHex: true, showHsv: true, showRgb: true, ensureMode: false, showLabel: false, //public methods: //setColor //getColor //isPartOfPopup //events: //change postMixInProperties: function () { this.nls = window.jimuNls.common; }, postCreate: function () { this.inherited(arguments); if (this.color) { if (!(this.color instanceof Color)) { this.color = new Color(this.color); } } else { this.color = new Color('#ccc'); } html.setStyle(this.domNode, 'backgroundColor', this.color.toHex()); this._createDialog(this.domNode); }, destroy: function () { //dojoPopup.close(this.tooltipDialog); this.picker.destroy(); //this.tooltipDialog.destroy(); this.inherited(arguments); }, _handlerOk: function (event) { if (event && event.stopPropagation && event.preventDefault) { event.stopPropagation(); event.preventDefault(); } this.emit("ok", this.color); }, _handlerApply: function (event) { if (event && event.stopPropagation && event.preventDefault) { event.stopPropagation(); event.preventDefault(); } this.emit("apply", this.color); }, _handlerCancel: function (event) { if (event && event.stopPropagation && event.preventDefault) { event.stopPropagation(); event.preventDefault(); } this.emit("cancel"); }, _createDialog: function () { var ttdContent = html.create("div", { "class": "dojox-color-picker-container" }, this.domNode); var picker = new ColorSelector({ showHex: this.showHex, showRgb: this.showRgb, showHsv: this.showHsv, value: this.color.toHex(), onChange: lang.hitch(this, function (newHex) { var color = new Color(newHex); this.setColor(color); }) }); picker.placeAt(ttdContent); picker.startup(); var btnsContainer = html.create("div", { "class": "btns-container jimu-float-trailing" }, ttdContent); //1. "ok" will set color AND close dialog if (true === this.showOk) { var ok = html.create('div', { 'class': 'jimu-btn jimu-float-leading ok', 'title': this.nls.ok, 'innerHTML': this.nls.ok }, btnsContainer); this.own(on(ok, 'click', lang.hitch(this, function (e) { var c = this.picker.get('value'); this.setColor(new Color(c)); this._handlerOk(e); }))); } //2. "apply" will set color, DO NOT close dialog if (true === this.showApply) { var apply = html.create('div', { 'class': 'jimu-btn jimu-float-leading apply', 'title': this.nls.apply, 'innerHTML': this.nls.apply }, btnsContainer); this.own(on(apply, 'click', lang.hitch(this, function (e) { var c = this.picker.get('value'); this.setColor(new Color(c)); this._handlerApply(e); }))); } //3. just close dialog var cancel = html.create('div', { 'class': 'jimu-btn jimu-btn-vacation jimu-float-leading', 'title': this.nls.cancel, 'innerHTML': this.nls.cancel }, btnsContainer); this.own(on(cancel, 'click', lang.hitch(this, function (e) { this._handlerCancel(e); }))); this.picker = picker; }, setColor: function (newColor/*, isOnChange*/) { if (!(newColor instanceof Color)) { return; } var oldColor = this.color; var oldHex = ''; if (oldColor) { oldHex = oldColor.toHex(); } var newHex = newColor.toHex(); this.color = newColor; if (oldHex !== newHex) { this.picker.set('value', newHex); // if (false !== isOnChange) { // this.onChange(new Color(newHex)); //==> onChange will hide popoup // } } }, getColor: function () { return this.color; }, // onChange: function (newColor) { // /*jshint unused: false*/ // if (this.showLabel) { // this._changeLabel(newColor); // } // }, onClose: function () { } }); });