template.js.tinymce.plugins.bbcode.plugin.js Maven / Gradle / Ivy
/**
* plugin.js
*
* Released under LGPL License.
* Copyright (c) 1999-2015 Ephox Corp. All rights reserved
*
* License: http://www.tinymce.com/license
* Contributing: http://www.tinymce.com/contributing
*/
/*global tinymce:true */
(function() {
tinymce.create('tinymce.plugins.BBCodePlugin', {
init: function(ed) {
var self = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();
ed.on('beforeSetContent', function(e) {
e.content = self['_' + dialect + '_bbcode2html'](e.content);
});
ed.on('postProcess', function(e) {
if (e.set) {
e.content = self['_' + dialect + '_bbcode2html'](e.content);
}
if (e.get) {
e.content = self['_' + dialect + '_html2bbcode'](e.content);
}
});
},
getInfo: function() {
return {
longname: 'BBCode Plugin',
author: 'Ephox Corp',
authorurl: 'http://www.tinymce.com',
infourl: 'http://www.tinymce.com/wiki.php/Plugin:bbcode'
};
},
// Private methods
// HTML -> BBCode in PunBB dialect
_punbb_html2bbcode: function(s) {
s = tinymce.trim(s);
function rep(re, str) {
s = s.replace(re, str);
}
// example: to [b]
rep(/(.*?)<\/a>/gi, "[url=$1]$2[/url]");
rep(/(.*?)<\/font>/gi, "[code][color=$1]$2[/color][/code]");
rep(/(.*?)<\/font>/gi, "[quote][color=$1]$2[/color][/quote]");
rep(/(.*?)<\/font>/gi, "[code][color=$1]$2[/color][/code]");
rep(/(.*?)<\/font>/gi, "[quote][color=$1]$2[/color][/quote]");
rep(/(.*?)<\/span>/gi, "[color=$1]$2[/color]");
rep(/(.*?)<\/font>/gi, "[color=$1]$2[/color]");
rep(/(.*?)<\/span>/gi, "[size=$1]$2[/size]");
rep(/(.*?)<\/font>/gi, "$1");
rep(/ /gi, "[img]$1[/img]");
rep(/(.*?)<\/span>/gi, "[code]$1[/code]");
rep(/(.*?)<\/span>/gi, "[quote]$1[/quote]");
rep(/(.*?)<\/strong>/gi, "[code][b]$1[/b][/code]");
rep(/(.*?)<\/strong>/gi, "[quote][b]$1[/b][/quote]");
rep(/(.*?)<\/em>/gi, "[code][i]$1[/i][/code]");
rep(/(.*?)<\/em>/gi, "[quote][i]$1[/i][/quote]");
rep(/(.*?)<\/u>/gi, "[code][u]$1[/u][/code]");
rep(/(.*?)<\/u>/gi, "[quote][u]$1[/u][/quote]");
rep(/<\/(strong|b)>/gi, "[/b]");
rep(/<(strong|b)>/gi, "[b]");
rep(/<\/(em|i)>/gi, "[/i]");
rep(/<(em|i)>/gi, "[i]");
rep(/<\/u>/gi, "[/u]");
rep(/(.*?)<\/span>/gi, "[u]$1[/u]");
rep(//gi, "[u]");
rep(/]*>/gi, "[quote]");
rep(/<\/blockquote>/gi, "[/quote]");
rep(/
/gi, "\n");
rep(/
/gi, "\n");
rep(/
/gi, "\n");
rep(//gi, "");
rep(/<\/p>/gi, "\n");
rep(/ |\u00a0/gi, " ");
rep(/"/gi, "\"");
rep(/</gi, "<");
rep(/>/gi, ">");
rep(/&/gi, "&");
return s;
},
// BBCode -> HTML from PunBB dialect
_punbb_bbcode2html: function(s) {
s = tinymce.trim(s);
function rep(re, str) {
s = s.replace(re, str);
}
// example: [b] to
rep(/\n/gi, "
");
rep(/\[b\]/gi, "");
rep(/\[\/b\]/gi, "");
rep(/\[i\]/gi, "");
rep(/\[\/i\]/gi, "");
rep(/\[u\]/gi, "");
rep(/\[\/u\]/gi, "");
rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi, "$2");
rep(/\[url\](.*?)\[\/url\]/gi, "$1");
rep(/\[img\](.*?)\[\/img\]/gi, "");
rep(/\[color=(.*?)\](.*?)\[\/color\]/gi, "$2");
rep(/\[code\](.*?)\[\/code\]/gi, "$1 ");
rep(/\[quote.*?\](.*?)\[\/quote\]/gi, "$1 ");
return s;
}
});
// Register plugin
tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
})();