aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/services.js15
-rw-r--r--src/widgets.js2
2 files changed, 17 insertions, 0 deletions
diff --git a/src/services.js b/src/services.js
index e2132f1c..e91a8eca 100644
--- a/src/services.js
+++ b/src/services.js
@@ -115,5 +115,20 @@ angularService("$invalidWidgets", function(){
});
return count;
};
+ invalidWidgets.clearOrphans = function() {
+ for(var i = 0; i < invalidWidgets.length;) {
+ var widget = invalidWidgets[i];
+ if (isOrphan(widget[0])) {
+ invalidWidgets.splice(i, 1);
+ } else {
+ i++;
+ }
+ }
+ };
+ function isOrphan(widget) {
+ if (widget == window.document) return false;
+ var parent = widget.parentNode;
+ return !parent || isOrphan(parent);
+ }
return invalidWidgets;
});
diff --git a/src/widgets.js b/src/widgets.js
index f5f02813..b281ac2e 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -225,6 +225,8 @@ angularWidget('NG:SWITCH', function ngSwitch(element){
element.append(switchCase.element);
childScope.$tryEval(switchCase.change, element);
switchCase.template(switchCase.element, childScope);
+ if (scope.$invalidWidgets)
+ scope.$invalidWidgets.clearOrphans();
childScope.$init();
}
});