All Downloads are FREE. Search and download functionalities are using the official Maven repository.

template.js.tinymce.plugins.bbcode.plugin.js Maven / Gradle / Ivy

There is a newer version: 5.0.6
Show newest version
/**
 * 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); })();