summaryrefslogtreecommitdiffstats
path: root/extensions/tinymce/jscripts/tiny_mce/plugins/mediawiki/wiki2html.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/tinymce/jscripts/tiny_mce/plugins/mediawiki/wiki2html.js')
-rw-r--r--extensions/tinymce/jscripts/tiny_mce/plugins/mediawiki/wiki2html.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/extensions/tinymce/jscripts/tiny_mce/plugins/mediawiki/wiki2html.js b/extensions/tinymce/jscripts/tiny_mce/plugins/mediawiki/wiki2html.js
new file mode 100644
index 0000000..63ccf52
--- /dev/null
+++ b/extensions/tinymce/jscripts/tiny_mce/plugins/mediawiki/wiki2html.js
@@ -0,0 +1,103 @@
+/*
+ @author: remy sharp / http://remysharp.com
+ @url: http://remysharp.com/2008/04/01/wiki-to-html-using-javascript/
+ @license: Creative Commons License - ShareAlike http://creativecommons.org/licenses/by-sa/3.0/
+ @version: 1.0
+
+ Can extend String or be used stand alone - just change the flag at the top of the script.
+*/
+
+(function () {
+
+var extendString = true;
+
+if (extendString) {
+ String.prototype.wiki2html = wiki2html;
+ String.prototype.iswiki = iswiki;
+} else {
+ window.wiki2html = wiki2html;
+ window.iswiki = iswiki;
+}
+
+// utility function to check whether it's worth running through the wiki2html
+function iswiki(s) {
+ if (extendString) {
+ s = this;
+ }
+
+ return !!(s.match(/^[\s{2} `#\*='{2}]/m));
+}
+
+// the regex beast...
+function wiki2html(s) {
+ if (extendString) {
+ s = this;
+ }
+
+ // lists need to be done using a function to allow for recusive calls
+ function list(str) {
+ return str.replace(/(?:(?:(?:^|\n)[\*#].*)+)/g, function (m) { // (?=[\*#])
+ var type = m.match(/(^|\n)#/) ? 'OL' : 'UL';
+ // strip first layer of list
+ m = m.replace(/(^|\n)[\*#][ ]{0,1}/g, "$1");
+ m = list(m);
+ return '<' + type + '><li>' + m.replace(/^\n/, '').split(/\n/).join('</li><li>') + '</li></' + type + '>';
+ });
+ }
+
+ return list(s
+
+ /* BLOCK ELEMENTS */
+ .replace(/(?:^|\n+)([^# =\*<].+)(?:\n+|$)/gm, function (m, l) {
+ if (l.match(/^\^+$/)) return l;
+ return "\n<p>" + l + "</p>\n";
+ })
+
+ .replace(/(?:^|\n)[ ]{2}(.*)+/g, function (m, l) { // blockquotes
+ if (l.match(/^\s+$/)) return m;
+ return '<blockquote>' + l + '</pre>';
+ })
+
+ .replace(/((?:^|\n)[ ]+.*)+/g, function (m) { // code
+ if (m.match(/^\s+$/)) return m;
+ return '<pre>' + m.replace(/(^|\n)[ ]+/g, "$1") + '</pre>';
+ })
+
+ .replace(/(?:^|\n)([=]+)(.*)\1/g, function (m, l, t) { // headings
+ return '<h' + l.length + '>' + t + '</h' + l.length + '>';
+ })
+
+ /* INLINE ELEMENTS */
+ .replace(/'''(.*?)'''/g, function (m, l) { // bold
+ return '<strong>' + l + '</strong>';
+ })
+
+ .replace(/''(.*?)''/g, function (m, l) { // italic
+ return '<em>' + l + '</em>';
+ })
+
+ .replace(/[^\[](http[^\[\s]*)/g, function (m, l) { // normal link
+ return '<a href="' + l + '">' + l + '</a>';
+ })
+
+ .replace(/[\[](http.*)[!\]]/g, function (m, l) { // external link
+ var p = l.replace(/[\[\]]/g, '').split(/ /);
+ var link = p.shift();
+ return '<a href="' + link + '">' + (p.length ? p.join(' ') : link) + '</a>';
+ })
+
+ .replace(/\[\[(.*?)\]\]/g, function (m, l) { // internal link or image
+ var p = l.split(/\|/);
+ var link = p.shift();
+
+ if (link.match(/^Image:(.*)/)) {
+ // no support for images - since it looks up the source from the wiki db :-(
+ return m;
+ } else {
+ return '<a href="' + link + '">' + (p.length ? p.join('|') : link) + '</a>';
+ }
+ })
+ );
+}
+
+})(); \ No newline at end of file