Просмотр исходного кода

HUE-6254 [jb] Allow refreshing of the job page

Enrico Berti 8 лет назад
Родитель
Сommit
a1dcad6

+ 16 - 4
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -1483,6 +1483,12 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
 
         $('canvas').remove();
 
+        if (!IS_HUE_4) {
+          huePubSub.subscribe('hue4.process.headers', function (opts) {
+            opts.callback(opts.response);
+          });
+        }
+
         if (vm.job().type() === 'workflow') {
           $('#workflow-page-graph').html('<div class="hue-spinner"><i class="fa fa-spinner fa-spin hue-spinner-center hue-spinner-xlarge"></i></div>');
           $.ajax({
@@ -1497,9 +1503,15 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
             dataType: "html",
             success: function (response) {
               self.workflowGraphLoaded = true;
-              $('#workflow-page-graph').html(response);
-              updateArrowPosition();
-              arrowsPolling();
+
+              huePubSub.publish('hue4.process.headers', {
+                response: response,
+                callback: function (r) {
+                  $('#workflow-page-graph').html(r);
+                  updateArrowPosition();
+                  arrowsPolling();
+                }
+              });
             }
           });
         }
@@ -1945,7 +1957,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
         loadHash();
       }
 
-      huePubSub.subscribe('cluster.config.set.config', function (clusterConfig) {
+      huePubSub.subscribeOnce('cluster.config.set.config', function (clusterConfig) {
         viewModel.appConfig(clusterConfig && clusterConfig['app_config']);
         loadHash();
       });

+ 1 - 0
apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow_graph.mako

@@ -51,6 +51,7 @@ ${ dashboard.import_layout() }
 
   % if layout_json != '':
   var viewModel = new WorkflowEditorViewModel(${ layout_json | n,unicode }, ${ workflow_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflow_properties_json | n,unicode }, ${ subworkflows_json | n,unicode }, ${ can_edit_json | n,unicode });
+  ko.cleanNode($("#${graph_element_id}")[0]);
   ko.applyBindings(viewModel, $("#${graph_element_id}")[0]);
   viewModel.isViewer = ko.observable(true);
   viewModel.isEmbeddable = ko.observable(true);

+ 20 - 16
desktop/core/src/desktop/templates/hue.mako

@@ -593,12 +593,22 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
           loadedCss.push($(this).attr('href'));
         });
 
-        huePubSub.subscribe('hue4.add.global.js', function(path){
-          loadedJs.push(path);
+        huePubSub.subscribe('hue4.add.global.js', function ($el) {
+          var jsFile = $el.attr('src').split('?')[0];
+          if (loadedJs.indexOf(jsFile) === -1) {
+            loadedJs.push(jsFile);
+            $el.clone().appendTo($('head'));
+          }
+          $el.remove();
         });
 
-        huePubSub.subscribe('hue4.add.global.css', function(path){
-          loadedCss.push(path);
+        huePubSub.subscribe('hue4.add.global.css', function ($el) {
+          var cssFile = $el.attr('href').split('?')[0];
+          if (loadedCss.indexOf(cssFile) === -1) {
+            loadedCss.push(cssFile);
+            $el.clone().appendTo($('head'));
+          }
+          $el.remove();
         });
 
         huePubSub.subscribe('hue4.get.globals', function(callback){
@@ -612,20 +622,10 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
             $(this).attr('href', $(this).attr('href') + '?' + Math.random())
           });
           r.find('script[src]').each(function () {
-            var jsFile = $(this).attr('src').split('?')[0];
-            if (loadedJs.indexOf(jsFile) === -1) {
-              loadedJs.push(jsFile);
-              $(this).clone().appendTo($('head'));
-            }
-            $(this).remove();
+            huePubSub.publish('hue4.add.global.js', $(this));
           });
           r.find('link[href]').each(function () {
-            var cssFile = $(this).attr('href').split('?')[0];
-            if (loadedCss.indexOf(cssFile) === -1) {
-              loadedCss.push(cssFile);
-              $(this).clone().appendTo($('head'));
-            }
-            $(this).remove();
+            huePubSub.publish('hue4.add.global.css', $(this));
           });
           r.find('a[href]').each(function () {
             var link = $(this).attr('href');
@@ -638,6 +638,10 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
           return r;
         };
 
+        huePubSub.subscribe('hue4.process.headers', function(opts){
+          opts.callback(self.processHeaders(opts.response));
+        });
+
         self.loadApp = function(app){
           self.currentApp(app);
           self.isLoadingEmbeddable(true);

+ 26 - 49
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -2286,76 +2286,53 @@ var EditorViewModel = (function() {
         }
         hueAnalytics.log('notebook', 'schedule/' + _action);
 
-        function getCoordinator(loadedJs, loadedCss) {
+        function getCoordinator() {
           $.get('/oozie/editor/coordinator/' + _action + '/', {
             format: 'json',
             document: self.uuid(),
             coordinator: self.coordinatorUuid()
           }, function (data) {
             if ($("#schedulerEditor").length > 0) {
-              var response = data.layout;
-              var r = $('<span>').html(response);
-              r.find('link').each(function () {
-                $(this).attr('href', $(this).attr('href') + '?' + Math.random())
-              });
-              r.find('script[src]').each(function () {
-                var jsFile = $(this).attr('src').split('?')[0];
-                if (loadedJs.indexOf(jsFile) === -1) {
-                  loadedJs.push(jsFile);
-                  $(this).clone().appendTo($('head'));
-                }
-                $(this).remove();
-              });
-              r.find('link[href]').each(function () {
-                var cssFile = $(this).attr('href').split('?')[0];
-                if (loadedCss.indexOf(cssFile) === -1) {
-                  loadedCss.push(cssFile);
-                  $(this).clone().appendTo($('head'));
-                }
-                $(this).remove();
-              });
-              r.find('a[href]').each(function () {
-                var link = $(this).attr('href');
-                if (link.startsWith('/') && !link.startsWith('/hue')){
-                  link = '/hue' + link;
-                }
-                $(this).attr('href', link);
-              });
-              r.unwrap('<span>');
+              huePubSub.publish('hue4.process.headers', {
+                response: data.layout,
+                callback: function (r) {
+                  $("#schedulerEditor").html(r);
 
-              $("#schedulerEditor").html(r);
+                  self.schedulerViewModel = new vm.CoordinatorEditorViewModel(data.coordinator, data.credentials, data.workflows, data.can_edit);
 
-              self.schedulerViewModel = new vm.CoordinatorEditorViewModel(data.coordinator, data.credentials, data.workflows, data.can_edit);
+                  ko.cleanNode($("#schedulerEditor")[0]);
+                  ko.applyBindings(self.schedulerViewModel, $("#schedulerEditor")[0]);
 
-              ko.cleanNode($("#schedulerEditor")[0]);
-              ko.applyBindings(self.schedulerViewModel, $("#schedulerEditor")[0]);
+                  huePubSub.publish('render.jqcron');
 
-              huePubSub.publish('render.jqcron');
+                  self.schedulerViewModel.coordinator.properties.cron_advanced.valueHasMutated(); // Update jsCron enabled status
+                  self.schedulerViewModel.coordinator.tracker().markCurrentStateAsClean();
+                  self.schedulerViewModel.isEditing(true);
 
-              self.schedulerViewModel.coordinator.properties.cron_advanced.valueHasMutated(); // Update jsCron enabled status
-              self.schedulerViewModel.coordinator.tracker().markCurrentStateAsClean();
-              self.schedulerViewModel.isEditing(true);
+                  self.schedulerViewModelIsLoaded(true);
 
-              self.schedulerViewModelIsLoaded(true);
+                  if (_action == 'new') {
+                    self.coordinatorUuid(UUID());
+                    self.schedulerViewModel.coordinator.uuid(self.coordinatorUuid());
+                    self.schedulerViewModel.coordinator.properties.document(self.uuid());
+                  }
+                }
+              });
 
-              if (_action == 'new') {
-                self.coordinatorUuid(UUID());
-                self.schedulerViewModel.coordinator.uuid(self.coordinatorUuid());
-                self.schedulerViewModel.coordinator.properties.document(self.uuid());
-              }
             }
           }).fail(function (xhr) {
             $(document).trigger("error", xhr.responseText);
           });
         }
 
-        if (IS_HUE_4){
-          huePubSub.publish('hue4.get.globals', getCoordinator);
-        }
-        else {
-          getCoordinator([], []);
+        if (!IS_HUE_4) {
+          huePubSub.subscribe('hue4.process.headers', function (opts) {
+            opts.callback(opts.response);
+          });
         }
 
+        getCoordinator();
+
       }
     };