Files
aportil/modules/lib/CLEditor/jquery.cleditor.bbcode.js

134 lines
4.2 KiB
JavaScript

/**
@preserve CLEditor BBCode Plugin v1.0.0
http://premiumsoftware.net/cleditor
requires CLEditor v1.3.0 or later
Copyright 2010, Chris Landowski, Premium Software, LLC
Dual licensed under the MIT or GPL Version 2 licenses.
*/
// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name jquery.cleditor.bbcode.min.js
// ==/ClosureCompiler==
/*
The CLEditor useCSS optional parameter should be set to false for this plugin
to function properly.
Supported HTML and BBCode Tags:
Bold <b>Hello</b>
[b]Hello[/b]
Italics <i>Hello</i>
[i]Hello[/i]
Underlined <u>Hello</u>
[u]Hello[/u]
Strikethrough <strike>Hello</strike>
[s]Hello[/s]
Unordered Lists <ul><li>Red</li><li>Blue</li><li>Green</li></ul>
[list][*]Red[/*][*]Green[/*][*]Blue[/*][/list]
Ordered Lists <ol><li>Red</li><li>Blue</li><li>Green</li></ol>
[list=1][*]Red[/*][*]Green[/*][*]Blue[/*][/list]
Images <img src="http://premiumsoftware.net/image.jpg">
[img]http://premiumsoftware.net/image.jpg[/img]
Links <a href="http://premiumsoftware.net">Premium Software</a>
[url=http://premiumsoftware.net]Premium Software[/url]
*/
(function($) {
// BBCode only supports a small subset of HTML, so remove
// any toolbar buttons that are not currently supported.
$.cleditor.defaultOptions.controls =
"bold italic underline strikethrough removeformat | bullets numbering | " +
"undo redo | image link unlink | cut copy paste pastetext | print source";
// Save the previously assigned callback handlers
var oldAreaCallback = $.cleditor.defaultOptions.updateTextArea;
var oldFrameCallback = $.cleditor.defaultOptions.updateFrame;
// Wireup the updateTextArea callback handler
$.cleditor.defaultOptions.updateTextArea = function(html) {
// Fire the previously assigned callback handler
if (oldAreaCallback)
html = oldAreaCallback(html);
// Convert the HTML to BBCode
return $.cleditor.convertHTMLtoBBCode(html);
}
// Wireup the updateFrame callback handler
$.cleditor.defaultOptions.updateFrame = function(code) {
// Fire the previously assigned callback handler
if (oldFrameCallback)
code = oldFrameCallback(code);
// Convert the BBCode to HTML
return $.cleditor.convertBBCodeToHTML(code);
}
// Expose the convertHTMLtoBBCode method
$.cleditor.convertHTMLtoBBCode = function(html) {
$.each([
[/[\r|\n]/g, ""],
[/<br.*?>/gi, "\n"],
[/<b>(.*?)<\/b>/gi, "[b]$1[/b]"],
[/<strong>(.*?)<\/strong>/gi, "[b]$1[/b]"],
[/<i>(.*?)<\/i>/gi, "[i]$1[/i]"],
[/<em>(.*?)<\/em>/gi, "[i]$1[/i]"],
[/<u>(.*?)<\/u>/gi, "[u]$1[/u]"],
[/<ins>(.*?)<\/ins>/gi, "[u]$1[/u]"],
[/<strike>(.*?)<\/strike>/gi, "[s]$1[/s]"],
[/<del>(.*?)<\/del>/gi, "[s]$1[/s]"],
[/<a.*?href="(.*?)".*?>(.*?)<\/a>/gi, "[url=$1]$2[/url]"],
[/<img.*?src="(.*?)".*?>/gi, "[img]$1[/img]"],
[/<ul>/gi, "[list]"],
[/<\/ul>/gi, "[/list]"],
[/<ol>/gi, "[list=1]"],
[/<\/ol>/gi, "[/list]"],
[/<li>/gi, "[*]"],
[/<\/li>/gi, "[/*]"],
[/<.*?>(.*?)<\/.*?>/g, "$1"]
], function(index, item) {
html = html.replace(item[0], item[1]);
});
return html;
}
// Expose the convertBBCodeToHTML method
$.cleditor.convertBBCodeToHTML = function(code) {
$.each([
[/\r/g, ""],
[/\n/g, "<br />"],
[/\[b\](.*?)\[\/b\]/gi, "<b>$1</b>"],
[/\[i\](.*?)\[\/i\]/gi, "<i>$1</i>"],
[/\[u\](.*?)\[\/u\]/gi, "<u>$1</u>"],
[/\[s\](.*?)\[\/s\]/gi, "<strike>$1</strike>"],
[/\[url=(.*?)\](.*?)\[\/url\]/gi, "<a href=\"$1\">$2</a>"],
[/\[img\](.*?)\[\/img\]/gi, "<img src=\"$1\">"],
[/\[list\](.*?)\[\/list\]/gi, "<ul>$1</ul>"],
[/\[list=1\](.*?)\[\/list\]/gi, "<ol>$1</ol>"],
[/\[list\]/gi, "<ul>"],
[/\[list=1\]/gi, "<ol>"],
[/\[\*\](.*?)\[\/\*\]/g, "<li>$1</li>"],
[/\[\*\]/g, "<li>"]
], function(index, item) {
code = code.replace(item[0], item[1]);
});
return code;
}
})(jQuery);