/* Import theme specific language pack */ tinyMCE.importThemeLanguagePack('advanced'); // Variable declarations var TinyMCE_advanced_autoImportCSSClasses = true; var TinyMCE_advanced_foreColor = "#000000"; var TinyMCE_advanced_anchorName = ""; var TinyMCE_advanced_buttons = [ // Control id, button img, button title, command, user_interface, value ['bold', '{$lang_bold_img}', '{$lang_bold_desc}', 'Bold'], ['italic', '{$lang_italic_img}', '{$lang_italic_desc}', 'Italic'], ['underline', '{$lang_underline_img}', '{$lang_underline_desc}', 'Underline'], ['strikethrough', 'strikethrough.gif', '{$lang_striketrough_desc}', 'Strikethrough'], ['justifyleft', 'left.gif', '{$lang_justifyleft_desc}', 'JustifyLeft'], ['justifycenter', 'center.gif', '{$lang_justifycenter_desc}', 'JustifyCenter'], ['justifyright', 'right.gif', '{$lang_justifyright_desc}', 'JustifyRight'], ['justifyfull', 'full.gif', '{$lang_justifyfull_desc}', 'JustifyFull'], ['bullist', 'bullist.gif', '{$lang_bullist_desc}', 'InsertUnorderedList'], ['numlist', 'numlist.gif', '{$lang_numlist_desc}', 'InsertOrderedList'], ['outdent', 'outdent.gif', '{$lang_outdent_desc}', 'Outdent'], ['indent', 'indent.gif', '{$lang_indent_desc}', 'Indent'], ['cut', 'cut.gif', '{$lang_cut_desc}', 'Cut'], ['copy', 'copy.gif', '{$lang_copy_desc}', 'Copy'], ['paste', 'paste.gif', '{$lang_paste_desc}', 'Paste'], ['undo', 'undo.gif', '{$lang_undo_desc}', 'Undo'], ['redo', 'redo.gif', '{$lang_redo_desc}', 'Redo'], ['link', 'link.gif', '{$lang_link_desc}', 'mceLink', true], ['unlink', 'unlink.gif', '{$lang_unlink_desc}', 'unlink'], ['image', 'image.gif', '{$lang_image_desc}', 'mceImage', true], ['cleanup', 'cleanup.gif', '{$lang_cleanup_desc}', 'mceCleanup'], ['help', 'help.gif', '{$lang_help_desc}', 'mceHelp'], ['code', 'code.gif', '{$lang_theme_code_desc}', 'mceCodeEditor'], ['hr', 'hr.gif', '{$lang_theme_hr_desc}', 'inserthorizontalrule'], ['removeformat', 'removeformat.gif', '{$lang_theme_removeformat_desc}', 'removeformat'], ['sub', 'sub.gif', '{$lang_theme_sub_desc}', 'subscript'], ['sup', 'sup.gif', '{$lang_theme_sup_desc}', 'superscript'], ['forecolor', 'forecolor.gif', '{$lang_theme_forecolor_desc}', 'mceForeColor', true], ['backcolor', 'backcolor.gif', '{$lang_theme_backcolor_desc}', 'mceBackColor', true], ['charmap', 'charmap.gif', '{$lang_theme_charmap_desc}', 'mceCharMap'], ['visualaid', 'visualaid.gif', '{$lang_theme_visualaid_desc}', 'mceToggleVisualAid'], ['anchor', 'anchor.gif', '{$lang_theme_anchor_desc}', 'mceInsertAnchor'], ['newdocument', 'newdocument.gif', '{$lang_newdocument_desc}', 'mceNewDocument'] ]; /** * Returns HTML code for the specificed control. */ function TinyMCE_advanced_getControlHTML(button_name) { var buttonTileMap = new Array('anchor.gif','backcolor.gif','bullist.gif','center.gif', 'charmap.gif','cleanup.gif','code.gif','copy.gif','custom_1.gif', 'cut.gif','forecolor.gif','full.gif','help.gif','hr.gif', 'image.gif','indent.gif','left.gif','link.gif','numlist.gif', 'outdent.gif','paste.gif','redo.gif','removeformat.gif', 'right.gif','strikethrough.gif','sub.gif','sup.gif','undo.gif', 'unlink.gif','visualaid.gif'); // Lookup button in button list for (var i=0; i'; } } } // Old style return ''; } } // Custom controlls other than buttons switch (button_name) { case "formatselect": var html = ''; //formatselect return html; case "styleselect": //styleselect return ''; case "fontselect": //fontselect return ''; case "fontsizeselect": //fontsizeselect return ''; case "|": case "separator": return ''; case "spacer": return ''; case "rowseparator": return '
'; } return ""; } /** * Theme specific exec command handeling. */ function TinyMCE_advanced_execCommand(editor_id, element, command, user_interface, value) { switch (command) { case "mceForeColor": var template = new Array(); var inputColor = TinyMCE_advanced_foreColor; if (!inputColor) { inputColor = "#000000"; } template['file'] = 'color_picker.htm'; template['width'] = 210; template['height'] = 200; tinyMCE.openWindow(template, {editor_id : editor_id, command : "forecolor", input_color : inputColor}); //mceForeColor return true; case "mceBackColor": var template = new Array(); var inputColor = TinyMCE_advanced_foreColor; if (!inputColor) { inputColor = "#000000"; } template['file'] = 'color_picker.htm'; template['width'] = 210; template['height'] = 200; tinyMCE.openWindow(template, {editor_id : editor_id, command : "HiliteColor", input_color : inputColor}); //mceBackColor return true; case "mceCodeEditor": var template = new Array(); template['file'] = 'source_editor.htm'; template['width'] = tinyMCE.getParam("theme_advanced_source_editor_width", 500); template['height'] = tinyMCE.getParam("theme_advanced_source_editor_height", 400); tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no"}); //mceCodeEditor return true; case "mceCharMap": var template = new Array(); template['file'] = 'charmap.htm'; template['width'] = 550; template['height'] = 280; tinyMCE.openWindow(template, {editor_id : editor_id}); //mceCharMap return true; case "mceInsertAnchor": var template = new Array(); template['file'] = 'anchor.htm'; template['width'] = 320; template['height'] = 130; tinyMCE.openWindow(template, {editor_id : editor_id, name : TinyMCE_advanced_anchorName, action : (TinyMCE_advanced_anchorName == "" ? "insert" : "update")}); //mceInsertAnchor return true; case "mceNewDocument": if (confirm(tinyMCE.getLang('lang_newdocument'))) tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ''); return true; } // Default behavior return false; } /** * Editor instance template function. */ function TinyMCE_advanced_getEditorTemplate(settings, editorId) { function removeFromArray(in_array, remove_array) { var outArray = new Array(); for (var i=0; i' + key + ''; } TinyMCE_advanced_autoImportCSSClasses = false; } switch(layoutManager) { case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... var toolbarHTML = ""; var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Render row 1 var buttonNamesRow1 = tinyMCE.getParam("theme_advanced_buttons1", "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", true, ','); buttonNamesRow1 = removeFromArray(buttonNamesRow1, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); buttonNamesRow1 = addToArray(buttonNamesRow1, tinyMCE.getParam("theme_advanced_buttons1_add", "", true, ',')); buttonNamesRow1 = addToArray(tinyMCE.getParam("theme_advanced_buttons1_add_before", "", true, ','), buttonNamesRow1); for (var i=0; i 0) { toolbarHTML += "
"; deltaHeight -= 23; } // Render row 2 var buttonNamesRow2 = tinyMCE.getParam("theme_advanced_buttons2", "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code", true, ','); buttonNamesRow2 = removeFromArray(buttonNamesRow2, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); buttonNamesRow2 = addToArray(buttonNamesRow2, tinyMCE.getParam("theme_advanced_buttons2_add", "", true, ',')); buttonNamesRow2 = addToArray(tinyMCE.getParam("theme_advanced_buttons2_add_before", "", true, ','), buttonNamesRow2); for (var i=0; i 0) { toolbarHTML += "
"; deltaHeight -= 23; } // Render row 3 var buttonNamesRow3 = tinyMCE.getParam("theme_advanced_buttons3", "hr,removeformat,visualaid,separator,sub,sup,separator,charmap", true, ','); buttonNamesRow3 = removeFromArray(buttonNamesRow3, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); buttonNamesRow3 = addToArray(buttonNamesRow3, tinyMCE.getParam("theme_advanced_buttons3_add", "", true, ',')); buttonNamesRow3 = addToArray(tinyMCE.getParam("theme_advanced_buttons3_add_before", "", true, ','), buttonNamesRow3); for (var i=0; i 0) { deltaHeight -= 20; } // Setup template html template['html'] = ''; if (toolbarLocation == "top") { template['html'] += ''; } if (pathLocation == "top") { template['html'] += ''; deltaHeight -= 23; } template['html'] += ''; if (toolbarLocation == "bottom") { template['html'] += ''; } // External toolbar changes if (toolbarLocation == "external") { var bod = document.body; var elm = document.createElement ("div"); toolbarHTML = tinyMCE.replaceVars(toolbarHTML, tinyMCE.settings); toolbarHTML = tinyMCE.replaceVars(toolbarHTML, tinyMCELang); toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); toolbarHTML = tinyMCE.replaceVar(toolbarHTML, "editor_id", editorId); toolbarHTML = tinyMCE.replaceVar(toolbarHTML, "default_document", tinyMCE.baseURL + "/blank.htm"); elm.className = "mceToolbarExternal"; elm.id = "mceExternalToolbar"; elm.innerHTML = '
' + toolbarHTML + '
' + pathHTML + '
' + toolbarHTML + '
'+toolbarHTML+'
'; bod.appendChild (elm); bod.style.marginTop = elm.offsetHeight + "px"; tinyMCE.isExternalToolbar = true; //template['html'] = '
'+toolbarHTML+'
' + template["html"]; } else { tinyMCE.isExternalToolbar = false; } if (pathLocation == "bottom") { template['html'] += '' + pathHTML + ''; deltaHeight -= 23; } template['html'] += ''; //"SimpleLayout" break; case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. template['html'] = ''; var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); //Render Containers: for (var i = 0; i < containers.length; i++) { if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... { template['html'] += ''; } else if (containers[i] == "mceElementpath") // ... mceElementpath: { var pathClass = "mcePath"; if (i == containers.length-1) { pathClass = "mcePathBottom"; } else if (i == 0) { pathClass = "mcePathTop"; } else { deltaHeight-=2; } template['html'] += ''; deltaHeight -= 22; } else //Render normal Container: { var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); var curContainerHTML = ""; var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); for (var j=0; j 0) { curContainerHTML += "
"; deltaHeight -= 23; } template['html'] += '
'; } } template['html'] += '
\ \
' + pathHTML + '
' + curContainerHTML + '
'; //RowLayout break; case "BorderLayout" : //will be like java.awt.BorderLayout of SUN Java... // Not implemented yet... break; case "CustomLayout" : //User defined layout callback... var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") { template = eval(customLayout + "(template);"); } break; default: alert('UNDEFINED LAYOUT MANAGER! PLEASE CHECK YOUR TINYMCE CONFIG!'); //CustomLayout break; } template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); template['delta_width'] = 0; template['delta_height'] = deltaHeight; return template; } /** * Insert link template function. */ function TinyMCE_advanced_getInsertLinkTemplate() { var template = new Array(); template['file'] = 'link.htm'; template['width'] = 300; template['height'] = 150; // Language specific width and height addons template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); return template; }; /** * Insert image template function. */ function TinyMCE_advanced_getInsertImageTemplate() { var template = new Array(); template['file'] = 'image.htm?src={$src}'; template['width'] = 340; template['height'] = 280; // Language specific width and height addons template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); return template; }; /** * Node change handler. */ function TinyMCE_advanced_handleNodeChange (editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { function selectByValue(select_elm, value) { if (select_elm) { for (var i=0; i=0; i--) { var nodeName = path[i].nodeName.toLowerCase(); var nodeData = ""; if (nodeName == "b") { nodeName = "strong"; } if (nodeName == "i") { nodeName = "em"; } if (getAttrib(path[i], 'id') != "") { nodeData += "id: " + path[i].getAttribute('id') + " "; } if (getAttrib(path[i], 'class') != "") { nodeData += "class: " + path[i].getAttribute('class') + " "; } if (getAttrib(path[i], 'className') != "") { nodeData += "class: " + path[i].getAttribute('className') + " "; } if (getAttrib(path[i], 'src') != "") { nodeData += "src: " + path[i].getAttribute('src') + " "; } if (getAttrib(path[i], 'href') != "") { nodeData += "href: " + path[i].getAttribute('href') + " "; } if (nodeName == "img" && getAttrib(path[i], 'name') == "mce_plugin_flash") { nodeName = "flash"; nodeData = ""; } if (getAttrib(path[i], 'name').indexOf("mce_") != 0) { if (getAttrib(path[i], "className") != "") { nodeName += "." + getAttrib(path[i], "className"); } else if (getAttrib(path[i], "class") != "") { nodeName += "." + getAttrib(path[i], "class"); } } if (tinyMCE.isMSIE) { html += '' + nodeName + ''; } else { html += '' + nodeName + ''; } if (i > 0) { html += " » "; } } pathElm.innerHTML = html + " "; } // Get element color var colorElm = tinyMCE.getParentElement(node, "font", "color"); if (colorElm) { TinyMCE_advanced_foreColor = "" + colorElm.color.toUpperCase(); } // Reset old states tinyMCE.switchClassSticky(editor_id + '_justifyleft', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_justifyright', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_justifycenter', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_justifyfull', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_sub', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_sup', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_anchor', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_link', 'mceButtonDisabled', true); tinyMCE.switchClassSticky(editor_id + '_unlink', 'mceButtonDisabled', true); tinyMCE.switchClassSticky(editor_id + '_outdent', 'mceButtonDisabled', true); tinyMCE.switchClassSticky(editor_id + '_image', 'mceButtonNormal'); tinyMCE.switchClassSticky(editor_id + '_hr', 'mceButtonNormal'); // Get anchor name var anchorName = tinyMCE.getParentElement(node, "a", "name"); TinyMCE_advanced_anchorName = ""; if (anchorName) { TinyMCE_advanced_anchorName = anchorName.getAttribute("name"); tinyMCE.switchClassSticky(editor_id + '_anchor', 'mceButtonSelected'); } // Get link var anchorLink = tinyMCE.getParentElement(node, "a", "href"); if (anchorLink || any_selection) { tinyMCE.switchClassSticky(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal', false); tinyMCE.switchClassSticky(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal', false); } // Handle visual aid tinyMCE.switchClassSticky(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal', false); if (undo_levels != -1) { tinyMCE.switchClassSticky(editor_id + '_undo', 'mceButtonDisabled', true); tinyMCE.switchClassSticky(editor_id + '_redo', 'mceButtonDisabled', true); } // Within li, blockquote if (tinyMCE.getParentElement(node, "li,blockquote")) { tinyMCE.switchClassSticky(editor_id + '_outdent', 'mceButtonNormal', false); } // Has redo levels if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) { tinyMCE.switchClassSticky(editor_id + '_redo', 'mceButtonNormal', false); } // Has undo levels if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) { tinyMCE.switchClassSticky(editor_id + '_undo', 'mceButtonNormal', false); } // Select class in select box var selectElm = document.getElementById(editor_id + "_styleSelect"); if (selectElm) { TinyMCE_advanced_setupCSSClasses(editor_id); classNode = node; breakOut = false; var index = 0; do { if (classNode && classNode.className) { for (var i=0; i"); } else { selectByValue(selectElm, ""); } } // Select fontselect var selectElm = document.getElementById(editor_id + "_fontNameSelect"); if (selectElm) { var elm = tinyMCE.getParentElement(node, "font", "face"); if (elm) { selectByValue(selectElm, elm.getAttribute("face")); } else { selectByValue(selectElm, ""); } } // Select fontsize var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); if (selectElm) { var elm = tinyMCE.getParentElement(node, "font", "size"); if (elm && getAttrib(elm, "size") != "") { selectByValue(selectElm, elm.getAttribute("size")); } else { selectByValue(selectElm, "0"); } } // Handle align attributes alignNode = node; breakOut = false; do { if (!alignNode.getAttribute || !alignNode.getAttribute('align')) { continue; } switch (alignNode.getAttribute('align').toLowerCase()) { case "left": tinyMCE.switchClassSticky(editor_id + '_justifyleft', 'mceButtonSelected'); breakOut = true; break; case "right": tinyMCE.switchClassSticky(editor_id + '_justifyright', 'mceButtonSelected'); breakOut = true; break; case "middle": case "center": tinyMCE.switchClassSticky(editor_id + '_justifycenter', 'mceButtonSelected'); breakOut = true; break; case "justify": tinyMCE.switchClassSticky(editor_id + '_justifyfull', 'mceButtonSelected'); breakOut = true; break; } } while (!breakOut && (alignNode = alignNode.parentNode)); // Do special text if (tinyMCE.isGecko && node.nodeType == 3) { var inst = tinyMCE.getInstanceById(editor_id); var doc = inst.getDoc(); if (doc.queryCommandState("Bold")) { tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonSelected'); } if (doc.queryCommandState("Italic")) { tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonSelected'); } if (doc.queryCommandState("Underline") && (node.parentNode == null || node.parentNode.nodeName != "A")) { tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonSelected'); } if (doc.queryCommandState("Strikethrough")) { tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonSelected'); } } // Handle elements do { switch (node.nodeName.toLowerCase()) { case "b": case "strong": tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonSelected'); break; case "i": case "em": tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonSelected'); break; case "u": tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonSelected'); break; case "strike": tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonSelected'); break; case "ul": tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonSelected'); break; case "ol": tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonSelected'); break; case "sub": tinyMCE.switchClassSticky(editor_id + '_sub', 'mceButtonSelected'); break; case "sup": tinyMCE.switchClassSticky(editor_id + '_sup', 'mceButtonSelected'); break; case "hr": tinyMCE.switchClassSticky(editor_id + '_hr', 'mceButtonSelected'); break; case "img": if (getAttrib(node, 'name').indexOf('mce_') != 0) { tinyMCE.switchClassSticky(editor_id + '_image', 'mceButtonSelected'); } break; } } while ((node = node.parentNode)); }; // This function auto imports CSS classes into the class selection droplist function TinyMCE_advanced_setupCSSClasses(editor_id) { if (!TinyMCE_advanced_autoImportCSSClasses) { return; } var selectElm = document.getElementById(editor_id + '_styleSelect'); if (selectElm && selectElm.getAttribute('cssImported') != 'true') { var csses = tinyMCE.getCSSClasses(editor_id); if (csses && selectElm) { for (var i=0; i 0) { selectElm.setAttribute('cssImported', 'true'); } } };