diff --git a/wp-admin/admin-header.php b/wp-admin/admin-header.php index cfd6e5d3a7..8db3a9d0d5 100644 --- a/wp-admin/admin-header.php +++ b/wp-admin/admin-header.php @@ -85,7 +85,7 @@ tinyMCE.init({ textarea_trigger : "title", width : "100%", theme : "advanced", - theme_advanced_buttons1 : "bold,italic,strikethrough,separator,bullist,numlist,separator,justifyleft,justifycenter,justifyright,separator,link,unlink,image,emotions,separator,undo,redo,code", + theme_advanced_buttons1 : "bold,italic,strikethrough,separator,bullist,numlist,separator,justifyleft,justifycenter,justifyright,separator,link,unlink,image,emotions,separator,undo,redo,wordpress,code", theme_advanced_buttons2 : "", theme_advanced_buttons3 : "", theme_advanced_toolbar_location : "top", @@ -95,7 +95,7 @@ tinyMCE.init({ theme_advanced_resize_horizontal : false, entity_encoding : "raw", extended_valid_elements : "a[id|href|title|onclick],img[class|src|alt|title|width|height|align]", - plugins : "emotions" + plugins : "emotions,wordpress" }); diff --git a/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js new file mode 100644 index 0000000000..0547fb0229 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js @@ -0,0 +1,210 @@ +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('wordpress', ''); + +function TinyMCE_wordpress_initInstance(inst) { + if (!tinyMCE.settings['wordpress_skip_plugin_css']) + tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/wordpress/wordpress.css"); +} + +function TinyMCE_wordpress_getControlHTML(control_name) { + switch (control_name) { + case "wordpress": + return ''; + } + + return ""; +} + +function TinyMCE_wordpress_parseAttributes(attribute_string) { + var attributeName = ""; + var attributeValue = ""; + var withInName; + var withInValue; + var attributes = new Array(); + var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g'); + + if (attribute_string == null || attribute_string.length < 2) + return null; + + withInName = withInValue = false; + + for (var i=0; i'; + tinyMCE.execCommand("mceInsertContent",true,html); + tinyMCE.selectedInstance.repaint(); + return true; + case "mcewordpresspage": + var name = ""; + var template = new Array(); + var inst = tinyMCE.getInstanceById(editor_id); + var focusElm = inst.getFocusElement(); + + // Is selection a image + if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") { + name = getAttrib(focusElm, 'name'); + + if (name != 'mce_plugin_wordpress_page') // Not a wordpress + return true; + + action = "update"; + } + + html = '' + + ''; + tinyMCE.execCommand("mceInsertContent",true,html); + tinyMCE.selectedInstance.repaint(); + return true; + } + + // Pass to next handler in chain + return false; +} + +function TinyMCE_wordpress_cleanup(type, content) { + switch (type) { + + case "insert_to_editor": + var startPos = 0; + + // Parse all tags and replace them with images + while ((startPos = content.indexOf('', startPos)) != -1) { + // Insert image + var contentAfter = content.substring(startPos + 11); + content = content.substring(0, startPos); + content += ' tags and replace them with images + while ((startPos = content.indexOf('', startPos)) != -1) { + // Insert image + var contentAfter = content.substring(startPos + 15); + content = content.substring(0, startPos); + content += ' + var startPos = -1; + while ((startPos = content.indexOf('', startPos); + var attribs = TinyMCE_wordpress_parseAttributes(content.substring(startPos + 4, endPos)); + + if (attribs['name'] == "mce_plugin_wordpress_more") { + endPos += 2; + + var embedHTML = ''; + + // Insert embed/object chunk + chunkBefore = content.substring(0, startPos); + chunkAfter = content.substring(endPos); + content = chunkBefore + embedHTML + chunkAfter; + } + if (attribs['name'] == "mce_plugin_wordpress_page") { + endPos += 2; + + var embedHTML = ''; + + // Insert embed/object chunk + chunkBefore = content.substring(0, startPos); + chunkAfter = content.substring(endPos); + content = chunkBefore + embedHTML + chunkAfter; + } + } + break; + } + + // Pass through to next handler in chain + return content; +} + +function TinyMCE_wordpress_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { + function getAttrib(elm, name) { + return elm.getAttribute(name) ? elm.getAttribute(name) : ""; + } + + tinyMCE.switchClassSticky(editor_id + '_wordpress_more', 'mceButtonNormal'); + tinyMCE.switchClassSticky(editor_id + '_wordpress_page', 'mceButtonNormal'); + + if (node == null) + return; + + do { + if (node.nodeName.toLowerCase() == "img" && getAttrib(node, 'name').indexOf('mce_plugin_wordpress_more') == 0) + tinyMCE.switchClassSticky(editor_id + '_wordpress_more', 'mceButtonSelected'); + if (node.nodeName.toLowerCase() == "img" && getAttrib(node, 'name').indexOf('mce_plugin_wordpress_page') == 0) + tinyMCE.switchClassSticky(editor_id + '_wordpress_page', 'mceButtonSelected'); + } while ((node = node.parentNode)); + + return true; +} diff --git a/wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js new file mode 100644 index 0000000000..0547fb0229 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js @@ -0,0 +1,210 @@ +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('wordpress', ''); + +function TinyMCE_wordpress_initInstance(inst) { + if (!tinyMCE.settings['wordpress_skip_plugin_css']) + tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/wordpress/wordpress.css"); +} + +function TinyMCE_wordpress_getControlHTML(control_name) { + switch (control_name) { + case "wordpress": + return ''; + } + + return ""; +} + +function TinyMCE_wordpress_parseAttributes(attribute_string) { + var attributeName = ""; + var attributeValue = ""; + var withInName; + var withInValue; + var attributes = new Array(); + var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g'); + + if (attribute_string == null || attribute_string.length < 2) + return null; + + withInName = withInValue = false; + + for (var i=0; i'; + tinyMCE.execCommand("mceInsertContent",true,html); + tinyMCE.selectedInstance.repaint(); + return true; + case "mcewordpresspage": + var name = ""; + var template = new Array(); + var inst = tinyMCE.getInstanceById(editor_id); + var focusElm = inst.getFocusElement(); + + // Is selection a image + if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") { + name = getAttrib(focusElm, 'name'); + + if (name != 'mce_plugin_wordpress_page') // Not a wordpress + return true; + + action = "update"; + } + + html = '' + + ''; + tinyMCE.execCommand("mceInsertContent",true,html); + tinyMCE.selectedInstance.repaint(); + return true; + } + + // Pass to next handler in chain + return false; +} + +function TinyMCE_wordpress_cleanup(type, content) { + switch (type) { + + case "insert_to_editor": + var startPos = 0; + + // Parse all tags and replace them with images + while ((startPos = content.indexOf('', startPos)) != -1) { + // Insert image + var contentAfter = content.substring(startPos + 11); + content = content.substring(0, startPos); + content += ' tags and replace them with images + while ((startPos = content.indexOf('', startPos)) != -1) { + // Insert image + var contentAfter = content.substring(startPos + 15); + content = content.substring(0, startPos); + content += ' + var startPos = -1; + while ((startPos = content.indexOf('', startPos); + var attribs = TinyMCE_wordpress_parseAttributes(content.substring(startPos + 4, endPos)); + + if (attribs['name'] == "mce_plugin_wordpress_more") { + endPos += 2; + + var embedHTML = ''; + + // Insert embed/object chunk + chunkBefore = content.substring(0, startPos); + chunkAfter = content.substring(endPos); + content = chunkBefore + embedHTML + chunkAfter; + } + if (attribs['name'] == "mce_plugin_wordpress_page") { + endPos += 2; + + var embedHTML = ''; + + // Insert embed/object chunk + chunkBefore = content.substring(0, startPos); + chunkAfter = content.substring(endPos); + content = chunkBefore + embedHTML + chunkAfter; + } + } + break; + } + + // Pass through to next handler in chain + return content; +} + +function TinyMCE_wordpress_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { + function getAttrib(elm, name) { + return elm.getAttribute(name) ? elm.getAttribute(name) : ""; + } + + tinyMCE.switchClassSticky(editor_id + '_wordpress_more', 'mceButtonNormal'); + tinyMCE.switchClassSticky(editor_id + '_wordpress_page', 'mceButtonNormal'); + + if (node == null) + return; + + do { + if (node.nodeName.toLowerCase() == "img" && getAttrib(node, 'name').indexOf('mce_plugin_wordpress_more') == 0) + tinyMCE.switchClassSticky(editor_id + '_wordpress_more', 'mceButtonSelected'); + if (node.nodeName.toLowerCase() == "img" && getAttrib(node, 'name').indexOf('mce_plugin_wordpress_page') == 0) + tinyMCE.switchClassSticky(editor_id + '_wordpress_page', 'mceButtonSelected'); + } while ((node = node.parentNode)); + + return true; +} diff --git a/wp-includes/js/tinymce/plugins/wordpress/images/more.gif b/wp-includes/js/tinymce/plugins/wordpress/images/more.gif new file mode 100644 index 0000000000..4ff564d589 Binary files /dev/null and b/wp-includes/js/tinymce/plugins/wordpress/images/more.gif differ diff --git a/wp-includes/js/tinymce/plugins/wordpress/images/more_bug.gif b/wp-includes/js/tinymce/plugins/wordpress/images/more_bug.gif new file mode 100644 index 0000000000..4589cb4dc6 Binary files /dev/null and b/wp-includes/js/tinymce/plugins/wordpress/images/more_bug.gif differ diff --git a/wp-includes/js/tinymce/plugins/wordpress/images/page.gif b/wp-includes/js/tinymce/plugins/wordpress/images/page.gif new file mode 100644 index 0000000000..1cea78ac2b Binary files /dev/null and b/wp-includes/js/tinymce/plugins/wordpress/images/page.gif differ diff --git a/wp-includes/js/tinymce/plugins/wordpress/images/page_bug.gif b/wp-includes/js/tinymce/plugins/wordpress/images/page_bug.gif new file mode 100644 index 0000000000..9ea3565692 Binary files /dev/null and b/wp-includes/js/tinymce/plugins/wordpress/images/page_bug.gif differ diff --git a/wp-includes/js/tinymce/plugins/wordpress/langs/en.js b/wp-includes/js/tinymce/plugins/wordpress/langs/en.js new file mode 100644 index 0000000000..2d3358dc28 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wordpress/langs/en.js @@ -0,0 +1,6 @@ +// UK lang variables + +/* Remember to namespace the language parameters lang__ */ + +tinyMCELang['lang_template_title'] = 'This is just a template popup'; +tinyMCELang['lang_template_desc'] = 'This is just a template button'; diff --git a/wp-includes/js/tinymce/plugins/wordpress/wordpress.css b/wp-includes/js/tinymce/plugins/wordpress/wordpress.css new file mode 100644 index 0000000000..b51a098482 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wordpress/wordpress.css @@ -0,0 +1,21 @@ +.mce_plugin_wordpress_more { + border: 0px; + border-top: 1px dotted #cccccc; + display:block; + background-color: #ffffff; + margin-top:15px; + background-image: url(images/more_bug.gif); + background-repeat: no-repeat; + background-position: right top; +} + +.mce_plugin_wordpress_page { + border: 0px; + border-top: 1px dotted #cccccc; + display:block; + background-color: #ffffff; + margin-top:15px; + background-image: url(images/page_bug.gif); + background-repeat: no-repeat; + background-position: right top; +}