diff --git a/docs/NEWS b/docs/NEWS index 59e8babc..c749a0e5 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -3,6 +3,12 @@ Version 1.5 () ------------------------------------------------------------------------ + * Added ability to specify a custom Xinha config. Either supply + a 'my_custom.js' file inside the template directory, or if + omitted, the default htmlarea/my_custom.js is used. With this + you can overwrite the plugins and buttons of all Xinha instances. + See the mentioned default file for usage. (garvinhicking) + * Upgrade to Smarty 2.6.26 * Removed inline styles of the s9y media insertion, they will now diff --git a/htmlarea/my_custom.js b/htmlarea/my_custom.js new file mode 100644 index 00000000..84d2621e --- /dev/null +++ b/htmlarea/my_custom.js @@ -0,0 +1,44 @@ +// This JavaScript file can be customized. +// It is actually NOT like the my_config.js file of the Xinha Documentation. +// Instead, the JS function 's9y_xinha' is called just before the +// Xinha editor is created. So you are able to OVERWRITE Toolbars, +// plugins etc. with your own versions. + +// You can also place a my_custom.js file inside a template directory, +// which will take precedence over the htmlarea/my_custom.js file. + +// All of the functionality is currently only a stub, so you need +// to insert/uncomment, what you want it to do. + +function s9y_xinha(xinha_editor) { + +/* EXAMPLE USAGE *** + + xinha_editor.registerPlugin('CharacterMap'); + xinha_editor.registerPlugin('ContextMenu'); + + xinha_editor.config.pageStyleSheets = [ _editor_url + 'custom.css' ]; + xinha_editor.config.fontsize = { + '1 (8pt)' : '1', + '2 (10pt)' : '1', + } + + // s9y image selection is called: 'image_selector' + // If you use any event plugins that provide custom toolbars, and you are customizing xinha, + // you need to take care of inserting those custom toolbar buttons yourself! + xinha_editor.config.toolbar = [ + [ "fontname", "space", + "fontsize", "space", + "formatblock", "space", + "bold", "italic", "underline", "strikethrough", "separator", + "subscript", "superscript", "separator",], + + [ "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator", + "orderedlist", "unorderedlist", "outdent", "indent", "separator", + "forecolor", "hilitecolor", "separator", + "inserthorizontalrule", "createlink", "insertimage", "image_selector", "inserttable", "htmlmode", "separator", + "popupeditor", "separator", "showhelp", "about" ] + ]; +* END OF EXAMPLE USAGE ***/ + +} diff --git a/include/functions_entries_admin.inc.php b/include/functions_entries_admin.inc.php index 55781486..06ec5b44 100644 --- a/include/functions_entries_admin.inc.php +++ b/include/functions_entries_admin.inc.php @@ -554,6 +554,11 @@ function serendipity_emit_htmlarea_code($item, $jsname, $spawnMulti = false) { $xinha = false; } + $xinha_custom = serendipity_getTemplateFile('my_custom.js', 'serendipityHTTPPath'); + if (empty($xinha_custom)) { + $xinha_custom = 'htmlarea/my_custom.js'; + } + if (!$init) { ?> - - + + + + + + ]; + + if (typeof('s9y_xinha') != 'undefined') { + s9y_xinha(editor); + } + // editor.registerPlugin(SpellChecker); // [SPELLCHECK] editor.generate(); editor._textArea.className = 'serendipity_entry';