From 774fa4f6454a938c76a9b2683c9d0890a570ac57 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Mon, 9 Sep 2013 14:06:36 -0400 Subject: [PATCH] use marked instead of showdown, it's more performant and allows us to sanitize the content --- Gruntfile.js | 3 +- bower.json | 2 +- public/js/app.js | 2 +- public/js/directives/directives.js | 48 ++++++++++++++++++++++++++++++ views/index.jade | 3 +- views/options/profile.jade | 2 +- views/shared/modals/members.jade | 2 +- 7 files changed, 54 insertions(+), 8 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index ed246fdaf4..8edc93db47 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,8 +16,7 @@ module.exports = function(grunt) { 'public/bower_components/bootstrap-growl/jquery.bootstrap-growl.min.js', 'public/bower_components/angular/angular.min.js', 'public/bower_components/angular-sanitize/angular-sanitize.min.js', - 'public/bower_components/showdown/compressed/showdown.js', - 'public/bower_components/angular-markdown-directive/markdown.js', + 'public/bower_components/marked/lib/marked.js', 'public/bower_components/angular-route/angular-route.min.js', 'public/bower_components/angular-resource/angular-resource.min.js', 'public/bower_components/angular-ui/build/angular-ui.min.js', diff --git a/bower.json b/bower.json index 612c18d804..04895e36f3 100644 --- a/bower.json +++ b/bower.json @@ -32,7 +32,7 @@ "angular-route": "1.2.0-rc.1", "angular-ui-utils": "~0.0.4", "angular-sanitize": "1.2.0-rc.1", - "angular-markdown-directive": "~0.1.0" + "marked": "~0.2.9" }, "resolutions": { "jquery": "~2.0.3", diff --git a/public/js/app.js b/public/js/app.js index 9ff4cbd041..8b2ceb2715 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -1,7 +1,7 @@ "use strict"; window.habitrpg = angular.module('habitrpg', - ['ngRoute', 'ngResource', 'ngSanitize', 'userServices', 'groupServices', 'memberServices', 'sharedServices', 'authServices', 'notificationServices', 'ui.bootstrap', 'ui.keypress', 'btford.markdown']) + ['ngRoute', 'ngResource', 'ngSanitize', 'userServices', 'groupServices', 'memberServices', 'sharedServices', 'authServices', 'notificationServices', 'ui.bootstrap', 'ui.keypress']) .constant("API_URL", "") .constant("STORAGE_USER_ID", 'habitrpg-user') diff --git a/public/js/directives/directives.js b/public/js/directives/directives.js index 78c7e7e9c2..639d615abb 100644 --- a/public/js/directives/directives.js +++ b/public/js/directives/directives.js @@ -60,3 +60,51 @@ habitrpg.directive('habitrpgSortable', ['User', function(User) { }); } }]); + +/** + * Markdown + * See http://www.heikura.me/#!/angularjs-markdown-directive + */ +(function(){ + var md = function () { + marked.setOptions({ + gfm:true, + pedantic:false, + sanitize:true + // callback for code highlighter + // Uncomment this (and htljs.tabReplace below) if we add in highlight.js (http://www.heikura.me/#!/angularjs-markdown-directive) +// highlight:function (code, lang) { +// if (lang != undefined) +// return hljs.highlight(lang, code).value; +// +// return hljs.highlightAuto(code).value; +// } + }); + + var toHtml = function (markdown) { + if (markdown == undefined) + return ''; + + return marked(markdown); + }; + + //hljs.tabReplace = ' '; + + return { + toHtml:toHtml + }; + }(); + + habitrpg.directive('markdown', function() { + return { + restrict: 'E', + link: function(scope, element, attrs) { + scope.$watch(attrs.ngModel, function(value, oldValue) { + var markdown = value; + var html = md.toHtml(markdown); + element.html(html); + }); + } + }; + }); +})() diff --git a/views/index.jade b/views/index.jade index 6164b1abf9..0e49804f75 100644 --- a/views/index.jade +++ b/views/index.jade @@ -31,8 +31,7 @@ html script(type='text/javascript', src='/bower_components/angular/angular.min.js') script(type='text/javascript', src='/bower_components/angular-sanitize/angular-sanitize.min.js') - script(type='text/javascript', src='/bower_components/showdown/compressed/showdown.js') - script(type='text/javascript', src='/bower_components/angular-markdown-directive/markdown.js') + script(type='text/javascript', src='/bower_components/marked/lib/marked.js') script(type='text/javascript', src='/bower_components/angular-route/angular-route.min.js') script(type='text/javascript', src='/bower_components/angular-resource/angular-resource.min.js') diff --git a/views/options/profile.jade b/views/options/profile.jade index 7c9decc496..4b469ad990 100644 --- a/views/options/profile.jade +++ b/views/options/profile.jade @@ -50,7 +50,7 @@ span.muted(ng-hide='profile.profile.imageUrl') - None - h4 Blurb - p(ng-show='profile.profile.blurb', btf-markdown='profile.profile.blurb') + markdown(ng-show='profile.profile.blurb', ng-model='profile.profile.blurb') span.muted(ng-hide='profile.profile.blurb') - None - //{{profile.profile.blurb | linky:'_blank'}} diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index a14e92d45f..e8ec790ca0 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -8,7 +8,7 @@ div(ng-controller='MemberModalCtrl') .row-fluid .span6 img(ng-show='profile.profile.imageUrl', ng-src='{{profile.profile.imageUrl}}') - p(ng-show='profile.profile.blurb', btf-markdown='profile.profile.blurb') + markdown(ng-show='profile.profile.blurb', ng-model='profile.profile.blurb') ul(ng-show='profile.profile.websites') li(ng-repeat='website in profile.profile.websites') a(href='{{website}}', target='_blank') {{website}}