From 2de6baae34f13ae1e0e3e70e2f08eceae346cfcc Mon Sep 17 00:00:00 2001 From: Timur Sufiev Date: Tue, 8 Mar 2016 13:32:22 +0300 Subject: [PATCH] Fix non-working Angular actions in jquery modified tables Fix the issue by re-$compile-ing the content dynamically inserted by jQuery. Ideally we should solve it by replacing jQuery insert with Angular one. This remains a TODO for Newton release. Closes-Bug: #1514627 Co-Authored-By: Matt Borland Change-Id: Ifbe063e9dd6c20930a1ed4fa14dddb2d0f762902 --- horizon/static/framework/framework.module.js | 19 ++++++++++++++++++- horizon/static/horizon/js/horizon.tables.js | 7 +++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/horizon/static/framework/framework.module.js b/horizon/static/framework/framework.module.js index 5d5617d7f0..a2408e6d82 100644 --- a/horizon/static/framework/framework.module.js +++ b/horizon/static/framework/framework.module.js @@ -7,7 +7,8 @@ 'horizon.framework.util', 'horizon.framework.widgets' ]) - .config(config); + .config(config) + .run(run); config.$inject = [ '$injector', @@ -71,4 +72,20 @@ } } + run.$inject = ['$window', '$rootScope']; + + function run($window, $rootScope) { + $window.recompileAngularContent = recompileAngularContent; + + function recompileAngularContent() { + var body = angular.element('body'); + + function explicit($compile) { + $compile(body)($rootScope); + } + explicit.$inject = ['$compile']; + body.injector().invoke(explicit); + } + } + })(); diff --git a/horizon/static/horizon/js/horizon.tables.js b/horizon/static/horizon/js/horizon.tables.js index 34ff4d075d..44e376e957 100644 --- a/horizon/static/horizon/js/horizon.tables.js +++ b/horizon/static/horizon/js/horizon.tables.js @@ -98,6 +98,13 @@ horizon.datatables = { $new_row.find('.table-row-multi-select').prop('checked', true); } $row.replaceWith($new_row); + + // TODO(matt-borland, tsufiev): ideally we should solve the + // problem with not-working angular actions in a content added + // by jQuery via replacing jQuery insert with Angular insert. + // Should address this in Newton release + recompileAngularContent(); + // Reset tablesorter's data cache. $table.trigger("update"); // Reset decay constant.