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';