From 89d0d025710701471263e88198335d7bc80e11df Mon Sep 17 00:00:00 2001 From: Jedrzej Sadowski Date: Wed, 24 Aug 2016 12:01:27 +0200 Subject: [PATCH 1/5] Fix mdTabs on ie10 --- .../tabs/js/tabsDummyWrapperDirective.js | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/components/tabs/js/tabsDummyWrapperDirective.js b/src/components/tabs/js/tabsDummyWrapperDirective.js index 253d707a33..b939bfa5b5 100644 --- a/src/components/tabs/js/tabsDummyWrapperDirective.js +++ b/src/components/tabs/js/tabsDummyWrapperDirective.js @@ -6,38 +6,46 @@ angular * @private * * @param $mdUtil + * @param $window * @returns {{require: string, link: link}} * @constructor - * + * * @ngInject */ -function MdTabsDummyWrapper ($mdUtil) { +function MdTabsDummyWrapper ($mdUtil, $window) { return { require: '^?mdTabs', link: function link (scope, element, attr, ctrl) { if (!ctrl) return; - var observer = new MutationObserver(function(mutations) { + var observer; + var disconnect; + + var mutationCallback = function() { ctrl.updatePagination(); ctrl.updateInkBarStyles(); - }); - - var config = { - childList: true, - subtree: true, - // Per https://bugzilla.mozilla.org/show_bug.cgi?id=1138368, browsers will not fire - // the childList mutation, once a element's innerText changes. - // The characterData of the element will change. - characterData: true }; - observer.observe(element[0], config); + if('MutationObserver' in $window) { + var config = { + childList: true, + subtree: true, + // Per https://bugzilla.mozilla.org/show_bug.cgi?id=1138368, browsers will not fire + // the childList mutation, once a element's innerText changes. + // The characterData of the element will change. + characterData: true + }; + + observer = new MutationObserver(mutationCallback); + observer.observe(element[0], config); + disconnect = observer.disconnect.bind(observer); + } else { + disconnect = element.on('DOMSubtreeModified', mutationCallback); + } // Disconnect the observer scope.$on('$destroy', function() { - if (observer) { - observer.disconnect(); - } + disconnect(); }); } }; From fcf01af4fb93682c61002b8472ebb2e3998a84e1 Mon Sep 17 00:00:00 2001 From: Jedrzej Sadowski Date: Wed, 24 Aug 2016 12:01:27 +0200 Subject: [PATCH 2/5] Fix mdTabs on ie10 --- .../tabs/js/tabsDummyWrapperDirective.js | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/components/tabs/js/tabsDummyWrapperDirective.js b/src/components/tabs/js/tabsDummyWrapperDirective.js index 253d707a33..b939bfa5b5 100644 --- a/src/components/tabs/js/tabsDummyWrapperDirective.js +++ b/src/components/tabs/js/tabsDummyWrapperDirective.js @@ -6,38 +6,46 @@ angular * @private * * @param $mdUtil + * @param $window * @returns {{require: string, link: link}} * @constructor - * + * * @ngInject */ -function MdTabsDummyWrapper ($mdUtil) { +function MdTabsDummyWrapper ($mdUtil, $window) { return { require: '^?mdTabs', link: function link (scope, element, attr, ctrl) { if (!ctrl) return; - var observer = new MutationObserver(function(mutations) { + var observer; + var disconnect; + + var mutationCallback = function() { ctrl.updatePagination(); ctrl.updateInkBarStyles(); - }); - - var config = { - childList: true, - subtree: true, - // Per https://bugzilla.mozilla.org/show_bug.cgi?id=1138368, browsers will not fire - // the childList mutation, once a element's innerText changes. - // The characterData of the element will change. - characterData: true }; - observer.observe(element[0], config); + if('MutationObserver' in $window) { + var config = { + childList: true, + subtree: true, + // Per https://bugzilla.mozilla.org/show_bug.cgi?id=1138368, browsers will not fire + // the childList mutation, once a element's innerText changes. + // The characterData of the element will change. + characterData: true + }; + + observer = new MutationObserver(mutationCallback); + observer.observe(element[0], config); + disconnect = observer.disconnect.bind(observer); + } else { + disconnect = element.on('DOMSubtreeModified', mutationCallback); + } // Disconnect the observer scope.$on('$destroy', function() { - if (observer) { - observer.disconnect(); - } + disconnect(); }); } }; From 0ca839af4eddcdd8cadd85dd8532cc49c88bc562 Mon Sep 17 00:00:00 2001 From: Jedrzej Sadowski Date: Wed, 24 Aug 2016 12:56:55 +0200 Subject: [PATCH 3/5] fix deregistration of event handler --- src/components/tabs/js/tabsDummyWrapperDirective.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/tabs/js/tabsDummyWrapperDirective.js b/src/components/tabs/js/tabsDummyWrapperDirective.js index b939bfa5b5..c8ddfff567 100644 --- a/src/components/tabs/js/tabsDummyWrapperDirective.js +++ b/src/components/tabs/js/tabsDummyWrapperDirective.js @@ -40,7 +40,8 @@ function MdTabsDummyWrapper ($mdUtil, $window) { observer.observe(element[0], config); disconnect = observer.disconnect.bind(observer); } else { - disconnect = element.on('DOMSubtreeModified', mutationCallback); + element.on('DOMSubtreeModified', mutationCallback); + disconnect = element.off.bind(element, 'DOMSubtreeModified', mutationCallback); } // Disconnect the observer From 0715fea6a25d5de040afb9554af44f974c335dcd Mon Sep 17 00:00:00 2001 From: Jedrzej Sadowski Date: Thu, 25 Aug 2016 07:54:24 +0200 Subject: [PATCH 4/5] Debounce fallback method --- src/components/tabs/js/tabsDummyWrapperDirective.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/tabs/js/tabsDummyWrapperDirective.js b/src/components/tabs/js/tabsDummyWrapperDirective.js index c8ddfff567..99fa11ef0a 100644 --- a/src/components/tabs/js/tabsDummyWrapperDirective.js +++ b/src/components/tabs/js/tabsDummyWrapperDirective.js @@ -40,8 +40,10 @@ function MdTabsDummyWrapper ($mdUtil, $window) { observer.observe(element[0], config); disconnect = observer.disconnect.bind(observer); } else { - element.on('DOMSubtreeModified', mutationCallback); - disconnect = element.off.bind(element, 'DOMSubtreeModified', mutationCallback); + var debounced = $mdUtil.debounce(mutationCallback, 10); + + element.on('DOMSubtreeModified', debounced); + disconnect = element.off.bind(element, 'DOMSubtreeModified', debounced); } // Disconnect the observer From b5937e57fdb076714234642698cb157e3e124001 Mon Sep 17 00:00:00 2001 From: Jedrzej Sadowski Date: Thu, 25 Aug 2016 10:02:04 +0200 Subject: [PATCH 5/5] Fix debounce config --- src/components/tabs/js/tabsDummyWrapperDirective.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/tabs/js/tabsDummyWrapperDirective.js b/src/components/tabs/js/tabsDummyWrapperDirective.js index 99fa11ef0a..aaed701e03 100644 --- a/src/components/tabs/js/tabsDummyWrapperDirective.js +++ b/src/components/tabs/js/tabsDummyWrapperDirective.js @@ -40,7 +40,7 @@ function MdTabsDummyWrapper ($mdUtil, $window) { observer.observe(element[0], config); disconnect = observer.disconnect.bind(observer); } else { - var debounced = $mdUtil.debounce(mutationCallback, 10); + var debounced = $mdUtil.debounce(mutationCallback, 15, null, false); element.on('DOMSubtreeModified', debounced); disconnect = element.off.bind(element, 'DOMSubtreeModified', debounced);