alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Struts example source code file (RichText.js)

This example Struts source code file (RichText.js) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Struts tags/keywords

can, control, html, html, li, no, public, regexp, regexp, richtexteditable, richtexteditable, style, style, when

The Struts RichText.js source code

/*
	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.RichText");
dojo.require("dojo.widget.*");
dojo.require("dojo.html.*");
dojo.require("dojo.html.layout");
dojo.require("dojo.html.selection");
dojo.require("dojo.event.*");
dojo.require("dojo.string.extras");
dojo.require("dojo.uri.Uri");
dojo.require("dojo.Deferred");
if (!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"]) {
	if (dojo.hostenv.post_load_) {
		(function () {
			var savetextarea = dojo.doc().createElement("textarea");
			savetextarea.id = "dojo.widget.RichText.savedContent";
			savetextarea.style = "display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;";
			dojo.body().appendChild(savetextarea);
		})();
	} else {
		try {
			dojo.doc().write("<textarea id=\"dojo.widget.RichText.savedContent\" " + "style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\">");
		}
		catch (e) {
		}
	}
}
dojo.widget.defineWidget("dojo.widget.RichText", dojo.widget.HtmlWidget, function () {
	this.contentPreFilters = [];
	this.contentPostFilters = [];
	this.contentDomPreFilters = [];
	this.contentDomPostFilters = [];
	this.editingAreaStyleSheets = [];
	if (dojo.render.html.moz) {
		this.contentPreFilters.push(this._fixContentForMoz);
	}
	this._keyHandlers = {};
	if (dojo.Deferred) {
		this.onLoadDeferred = new dojo.Deferred();
	}
}, {inheritWidth:false, focusOnLoad:false, saveName:"", styleSheets:"", _content:"", height:"", minHeight:"1em", isClosed:true, isLoaded:false, useActiveX:false, relativeImageUrls:false, _SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@", onLoadDeferred:null, fillInTemplate:function () {
	dojo.event.topic.publish("dojo.widget.RichText::init", this);
	this.open();
	dojo.event.connect(this, "onKeyPressed", this, "afterKeyPress");
	dojo.event.connect(this, "onKeyPress", this, "keyPress");
	dojo.event.connect(this, "onKeyDown", this, "keyDown");
	dojo.event.connect(this, "onKeyUp", this, "keyUp");
	this.setupDefaultShortcuts();
}, setupDefaultShortcuts:function () {
	var ctrl = this.KEY_CTRL;
	var exec = function (cmd, arg) {
		return arguments.length == 1 ? function () {
			this.execCommand(cmd);
		} : function () {
			this.execCommand(cmd, arg);
		};
	};
	this.addKeyHandler("b", ctrl, exec("bold"));
	this.addKeyHandler("i", ctrl, exec("italic"));
	this.addKeyHandler("u", ctrl, exec("underline"));
	this.addKeyHandler("a", ctrl, exec("selectall"));
	this.addKeyHandler("s", ctrl, function () {
		this.save(true);
	});
	this.addKeyHandler("1", ctrl, exec("formatblock", "h1"));
	this.addKeyHandler("2", ctrl, exec("formatblock", "h2"));
	this.addKeyHandler("3", ctrl, exec("formatblock", "h3"));
	this.addKeyHandler("4", ctrl, exec("formatblock", "h4"));
	this.addKeyHandler("\\", ctrl, exec("insertunorderedlist"));
	if (!dojo.render.html.ie) {
		this.addKeyHandler("Z", ctrl, exec("redo"));
	}
}, events:["onBlur", "onFocus", "onKeyPress", "onKeyDown", "onKeyUp", "onClick"], open:function (element) {
	if (this.onLoadDeferred.fired >= 0) {
		this.onLoadDeferred = new dojo.Deferred();
	}
	var h = dojo.render.html;
	if (!this.isClosed) {
		this.close();
	}
	dojo.event.topic.publish("dojo.widget.RichText::open", this);
	this._content = "";
	if ((arguments.length == 1) && (element["nodeName"])) {
		this.domNode = element;
	}
	if ((this.domNode["nodeName"]) && (this.domNode.nodeName.toLowerCase() == "textarea")) {
		this.textarea = this.domNode;
		var html = this._preFilterContent(this.textarea.value);
		this.domNode = dojo.doc().createElement("div");
		dojo.html.copyStyle(this.domNode, this.textarea);
		var tmpFunc = dojo.lang.hitch(this, function () {
			with (this.textarea.style) {
				display = "block";
				position = "absolute";
				left = top = "-1000px";
				if (h.ie) {
					this.__overflow = overflow;
					overflow = "hidden";
				}
			}
		});
		if (h.ie) {
			setTimeout(tmpFunc, 10);
		} else {
			tmpFunc();
		}
		if (!h.safari) {
			dojo.html.insertBefore(this.domNode, this.textarea);
		}
		if (this.textarea.form) {
			dojo.event.connect("before", this.textarea.form, "onsubmit", dojo.lang.hitch(this, function () {
				this.textarea.value = this.getEditorContent();
			}));
		}
		var editor = this;
		dojo.event.connect(this, "postCreate", function () {
			dojo.html.insertAfter(editor.textarea, editor.domNode);
		});
	} else {
		var html = this._preFilterContent(dojo.string.trim(this.domNode.innerHTML));
	}
	if (html == "") {
		html = " ";
	}
	var content = dojo.html.getContentBox(this.domNode);
	this._oldHeight = content.height;
	this._oldWidth = content.width;
	this._firstChildContributingMargin = this._getContributingMargin(this.domNode, "top");
	this._lastChildContributingMargin = this._getContributingMargin(this.domNode, "bottom");
	this.savedContent = html;
	this.domNode.innerHTML = "";
	this.editingArea = dojo.doc().createElement("div");
	this.domNode.appendChild(this.editingArea);
	if ((this.domNode["nodeName"]) && (this.domNode.nodeName == "LI")) {
		this.domNode.innerHTML = " <br>";
	}
	if (this.saveName != "" && (!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"])) {
		var saveTextarea = dojo.doc().getElementById("dojo.widget.RichText.savedContent");
		if (saveTextarea.value != "") {
			var datas = saveTextarea.value.split(this._SEPARATOR);
			for (var i = 0; i < datas.length; i++) {
				var data = datas[i].split(":");
				if (data[0] == this.saveName) {
					html = data[1];
					datas.splice(i, 1);
					break;
				}
			}
		}
		dojo.event.connect("before", window, "onunload", this, "_saveContent");
	}
	if (h.ie70 && this.useActiveX) {
		dojo.debug("activeX in ie70 is not currently supported, useActiveX is ignored for now.");
		this.useActiveX = false;
	}
	if (this.useActiveX && h.ie) {
		var self = this;
		setTimeout(function () {
			self._drawObject(html);
		}, 0);
	} else {
		if (h.ie || this._safariIsLeopard() || h.opera) {
			this.iframe = dojo.doc().createElement("iframe");
			this.iframe.src = "javascript:void(0)";
			this.editorObject = this.iframe;
			with (this.iframe.style) {
				border = "0";
				width = "100%";
			}
			this.iframe.frameBorder = 0;
			this.editingArea.appendChild(this.iframe);
			this.window = this.iframe.contentWindow;
			this.document = this.window.document;
			this.document.open();
			this.document.write("<html>
"); this.document.close(); this.editNode = this.document.body.firstChild; this.editNode.contentEditable = true; with (this.iframe.style) { if (h.ie70) { if (this.height) { height = this.height; } if (this.minHeight) { minHeight = this.minHeight; } } else { height = this.height ? this.height : this.minHeight; } } var formats = ["p", "pre", "address", "h1", "h2", "h3", "h4", "h5", "h6", "ol", "div", "ul"]; var localhtml = ""; for (var i in formats) { if (formats[i].charAt(1) != "l") { localhtml += "<" + formats[i] + ">content"; } else { localhtml += "<" + formats[i] + ">
  • content
  • "; } } with (this.editNode.style) { position = "absolute"; left = "-2000px"; top = "-2000px"; } this.editNode.innerHTML = localhtml; var node = this.editNode.firstChild; while (node) { dojo.withGlobal(this.window, "selectElement", dojo.html.selection, [node.firstChild]); var nativename = node.tagName.toLowerCase(); this._local2NativeFormatNames[nativename] = this.queryCommandValue("formatblock"); this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename; node = node.nextSibling; } with (this.editNode.style) { position = ""; left = ""; top = ""; } this.editNode.innerHTML = html; if (this.height) { this.document.body.style.overflowY = "scroll"; } dojo.lang.forEach(this.events, function (e) { dojo.event.connect(this.editNode, e.toLowerCase(), this, e); }, this); this.onLoad(); } else { this._drawIframe(html); this.editorObject = this.iframe; } } if (this.domNode.nodeName == "LI") { this.domNode.lastChild.style.marginTop = "-1.2em"; } dojo.html.addClass(this.domNode, "RichTextEditable"); this.isClosed = false; }, _hasCollapseableMargin:function (element, side) { if (dojo.html.getPixelValue(element, "border-" + side + "-width", false)) { return false; } else { if (dojo.html.getPixelValue(element, "padding-" + side, false)) { return false; } else { return true; } } }, _getContributingMargin:function (element, topOrBottom) { if (topOrBottom == "top") { var siblingAttr = "previousSibling"; var childSiblingAttr = "nextSibling"; var childAttr = "firstChild"; var marginProp = "margin-top"; var siblingMarginProp = "margin-bottom"; } else { var siblingAttr = "nextSibling"; var childSiblingAttr = "previousSibling"; var childAttr = "lastChild"; var marginProp = "margin-bottom"; var siblingMarginProp = "margin-top"; } var elementMargin = dojo.html.getPixelValue(element, marginProp, false); function isSignificantNode(element) { return !(element.nodeType == 3 && dojo.string.isBlank(element.data)) && dojo.html.getStyle(element, "display") != "none" && !dojo.html.isPositionAbsolute(element); } var childMargin = 0; var child = element[childAttr]; while (child) { while ((!isSignificantNode(child)) && child[childSiblingAttr]) { child = child[childSiblingAttr]; } childMargin = Math.max(childMargin, dojo.html.getPixelValue(child, marginProp, false)); if (!this._hasCollapseableMargin(child, topOrBottom)) { break; } child = child[childAttr]; } if (!this._hasCollapseableMargin(element, topOrBottom)) { return parseInt(childMargin); } var contextMargin = 0; var sibling = element[siblingAttr]; while (sibling) { if (isSignificantNode(sibling)) { contextMargin = dojo.html.getPixelValue(sibling, siblingMarginProp, false); break; } sibling = sibling[siblingAttr]; } if (!sibling) { contextMargin = dojo.html.getPixelValue(element.parentNode, marginProp, false); } if (childMargin > elementMargin) { return parseInt(Math.max((childMargin - elementMargin) - contextMargin, 0)); } else { return 0; } }, _drawIframe:function (html) { var oldMoz = Boolean(dojo.render.html.moz && (typeof window.XML == "undefined")); if (!this.iframe) { var currentDomain = (new dojo.uri.Uri(dojo.doc().location)).host; this.iframe = dojo.doc().createElement("iframe"); with (this.iframe) { style.border = "none"; style.lineHeight = "0"; style.verticalAlign = "bottom"; scrolling = this.height ? "auto" : "no"; } } if (djConfig["useXDomain"] && !djConfig["dojoRichTextFrameUrl"]) { dojo.debug("dojo.widget.RichText: When using cross-domain Dojo builds," + " please save src/widget/templates/richtextframe.html to your domain and set djConfig.dojoRichTextFrameUrl" + " to the path on your domain to richtextframe.html"); } this.iframe.src = (djConfig["dojoRichTextFrameUrl"] || dojo.uri.moduleUri("dojo.widget", "templates/richtextframe.html")) + ((dojo.doc().domain != currentDomain) ? ("#" + dojo.doc().domain) : ""); this.iframe.width = this.inheritWidth ? this._oldWidth : "100%"; if (this.height) { this.iframe.style.height = this.height; } else { var height = this._oldHeight; if (this._hasCollapseableMargin(this.domNode, "top")) { height += this._firstChildContributingMargin; } if (this._hasCollapseableMargin(this.domNode, "bottom")) { height += this._lastChildContributingMargin; } this.iframe.height = height; } var tmpContent = dojo.doc().createElement("div"); tmpContent.innerHTML = html; this.editingArea.appendChild(tmpContent); if (this.relativeImageUrls) { var imgs = tmpContent.getElementsByTagName("img"); for (var i = 0; i < imgs.length; i++) { imgs[i].src = (new dojo.uri.Uri(dojo.global().location, imgs[i].src)).toString(); } html = tmpContent.innerHTML; } var firstChild = dojo.html.firstElement(tmpContent); var lastChild = dojo.html.lastElement(tmpContent); if (firstChild) { firstChild.style.marginTop = this._firstChildContributingMargin + "px"; } if (lastChild) { lastChild.style.marginBottom = this._lastChildContributingMargin + "px"; } this.editingArea.appendChild(this.iframe); if (dojo.render.html.safari) { this.iframe.src = this.iframe.src; } var _iframeInitialized = false; var ifrFunc = dojo.lang.hitch(this, function () { if (!_iframeInitialized) { _iframeInitialized = true; } else { return; } if (!this.editNode) { if (this.iframe.contentWindow) { this.window = this.iframe.contentWindow; this.document = this.iframe.contentWindow.document; } else { if (this.iframe.contentDocument) { this.window = this.iframe.contentDocument.window; this.document = this.iframe.contentDocument; } } var getStyle = (function (domNode) { return function (style) { return dojo.html.getStyle(domNode, style); }; })(this.domNode); var font = getStyle("font-weight") + " " + getStyle("font-size") + " " + getStyle("font-family"); var lineHeight = "1.0"; var lineHeightStyle = dojo.html.getUnitValue(this.domNode, "line-height"); if (lineHeightStyle.value && lineHeightStyle.units == "") { lineHeight = lineHeightStyle.value; } dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:0;}" + "body{top:0;left:0;right:0;" + (((this.height) || (dojo.render.html.opera)) ? "" : "position:fixed;") + "font:" + font + ";" + "min-height:" + this.minHeight + ";" + "line-height:" + lineHeight + "}" + "p{margin: 1em 0 !important;}" + "body > *:first-child{padding-top:0 !important;margin-top:" + this._firstChildContributingMargin + "px !important;}" + "body > *:last-child{padding-bottom:0 !important;margin-bottom:" + this._lastChildContributingMargin + "px !important;}" + "li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n" + "li{min-height:1.2em;}" + "", this.document); dojo.html.removeNode(tmpContent); this.document.body.innerHTML = html; if (oldMoz || dojo.render.html.safari) { this.document.designMode = "on"; } this.onLoad(); } else { dojo.html.removeNode(tmpContent); this.editNode.innerHTML = html; this.onDisplayChanged(); } }); if (this.editNode) { ifrFunc(); } else { if (dojo.render.html.moz) { this.iframe.onload = function () { setTimeout(ifrFunc, 250); }; } else { this.iframe.onload = ifrFunc; } } }, _applyEditingAreaStyleSheets:function () { var files = []; if (this.styleSheets) { files = this.styleSheets.split(";"); this.styleSheets = ""; } files = files.concat(this.editingAreaStyleSheets); this.editingAreaStyleSheets = []; if (files.length > 0) { for (var i = 0; i < files.length; i++) { var url = files[i]; if (url) { this.addStyleSheet(dojo.uri.dojoUri(url)); } } } }, addStyleSheet:function (uri) { var url = uri.toString(); if (dojo.lang.find(this.editingAreaStyleSheets, url) > -1) { dojo.debug("dojo.widget.RichText.addStyleSheet: Style sheet " + url + " is already applied to the editing area!"); return; } if (url.charAt(0) == "." || (url.charAt(0) != "/" && !uri.host)) { url = (new dojo.uri.Uri(dojo.global().location, url)).toString(); } this.editingAreaStyleSheets.push(url); if (this.document.createStyleSheet) { this.document.createStyleSheet(url); } else { var head = this.document.getElementsByTagName("head")[0]; var stylesheet = this.document.createElement("link"); with (stylesheet) { rel = "stylesheet"; type = "text/css"; href = url; } head.appendChild(stylesheet); } }, removeStyleSheet:function (uri) { var url = uri.toString(); if (url.charAt(0) == "." || (url.charAt(0) != "/" && !uri.host)) { url = (new dojo.uri.Uri(dojo.global().location, url)).toString(); } var index = dojo.lang.find(this.editingAreaStyleSheets, url); if (index == -1) { dojo.debug("dojo.widget.RichText.removeStyleSheet: Style sheet " + url + " is not applied to the editing area so it can not be removed!"); return; } delete this.editingAreaStyleSheets[index]; var links = this.document.getElementsByTagName("link"); for (var i = 0; i < links.length; i++) { if (links[i].href == url) { if (dojo.render.html.ie) { links[i].href = ""; } dojo.html.removeNode(links[i]); break; } } }, _drawObject:function (html) { this.object = dojo.html.createExternalElement(dojo.doc(), "object"); with (this.object) { classid = "clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A"; width = this.inheritWidth ? this._oldWidth : "100%"; style.height = this.height ? this.height : (this._oldHeight + "px"); Scrollbars = this.height ? true : false; Appearance = this._activeX.appearance.flat; } this.editorObject = this.object; this.editingArea.appendChild(this.object); this.object.attachEvent("DocumentComplete", dojo.lang.hitch(this, "onLoad")); dojo.lang.forEach(this.events, function (e) { this.object.attachEvent(e.toLowerCase(), dojo.lang.hitch(this, e)); }, this); this.object.DocumentHTML = "<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">" + "" + "" + "
    " + html + "
    "; this._cacheLocalBlockFormatNames(); }, _local2NativeFormatNames:{}, _native2LocalFormatNames:{}, _cacheLocalBlockFormatNames:function () { if (!this._native2LocalFormatNames["p"]) { var obj = this.object; var error = false; if (!obj) { try { obj = dojo.html.createExternalElement(dojo.doc(), "object"); obj.classid = "clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A"; dojo.body().appendChild(obj); obj.DocumentHTML = "<html>"; } catch (e) { error = true; } } try { var oNamesParm = new ActiveXObject("DEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam"); obj.ExecCommand(this._activeX.command["getblockformatnames"], 0, oNamesParm); var vbNamesArray = new VBArray(oNamesParm.Names); var localFormats = vbNamesArray.toArray(); var nativeFormats = ["p", "pre", "address", "h1", "h2", "h3", "h4", "h5", "h6", "ol", "ul", "", "", "", "", "div"]; for (var i = 0; i < nativeFormats.length; ++i) { if (nativeFormats[i].length > 0) { this._local2NativeFormatNames[localFormats[i]] = nativeFormats[i]; this._native2LocalFormatNames[nativeFormats[i]] = localFormats[i]; } } } catch (e) { error = true; } if (obj && !this.object) { dojo.body().removeChild(obj); } } return !error; }, _isResized:function () { return false; }, onLoad:function (e) { this.isLoaded = true; if (this.object) { this.document = this.object.DOM; this.window = this.document.parentWindow; this.editNode = this.document.body.firstChild; this.editingArea.style.height = this.height ? this.height : this.minHeight; if (!this.height) { this.connect(this, "onDisplayChanged", "_updateHeight"); } this.window._frameElement = this.object; } else { if (this.iframe && !dojo.render.html.ie) { this.editNode = this.document.body; if (!this.height) { this.connect(this, "onDisplayChanged", "_updateHeight"); } try { this.document.execCommand("useCSS", false, true); this.document.execCommand("styleWithCSS", false, false); } catch (e2) { } if (dojo.render.html.safari) { this.connect(this.editNode, "onblur", "onBlur"); this.connect(this.editNode, "onfocus", "onFocus"); this.connect(this.editNode, "onclick", "onFocus"); this.interval = setInterval(dojo.lang.hitch(this, "onDisplayChanged"), 750); } else { if (dojo.render.html.mozilla || dojo.render.html.opera) { var doc = this.document; var addListener = dojo.event.browser.addListener; var self = this; dojo.lang.forEach(this.events, function (e) { var l = addListener(self.document, e.substr(2).toLowerCase(), dojo.lang.hitch(self, e)); if (e == "onBlur") { var unBlur = {unBlur:function (e) { dojo.event.browser.removeListener(doc, "blur", l); }}; dojo.event.connect("before", self, "close", unBlur, "unBlur"); } }); } } } else { if (dojo.render.html.ie) { if (!this.height) { this.connect(this, "onDisplayChanged", "_updateHeight"); } this.editNode.style.zoom = 1; } } } this._applyEditingAreaStyleSheets(); if (this.focusOnLoad) { this.focus(); } this.onDisplayChanged(e); if (this.onLoadDeferred) { this.onLoadDeferred.callback(true); } }, onKeyDown:function (e) { if ((!e) && (this.object)) { e = dojo.event.browser.fixEvent(this.window.event); } if ((dojo.render.html.ie) && (e.keyCode == e.KEY_TAB)) { e.preventDefault(); e.stopPropagation(); this.execCommand((e.shiftKey ? "outdent" : "indent")); } else { if (dojo.render.html.ie) { if ((65 <= e.keyCode) && (e.keyCode <= 90)) { e.charCode = e.keyCode; this.onKeyPress(e); } } } }, onKeyUp:function (e) { return; }, KEY_CTRL:1, onKeyPress:function (e) { if ((!e) && (this.object)) { e = dojo.event.browser.fixEvent(this.window.event); } var modifiers = e.ctrlKey ? this.KEY_CTRL : 0; if (this._keyHandlers[e.key]) { var handlers = this._keyHandlers[e.key], i = 0, handler; while (handler = handlers[i++]) { if (modifiers == handler.modifiers) { e.preventDefault(); handler.handler.call(this); break; } } } dojo.lang.setTimeout(this, this.onKeyPressed, 1, e); }, addKeyHandler:function (key, modifiers, handler) { if (!(this._keyHandlers[key] instanceof Array)) { this._keyHandlers[key] = []; } this._keyHandlers[key].push({modifiers:modifiers || 0, handler:handler}); }, onKeyPressed:function (e) { this.onDisplayChanged(); }, onClick:function (e) { this.onDisplayChanged(e); }, onBlur:function (e) { }, _initialFocus:true, onFocus:function (e) { if ((dojo.render.html.mozilla) && (this._initialFocus)) { this._initialFocus = false; if (dojo.string.trim(this.editNode.innerHTML) == " ") { this.placeCursorAtStart(); } } }, blur:function () { if (this.iframe) { this.window.blur(); } else { if (this.object) { this.document.body.blur(); } else { if (this.editNode) { this.editNode.blur(); } } } }, focus:function () { if (this.iframe && !dojo.render.html.ie) { this.window.focus(); } else { if (this.object) { this.document.focus(); } else { if (this.editNode && this.editNode.focus) { this.editNode.focus(); } else { dojo.debug("Have no idea how to focus into the editor!"); } } } }, onDisplayChanged:function (e) { }, _activeX:{command:{bold:5000, italic:5023, underline:5048, justifycenter:5024, justifyleft:5025, justifyright:5026, cut:5003, copy:5002, paste:5032, "delete":5004, undo:5049, redo:5033, removeformat:5034, selectall:5035, unlink:5050, indent:5018, outdent:5031, insertorderedlist:5030, insertunorderedlist:5051, inserttable:5022, insertcell:5019, insertcol:5020, insertrow:5021, deletecells:5005, deletecols:5006, deleterows:5007, mergecells:5029, splitcell:5047, setblockformat:5043, getblockformat:5011, getblockformatnames:5012, setfontname:5044, getfontname:5013, setfontsize:5045, getfontsize:5014, setbackcolor:5042, getbackcolor:5010, setforecolor:5046, getforecolor:5015, findtext:5008, font:5009, hyperlink:5016, image:5017, lockelement:5027, makeabsolute:5028, sendbackward:5036, bringforward:5037, sendbelowtext:5038, bringabovetext:5039, sendtoback:5040, bringtofront:5041, properties:5052}, ui:{"default":0, prompt:1, noprompt:2}, status:{notsupported:0, disabled:1, enabled:3, latched:7, ninched:11}, appearance:{flat:0, inset:1}, state:{unchecked:0, checked:1, gray:2}}, _normalizeCommand:function (cmd) { var drh = dojo.render.html; var command = cmd.toLowerCase(); if (command == "formatblock") { if (drh.safari) { command = "heading"; } } else { if (this.object) { switch (command) { case "createlink": command = "hyperlink"; break; case "insertimage": command = "image"; break; } } else { if (command == "hilitecolor" && !drh.mozilla) { command = "backcolor"; } } } return command; }, _safariIsLeopard:function () { var gt420 = false; if (dojo.render.html.safari) { var tmp = dojo.render.html.UA.split("AppleWebKit/")[1]; var ver = parseFloat(tmp.split(" ")[0]); if (ver >= 420) { gt420 = true; } } return gt420; }, queryCommandAvailable:function (command) { var ie = 1; var mozilla = 1 << 1; var safari = 1 << 2; var opera = 1 << 3; var safari420 = 1 << 4; var gt420 = this._safariIsLeopard(); function isSupportedBy(browsers) { return {ie:Boolean(browsers & ie), mozilla:Boolean(browsers & mozilla), safari:Boolean(browsers & safari), safari420:Boolean(browsers & safari420), opera:Boolean(browsers & opera)}; } var supportedBy = null; switch (command.toLowerCase()) { case "bold": case "italic": case "underline": case "subscript": case "superscript": case "fontname": case "fontsize": case "forecolor": case "hilitecolor": case "justifycenter": case "justifyfull": case "justifyleft": case "justifyright": case "delete": case "selectall": supportedBy = isSupportedBy(mozilla | ie | safari | opera); break; case "createlink": case "unlink": case "removeformat": case "inserthorizontalrule": case "insertimage": case "insertorderedlist": case "insertunorderedlist": case "indent": case "outdent": case "formatblock": case "inserthtml": case "undo": case "redo": case "strikethrough": supportedBy = isSupportedBy(mozilla | ie | opera | safari420); break; case "blockdirltr": case "blockdirrtl": case "dirltr": case "dirrtl": case "inlinedirltr": case "inlinedirrtl": supportedBy = isSupportedBy(ie); break; case "cut": case "copy": case "paste": supportedBy = isSupportedBy(ie | mozilla | safari420); break; case "inserttable": supportedBy = isSupportedBy(mozilla | (this.object ? ie : 0)); break; case "insertcell": case "insertcol": case "insertrow": case "deletecells": case "deletecols": case "deleterows": case "mergecells": case "splitcell": supportedBy = isSupportedBy(this.object ? ie : 0); break; default: return false; } return (dojo.render.html.ie && supportedBy.ie) || (dojo.render.html.mozilla && supportedBy.mozilla) || (dojo.render.html.safari && supportedBy.safari) || (gt420 && supportedBy.safari420) || (dojo.render.html.opera && supportedBy.opera); }, execCommand:function (command, argument) { var returnValue; this.focus(); command = this._normalizeCommand(command); if (argument != undefined) { if (command == "heading") { throw new Error("unimplemented"); } else { if (command == "formatblock") { if (this.object) { argument = this._native2LocalFormatNames[argument]; } else { if (dojo.render.html.ie) { argument = "<" + argument + ">"; } } } } } if (this.object) { switch (command) { case "hilitecolor": command = "setbackcolor"; break; case "forecolor": case "backcolor": case "fontsize": case "fontname": command = "set" + command; break; case "formatblock": command = "setblockformat"; } if (command == "strikethrough") { command = "inserthtml"; var range = this.document.selection.createRange(); if (!range.htmlText) { return; } argument = range.htmlText.strike(); } else { if (command == "inserthorizontalrule") { command = "inserthtml"; argument = "<hr>"; } } if (command == "inserthtml") { var range = this.document.selection.createRange(); if (this.document.selection.type.toUpperCase() == "CONTROL") { for (var i = 0; i < range.length; i++) { range.item(i).outerHTML = argument; } } else { range.pasteHTML(argument); range.select(); } returnValue = true; } else { if (arguments.length == 1) { returnValue = this.object.ExecCommand(this._activeX.command[command], this._activeX.ui.noprompt); } else { returnValue = this.object.ExecCommand(this._activeX.command[command], this._activeX.ui.noprompt, argument); } } } else { if (command == "inserthtml") { if (dojo.render.html.ie) { var insertRange = this.document.selection.createRange(); insertRange.pasteHTML(argument); insertRange.select(); return true; } else { return this.document.execCommand(command, false, argument); } } else { if ((command == "unlink") && (this.queryCommandEnabled("unlink")) && (dojo.render.html.mozilla)) { var selection = this.window.getSelection(); var selectionRange = selection.getRangeAt(0); var selectionStartContainer = selectionRange.startContainer; var selectionStartOffset = selectionRange.startOffset; var selectionEndContainer = selectionRange.endContainer; var selectionEndOffset = selectionRange.endOffset; var a = dojo.withGlobal(this.window, "getAncestorElement", dojo.html.selection, ["a"]); dojo.withGlobal(this.window, "selectElement", dojo.html.selection, [a]); returnValue = this.document.execCommand("unlink", false, null); var selectionRange = this.document.createRange(); selectionRange.setStart(selectionStartContainer, selectionStartOffset); selectionRange.setEnd(selectionEndContainer, selectionEndOffset); selection.removeAllRanges(); selection.addRange(selectionRange); return returnValue; } else { if ((command == "hilitecolor") && (dojo.render.html.mozilla)) { this.document.execCommand("useCSS", false, false); returnValue = this.document.execCommand(command, false, argument); this.document.execCommand("useCSS", false, true); } else { if ((dojo.render.html.ie) && ((command == "backcolor") || (command == "forecolor"))) { argument = arguments.length > 1 ? argument : null; returnValue = this.document.execCommand(command, false, argument); } else { argument = arguments.length > 1 ? argument : null; if (argument || command != "createlink") { returnValue = this.document.execCommand(command, false, argument); } } } } } } this.onDisplayChanged(); return returnValue; }, queryCommandEnabled:function (command) { command = this._normalizeCommand(command); if (this.object) { switch (command) { case "hilitecolor": command = "setbackcolor"; break; case "forecolor": case "backcolor": case "fontsize": case "fontname": command = "set" + command; break; case "formatblock": command = "setblockformat"; break; case "strikethrough": command = "bold"; break; case "inserthorizontalrule": return true; } if (typeof this._activeX.command[command] == "undefined") { return false; } var status = this.object.QueryStatus(this._activeX.command[command]); return ((status != this._activeX.status.notsupported) && (status != this._activeX.status.disabled)); } else { if (dojo.render.html.mozilla) { if (command == "unlink") { return dojo.withGlobal(this.window, "hasAncestorElement", dojo.html.selection, ["a"]); } else { if (command == "inserttable") { return true; } } } var elem = (dojo.render.html.ie) ? this.document.selection.createRange() : this.document; return elem.queryCommandEnabled(command); } }, queryCommandState:function (command) { command = this._normalizeCommand(command); if (this.object) { if (command == "forecolor") { command = "setforecolor"; } else { if (command == "backcolor") { command = "setbackcolor"; } else { if (command == "strikethrough") { return dojo.withGlobal(this.window, "hasAncestorElement", dojo.html.selection, ["strike"]); } else { if (command == "inserthorizontalrule") { return false; } } } } if (typeof this._activeX.command[command] == "undefined") { return null; } var status = this.object.QueryStatus(this._activeX.command[command]); return ((status == this._activeX.status.latched) || (status == this._activeX.status.ninched)); } else { return this.document.queryCommandState(command); } }, queryCommandValue:function (command) { command = this._normalizeCommand(command); if (this.object) { switch (command) { case "forecolor": case "backcolor": case "fontsize": case "fontname": command = "get" + command; return this.object.execCommand(this._activeX.command[command], this._activeX.ui.noprompt); case "formatblock": var retvalue = this.object.execCommand(this._activeX.command["getblockformat"], this._activeX.ui.noprompt); if (retvalue) { return this._local2NativeFormatNames[retvalue]; } } } else { if (dojo.render.html.ie && command == "formatblock") { return this._local2NativeFormatNames[this.document.queryCommandValue(command)] || this.document.queryCommandValue(command); } return this.document.queryCommandValue(command); } }, placeCursorAtStart:function () { this.focus(); if (dojo.render.html.moz && this.editNode.firstChild && this.editNode.firstChild.nodeType != dojo.dom.TEXT_NODE) { dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode.firstChild]); } else { dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode]); } dojo.withGlobal(this.window, "collapse", dojo.html.selection, [true]); }, placeCursorAtEnd:function () { this.focus(); if (dojo.render.html.moz && this.editNode.lastChild && this.editNode.lastChild.nodeType != dojo.dom.TEXT_NODE) { dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode.lastChild]); } else { dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode]); } dojo.withGlobal(this.window, "collapse", dojo.html.selection, [false]); }, replaceEditorContent:function (html) { html = this._preFilterContent(html); if (this.isClosed) { this.domNode.innerHTML = html; } else { if (this.window && this.window.getSelection && !dojo.render.html.moz) { this.editNode.innerHTML = html; } else { if ((this.window && this.window.getSelection) || (this.document && this.document.selection)) { this.execCommand("selectall"); if (dojo.render.html.moz && !html) { html = " "; } this.execCommand("inserthtml", html); } } } }, _preFilterContent:function (html) { var ec = html; dojo.lang.forEach(this.contentPreFilters, function (ef) { ec = ef(ec); }); if (this.contentDomPreFilters.length > 0) { var dom = dojo.doc().createElement("div"); dom.style.display = "none"; dojo.body().appendChild(dom); dom.innerHTML = ec; dojo.lang.forEach(this.contentDomPreFilters, function (ef) { dom = ef(dom); }); ec = dom.innerHTML; dojo.body().removeChild(dom); } return ec; }, _postFilterContent:function (html) { var ec = html; if (this.contentDomPostFilters.length > 0) { var dom = this.document.createElement("div"); dom.innerHTML = ec; dojo.lang.forEach(this.contentDomPostFilters, function (ef) { dom = ef(dom); }); ec = dom.innerHTML; } dojo.lang.forEach(this.contentPostFilters, function (ef) { ec = ef(ec); }); return ec; }, _lastHeight:0, _updateHeight:function () { if (!this.isLoaded) { return; } if (this.height) { return; } var height = dojo.html.getBorderBox(this.editNode).height; if (!height) { height = dojo.html.getBorderBox(this.document.body).height; } if (height == 0) { dojo.debug("Can not figure out the height of the editing area!"); return; } this._lastHeight = height; this.editorObject.style.height = this._lastHeight + "px"; this.window.scrollTo(0, 0); }, _saveContent:function (e) { var saveTextarea = dojo.doc().getElementById("dojo.widget.RichText.savedContent"); saveTextarea.value += this._SEPARATOR + this.saveName + ":" + this.getEditorContent(); }, getEditorContent:function () { var ec = ""; try { ec = (this._content.length > 0) ? this._content : this.editNode.innerHTML; if (dojo.string.trim(ec) == " ") { ec = ""; } } catch (e) { } if (dojo.render.html.ie && !this.object) { var re = new RegExp("(?:<p> 

    [\n\r]*)+$", "i"); ec = ec.replace(re, ""); } ec = this._postFilterContent(ec); if (this.relativeImageUrls) { var siteBase = dojo.global().location.protocol + "//" + dojo.global().location.host; var pathBase = dojo.global().location.pathname; if (pathBase.match(/\/$/)) { } else { var pathParts = pathBase.split("/"); if (pathParts.length) { pathParts.pop(); } pathBase = pathParts.join("/") + "/"; } var sameSite = new RegExp("(<img[^>]* src=[\"'])(" + siteBase + "(" + pathBase + ")?)", "ig"); ec = ec.replace(sameSite, "$1"); } return ec; }, close:function (save, force) { if (this.isClosed) { return false; } if (arguments.length == 0) { save = true; } this._content = this._postFilterContent(this.editNode.innerHTML); var changed = (this.savedContent != this._content); if (this.interval) { clearInterval(this.interval); } if (dojo.render.html.ie && !this.object) { dojo.event.browser.clean(this.editNode); } if (this.iframe) { delete this.iframe; } if (this.textarea) { with (this.textarea.style) { position = ""; left = top = ""; if (dojo.render.html.ie) { overflow = this.__overflow; this.__overflow = null; } } if (save) { this.textarea.value = this._content; } else { this.textarea.value = this.savedContent; } dojo.html.removeNode(this.domNode); this.domNode = this.textarea; } else { if (save) { if (dojo.render.html.moz) { var nc = dojo.doc().createElement("span"); this.domNode.appendChild(nc); nc.innerHTML = this.editNode.innerHTML; } else { this.domNode.innerHTML = this._content; } } else { this.domNode.innerHTML = this.savedContent; } } dojo.html.removeClass(this.domNode, "RichTextEditable"); this.isClosed = true; this.isLoaded = false; delete this.editNode; if (this.window._frameElement) { this.window._frameElement = null; } this.window = null; this.document = null; this.object = null; this.editingArea = null; this.editorObject = null; return changed; }, destroyRendering:function () { }, destroy:function () { this.destroyRendering(); if (!this.isClosed) { this.close(false); } dojo.widget.RichText.superclass.destroy.call(this); }, connect:function (targetObj, targetFunc, thisFunc) { dojo.event.connect(targetObj, targetFunc, this, thisFunc); }, disconnect:function (targetObj, targetFunc, thisFunc) { dojo.event.disconnect(targetObj, targetFunc, this, thisFunc); }, disconnectAllWithRoot:function (targetObj) { dojo.deprecated("disconnectAllWithRoot", "is deprecated. No need to disconnect manually", "0.5"); }, _fixContentForMoz:function (html) { html = html.replace(/<strong([ \>])/gi, ""); html = html.replace(/<em([ \>])/gi, ""); return html; }});

    Other Struts examples (source code examples)

    Here is a short list of links related to this Struts RichText.js source code file:

    ... this post is sponsored by my books ...

    #1 New Release!

    FP Best Seller

     

    new blog posts

     

    Copyright 1998-2021 Alvin Alexander, alvinalexander.com
    All Rights Reserved.

    A percentage of advertising revenue from
    pages under the /java/jwarehouse URI on this website is
    paid back to open source projects.