X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;ds=sidebyside;f=www%2Fjssrc%2Fblerg%2FUtil.js;h=18f31694f4cc6e0165f707db393209abb9875ab5;hb=c3a777f760bedf3f196571612a7f3a1b3c707dbf;hp=d47770eb8dcbc148cd2cb548b6535efea8681f5a;hpb=80ad774f55998cc11e08694245dfd6cb1b49a86f;p=blerg.git
diff --git a/www/jssrc/blerg/Util.js b/www/jssrc/blerg/Util.js
index d47770e..18f3169 100644
--- a/www/jssrc/blerg/Util.js
+++ b/www/jssrc/blerg/Util.js
@@ -3,14 +3,41 @@ blerg = window.blerg || {};
blerg.Util = {};
// Dirty, terrible shim for rewritten links below
-blerg.Util.qlink = function() {
+blerg.Util.qlink = function(ev) {
try {
- location.href = event.target.href;
+ location.href = ev.target.href;
} catch(e) { }
enyo.$.blerg.bubble('onNavigate');
return false;
}
+blerg.Util.formatLinkHooks = [
+ BlergMedia
+];
+
+blerg.Util.formatMarkdownLinks = function(l) {
+ m = l.match(/(\s[()\[\]{}]?|^)\[([^\]]+)\]\((https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/[^)"]*?)?|mailto:[^)"]*?)(\s([^)]*))?\)/);
+ if (!m)
+ return l;
+ var whitespace = m[1];
+ var data = {
+ label: m[2],
+ url: m[3],
+ extra: m[5]
+ };
+
+ for (var i = 0; i < blerg.Util.formatLinkHooks.length; i++) {
+ var newdata = blerg.Util.formatLinkHooks[i].process(data);
+ if (newdata)
+ data = newdata;
+ else
+ console.warn("Format Link Hook " + i + " returned null");
+ }
+ var s = whitespace + '' + data.label + '' +
+ (data.widget ? ' ' + data.widget : '');
+ return l.slice(0, m.index) + s + blerg.Util.formatMarkdownLinks(l.slice(m.index + m[0].length));
+}
+
blerg.Util.blergFormat = function(text) {
var lines = text.split(/\r?\n/);
if (lines[lines.length - 1] == '')
@@ -45,39 +72,18 @@ blerg.Util.blergFormat = function(text) {
l = l.replace(/&/g, '&').replace(//g, '>');
// Turn HTTP URLs into links
- l = l.replace(/(\s|^)(https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/([^\s"]*[^.!,;?()\s])?)?)/g, '$1$2');
+ l = l.replace(/(\s[()\[\]{}]?|^)(https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/([^\s"]*[^.!,;?()\s])?)?)/g, '$1$2');
// Turn markdown links into links
- var re;
-
- /*
- // Craft a regex that finds URLs that end in the extensions specified by BlergMedia.audioExtensions.
- re = new RegExp('(\\s|^)\\[([^\\]]+)\\]\\((https?:\\/\\/[a-zA-Z0-9.-]*[a-zA-Z0-9]\\/[^)"]*?\\.(' + BlergMedia.audioExtensions.join('|') + '))\\)', 'g');
- l = l.replace(re, '$1$2
');
-
- // Ditto, but use the extended markdown link syntax to specify the format
- re = new RegExp('(\\s|^)\\[([^\\]]+)\\]\\((https?:\\/\\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\\/[^)"]*?)?)\\s+audio:(' + BlergMedia.audioExtensions.join('|') + ')\\)', 'g');
- l = l.replace(re, '$1$2
');
-
- // Craft a regex that finds URLs that end in the extensions specified by BlergMedia.videoExtensions.
- re = new RegExp('(\\s|^)\\[([^\\]]+)\\]\\((https?:\\/\\/[a-zA-Z0-9.-]*[a-zA-Z0-9]\\/[^)"]*?\\.(' + BlergMedia.videoExtensions.join('|') + '))\\)', 'g');
- l = l.replace(re, '$1$2
');
-
- // Ditto, but use the extended markdown link syntax to specify the format
- re = new RegExp('(\\s|^)\\[([^\\]]+)\\]\\((https?:\\/\\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\\/[^)"]*?)?)\\s+video:(' + BlergMedia.videoExtensions.join('|') + ')\\)', 'g');
- l = l.replace(re, '$1$2
');
- */
-
- // Regular markdown links
- l = l.replace(/(\s|^)\[([^\]]+)\]\((https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/[^)"]*?)?)\)/g, '$1$2');
+ l = blerg.Util.formatMarkdownLinks(l);
// Turn *foo* into italics and **foo** into bold
l = l.replace(/([^\w\\]|^)\*\*(\w[^*]*)\*\*(\W|$)/g, '$1$2$3');
l = l.replace(/([^\w\\]|^)\*(\w[^*]*)\*(\W|$)/g, '$1$2$3');
// Turn refs and tags into links
- l = l.replace(/(\s|^)#([A-Za-z0-9_-]+)/g, '$1#$2');
- l = l.replace(/(\s|^)@([A-Za-z0-9_-]+)(\/\d+)?/g, '$1@$2');
+ l = l.replace(/(\s|^)#([A-Za-z0-9_-]+)/g, '$1#$2');
+ l = l.replace(/(\s|^)@([A-Za-z0-9_-]+)(\/\d+)?/g, '$1@$2');
// Create lists when lines begin with *
if (l[0] == '*') {