From f0b129557784c97fe72e728802f25393f3066010 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 23 May 2018 04:22:47 +0200 Subject: [PATCH] Updates #1098 IE doesn't support `document.contains` --- src/converse-bookmarks.js | 3 +-- src/converse-roomslist.js | 3 +-- src/utils/core.js | 8 ++++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/converse-bookmarks.js b/src/converse-bookmarks.js index 39be7e3b4..2b414f8e5 100644 --- a/src/converse-bookmarks.js +++ b/src/converse-bookmarks.js @@ -469,8 +469,7 @@ insertIntoControlBox () { const controlboxview = _converse.chatboxviews.get('controlbox'); - if (!_.isUndefined(controlboxview) && - !_converse.root.contains(this.el)) { + if (!_.isUndefined(controlboxview) && !u.rootContains(_converse.root, this.el)) { const el = controlboxview.el.querySelector('.bookmarks-list'); if (!_.isNull(el)) { el.parentNode.replaceChild(this.el, el); diff --git a/src/converse-roomslist.js b/src/converse-roomslist.js index 6aa1bc6e2..06d072bf7 100644 --- a/src/converse-roomslist.js +++ b/src/converse-roomslist.js @@ -181,8 +181,7 @@ insertIntoControlBox () { const controlboxview = _converse.chatboxviews.get('controlbox'); - if (!_.isUndefined(controlboxview) && - !_converse.root.contains(this.el)) { + if (!_.isUndefined(controlboxview) && !u.rootContains(_converse.root, this.el)) { const el = controlboxview.el.querySelector('.open-rooms-list'); if (!_.isNull(el)) { el.parentNode.replaceChild(this.el, el); diff --git a/src/utils/core.js b/src/utils/core.js index 196fde79f..1fbf9eba7 100644 --- a/src/utils/core.js +++ b/src/utils/core.js @@ -654,6 +654,14 @@ }; }; + u.rootContains = function (root, el) { + // The document element does not have the contains method in IE. + if (root === document && !root.contains) { + return document.head.contains(el) || document.body.contains(el); + } + return root.contains ? root.contains(el) : window.HTMLElement.prototype.contains.call(root, el); + }; + u.createFragmentFromText = function (markup) { /* Returns a DocumentFragment containing DOM nodes based on the * passed-in markup text.