Blame | Letzte Änderung | Log anzeigen | RSS feed
// Simple CSS (className) plugin for the editor// Sponsored by http://www.miro.com.au// Implementation by Mihai Bazon, http://dynarch.com/mishoo.//// (c) dynarch.com 2003// Distributed under the same terms as HTMLArea itself.// This notice MUST stay intact for use (see license.txt).//// $Id: css.js 42 2007-04-18 10:07:34Z tiefland $function CSS(editor, params) {this.editor = editor;var cfg = editor.config;var toolbar = cfg.toolbar;var self = this;var i18n = CSS.I18N;var plugin_config = params[0];var combos = plugin_config.combos;var first = true;for (var i = combos.length; --i >= 0;) {var combo = combos[i];var id = "CSS-class" + i;var css_class = {id : id,options : combo.options,action : function(editor) { self.onSelect(editor, this, combo.context, combo.updatecontextclass); },refresh : function(editor) { self.updateValue(editor, this); },context : combo.context};cfg.registerDropdown(css_class);// prepend to the toolbartoolbar[1].splice(0, 0, first ? "separator" : "space");toolbar[1].splice(0, 0, id);if (combo.label)toolbar[1].splice(0, 0, "T[" + combo.label + "]");first = false;}};CSS._pluginInfo = {name : "CSS",version : "1.0",developer : "Mihai Bazon",developer_url : "http://dynarch.com/mishoo/",c_owner : "Mihai Bazon",sponsor : "Miro International",sponsor_url : "http://www.miro.com.au",license : "htmlArea"};CSS.prototype.onSelect = function(editor, obj, context, updatecontextclass) {var tbobj = editor._toolbarObjects[obj.id];var index = tbobj.element.selectedIndex;var className = tbobj.element.value;// retrieve parent element of the selectionvar parent = editor.getParentElement();var surround = true;var is_span = (parent && parent.tagName.toLowerCase() == "span");var update_parent = (context && updatecontextclass && parent && parent.tagName.toLowerCase() == context);if (update_parent) {parent.className = className;editor.updateToolbar();return;}if (is_span && index == 0 && !/\S/.test(parent.style.cssText)) {while (parent.firstChild) {parent.parentNode.insertBefore(parent.firstChild, parent);}parent.parentNode.removeChild(parent);editor.updateToolbar();return;}if (is_span) {// maybe we could simply change the class of the parent node?if (parent.childNodes.length == 1) {parent.className = className;surround = false;// in this case we should handle the toolbar updation// ourselves.editor.updateToolbar();}}// Other possibilities could be checked but require a lot of code. We// can't afford to do that now.if (surround) {// shit happens ;-) most of the time. this method works, but// it's dangerous when selection spans multiple block-level// elements.editor.surroundHTML("<span class='" + className + "'>", "</span>");}};CSS.prototype.updateValue = function(editor, obj) {var select = editor._toolbarObjects[obj.id].element;var parent = editor.getParentElement();if (typeof parent.className != "undefined" && /\S/.test(parent.className)) {var options = select.options;var value = parent.className;for (var i = options.length; --i >= 0;) {var option = options[i];if (value == option.value) {select.selectedIndex = i;return;}}}select.selectedIndex = 0;};