summaryrefslogtreecommitdiff
path: root/src/common/Entities.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/Entities.js')
-rw-r--r--src/common/Entities.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/common/Entities.js b/src/common/Entities.js
new file mode 100644
index 0000000..03a5d11
--- /dev/null
+++ b/src/common/Entities.js
@@ -0,0 +1,30 @@
+var Entities = {
+ get htmlNode() {
+ delete this.htmlNode;
+ return this.htmlNode = document.implementation.createHTMLDocument("")
+ .createElement("body");
+ },
+ convert: function(e) {
+ try {
+ this.htmlNode.innerHTML = e;
+ var child = this.htmlNode.firstChild || null;
+ return child && child.nodeValue || e;
+ } catch(ex) {
+ return e;
+ }
+ },
+ convertAll: function(s) {
+ return s.replace(/[\\&][^<>]+/g, function(e) { return Entities.convert(e) });
+ },
+ convertDeep: function(s) {
+ for (var prev = null; (s = this.convertAll(s)) !== prev || (s = unescape(s)) !== prev; prev = s);
+ return s;
+ },
+ neutralize: function(e, whitelist) {
+ var c = this.convert(e);
+ return (c == e) ? c : (whitelist && whitelist.test(c) ? e : e.replace(";", ","));
+ },
+ neutralizeAll: function(s, whitelist) {
+ return s.replace(/&[\w#-]*?;/g, function(e) { return Entities.neutralize(e, whitelist || null); });
+ }
+};