diff --git a/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js b/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js index cddc1b8c78..05d0178d35 100644 --- a/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js +++ b/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js @@ -1,5 +1,3 @@ -/* global md5:true */ - /** markdown-js doesn't ensure that em/strong codes are present on word boundaries. So we create our own handlers here. @@ -34,7 +32,7 @@ var unhoist = function(obj,from,to){ }; var replaceMarkdown = function(match, tag) { - var hash = md5(match[0]); + var hash = Discourse.Dialect.guid(); Discourse.Dialect.registerInline(match, function(text, matched, prev){ if(!text || text.length < match.length + 1) { diff --git a/app/assets/javascripts/discourse/dialects/dialect.js b/app/assets/javascripts/discourse/dialects/dialect.js index bf9dd3f34d..3dc9a17444 100644 --- a/app/assets/javascripts/discourse/dialects/dialect.js +++ b/app/assets/javascripts/discourse/dialects/dialect.js @@ -1,4 +1,3 @@ -/*global md5:true */ /** Discourse uses the Markdown.js as its main parser. `Discourse.Dialect` is the framework @@ -44,7 +43,7 @@ function processTextNodes(node, event, emitter) { if (node.length < 2) { return; } if (node[0] === '__RAW') { - var hash = md5(node[1]); + var hash = Discourse.Dialect.guid(); hoisted[hash] = node[1]; node[1] = hash; return; @@ -156,7 +155,7 @@ function countLines(str) { function hoister(t, target, replacement) { var regexp = new RegExp(target.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "g"); if (t.match(regexp)) { - var hash = md5(target); + var hash = Discourse.Dialect.guid(); t = t.replace(regexp, hash); hoisted[hash] = replacement; } @@ -190,7 +189,7 @@ function hoistCodeBlocksAndSpans(text) { // fenced code blocks (AKA GitHub code blocks) text = text.replace(/(^\n*|\n)```([a-z0-9\-]*)\n([\s\S]*?)\n```/g, function(_, before, language, content) { - var hash = md5(content); + var hash = Discourse.Dialect.guid(); hoisted[hash] = escape(showBackslashEscapedCharacters(removeEmptyLines(content))); return before + "```" + language + "\n" + hash + "\n```"; }); @@ -206,14 +205,14 @@ function hoistCodeBlocksAndSpans(text) { } } // we can safely hoist the code block - var hash = md5(content); + var hash = Discourse.Dialect.guid(); hoisted[hash] = escape(outdent(showBackslashEscapedCharacters(removeEmptyLines(content)))); return before + " " + hash + "\n"; }); //
...
code blocks text = text.replace(/(\s|^)
([\s\S]*?)<\/pre>/ig, function(_, before, content) {
-    var hash = md5(content);
+    var hash = Discourse.Dialect.guid();
     hoisted[hash] = escape(showBackslashEscapedCharacters(removeEmptyLines(content)));
     return before + "
" + hash + "
"; }); @@ -222,7 +221,7 @@ function hoistCodeBlocksAndSpans(text) { ["``", "`"].forEach(function(delimiter) { var regexp = new RegExp("(^|[^`])" + delimiter + "([^`\\n]+?)" + delimiter + "([^`]|$)", "g"); text = text.replace(regexp, function(_, before, content, after) { - var hash = md5(content); + var hash = Discourse.Dialect.guid(); hoisted[hash] = escape(showBackslashEscapedCharacters(content.trim())); return before + delimiter + hash + delimiter + after; }); @@ -241,6 +240,20 @@ function hoistCodeBlocksAndSpans(text) { **/ Discourse.Dialect = { + // http://stackoverflow.com/a/8809472/17174 + guid: function(){ + var d = new Date().getTime(); + if(window.performance && typeof window.performance.now === "function"){ + d += performance.now(); //use high-precision timer if available + } + var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (d + Math.random()*16)%16 | 0; + d = Math.floor(d/16); + return (c=='x' ? r : (r&0x3|0x8)).toString(16); + }); + return uuid; + }, + /** Cook text using the dialects. diff --git a/app/assets/javascripts/vendor.js b/app/assets/javascripts/vendor.js index 1a52785b5f..80e39c7e4e 100644 --- a/app/assets/javascripts/vendor.js +++ b/app/assets/javascripts/vendor.js @@ -31,7 +31,6 @@ //= require jquery.tagsinput.js //= require jquery.sortable.js //= require lodash.js -//= require md5.js //= require modernizr.custom.00874.js //= require mousetrap.js //= require rsvp.js diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index d2a9850c92..27bc0b0e83 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -59,7 +59,6 @@ module PrettyText ctx["helpers"] = Helpers.new ctx_load(ctx, - "vendor/assets/javascripts/md5.js", "vendor/assets/javascripts/lodash.js", "vendor/assets/javascripts/Markdown.Converter.js", "lib/headless-ember.js",