@@ -19,6 +19,17 @@ function escape(text) {
1919 replace ( / " / g, '"' ) ;
2020}
2121
22+ /**
23+ * http://stackoverflow.com/questions/451486/pre-tag-loses-line-breaks-when-setting-innerhtml-in-ie
24+ * http://stackoverflow.com/questions/195363/inserting-a-newline-into-a-pre-tag-ie-javascript
25+ */
26+ function setHtmlIe8SafeWay ( element , html ) {
27+ var newElement = angular . element ( '<pre>' + html + '</pre>' ) ;
28+
29+ element . html ( '' ) ;
30+ element . append ( newElement . contents ( ) ) ;
31+ return element ;
32+ }
2233
2334
2435directive . jsFiddle = function ( getEmbeddedTemplate , escape , script ) {
@@ -54,7 +65,7 @@ directive.jsFiddle = function(getEmbeddedTemplate, escape, script) {
5465
5566 fields . html += '</div>\n' ;
5667
57- element . html (
68+ setHtmlIe8SafeWay ( element ,
5869 '<form class="jsfiddle" method="post" action="http://jsfiddle.net/api/post/library/pure/" target="_blank">' +
5970 hiddenField ( 'title' , 'AngularJS Example: ' + name ) +
6071 hiddenField ( 'css' , '</style> <!-- Ugly Hack due to jsFiddle issue: http://goo.gl/BUfGZ --> \n' +
@@ -97,7 +108,7 @@ directive.ngSetText = ['getEmbeddedTemplate', function(getEmbeddedTemplate) {
97108 restrict : 'CA' ,
98109 priority : 10 ,
99110 compile : function ( element , attr ) {
100- element . text ( getEmbeddedTemplate ( attr . ngSetText ) ) ;
111+ setHtmlIe8SafeWay ( element , escape ( getEmbeddedTemplate ( attr . ngSetText ) ) ) ;
101112 }
102113 }
103114} ]
@@ -109,9 +120,9 @@ directive.ngHtmlWrap = ['reindentCode', 'templateMerge', function(reindentCode,
109120 var properties = {
110121 head : '' ,
111122 module : '' ,
112- body : reindentCode ( element . text ( ) , 4 )
123+ body : element . text ( )
113124 } ,
114- html = "<!doctype html>\n<html ng-app{{module}}>\n <head>\n{{head}} </head>\n <body>\n{{body}} </body>\n</html>" ;
125+ html = "<!doctype html>\n<html ng-app{{module}}>\n <head>\n{{head:4 }} </head>\n <body>\n{{body:4 }} </body>\n</html>" ;
115126
116127 angular . forEach ( ( attr . ngHtmlWrap || '' ) . split ( ' ' ) , function ( dep ) {
117128 if ( ! dep ) return ;
@@ -120,15 +131,15 @@ directive.ngHtmlWrap = ['reindentCode', 'templateMerge', function(reindentCode,
120131 var ext = dep . split ( / \. / ) . pop ( ) ;
121132
122133 if ( ext == 'css' ) {
123- properties . head += ' <link rel="stylesheet" href="' + dep + '" type="text/css">\n' ;
134+ properties . head += '<link rel="stylesheet" href="' + dep + '" type="text/css">\n' ;
124135 } else if ( ext == 'js' ) {
125- properties . head += ' <script src="' + dep + '"></script>\n' ;
136+ properties . head += '<script src="' + dep + '"></script>\n' ;
126137 } else {
127138 properties . module = '="' + dep + '"' ;
128139 }
129140 } ) ;
130141
131- element . text ( templateMerge ( html , properties ) ) ;
142+ setHtmlIe8SafeWay ( element , escape ( templateMerge ( html , properties ) ) ) ;
132143 }
133144 }
134145} ] ;
@@ -139,7 +150,7 @@ directive.ngSetHtml = ['getEmbeddedTemplate', function(getEmbeddedTemplate) {
139150 restrict : 'CA' ,
140151 priority : 10 ,
141152 compile : function ( element , attr ) {
142- element . html ( getEmbeddedTemplate ( attr . ngSetHtml ) ) ;
153+ setHtmlIe8SafeWay ( element , getEmbeddedTemplate ( attr . ngSetHtml ) ) ;
143154 }
144155 }
145156} ] ;
@@ -256,7 +267,13 @@ service.templateMerge = ['reindentCode', function(indentCode) {
256267
257268service . getEmbeddedTemplate = [ 'reindentCode' , function ( reindentCode ) {
258269 return function ( id ) {
259- return reindentCode ( angular . element ( document . getElementById ( id ) ) . html ( ) , 0 ) ;
270+ var element = document . getElementById ( id ) ;
271+
272+ if ( ! element ) {
273+ return null ;
274+ }
275+
276+ return reindentCode ( angular . element ( element ) . html ( ) , 0 ) ;
260277 }
261278} ] ;
262279
0 commit comments