/////////////////////////////////////////////////////////////////////////// // 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', 'dojox/widget/ColorPicker', "dijit/_base/focus", "dojo/fx", 'dojo/_base/lang', 'dojo/_base/html', "dojo/sniff" ], function (Evented, declare, _WidgetBase, dojoxColorPicker, FocusManager, fx, lang, html, has) { return declare([_WidgetBase, dojoxColorPicker, Evented], { baseClass: 'jimu-color-selector', declaredClass: 'jimu.dijit.ColorSelector', //overwirte this method, because it get wrong color when clicled _setPoint: function (/* Event */evt) { if (evt) { FocusManager.focus(evt.target); } //half of icon if (!this._CURSOR_WIDTH || !this._CURSOR_HEIGHT) { var cursorNodeBox = html.getMarginBox(this.cursorNode); if (cursorNodeBox.w && cursorNodeBox.h) { this._CURSOR_WIDTH = cursorNodeBox.w / 2; this._CURSOR_HEIGHT = cursorNodeBox.h / 2; } } //border w/h if (!this._BORDER_WIDTH || !this._BORDER_HEIGHT) { var borderObj = html.getBorderExtents(evt.target || evt.srcElement); if (borderObj.w && borderObj.h) { this._BORDER_WIDTH = borderObj.w; this._BORDER_HEIGHT = borderObj.h; } } //fix position var tarX = 0, tarY = 0; if (has("ff") || has("ie") || has("MSIE")) { //ff ie, without border tarX = evt.offsetX; tarY = evt.offsetY; } else if (evt.offsetX && evt.offsetY) { //chrome edge, with border w/h tarX = evt.offsetX + this._BORDER_WIDTH; tarY = evt.offsetY + this._BORDER_HEIGHT; } //targetX/Y - halfWidth/Height of icon var newTop = tarY - this._CURSOR_HEIGHT; var newLeft = tarX - this._CURSOR_WIDTH; //set color if (this.animatePoint) { fx.slideTo({ node: this.cursorNode, duration: this.slideDuration, top: newTop, left: newLeft, onEnd: lang.hitch(this, function () { this._updateColor(true); FocusManager.focus(this.cursorNode); }) }).play(); } else { html.style(this.cursorNode, { left: newLeft + "px", top: newTop + "px" }); this._updateColor(true); } }, _setHuePoint: function (/* Event */evt) { var selCenter = this.PICKER_HUE_SELECTOR_H / 2;//half of icon var ypos = evt.offsetY - selCenter; if (this.animatePoint) { fx.slideTo({ node: this.hueCursorNode, duration: this.slideDuration, top: ypos, left: 0, onEnd: lang.hitch(this, function () { this._updateColor(true); FocusManager.focus(this.hueCursorNode); }) }).play(); } else { html.style(this.hueCursorNode, "top", ypos + "px"); this._updateColor(true); } } }); });