From 048569754aec39b0e58232107e8108fed70bf7e8 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
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) {
-- 
GitLab