From 048569754aec39b0e58232107e8108fed70bf7e8 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 29 Apr 2013 22:35:37 +0200 Subject: [PATCH] Add compatibility function for outerHTML --- core/js/compatibility.js | 16 +++++++++++++++- core/js/octemplate.js | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/js/compatibility.js b/core/js/compatibility.js index cc37949409..b690803ca7 100644 --- a/core/js/compatibility.js +++ b/core/js/compatibility.js @@ -133,4 +133,18 @@ if(!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g,''); }; -} \ No newline at end of file +} + +// Older Firefoxes doesn't support outerHTML +// From http://stackoverflow.com/questions/1700870/how-do-i-do-outerhtml-in-firefox#answer-3819589 +function outerHTML(node){ + // In newer browsers use the internal property otherwise build a wrapper. + return node.outerHTML || ( + function(n){ + var div = document.createElement('div'), h; + div.appendChild( n.cloneNode(true) ); + h = div.innerHTML; + div = null; + return h; + })(node); +} diff --git a/core/js/octemplate.js b/core/js/octemplate.js index a5d56852a5..e032506c0b 100644 --- a/core/js/octemplate.js +++ b/core/js/octemplate.js @@ -72,7 +72,7 @@ }, // From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript _build: function(o){ - var data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML; + var data = this.elem.attr('type') === 'text/template' ? this.elem.html() : outerHTML(this.elem.get(0)); try { return data.replace(/{([^{}]*)}/g, function (a, b) {