thelounge/client/js/libs/handlebars/parse.js

94 lines
1.9 KiB
JavaScript
Raw Normal View History

2014-10-11 01:11:57 +02:00
Handlebars.registerHelper(
"parse", function(text) {
var wrap = wraplong(text);
text = escape(text);
text = colors(text);
text = uri(text);
if (wrap) {
return "<i class='wrap'>" + text + "</i>";
} else {
return text;
}
}
);
function wraplong(text) {
var wrap = false;
var split = text.split(" ");
for (var i in split) {
if (split[i].length > 40) {
wrap = true;
}
}
return wrap;
}
2014-09-28 00:01:28 +02:00
function escape(text) {
var e = {
"<": "&lt;",
">": "&gt;",
"'": "&#39;"
};
return text.replace(/[<>']/g, function (c) {
return e[c];
});
}
function uri(text) {
2014-10-12 00:57:34 +02:00
return URI.withinString(text, function(url, start, end, source) {
if (url.indexOf("javascript:") === 0) {
2014-10-11 01:11:57 +02:00
return url;
2014-09-28 00:01:28 +02:00
}
2014-10-12 00:57:34 +02:00
var split = url.split("<");
url = "<a href='" + split[0].replace(/^www/, "//www") + "' target='_blank'>" + split[0] + "</a>";
if (split.length > 1) {
url += "<" + split.slice(1).join("<");
2014-10-12 00:57:34 +02:00
}
return url;
2014-10-11 01:11:57 +02:00
});
2014-09-28 00:01:28 +02:00
}
2014-10-11 19:37:22 +02:00
var regex = {
color: /\003([0-9]{1,2})[,]?([0-9]{1,2})?([^\003]+)/,
2014-10-25 21:07:15 +02:00
terminator: /\x0D/,
2014-10-11 19:37:22 +02:00
styles: [
2014-10-25 21:07:15 +02:00
[/\002([^\002]+)(\002)?/, ["<b>", "</b>"]],
[/\037([^\037]+)(\037)?/, ["<u>", "</u>"]],
]
2014-10-11 19:37:22 +02:00
};
2014-10-11 01:11:57 +02:00
function colors(text) {
if (!text) {
2014-09-28 00:01:28 +02:00
return text;
}
2014-10-25 21:07:15 +02:00
if (regex.terminator.test(text)) {
return $.map(text.split(regex.terminator), colors);
}
if (regex.color.test(text)) {
var match, bg;
2014-10-25 21:07:15 +02:00
while (match = regex.color.exec(text)) {
var color = "color-" + match[1];
if (match[2]) {
bg = match[2];
}
2014-10-25 21:07:15 +02:00
if (bg) {
color += " bg-" + bg;
}
var text = text.replace(
match[0],
"<span class='" + color + "'>" + match[3] + "</span>"
);
}
}
for (var i in regex.styles) {
var pattern = regex.styles[i][0];
var style = regex.styles[i][1];
if (pattern.test(text)) {
var match;
while (match = pattern.exec(text)) {
text = text.replace(match[0], style[0] + match[1] + style[1]);
}
}
}
return text;
2014-09-28 00:01:28 +02:00
}