From 0f74a44597623c6e386b150af8e0542b649501be Mon Sep 17 00:00:00 2001 From: Harold Martin Date: Thu, 24 Apr 2014 20:16:26 -0700 Subject: [PATCH 1/3] don't wrap elements and preserve inline expressions --- angular-highlightjs.js | 10 +++++----- bower.json | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/angular-highlightjs.js b/angular-highlightjs.js index 3b3f27e..9ffb6ff 100644 --- a/angular-highlightjs.js +++ b/angular-highlightjs.js @@ -108,7 +108,7 @@ function HljsCtrl (hljsCache, hljsService) { }; }]) -.directive('hljs', [function () { +.directive('hljs', ['$interpolate', function ($interpolate) { return { restrict: 'EA', controller: 'HljsCtrl', @@ -116,12 +116,12 @@ function HljsCtrl (hljsCache, hljsService) { // get static code // strip the starting "new line" character var staticCode = tElm[0].innerHTML.replace(/^(\r\n|\r|\n)/m, ''); - // put template - tElm.html('
'); + tElm.addClass('hljs'); + tElm.html(''); return function postLink(scope, iElm, iAttrs, ctrl) { - ctrl.init(iElm.find('code')); + ctrl.init(iElm); if (iAttrs.onhighlight) { ctrl.highlightCallback(function () { @@ -130,7 +130,7 @@ function HljsCtrl (hljsCache, hljsService) { } if (staticCode) { - ctrl.highlight(staticCode); + ctrl.highlight($interpolate(staticCode)(scope)); } scope.$on('$destroy', function () { diff --git a/bower.json b/bower.json index d82aa51..fa7a766 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-highlightjs", - "version": "0.2.7", + "version": "0.2.8", "description": "AngularJS directive for syntax highlighting with highlight.js.", "main": "angular-highlightjs.js", "ignore": [ diff --git a/package.json b/package.json index f645102..acbcec9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-highlightjs", - "version": "0.2.7", + "version": "0.2.8", "description": "AngularJS directive for syntax highlighting with highlight.js", "main": "index.js", "directories": {}, From f092a27c37a9d833a57e0185b9059589caf4667a Mon Sep 17 00:00:00 2001 From: Harold Martin Date: Thu, 24 Apr 2014 20:17:41 -0700 Subject: [PATCH 2/3] update minified --- angular-highlightjs.min.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/angular-highlightjs.min.js b/angular-highlightjs.min.js index 3eaaf14..5294e9a 100644 --- a/angular-highlightjs.min.js +++ b/angular-highlightjs.min.js @@ -1,6 +1,6 @@ /*! angular-highlightjs -version: 0.2.7 -build date: 2014-04-09 +version: 0.2.8 +build date: 2014-04-24 author: Robin Fan https://github.com/pc035860/angular-highlightjs.git */ -angular.module("hljs",[]).provider("hljsService",function(){var a={};return{setOptions:function(b){angular.extend(a,b)},getOptions:function(){return angular.copy(a)},$get:["$window",function(b){return(b.hljs.configure||angular.noop)(a),b.hljs}]}}).factory("hljsCache",["$cacheFactory",function(a){return a("hljsCache")}]).controller("HljsCtrl",["hljsCache","hljsService",function(a,b){var c=this,d=null,e=null,f=null,g=null;c.init=function(a){d=a},c.setLanguage=function(a){e=a,f&&c.highlight(f)},c.highlightCallback=function(a){g=a},c.highlight=function(h){if(d){var i,j;f=h,e?(j=c._cacheKey(e,f),i=a.get(j),i||(i=b.highlight(e,b.fixMarkup(f),!0),a.put(j,i))):(j=c._cacheKey(f),i=a.get(j),i||(i=b.highlightAuto(b.fixMarkup(f)),a.put(j,i))),d.html(i.value),d.addClass(i.language),null!==g&&angular.isFunction(g)&&g()}},c.clear=function(){d&&(f=null,d.text(""))},c.release=function(){d=null},c._cacheKey=function(){var a=Array.prototype.slice.call(arguments),b="!angular-highlightjs!";return a.join(b)}}]).directive("hljs",[function(){return{restrict:"EA",controller:"HljsCtrl",compile:function(a){var b=a[0].innerHTML.replace(/^(\r\n|\r|\n)/m,"");return a.html('
'),function(a,c,d,e){e.init(c.find("code")),d.onhighlight&&e.highlightCallback(function(){a.$eval(d.onhighlight)}),b&&e.highlight(b),a.$on("$destroy",function(){e.release()})}}}}]).directive("language",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){c.$observe("language",function(a){angular.isDefined(a)&&d.setLanguage(a)})}}}]).directive("source",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){a.$watch(c.source,function(a){a?d.highlight(a):d.clear()})}}}]).directive("include",["$http","$templateCache","$q",function(a,b,c){return{require:"hljs",restrict:"A",compile:function(d,e){var f=e.include;return function(d,e,g,h){var i=0;d.$watch(f,function(d){var e=++i;if(d&&angular.isString(d)){var f,g;f=b.get(d),f||(g=c.defer(),a.get(d,{cache:b,transformResponse:function(a){return a}}).success(function(a){e===i&&g.resolve(a)}).error(function(){e===i&&h.clear(),g.resolve()}),f=g.promise),c.when(f).then(function(a){a&&(angular.isArray(a)?a=a[1]:angular.isObject(a)&&(a=a.data),a=a.replace(/^(\r\n|\r|\n)/m,""),h.highlight(a))})}else h.clear()})}}}}]); \ No newline at end of file +angular.module("hljs",[]).provider("hljsService",function(){var a={};return{setOptions:function(b){angular.extend(a,b)},getOptions:function(){return angular.copy(a)},$get:["$window",function(b){return(b.hljs.configure||angular.noop)(a),b.hljs}]}}).factory("hljsCache",["$cacheFactory",function(a){return a("hljsCache")}]).controller("HljsCtrl",["hljsCache","hljsService",function(a,b){var c=this,d=null,e=null,f=null,g=null;c.init=function(a){d=a},c.setLanguage=function(a){e=a,f&&c.highlight(f)},c.highlightCallback=function(a){g=a},c.highlight=function(h){if(d){var i,j;f=h,e?(j=c._cacheKey(e,f),i=a.get(j),i||(i=b.highlight(e,b.fixMarkup(f),!0),a.put(j,i))):(j=c._cacheKey(f),i=a.get(j),i||(i=b.highlightAuto(b.fixMarkup(f)),a.put(j,i))),d.html(i.value),d.addClass(i.language),null!==g&&angular.isFunction(g)&&g()}},c.clear=function(){d&&(f=null,d.text(""))},c.release=function(){d=null},c._cacheKey=function(){var a=Array.prototype.slice.call(arguments),b="!angular-highlightjs!";return a.join(b)}}]).directive("hljs",["$interpolate",function(a){return{restrict:"EA",controller:"HljsCtrl",compile:function(b){var c=b[0].innerHTML.replace(/^(\r\n|\r|\n)/m,"");return b.addClass("hljs"),b.html(""),function(b,d,e,f){f.init(d),e.onhighlight&&f.highlightCallback(function(){b.$eval(e.onhighlight)}),c&&f.highlight(a(c)(b)),b.$on("$destroy",function(){f.release()})}}}}]).directive("language",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){c.$observe("language",function(a){angular.isDefined(a)&&d.setLanguage(a)})}}}]).directive("source",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){a.$watch(c.source,function(a){a?d.highlight(a):d.clear()})}}}]).directive("include",["$http","$templateCache","$q",function(a,b,c){return{require:"hljs",restrict:"A",compile:function(d,e){var f=e.include;return function(d,e,g,h){var i=0;d.$watch(f,function(d){var e=++i;if(d&&angular.isString(d)){var f,g;f=b.get(d),f||(g=c.defer(),a.get(d,{cache:b,transformResponse:function(a){return a}}).success(function(a){e===i&&g.resolve(a)}).error(function(){e===i&&h.clear(),g.resolve()}),f=g.promise),c.when(f).then(function(a){a&&(angular.isArray(a)?a=a[1]:angular.isObject(a)&&(a=a.data),a=a.replace(/^(\r\n|\r|\n)/m,""),h.highlight(a))})}else h.clear()})}}}}]); \ No newline at end of file From 0978ceeebaaeaabb772e7215198e54d2c14d6e64 Mon Sep 17 00:00:00 2001 From: Harold Martin Date: Thu, 24 Apr 2014 20:33:59 -0700 Subject: [PATCH 3/3] replace <, >, and & html entities when processing --- angular-highlightjs.js | 5 +++-- angular-highlightjs.min.js | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/angular-highlightjs.js b/angular-highlightjs.js index 9ffb6ff..081821c 100644 --- a/angular-highlightjs.js +++ b/angular-highlightjs.js @@ -115,9 +115,10 @@ function HljsCtrl (hljsCache, hljsService) { compile: function(tElm, tAttrs, transclude) { // get static code // strip the starting "new line" character - var staticCode = tElm[0].innerHTML.replace(/^(\r\n|\r|\n)/m, ''); + var staticCode = tElm[0].innerHTML.replace(/^(\r\n|\r|\n)/m, '') + .replace(/&/gm, '&').replace(/</gm, '<').replace(/>/gm, '>'); // put template - tElm.addClass('hljs'); + tElm.addClass('hljs'); tElm.html(''); return function postLink(scope, iElm, iAttrs, ctrl) { diff --git a/angular-highlightjs.min.js b/angular-highlightjs.min.js index 5294e9a..e05575c 100644 --- a/angular-highlightjs.min.js +++ b/angular-highlightjs.min.js @@ -3,4 +3,4 @@ version: 0.2.8 build date: 2014-04-24 author: Robin Fan https://github.com/pc035860/angular-highlightjs.git */ -angular.module("hljs",[]).provider("hljsService",function(){var a={};return{setOptions:function(b){angular.extend(a,b)},getOptions:function(){return angular.copy(a)},$get:["$window",function(b){return(b.hljs.configure||angular.noop)(a),b.hljs}]}}).factory("hljsCache",["$cacheFactory",function(a){return a("hljsCache")}]).controller("HljsCtrl",["hljsCache","hljsService",function(a,b){var c=this,d=null,e=null,f=null,g=null;c.init=function(a){d=a},c.setLanguage=function(a){e=a,f&&c.highlight(f)},c.highlightCallback=function(a){g=a},c.highlight=function(h){if(d){var i,j;f=h,e?(j=c._cacheKey(e,f),i=a.get(j),i||(i=b.highlight(e,b.fixMarkup(f),!0),a.put(j,i))):(j=c._cacheKey(f),i=a.get(j),i||(i=b.highlightAuto(b.fixMarkup(f)),a.put(j,i))),d.html(i.value),d.addClass(i.language),null!==g&&angular.isFunction(g)&&g()}},c.clear=function(){d&&(f=null,d.text(""))},c.release=function(){d=null},c._cacheKey=function(){var a=Array.prototype.slice.call(arguments),b="!angular-highlightjs!";return a.join(b)}}]).directive("hljs",["$interpolate",function(a){return{restrict:"EA",controller:"HljsCtrl",compile:function(b){var c=b[0].innerHTML.replace(/^(\r\n|\r|\n)/m,"");return b.addClass("hljs"),b.html(""),function(b,d,e,f){f.init(d),e.onhighlight&&f.highlightCallback(function(){b.$eval(e.onhighlight)}),c&&f.highlight(a(c)(b)),b.$on("$destroy",function(){f.release()})}}}}]).directive("language",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){c.$observe("language",function(a){angular.isDefined(a)&&d.setLanguage(a)})}}}]).directive("source",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){a.$watch(c.source,function(a){a?d.highlight(a):d.clear()})}}}]).directive("include",["$http","$templateCache","$q",function(a,b,c){return{require:"hljs",restrict:"A",compile:function(d,e){var f=e.include;return function(d,e,g,h){var i=0;d.$watch(f,function(d){var e=++i;if(d&&angular.isString(d)){var f,g;f=b.get(d),f||(g=c.defer(),a.get(d,{cache:b,transformResponse:function(a){return a}}).success(function(a){e===i&&g.resolve(a)}).error(function(){e===i&&h.clear(),g.resolve()}),f=g.promise),c.when(f).then(function(a){a&&(angular.isArray(a)?a=a[1]:angular.isObject(a)&&(a=a.data),a=a.replace(/^(\r\n|\r|\n)/m,""),h.highlight(a))})}else h.clear()})}}}}]); \ No newline at end of file +angular.module("hljs",[]).provider("hljsService",function(){var a={};return{setOptions:function(b){angular.extend(a,b)},getOptions:function(){return angular.copy(a)},$get:["$window",function(b){return(b.hljs.configure||angular.noop)(a),b.hljs}]}}).factory("hljsCache",["$cacheFactory",function(a){return a("hljsCache")}]).controller("HljsCtrl",["hljsCache","hljsService",function(a,b){var c=this,d=null,e=null,f=null,g=null;c.init=function(a){d=a},c.setLanguage=function(a){e=a,f&&c.highlight(f)},c.highlightCallback=function(a){g=a},c.highlight=function(h){if(d){var i,j;f=h,e?(j=c._cacheKey(e,f),i=a.get(j),i||(i=b.highlight(e,b.fixMarkup(f),!0),a.put(j,i))):(j=c._cacheKey(f),i=a.get(j),i||(i=b.highlightAuto(b.fixMarkup(f)),a.put(j,i))),d.html(i.value),d.addClass(i.language),null!==g&&angular.isFunction(g)&&g()}},c.clear=function(){d&&(f=null,d.text(""))},c.release=function(){d=null},c._cacheKey=function(){var a=Array.prototype.slice.call(arguments),b="!angular-highlightjs!";return a.join(b)}}]).directive("hljs",["$interpolate",function(a){return{restrict:"EA",controller:"HljsCtrl",compile:function(b){var c=b[0].innerHTML.replace(/^(\r\n|\r|\n)/m,"").replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">");return b.addClass("hljs"),b.html(""),function(b,d,e,f){f.init(d),e.onhighlight&&f.highlightCallback(function(){b.$eval(e.onhighlight)}),c&&f.highlight(a(c)(b)),b.$on("$destroy",function(){f.release()})}}}}]).directive("language",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){c.$observe("language",function(a){angular.isDefined(a)&&d.setLanguage(a)})}}}]).directive("source",[function(){return{require:"hljs",restrict:"A",link:function(a,b,c,d){a.$watch(c.source,function(a){a?d.highlight(a):d.clear()})}}}]).directive("include",["$http","$templateCache","$q",function(a,b,c){return{require:"hljs",restrict:"A",compile:function(d,e){var f=e.include;return function(d,e,g,h){var i=0;d.$watch(f,function(d){var e=++i;if(d&&angular.isString(d)){var f,g;f=b.get(d),f||(g=c.defer(),a.get(d,{cache:b,transformResponse:function(a){return a}}).success(function(a){e===i&&g.resolve(a)}).error(function(){e===i&&h.clear(),g.resolve()}),f=g.promise),c.when(f).then(function(a){a&&(angular.isArray(a)?a=a[1]:angular.isObject(a)&&(a=a.data),a=a.replace(/^(\r\n|\r|\n)/m,""),h.highlight(a))})}else h.clear()})}}}}]); \ No newline at end of file