Editor.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:13k
源码类别:
OA系统
开发平台:
Java
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.widget.Editor");
- dojo.deprecated("dojo.widget.Editor", "is replaced by dojo.widget.Editor2", "0.5");
- dojo.require("dojo.io.*");
- dojo.require("dojo.widget.*");
- dojo.require("dojo.widget.Toolbar");
- dojo.require("dojo.widget.RichText");
- dojo.require("dojo.widget.ColorPalette");
- dojo.require("dojo.string.extras");
- dojo.widget.tags.addParseTreeHandler("dojo:Editor");
- dojo.widget.Editor = function () {
- dojo.widget.HtmlWidget.call(this);
- this.contentFilters = [];
- this._toolbars = [];
- };
- dojo.inherits(dojo.widget.Editor, dojo.widget.HtmlWidget);
- dojo.widget.Editor.itemGroups = {textGroup:["bold", "italic", "underline", "strikethrough"], blockGroup:["formatBlock", "fontName", "fontSize"], justifyGroup:["justifyleft", "justifycenter", "justifyright"], commandGroup:["save", "cancel"], colorGroup:["forecolor", "hilitecolor"], listGroup:["insertorderedlist", "insertunorderedlist"], indentGroup:["outdent", "indent"], linkGroup:["createlink", "insertimage", "inserthorizontalrule"]};
- dojo.widget.Editor.formatBlockValues = {"Normal":"p", "Main heading":"h2", "Sub heading":"h3", "Sub sub heading":"h4", "Preformatted":"pre"};
- dojo.widget.Editor.fontNameValues = {"Arial":"Arial, Helvetica, sans-serif", "Verdana":"Verdana, sans-serif", "Times New Roman":"Times New Roman, serif", "Courier":"Courier New, monospace"};
- dojo.widget.Editor.fontSizeValues = {"1 (8 pt)":"1", "2 (10 pt)":"2", "3 (12 pt)":"3", "4 (14 pt)":"4", "5 (18 pt)":"5", "6 (24 pt)":"6", "7 (36 pt)":"7"};
- dojo.widget.Editor.defaultItems = ["commandGroup", "|", "blockGroup", "|", "textGroup", "|", "colorGroup", "|", "justifyGroup", "|", "listGroup", "indentGroup", "|", "linkGroup"];
- dojo.widget.Editor.supportedCommands = ["save", "cancel", "|", "-", "/", " "];
- dojo.lang.extend(dojo.widget.Editor, {widgetType:"Editor", saveUrl:"", saveMethod:"post", saveArgName:"editorContent", closeOnSave:false, items:dojo.widget.Editor.defaultItems, formatBlockItems:dojo.lang.shallowCopy(dojo.widget.Editor.formatBlockValues), fontNameItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontNameValues), fontSizeItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontSizeValues), getItemProperties:function (name) {
- var props = {};
- switch (name.toLowerCase()) {
- case "bold":
- case "italic":
- case "underline":
- case "strikethrough":
- props.toggleItem = true;
- break;
- case "justifygroup":
- props.defaultButton = "justifyleft";
- props.preventDeselect = true;
- props.buttonGroup = true;
- break;
- case "listgroup":
- props.buttonGroup = true;
- break;
- case "save":
- case "cancel":
- props.label = dojo.string.capitalize(name);
- break;
- case "forecolor":
- case "hilitecolor":
- props.name = name;
- props.toggleItem = true;
- props.icon = this.getCommandImage(name);
- break;
- case "formatblock":
- props.name = "formatBlock";
- props.values = this.formatBlockItems;
- break;
- case "fontname":
- props.name = "fontName";
- props.values = this.fontNameItems;
- case "fontsize":
- props.name = "fontSize";
- props.values = this.fontSizeItems;
- }
- return props;
- }, validateItems:true, focusOnLoad:true, minHeight:"1em", _richText:null, _richTextType:"RichText", _toolbarContainer:null, _toolbarContainerType:"ToolbarContainer", _toolbars:[], _toolbarType:"Toolbar", _toolbarItemType:"ToolbarItem", buildRendering:function (args, frag) {
- var node = frag["dojo:" + this.widgetType.toLowerCase()]["nodeRef"];
- var trt = dojo.widget.createWidget(this._richTextType, {focusOnLoad:this.focusOnLoad, minHeight:this.minHeight}, node);
- var _this = this;
- setTimeout(function () {
- _this.setRichText(trt);
- _this.initToolbar();
- _this.fillInTemplate(args, frag);
- }, 0);
- }, setRichText:function (richText) {
- if (this._richText && this._richText == richText) {
- dojo.debug("Already set the richText to this richText!");
- return;
- }
- if (this._richText && !this._richText.isClosed) {
- dojo.debug("You are switching richTexts yet you haven't closed the current one. Losing reference!");
- }
- this._richText = richText;
- dojo.event.connect(this._richText, "close", this, "onClose");
- dojo.event.connect(this._richText, "onLoad", this, "onLoad");
- dojo.event.connect(this._richText, "onDisplayChanged", this, "updateToolbar");
- if (this._toolbarContainer) {
- this._toolbarContainer.enable();
- this.updateToolbar(true);
- }
- }, initToolbar:function () {
- if (this._toolbarContainer) {
- return;
- }
- this._toolbarContainer = dojo.widget.createWidget(this._toolbarContainerType);
- var tb = this.addToolbar();
- var last = true;
- for (var i = 0; i < this.items.length; i++) {
- if (this.items[i] == "n") {
- tb = this.addToolbar();
- } else {
- if ((this.items[i] == "|") && (!last)) {
- last = true;
- } else {
- last = this.addItem(this.items[i], tb);
- }
- }
- }
- this.insertToolbar(this._toolbarContainer.domNode, this._richText.domNode);
- }, insertToolbar:function (tbNode, richTextNode) {
- dojo.html.insertBefore(tbNode, richTextNode);
- }, addToolbar:function (toolbar) {
- this.initToolbar();
- if (!(toolbar instanceof dojo.widget.Toolbar)) {
- toolbar = dojo.widget.createWidget(this._toolbarType);
- }
- this._toolbarContainer.addChild(toolbar);
- this._toolbars.push(toolbar);
- return toolbar;
- }, addItem:function (item, tb, dontValidate) {
- if (!tb) {
- tb = this._toolbars[0];
- }
- var cmd = ((item) && (!dojo.lang.isUndefined(item["getValue"]))) ? cmd = item["getValue"]() : item;
- var groups = dojo.widget.Editor.itemGroups;
- if (item instanceof dojo.widget.ToolbarItem) {
- tb.addChild(item);
- } else {
- if (groups[cmd]) {
- var group = groups[cmd];
- var worked = true;
- if (cmd == "justifyGroup" || cmd == "listGroup") {
- var btnGroup = [cmd];
- for (var i = 0; i < group.length; i++) {
- if (dontValidate || this.isSupportedCommand(group[i])) {
- btnGroup.push(this.getCommandImage(group[i]));
- } else {
- worked = false;
- }
- }
- if (btnGroup.length) {
- var btn = tb.addChild(btnGroup, null, this.getItemProperties(cmd));
- dojo.event.connect(btn, "onClick", this, "_action");
- dojo.event.connect(btn, "onChangeSelect", this, "_action");
- }
- return worked;
- } else {
- for (var i = 0; i < group.length; i++) {
- if (!this.addItem(group[i], tb)) {
- worked = false;
- }
- }
- return worked;
- }
- } else {
- if ((!dontValidate) && (!this.isSupportedCommand(cmd))) {
- return false;
- }
- if (dontValidate || this.isSupportedCommand(cmd)) {
- cmd = cmd.toLowerCase();
- if (cmd == "formatblock") {
- var select = dojo.widget.createWidget("ToolbarSelect", {name:"formatBlock", values:this.formatBlockItems});
- tb.addChild(select);
- var _this = this;
- dojo.event.connect(select, "onSetValue", function (item, value) {
- _this.onAction("formatBlock", value);
- });
- } else {
- if (cmd == "fontname") {
- var select = dojo.widget.createWidget("ToolbarSelect", {name:"fontName", values:this.fontNameItems});
- tb.addChild(select);
- dojo.event.connect(select, "onSetValue", dojo.lang.hitch(this, function (item, value) {
- this.onAction("fontName", value);
- }));
- } else {
- if (cmd == "fontsize") {
- var select = dojo.widget.createWidget("ToolbarSelect", {name:"fontSize", values:this.fontSizeItems});
- tb.addChild(select);
- dojo.event.connect(select, "onSetValue", dojo.lang.hitch(this, function (item, value) {
- this.onAction("fontSize", value);
- }));
- } else {
- if (dojo.lang.inArray(cmd, ["forecolor", "hilitecolor"])) {
- var btn = tb.addChild(dojo.widget.createWidget("ToolbarColorDialog", this.getItemProperties(cmd)));
- dojo.event.connect(btn, "onSetValue", this, "_setValue");
- } else {
- var btn = tb.addChild(this.getCommandImage(cmd), null, this.getItemProperties(cmd));
- if (cmd == "save") {
- dojo.event.connect(btn, "onClick", this, "_save");
- } else {
- if (cmd == "cancel") {
- dojo.event.connect(btn, "onClick", this, "_close");
- } else {
- dojo.event.connect(btn, "onClick", this, "_action");
- dojo.event.connect(btn, "onChangeSelect", this, "_action");
- }
- }
- }
- }
- }
- }
- }
- }
- }
- return true;
- }, enableToolbar:function () {
- if (this._toolbarContainer) {
- this._toolbarContainer.domNode.style.display = "";
- this._toolbarContainer.enable();
- }
- }, disableToolbar:function (hide) {
- if (hide) {
- if (this._toolbarContainer) {
- this._toolbarContainer.domNode.style.display = "none";
- }
- } else {
- if (this._toolbarContainer) {
- this._toolbarContainer.disable();
- }
- }
- }, _updateToolbarLastRan:null, _updateToolbarTimer:null, _updateToolbarFrequency:500, updateToolbar:function (force) {
- if (!this._toolbarContainer) {
- return;
- }
- var diff = new Date() - this._updateToolbarLastRan;
- if (!force && this._updateToolbarLastRan && (diff < this._updateToolbarFrequency)) {
- clearTimeout(this._updateToolbarTimer);
- var _this = this;
- this._updateToolbarTimer = setTimeout(function () {
- _this.updateToolbar();
- }, this._updateToolbarFrequency / 2);
- return;
- } else {
- this._updateToolbarLastRan = new Date();
- }
- var items = this._toolbarContainer.getItems();
- for (var i = 0; i < items.length; i++) {
- var item = items[i];
- if (item instanceof dojo.widget.ToolbarSeparator) {
- continue;
- }
- var cmd = item._name;
- if (cmd == "save" || cmd == "cancel") {
- continue;
- } else {
- if (cmd == "justifyGroup") {
- try {
- if (!this._richText.queryCommandEnabled("justifyleft")) {
- item.disable(false, true);
- } else {
- item.enable(false, true);
- var jitems = item.getItems();
- for (var j = 0; j < jitems.length; j++) {
- var name = jitems[j]._name;
- var value = this._richText.queryCommandValue(name);
- if (typeof value == "boolean" && value) {
- value = name;
- break;
- } else {
- if (typeof value == "string") {
- value = "justify" + value;
- } else {
- value = null;
- }
- }
- }
- if (!value) {
- value = "justifyleft";
- }
- item.setValue(value, false, true);
- }
- }
- catch (err) {
- }
- } else {
- if (cmd == "listGroup") {
- var litems = item.getItems();
- for (var j = 0; j < litems.length; j++) {
- this.updateItem(litems[j]);
- }
- } else {
- this.updateItem(item);
- }
- }
- }
- }
- }, updateItem:function (item) {
- try {
- var cmd = item._name;
- var enabled = this._richText.queryCommandEnabled(cmd);
- item.setEnabled(enabled, false, true);
- var active = this._richText.queryCommandState(cmd);
- if (active && cmd == "underline") {
- active = !this._richText.queryCommandEnabled("unlink");
- }
- item.setSelected(active, false, true);
- return true;
- }
- catch (err) {
- return false;
- }
- }, supportedCommands:dojo.widget.Editor.supportedCommands.concat(), isSupportedCommand:function (cmd) {
- var yes = dojo.lang.inArray(cmd, this.supportedCommands);
- if (!yes) {
- try {
- var richText = this._richText || dojo.widget.HtmlRichText.prototype;
- yes = richText.queryCommandAvailable(cmd);
- }
- catch (E) {
- }
- }
- return yes;
- }, getCommandImage:function (cmd) {
- if (cmd == "|") {
- return cmd;
- } else {
- return dojo.uri.moduleUri("dojo.widget", "templates/buttons/" + cmd + ".gif");
- }
- }, _action:function (e) {
- this._fire("onAction", e.getValue());
- }, _setValue:function (a, b) {
- this._fire("onAction", a.getValue(), b);
- }, _save:function (e) {
- if (!this._richText.isClosed) {
- if (this.saveUrl.length) {
- var content = {};
- content[this.saveArgName] = this.getHtml();
- dojo.io.bind({method:this.saveMethod, url:this.saveUrl, content:content});
- } else {
- dojo.debug("please set a saveUrl for the editor");
- }
- if (this.closeOnSave) {
- this._richText.close(e.getName().toLowerCase() == "save");
- }
- }
- }, _close:function (e) {
- if (!this._richText.isClosed) {
- this._richText.close(e.getName().toLowerCase() == "save");
- }
- }, onAction:function (cmd, value) {
- switch (cmd) {
- case "createlink":
- if (!(value = prompt("Please enter the URL of the link:", "http://"))) {
- return;
- }
- break;
- case "insertimage":
- if (!(value = prompt("Please enter the URL of the image:", "http://"))) {
- return;
- }
- break;
- }
- this._richText.execCommand(cmd, value);
- }, fillInTemplate:function (args, frag) {
- }, _fire:function (eventName) {
- if (dojo.lang.isFunction(this[eventName])) {
- var args = [];
- if (arguments.length == 1) {
- args.push(this);
- } else {
- for (var i = 1; i < arguments.length; i++) {
- args.push(arguments[i]);
- }
- }
- this[eventName].apply(this, args);
- }
- }, getHtml:function () {
- this._richText.contentFilters = this._richText.contentFilters.concat(this.contentFilters);
- return this._richText.getEditorContent();
- }, getEditorContent:function () {
- return this.getHtml();
- }, onClose:function (save, hide) {
- this.disableToolbar(hide);
- if (save) {
- this._fire("onSave");
- } else {
- this._fire("onCancel");
- }
- }, onLoad:function () {
- }, onSave:function () {
- }, onCancel:function () {
- }});