/** * 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); })();