/////////////////////////////////////////////////////////////////////////// // 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([ "require", "dojo", "dijit", "dojo/_base/declare", "dijit/_editor/_Plugin", "dijit/form/DropDownButton" ], function (require, dojo, dijit, declare, _Plugin, DropDownButton) { //This is a pulg-in of arcgis-js-api/dijit/_editor/. //The template file is /arcgis-js-api/dijit/_editor/plugins/TextColor.js. // module: // dijit/_editor/plugins/BackgroundColor dojo.experimental("dijit.editor.plugins.EditorBackgroundColor"); var EditorBackgroundColor = declare("dijit.editor.plugins.EditorBackgroundColor", _Plugin, { // summary: // This plugin provides dropdown color pickers for setting text color and background color // description: // The commands provided by this plugin are: // // - foreColor - sets the text color // - hiliteColor - sets the background color // Override _Plugin.buttonClass to use DropDownButton (with ColorPalette) to control this plugin buttonClass: DropDownButton, // colorPicker: String|Constructor // The color picker dijit to use, defaults to dijit/ColorPalette colorPicker: "jimu/dijit/ColorPalette", // useDefaultCommand: Boolean // False as we do not use the default editor command/click behavior. useDefaultCommand: false, _initButton: function () { this.command = "editorBackgroundColor";//name for plugin//this.name; this.hackCommand = "hiliteColor";//commands:https://developer.mozilla.org/en-us/docs/Web/API/Document/execCommand this.inherited(arguments); var recordUID = "", forceAttr = false; if (this.params.custom) { if(this.params.custom.recordUID){ recordUID = this.params.custom.recordUID; } } // Setup to lazy load ColorPalette first time the button is clicked var self = this; //button icon this.button.set("iconClass", this.iconClassPrefix + " " + this.iconClassPrefix + "HiliteColor"); this.button.set("title", this.getLabel(this.hackCommand)); this.button.loadDropDown = function (callback) { function onColorPaletteLoad(ColorPalette) { self.button.dropDown = new ColorPalette({ dir: self.editor.dir, ownerDocument: self.editor.ownerDocument, value: self.value, appearance: { showTransparent: true, showColorPalette: true, showCoustom: true, showColorPickerOK: true, showColorPickerApply: false,//change color will close DropDown, so can't use apply showCoustomRecord: true }, recordUID: recordUID, onChange: function (color) { //Toggles the use of HTML tags or CSS for the generated markup self.editor.execCommand("useCSS", forceAttr); self.editor.execCommand("styleWithCSS", !forceAttr); self.editor.execCommand(self.hackCommand, color); }, onExecute: function () { self.editor.execCommand(self.hackCommand, this.get("value")); }, onClose: function(){ self.button.closeDropDown(); } }); callback(); } if (typeof self.colorPicker === "string") { require([self.colorPicker], onColorPaletteLoad); } else { onColorPaletteLoad(self.colorPicker); } }; }, updateState: function () { // summary: // Overrides _Plugin.updateState(). This updates the ColorPalette // to show the color of the currently selected text. // tags: // protected var _e = this.editor; var _c = this.hackCommand; if (!_e || !_e.isLoaded || !_c.length) { return; } var value; if (this.button) { var disabled = this.get("disabled"); this.button.set("disabled", disabled); if (disabled) { return; } try { value = _e.queryCommandValue(_c) || ""; } catch (e) { //Firefox may throw error above if the editor is just loaded, ignore it value = ""; } } if (value === "") { value = "#000000"; } else if (value === "transparent") { value = "rgba(0, 0, 0, 0)"; } this.value = value; var dropDown = this.button.dropDown; if (dropDown && dropDown.getColor && value !== dropDown.getColor()) { dropDown.refreshRecords(); dropDown.setColor(value); } } }); dojo.subscribe(dijit._scopeName + ".Editor.getPlugin", null, function (o) { if (o.plugin) { return; } switch (o.args.name) { case "editorBackgroundColor": o.plugin = new EditorBackgroundColor(); } }); return EditorBackgroundColor; });