PageRenderTime 118ms CodeModel.GetById 106ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/static/scripts/tiny_mce/plugins/bbcode/editor_plugin_src.js

http://n23.googlecode.com/
JavaScript | 117 lines | 90 code | 15 blank | 12 comment | 2 complexity | fe25dc04a1e88b7738a11bb0c647dba6 MD5 | raw file
  1/**
  2 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
  3 *
  4 * @author Moxiecode
  5 * @copyright Copyright Š 2004-2008, Moxiecode Systems AB, All rights reserved.
  6 */
  7
  8(function() {
  9	tinymce.create('tinymce.plugins.BBCodePlugin', {
 10		init : function(ed, url) {
 11			var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();
 12
 13			ed.onBeforeSetContent.add(function(ed, o) {
 14				o.content = t['_' + dialect + '_bbcode2html'](o.content);
 15			});
 16
 17			ed.onPostProcess.add(function(ed, o) {
 18				if (o.set)
 19					o.content = t['_' + dialect + '_bbcode2html'](o.content);
 20
 21				if (o.get)
 22					o.content = t['_' + dialect + '_html2bbcode'](o.content);
 23			});
 24		},
 25
 26		getInfo : function() {
 27			return {
 28				longname : 'BBCode Plugin',
 29				author : 'Moxiecode Systems AB',
 30				authorurl : 'http://tinymce.moxiecode.com',
 31				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',
 32				version : tinymce.majorVersion + "." + tinymce.minorVersion
 33			};
 34		},
 35
 36		// Private methods
 37
 38		// HTML -> BBCode in PunBB dialect
 39		_punbb_html2bbcode : function(s) {
 40			s = tinymce.trim(s);
 41
 42			function rep(re, str) {
 43				s = s.replace(re, str);
 44			};
 45
 46			// example: <strong> to [b]
 47			rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
 48			rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
 49			rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
 50			rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
 51			rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
 52			rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");
 53			rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");
 54			rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");
 55			rep(/<font>(.*?)<\/font>/gi,"$1");
 56			rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");
 57			rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");
 58			rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");
 59			rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");
 60			rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");
 61			rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");
 62			rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");
 63			rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");
 64			rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");
 65			rep(/<\/(strong|b)>/gi,"[/b]");
 66			rep(/<(strong|b)>/gi,"[b]");
 67			rep(/<\/(em|i)>/gi,"[/i]");
 68			rep(/<(em|i)>/gi,"[i]");
 69			rep(/<\/u>/gi,"[/u]");
 70			rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");
 71			rep(/<u>/gi,"[u]");
 72			rep(/<blockquote[^>]*>/gi,"[quote]");
 73			rep(/<\/blockquote>/gi,"[/quote]");
 74			rep(/<br \/>/gi,"\n");
 75			rep(/<br\/>/gi,"\n");
 76			rep(/<br>/gi,"\n");
 77			rep(/<p>/gi,"");
 78			rep(/<\/p>/gi,"\n");
 79			rep(/&nbsp;/gi," ");
 80			rep(/&quot;/gi,"\"");
 81			rep(/&lt;/gi,"<");
 82			rep(/&gt;/gi,">");
 83			rep(/&amp;/gi,"&");
 84
 85			return s; 
 86		},
 87
 88		// BBCode -> HTML from PunBB dialect
 89		_punbb_bbcode2html : function(s) {
 90			s = tinymce.trim(s);
 91
 92			function rep(re, str) {
 93				s = s.replace(re, str);
 94			};
 95
 96			// example: [b] to <strong>
 97			rep(/\n/gi,"<br />");
 98			rep(/\[b\]/gi,"<strong>");
 99			rep(/\[\/b\]/gi,"</strong>");
100			rep(/\[i\]/gi,"<em>");
101			rep(/\[\/i\]/gi,"</em>");
102			rep(/\[u\]/gi,"<u>");
103			rep(/\[\/u\]/gi,"</u>");
104			rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
105			rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
106			rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
107			rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");
108			rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");
109			rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");
110
111			return s; 
112		}
113	});
114
115	// Register plugin
116	tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
117})();