/* (c) Copyright by authors of the Tiki Wiki CMS Groupware Project * * All Rights Reserved. See copyright.txt for details and a complete list of authors. * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. * $Id$ * * Main Tiki Wiki markup integration plugin. * * Based on work done by the MediaWiki Team for FCKEditor, big thanx to them * Initial clues from: http://mediawiki.fckeditor.net/index.php/Talk:Main_Page#CKEditor * (author Juan Valencia, thanks also) */ CKEDITOR.plugins.add('tikiwiki',{ ckToHtml: null, editor: null, dataFilter: null, init: function(editor) { var twplugin = this; this.ckToHtml = editor.dataProcessor.toHtml; // reference to original ckeditor dataProcessor this.editor = editor; // which expects these references too this.dataFilter = editor.dataProcessor.dataFilter; var oldToDataFormat = editor.dataProcessor.toDataFormat ; editor.dataProcessor.toDataFormat = function ( html, fixForBody ) { if (html === "


") { html = ""; } return twplugin.toWikiFormat( editor, oldToDataFormat.call( editor.dataProcessor, html, fixForBody ) ); }; editor.dataProcessor.toHtml = function ( data, fixForBody ) { return twplugin.toHtmlFormat( editor, data ); }; // data in the clipboard is html, the input format is expected to be wiki editor.on('paste', function(evt) {evt.editor.insertHtml(twplugin.toWikiFormat( editor, evt.data.dataValue )); evt.stop(); }, editor.element.$); // If the "contextmenu" plugin is loaded, register a listener to disable the html table editor if (editor.contextMenu) { editor.contextMenu.addListener(function (element, selection) { if (element.is('table') || element.is('th') || element.is('td')) { for (var i = 0; i < editor.contextMenu.items.length; i++ ) { if (editor.contextMenu.items[i].command === "tableProperties") { editor.contextMenu.items[i].state = CKEDITOR.TRISTATE_DISABLED; break; } } return {}; } }); } }, toWikiFormat: function ( editor, html, fixForBody ) { // try ajax var output = "", savedHtml = html; jQuery.ajax({ async: false, // wait for this one url: $.service("edit", "towiki"), type: "POST", dataType: "json", data: { referer: editor.config.autoSaveSelf, editor_id: editor.name, data: html }, // good callback success: function(data) { output = data.data; }, // bad callback - no good info in the params :( error: function(req, status, error) { $("#tikifeedback").showError(error.message + " (" + status + ")"); output = savedHtml; } }); return output; }, toHtmlFormat: function ( editor, data ) { // deal with plugins here? var output = "", twplugin = this, isHtml = auto_save_allowHtml(editor.element.$.form), savedData = data; if (typeof editor.pluginReparsing !== "undefined" && editor.pluginReparsing) { editor.pluginReparsing = false; return data; } ajaxLoadingShow( "cke_contents_" + editor.name); jQuery.ajax({ async: false, // wait for this one url: $.service("edit", "tohtml"), type: "POST", dataType: "json", data: { referer: editor.config.autoSaveSelf, editor_id: editor.name, data: data, allowhtml: isHtml }, // good callback success: function(data) { output = data.data; output = twplugin.ckToHtml.call(twplugin, output); }, // bad callback - no good info in the params :( error: function(req, status, error) { $("#tikifeedback").showError(error.message + " (" + status + ")"); output = savedData; } }); ajaxLoadingHide(); return output; } });