diff options
| -rw-r--r-- | angularFiles.js | 2 | ||||
| -rw-r--r-- | docs/src/example.js | 2 | ||||
| -rw-r--r-- | src/bootstrap/bootstrap-prettify.js | 35 | ||||
| -rw-r--r-- | src/bootstrap/google-prettify/prettify.js | 6 | 
4 files changed, 32 insertions, 13 deletions
| diff --git a/angularFiles.js b/angularFiles.js index 309aa2b3..537b5bde 100644 --- a/angularFiles.js +++ b/angularFiles.js @@ -59,7 +59,7 @@ angularFiles = {      'src/ng/directive/ngView.js',      'src/ng/directive/script.js',      'src/ng/directive/select.js', -    'src/ng/directive/style.js', +    'src/ng/directive/style.js'    ],    'angularSrcModules': [ diff --git a/docs/src/example.js b/docs/src/example.js index 519b6cb1..44a74b23 100644 --- a/docs/src/example.js +++ b/docs/src/example.js @@ -116,7 +116,7 @@ exports.Example.prototype.toHtmlTabs = function() {  exports.Example.prototype.toHtmlEmbed = function() {    var out = []; -  out.push('<div class="well  doc-example-live"'); +  out.push('<div class="well doc-example-live"');    out.push(' ng-embed-app="' + this.module + '"');    out.push(' ng-set-html="' + this.html[0].id + '"');    out.push(' ng-eval-javascript="' + ids(this.js) + '">'); diff --git a/src/bootstrap/bootstrap-prettify.js b/src/bootstrap/bootstrap-prettify.js index 93bed809..e7fc1e9e 100644 --- a/src/bootstrap/bootstrap-prettify.js +++ b/src/bootstrap/bootstrap-prettify.js @@ -19,6 +19,17 @@ function escape(text) {      replace(/"/g, '"');  } +/** + * http://stackoverflow.com/questions/451486/pre-tag-loses-line-breaks-when-setting-innerhtml-in-ie + * http://stackoverflow.com/questions/195363/inserting-a-newline-into-a-pre-tag-ie-javascript + */ +function setHtmlIe8SafeWay(element, html) { +  var newElement = angular.element('<pre>' + html + '</pre>'); + +  element.html(''); +  element.append(newElement.contents()); +  return element; +}  directive.jsFiddle = function(getEmbeddedTemplate, escape, script) { @@ -54,7 +65,7 @@ directive.jsFiddle = function(getEmbeddedTemplate, escape, script) {        fields.html += '</div>\n'; -      element.html( +      setHtmlIe8SafeWay(element,          '<form class="jsfiddle" method="post" action="http://jsfiddle.net/api/post/library/pure/" target="_blank">' +            hiddenField('title', 'AngularJS Example: ' + name) +            hiddenField('css', '</style> <!-- Ugly Hack due to jsFiddle issue: http://goo.gl/BUfGZ --> \n' + @@ -97,7 +108,7 @@ directive.ngSetText = ['getEmbeddedTemplate', function(getEmbeddedTemplate) {      restrict: 'CA',      priority: 10,      compile: function(element, attr) { -      element.text(getEmbeddedTemplate(attr.ngSetText)); +      setHtmlIe8SafeWay(element, escape(getEmbeddedTemplate(attr.ngSetText)));      }    }  }] @@ -109,9 +120,9 @@ directive.ngHtmlWrap = ['reindentCode', 'templateMerge', function(reindentCode,        var properties = {              head: '',              module: '', -            body: reindentCode(element.text(), 4) +            body: element.text()            }, -        html = "<!doctype html>\n<html ng-app{{module}}>\n  <head>\n{{head}}  </head>\n  <body>\n{{body}}  </body>\n</html>"; +        html = "<!doctype html>\n<html ng-app{{module}}>\n  <head>\n{{head:4}}  </head>\n  <body>\n{{body:4}}  </body>\n</html>";        angular.forEach((attr.ngHtmlWrap || '').split(' '), function(dep) {          if (!dep) return; @@ -120,15 +131,15 @@ directive.ngHtmlWrap = ['reindentCode', 'templateMerge', function(reindentCode,          var ext = dep.split(/\./).pop();          if (ext == 'css') { -          properties.head += '    <link rel="stylesheet" href="' + dep + '" type="text/css">\n'; +          properties.head += '<link rel="stylesheet" href="' + dep + '" type="text/css">\n';          } else if(ext == 'js') { -          properties.head += '    <script src="' + dep + '"></script>\n'; +          properties.head += '<script src="' + dep + '"></script>\n';          } else {            properties.module = '="' + dep + '"';          }        }); -      element.text(templateMerge(html, properties)); +      setHtmlIe8SafeWay(element, escape(templateMerge(html, properties)));      }    }  }]; @@ -139,7 +150,7 @@ directive.ngSetHtml = ['getEmbeddedTemplate', function(getEmbeddedTemplate) {      restrict: 'CA',      priority: 10,      compile: function(element, attr) { -      element.html(getEmbeddedTemplate(attr.ngSetHtml)); +      setHtmlIe8SafeWay(element, getEmbeddedTemplate(attr.ngSetHtml));      }    }  }]; @@ -256,7 +267,13 @@ service.templateMerge = ['reindentCode', function(indentCode) {  service.getEmbeddedTemplate = ['reindentCode', function(reindentCode) {    return function (id) { -    return reindentCode(angular.element(document.getElementById(id)).html(), 0); +    var element = document.getElementById(id); + +    if (!element) { +      return null; +    } + +    return reindentCode(angular.element(element).html(), 0);    }  }]; diff --git a/src/bootstrap/google-prettify/prettify.js b/src/bootstrap/google-prettify/prettify.js index c70e9524..b18fc223 100644 --- a/src/bootstrap/google-prettify/prettify.js +++ b/src/bootstrap/google-prettify/prettify.js @@ -1350,11 +1350,13 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[     *     or the 1-indexed number of the first line in sourceCodeHtml.     */    function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) { -    var container = document.createElement('pre'); +    // PATCHED: http://code.google.com/p/google-code-prettify/issues/detail?id=213 +    var container = document.createElement('div');      // This could cause images to load and onload listeners to fire.      // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.      // We assume that the inner HTML is from a trusted source. -    container.innerHTML = sourceCodeHtml; +    container.innerHTML = '<pre>' + sourceCodeHtml + '</pre>'; +    container = container.firstChild;      if (opt_numberLines) {        numberLines(container, opt_numberLines, true);      } | 
