X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=www%2Fjssrc%2Fblerg%2FUtil.js;h=6e99f46a5b2c0104f4143dbd72a4a0da8724fb4f;hb=4210d2d20df6635e19c20f5b303d498f4657968b;hp=51489c9e0a2a94928e9fafe06110a16676d5b02d;hpb=3d9d506fb56b9f1ef04a27aa3f5a615a877bb6ec;p=blerg.git diff --git a/www/jssrc/blerg/Util.js b/www/jssrc/blerg/Util.js index 51489c9..6e99f46 100644 --- a/www/jssrc/blerg/Util.js +++ b/www/jssrc/blerg/Util.js @@ -3,9 +3,9 @@ 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; @@ -16,7 +16,7 @@ blerg.Util.formatLinkHooks = [ ]; blerg.Util.formatMarkdownLinks = function(l) { - m = l.match(/(\s[()\[\]{}]?|^)\[([^\]]+)\]\((https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/[^)"]*?)?)(\s([^)]*))?\)/); + m = l.match(/(\s[()\[\]{}]?|^)\[([^\]]+)\]\((https?:\/\/[a-zA-Z0-9.-]*[a-zA-Z0-9](\/[^)"]*?)?|mailto:[^)"]*?)(\s([^)]*))?\)/); if (!m) return l; var whitespace = m[1]; @@ -46,17 +46,65 @@ blerg.Util.blergFormat = function(text) { var out = ['

']; var endpush = null; var listMode = false; + var codeMode = false; + var githubCodeMode = false; lines.forEach(function(l) { + // Blank line if (l == '') { + // Turn single linebreaks into paragraphs if (out[out.length - 1] == '
') { out[out.length - 1] = '

'; } + // End bullet list if (out[out.length - 1] == '') { out.push(''); out.push('

'); listMode = false; } + // End code mode + if (codeMode) { + out.push(''); + out.push('

'); + codeMode = false; + } + return; + } + + // Sometimes I wish more languages had Perl's bistable .. operator. + if (githubCodeMode) { + if (l == '```') { + out.push(''); + out.push('

'); + githubCodeMode = false; + } else { + // Sanitize HTML input + l = l.replace(/&/g, '&').replace(//g, '>'); + out.push(l + "\n"); + } + return; + } else { + if (l == '```') { + out.push('

');
+                githubCodeMode = true;
+                return;
+            }
+        }
+
+        // Create a code block when lines begin with at least four spaces
+        if (l.substr(0, 4) == '    ') {
+            if (!codeMode) {
+                out.push('
');
+                codeMode = true;
+            }
+            // Sanitize HTML input
+            l = l.replace(/&/g, '&').replace(//g, '>');
+            out.push(l.substr(4) + "\n");
             return;
+        } else {
+            if (codeMode) {
+                out.push('
'); + codeMode = false; + } } // Put quoted material into a special paragraph @@ -81,9 +129,12 @@ blerg.Util.blergFormat = function(text) { l = l.replace(/([^\w\\]|^)\*\*(\w[^*]*)\*\*(\W|$)/g, '$1$2$3'); l = l.replace(/([^\w\\]|^)\*(\w[^*]*)\*(\W|$)/g, '$1$2$3'); + // Turn ~~foo~~ into strikethrough + 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] == '*') { @@ -109,7 +160,7 @@ blerg.Util.blergFormat = function(text) { } // Remove backslashes from escaped metachars - l = l.replace(/\\([*\[\]@#])/g, '$1'); + l = l.replace(/\\([*\[\]@#~])/g, '$1'); out.push(l); if (endpush) { @@ -119,10 +170,15 @@ blerg.Util.blergFormat = function(text) { out.push('
'); } }); - while (out[out.length - 1] == '
' || out[out.length - 1] == '

') + while (out[out.length - 1] == '
' || out[out.length - 1] == '

') { out.pop(); - if (listMode) + } + if (listMode) { out.push(''); + } + if (codeMode || githubCodeMode) { + out.push('

'); + } return out.join(''); }