includes/clientside/tinymce/plugins/directionality/editor_plugin_src.js
author Dan
Mon, 03 Dec 2007 18:45:37 -0500
changeset 253 6c7060d36a23
parent 1 fe660c52c48f
permissions -rw-r--r--
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.

/**
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 */

/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('directionality');

var TinyMCE_DirectionalityPlugin = {
	getInfo : function() {
		return {
			longname : 'Directionality',
			author : 'Moxiecode Systems AB',
			authorurl : 'http://tinymce.moxiecode.com',
			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',
			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
		};
	},

	getControlHTML : function(cn) {
		switch (cn) {
			case "ltr":
				return tinyMCE.getButtonHTML(cn, 'lang_directionality_ltr_desc', '{$pluginurl}/images/ltr.gif', 'mceDirectionLTR');

			case "rtl":
				return tinyMCE.getButtonHTML(cn, 'lang_directionality_rtl_desc', '{$pluginurl}/images/rtl.gif', 'mceDirectionRTL');
		}

		return "";
	},

	execCommand : function(editor_id, element, command, user_interface, value) {
		// Handle commands
		switch (command) {
			case "mceDirectionLTR":
				var inst = tinyMCE.getInstanceById(editor_id);
				var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address");

				if (elm)
					elm.setAttribute("dir", "ltr");

				tinyMCE.triggerNodeChange(false);
				return true;

			case "mceDirectionRTL":
				var inst = tinyMCE.getInstanceById(editor_id);
				var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address");

				if (elm)
					elm.setAttribute("dir", "rtl");

				tinyMCE.triggerNodeChange(false);
				return true;
		}

		// Pass to next handler in chain
		return false;
	},

	handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
		function getAttrib(elm, name) {
			return elm.getAttribute(name) ? elm.getAttribute(name) : "";
		}

		if (node == null)
			return;

		var elm = tinyMCE.getParentElement(node, "p,div,td,h1,h2,h3,h4,h5,h6,pre,address");
		if (!elm) {
			tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonDisabled');
			tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonDisabled');
			return true;
		}

		tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonNormal');
		tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonNormal');

		var dir = getAttrib(elm, "dir");
		if (dir == "ltr" || dir == "")
			tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonSelected');
		else
			tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonSelected');

		return true;
	}
};

tinyMCE.addPlugin("directionality", TinyMCE_DirectionalityPlugin);