In HTML2BBCode: fetch the URL of [EMBED] using JavaScript instead of an ajax-call to a php-script. Once there actually is embedded Code in the HTML, this function is called after every single keypress. Not only is making an ajax-call every keypress bandith intensive - it also made typing hard / slow. Making a lot of JavaScript-RegExp-Computation every keypress isn't exactly great either, but still performs better.

This commit is contained in:
Tobias Hößl 2012-03-13 21:46:57 +00:00
parent 43430ef561
commit 7868e3897b

View file

@ -44,61 +44,79 @@
_dfrn_html2bbcode : function(s) { _dfrn_html2bbcode : function(s) {
s = tinymce.trim(s); s = tinymce.trim(s);
function rep(re, str) { function rep(re, str) {
//modify code to keep stuff intact within [code][/code] blocks //modify code to keep stuff intact within [code][/code] blocks
//Waitman Gobble NO WARRANTY //Waitman Gobble NO WARRANTY
var o = new Array(); var o = new Array();
var x = s.split("[code]"); var x = s.split("[code]");
var i = 0; var i = 0;
var si = ""; var si = "";
si = x.shift(); si = x.shift();
si = si.replace(re,str); si = si.replace(re,str);
o.push(si); o.push(si);
for (i = 0; i < x.length; i++) { for (i = 0; i < x.length; i++) {
var no = new Array(); var no = new Array();
var j = x.shift(); var j = x.shift();
var g = j.split("[/code]"); var g = j.split("[/code]");
no.push(g.shift()); no.push(g.shift());
si = g.shift(); si = g.shift();
si = si.replace(re,str); si = si.replace(re,str);
no.push(si); no.push(si);
o.push(no.join("[/code]")); o.push(no.join("[/code]"));
} }
s = o.join("[code]"); s = o.join("[code]");
}; };
/* oembed */ /* oembed */
function _h2b_cb(match) { function _h2b_cb(match) {
function s_h2b(data) { /*
match = data; function s_h2b(data) {
match = data;
} }
$.ajax({ $.ajax({
type:"POST", type:"POST",
url: 'oembed/h2b', url: 'oembed/h2b',
data: {text: match}, data: {text: match},
async: false, async: false,
success: s_h2b, success: s_h2b,
dataType: 'html' dataType: 'html'
}); });
return match; */
}
var f, g, tof = [], tor = [];
var find_spanc = /<span [^>]*class *= *[\"'](?:[^\"']* )*oembed(?: [^\"']*)*[\"'][^>]*>(.*?(?:<span[^>]*>(.*?)<\/span *>)*.*?)<\/span *>/ig;
while (f = find_spanc.exec(match)) {
var find_a = /<a([^>]* rel=[\"']oembed[\"'][^>]*)>.*?<\/a *>/ig;
if (g = find_a.exec(f[1])) {
var find_href = /href=[\"']([^\"']*)[\"']/ig;
var m2 = find_href.exec(g[1]);
if (m2[1]) {
tof.push(f[0]);
tor.push("[EMBED]" + m2[1] + "[/EMBED]");
}
}
}
for (var i = 0; i < tof.length; i++) match = match.replace(tof[i], tor[i]);
return match;
}
if (s.indexOf('class="oembed')>=0){ if (s.indexOf('class="oembed')>=0){
//alert("request oembed html2bbcode"); //alert("request oembed html2bbcode");
s = _h2b_cb(s); s = _h2b_cb(s);
} }
/* /oembed */ /* /oembed */
// example: <strong> to [b] // example: <strong> to [b]
rep(/<a class=\"bookmark\" href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[bookmark=$1]$2[/bookmark]"); rep(/<a class=\"bookmark\" href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[bookmark=$1]$2[/bookmark]");
@ -111,16 +129,16 @@
rep(/<img.*?src=\"(.*?)\".*?height=\"(.*?)\".*?width=\"(.*?)\".*?\/>/gi,"[img=$3x$2]$1[/img]"); rep(/<img.*?src=\"(.*?)\".*?height=\"(.*?)\".*?width=\"(.*?)\".*?\/>/gi,"[img=$3x$2]$1[/img]");
rep(/<img.*?src=\"(.*?)\".*?width=\"(.*?)\".*?height=\"(.*?)\".*?\/>/gi,"[img=$2x$3]$1[/img]"); rep(/<img.*?src=\"(.*?)\".*?width=\"(.*?)\".*?height=\"(.*?)\".*?\/>/gi,"[img=$2x$3]$1[/img]");
rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"); rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");
rep(/<ul class=\"listbullet\" style=\"list-style-type\: circle\;\">(.*?)<\/ul>/gi,"[list]$1[/list]"); rep(/<ul class=\"listbullet\" style=\"list-style-type\: circle\;\">(.*?)<\/ul>/gi,"[list]$1[/list]");
rep(/<ul class=\"listnone\" style=\"list-style-type\: none\;\">(.*?)<\/ul>/gi,"[list=]$1[/list]"); rep(/<ul class=\"listnone\" style=\"list-style-type\: none\;\">(.*?)<\/ul>/gi,"[list=]$1[/list]");
rep(/<ul class=\"listdecimal\" style=\"list-style-type\: decimal\;\">(.*?)<\/ul>/gi,"[list=1]$1[/list]"); rep(/<ul class=\"listdecimal\" style=\"list-style-type\: decimal\;\">(.*?)<\/ul>/gi,"[list=1]$1[/list]");
rep(/<ul class=\"listlowerroman\" style=\"list-style-type\: lower-roman\;\">(.*?)<\/ul>/gi,"[list=i]$1[/list]"); rep(/<ul class=\"listlowerroman\" style=\"list-style-type\: lower-roman\;\">(.*?)<\/ul>/gi,"[list=i]$1[/list]");
rep(/<ul class=\"listupperroman\" style=\"list-style-type\: upper-roman\;\">(.*?)<\/ul>/gi,"[list=I]$1[/list]"); rep(/<ul class=\"listupperroman\" style=\"list-style-type\: upper-roman\;\">(.*?)<\/ul>/gi,"[list=I]$1[/list]");
rep(/<ul class=\"listloweralpha\" style=\"list-style-type\: lower-alpha\;\">(.*?)<\/ul>/gi,"[list=a]$1[/list]"); rep(/<ul class=\"listloweralpha\" style=\"list-style-type\: lower-alpha\;\">(.*?)<\/ul>/gi,"[list=a]$1[/list]");
rep(/<ul class=\"listupperalpha\" style=\"list-style-type\: upper-alpha\;\">(.*?)<\/ul>/gi,"[list=A]$1[/list]"); rep(/<ul class=\"listupperalpha\" style=\"list-style-type\: upper-alpha\;\">(.*?)<\/ul>/gi,"[list=A]$1[/list]");
rep(/<li>(.*?)<\/li>/gi,'[li]$1[/li]'); rep(/<li>(.*?)<\/li>/gi,'[li]$1[/li]');
rep(/<code>(.*?)<\/code>/gi,"[code]$1[/code]"); rep(/<code>(.*?)<\/code>/gi,"[code]$1[/code]");
rep(/<\/(strong|b)>/gi,"[/b]"); rep(/<\/(strong|b)>/gi,"[/b]");
rep(/<(strong|b)>/gi,"[b]"); rep(/<(strong|b)>/gi,"[b]");
@ -149,42 +167,42 @@
// BBCode -> HTML from DFRN dialect // BBCode -> HTML from DFRN dialect
_dfrn_bbcode2html : function(s) { _dfrn_bbcode2html : function(s) {
s = tinymce.trim(s); s = tinymce.trim(s);
function rep(re, str) { function rep(re, str) {
//modify code to keep stuff intact within [code][/code] blocks //modify code to keep stuff intact within [code][/code] blocks
//Waitman Gobble NO WARRANTY //Waitman Gobble NO WARRANTY
var o = new Array(); var o = new Array();
var x = s.split("[code]"); var x = s.split("[code]");
var i = 0; var i = 0;
var si = ""; var si = "";
si = x.shift(); si = x.shift();
si = si.replace(re,str); si = si.replace(re,str);
o.push(si); o.push(si);
for (i = 0; i < x.length; i++) { for (i = 0; i < x.length; i++) {
var no = new Array(); var no = new Array();
var j = x.shift(); var j = x.shift();
var g = j.split("[/code]"); var g = j.split("[/code]");
no.push(g.shift()); no.push(g.shift());
si = g.shift(); si = g.shift();
si = si.replace(re,str); si = si.replace(re,str);
no.push(si); no.push(si);
o.push(no.join("[/code]")); o.push(no.join("[/code]"));
} }
s = o.join("[code]"); s = o.join("[code]");
}; };
// example: [b] to <strong> // example: [b] to <strong>
rep(/\n/gi,"<br />"); rep(/\n/gi,"<br />");
rep(/\[b\]/gi,"<strong>"); rep(/\[b\]/gi,"<strong>");
@ -193,43 +211,43 @@
rep(/\[\/i\]/gi,"</em>"); rep(/\[\/i\]/gi,"</em>");
rep(/\[u\]/gi,"<u>"); rep(/\[u\]/gi,"<u>");
rep(/\[\/u\]/gi,"</u>"); rep(/\[\/u\]/gi,"</u>");
rep(/\[hr\]/gi,"<hr />"); rep(/\[hr\]/gi,"<hr />");
rep(/\[bookmark=([^\]]+)\](.*?)\[\/bookmark\]/gi,"<a class=\"bookmark\" href=\"$1\">$2</a>"); rep(/\[bookmark=([^\]]+)\](.*?)\[\/bookmark\]/gi,"<a class=\"bookmark\" href=\"$1\">$2</a>");
rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>"); rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>"); rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,"<img width=\"$1\" height=\"$2\" src=\"$3\" />"); rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,"<img width=\"$1\" height=\"$2\" src=\"$3\" />");
rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />"); rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
rep(/\[list\](.*?)\[\/list\]/gi, '<ul class="listbullet" style="list-style-type: circle;">$1</ul>'); rep(/\[list\](.*?)\[\/list\]/gi, '<ul class="listbullet" style="list-style-type: circle;">$1</ul>');
rep(/\[list=\](.*?)\[\/list\]/gi, '<ul class="listnone" style="list-style-type: none;">$1</ul>'); rep(/\[list=\](.*?)\[\/list\]/gi, '<ul class="listnone" style="list-style-type: none;">$1</ul>');
rep(/\[list=1\](.*?)\[\/list\]/gi, '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>'); rep(/\[list=1\](.*?)\[\/list\]/gi, '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>');
rep(/\[list=i\](.*?)\[\/list\]/gi,'<ul class="listlowerroman" style="list-style-type: lower-roman;">$1</ul>'); rep(/\[list=i\](.*?)\[\/list\]/gi,'<ul class="listlowerroman" style="list-style-type: lower-roman;">$1</ul>');
rep(/\[list=I\](.*?)\[\/list\]/gi, '<ul class="listupperroman" style="list-style-type: upper-roman;">$1</ul>'); rep(/\[list=I\](.*?)\[\/list\]/gi, '<ul class="listupperroman" style="list-style-type: upper-roman;">$1</ul>');
rep(/\[list=a\](.*?)\[\/list\]/gi, '<ul class="listloweralpha" style="list-style-type: lower-alpha;">$1</ul>'); rep(/\[list=a\](.*?)\[\/list\]/gi, '<ul class="listloweralpha" style="list-style-type: lower-alpha;">$1</ul>');
rep(/\[list=A\](.*?)\[\/list\]/gi, '<ul class="listupperalpha" style="list-style-type: upper-alpha;">$1</ul>'); rep(/\[list=A\](.*?)\[\/list\]/gi, '<ul class="listupperalpha" style="list-style-type: upper-alpha;">$1</ul>');
rep(/\[li\](.*?)\[\/li\]/gi, '<li>$1</li>'); rep(/\[li\](.*?)\[\/li\]/gi, '<li>$1</li>');
rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<span style=\"color: $1;\">$2</span>"); rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<span style=\"color: $1;\">$2</span>");
rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"<span style=\"font-size: $1;\">$2</span>"); rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"<span style=\"font-size: $1;\">$2</span>");
rep(/\[code\](.*?)\[\/code\]/gi,"<code>$1</code>"); rep(/\[code\](.*?)\[\/code\]/gi,"<code>$1</code>");
rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>"); rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>");
/* oembed */ /* oembed */
function _b2h_cb(match, url) { function _b2h_cb(match, url) {
url = bin2hex(url); url = bin2hex(url);
function s_b2h(data) { function s_b2h(data) {
match = data; match = data;
} }
$.ajax({ $.ajax({
url: 'oembed/b2h?url=' + url, url: 'oembed/b2h?url=' + url,
async: false, async: false,
success: s_b2h, success: s_b2h,
dataType: 'html' dataType: 'html'
}); });
return match; return match;
} }
s = s.replace(/\[embed\](.*?)\[\/embed\]/gi, _b2h_cb); s = s.replace(/\[embed\](.*?)\[\/embed\]/gi, _b2h_cb);
/* /oembed */ /* /oembed */
return s; return s;
} }