From aa02534865c8e43dcef9e218b12c8c717c837205 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Mon, 7 May 2012 15:19:26 -0700 Subject: [PATCH] bug(ie8 docs): docs now work on ie8 --- angularFiles.js | 2 +- docs/src/example.js | 2 +- src/bootstrap/bootstrap-prettify.js | 35 +++++++++++++++++------ src/bootstrap/google-prettify/prettify.js | 6 ++-- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/angularFiles.js b/angularFiles.js index 309aa2b39971..537b5bdea27f 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 519b6cb10efe..44a74b232cf6 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('
'); diff --git a/src/bootstrap/bootstrap-prettify.js b/src/bootstrap/bootstrap-prettify.js index 93bed809fc25..e7fc1e9e6a42 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('
' + html + '
'); + + 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 += '
\n'; - element.html( + setHtmlIe8SafeWay(element, '
' + hiddenField('title', 'AngularJS Example: ' + name) + hiddenField('css', ' \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 = "\n\n \n{{head}} \n \n{{body}} \n"; + html = "\n\n \n{{head:4}} \n \n{{body:4}} \n"; 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 += ' \n'; + properties.head += '\n'; } else if(ext == 'js') { - properties.head += ' \n'; + properties.head += '\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 c70e95243348..b18fc22379af 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. . // We assume that the inner HTML is from a trusted source. - container.innerHTML = sourceCodeHtml; + container.innerHTML = '
' + sourceCodeHtml + '
'; + container = container.firstChild; if (opt_numberLines) { numberLines(container, opt_numberLines, true); }