Browse Source

HUE-4116 [editor] Resolved all the jQCron issues

Enrico Berti 9 years ago
parent
commit
953ab12

+ 109 - 24
apps/oozie/src/oozie/templates/editor2/common_scheduler.inc.mako

@@ -65,7 +65,7 @@ from django.utils.translation import ugettext as _
         <div class="card-body">
         <div class="card-body">
 
 
           <div class="row-fluid">
           <div class="row-fluid">
-            <div class="span6">
+            <div class="span12">
               <form class="
               <form class="
               %if not embedded:
               %if not embedded:
               form-horizontal
               form-horizontal
@@ -79,7 +79,7 @@ from django.utils.translation import ugettext as _
                 <div class="control-group" data-bind="visible: coordinator.properties.cron_advanced">
                 <div class="control-group" data-bind="visible: coordinator.properties.cron_advanced">
                   <label class="control-label">${ _('Crontab') }</label>
                   <label class="control-label">${ _('Crontab') }</label>
                   <div class="controls">
                   <div class="controls">
-                    <input id="coord-frequency" type="text" data-bind="value: coordinator.properties.cron_frequency, enable: $root.isEditing" name="cron_frequency"/>
+                    <input id="coord-frequency" type="text" data-bind="value: coordinator.properties.cron_frequency, enable: $root.isEditing, attachViewModelToElementData" name="cron_frequency"/>
                     <span class="help-inline">
                     <span class="help-inline">
                       <a data-bind="visible: coordinator.properties.cron_advanced" href="http://quartz-scheduler.org/api/2.2.0/org/quartz/CronExpression.html" target="_blank">
                       <a data-bind="visible: coordinator.properties.cron_advanced" href="http://quartz-scheduler.org/api/2.2.0/org/quartz/CronExpression.html" target="_blank">
                       <i class="fa fa-question-circle" title="${ _('Check syntax ?') }"></i></a>
                       <i class="fa fa-question-circle" title="${ _('Check syntax ?') }"></i></a>
@@ -241,7 +241,7 @@ from django.utils.translation import ugettext as _
                   </span>
                   </span>
                   <span data-bind="visible: dataset_variable().length > 0 && instance_choice() != 'range'">
                   <span data-bind="visible: dataset_variable().length > 0 && instance_choice() != 'range'">
                     ${ _('Will convert to') }
                     ${ _('Will convert to') }
-                    <a target="_blank" data-bind="text: convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice()), attr: {'href': '/filebrowser/view=' + convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice())}"></a>
+                    <a target="_blank" data-bind="text: convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice(), $root), attr: {'href': '/filebrowser/view=' + convertDatasetVariables(dataset_variable(), same_start(), start(), same_frequency(), frequency_unit(), start_instance(), instance_choice(), $root)}"></a>
                   </span>
                   </span>
                   </a>
                   </a>
                 </span>
                 </span>
@@ -466,29 +466,114 @@ from django.utils.translation import ugettext as _
 
 
 <%def name="import_sla_cron(coordinator_json)">
 <%def name="import_sla_cron(coordinator_json)">
   <script type="text/javascript">
   <script type="text/javascript">
+  var datasetTypeaheadSource = ["/data/${'${'}YEAR}/${'${'}MONTH}/${'${'}DAY}", "${'${'}MINUTE}", "${'${'}HOUR}", "${'${'}DAY}", "${'${'}MONTH}", "${'${'}YEAR}", "${'${'}coord:nominalTime()}", "${'${'}coord:formatTime(coord:nominalTime(), 'yyyyMMdd')}"]
+
+  function zeroPadding(value) {
+    return (value < 10 ? '0':'') + value;
+  }
+
+  function convertDatasetVariables(path, hasSameStart, customStart, hasSameFrequency, customFrequencyUnit, startInstance, instanceChoice, vm) {
+    var _startDate = moment(vm.coordinator.start_date.value()).utc();
+    if (!hasSameStart) {
+      _startDate = moment(customStart).utc();
+    }
+
+    var _startDiffObj = {
+      qty: 0,
+      freq: "minutes"
+    };
+    if (startInstance != 0 && instanceChoice == "single") {
+      _startDiffObj.qty = startInstance;
+      if (hasSameFrequency) {
+        var _freqs = $.trim(viewModel.coordinator.properties.cron_frequency()).split(" ");
+        if (_freqs.length >= 5) {
+          if (_freqs[_freqs.length - 1] == "*") {
+            _startDiffObj.freq = "years";
+          }
+          if (_freqs[_freqs.length - 2] == "*") {
+            _startDiffObj.freq = "months";
+          }
+          if (_freqs[_freqs.length - 3] == "*") {
+            _startDiffObj.freq = "days";
+          }
+          if (_freqs[_freqs.length - 4] == "*") {
+            _startDiffObj.freq = "hours";
+          }
+          if (_freqs[_freqs.length - 5] == "*") {
+            _startDiffObj.freq = "minutes";
+          }
+        }
+        else {
+          _startDiffObj.qty = 0;
+        }
+      }
+      else {
+        _startDiffObj.freq = customFrequencyUnit;
+      }
+    }
+
+    if (_startDate.isValid()) {
+      _startDate = _startDate.add(_startDiffObj.qty, _startDiffObj.freq);
+      path = path.replace(/\${'$'}{YEAR}/gi, _startDate.year());
+      path = path.replace(/\${'$'}{MONTH}/gi, zeroPadding((_startDate.month() + 1)));
+      path = path.replace(/\${'$'}{DAY}/gi, zeroPadding(_startDate.date()));
+      path = path.replace(/\${'$'}{HOUR}/gi, zeroPadding(_startDate.hours()));
+      path = path.replace(/\${'$'}{MINUTE}/gi, zeroPadding(_startDate.minutes()));
+    }
+    return path;
+  }
+
   ${ utils.slaGlobal() }
   ${ utils.slaGlobal() }
   ${ utils.cron_js() }
   ${ utils.cron_js() }
 
 
-  var coordCron =
-  $('#coord-frequency')
-    .jqCron({
-      texts: {
-        i18n: cron_i18n
-      },
-      enabled_minute: false,
-      multiple_dom: true,
-      multiple_month: true,
-      multiple_mins: true,
-      multiple_dow: true,
-      multiple_time_hours: true,
-      multiple_time_minutes: false,
-      default_period: 'day',
-      default_value: ${ coordinator_json | n,unicode }.properties.cron_frequency,
-      no_reset_button: true,
-      lang: 'i18n',
-      jquery_container: $('#jqCron-container'),
-      jquery_element: $('#jqCron-instance')
-    })
-    .jqCronGetInstance();
+  var coordCron = {
+    enable: function () {
+    },
+    disable: function () {
+    }
+  };
+
+  function renderJqCron() {
+    coordCron = $('#coord-frequency').jqCron({
+        texts: {
+          i18n: cron_i18n
+        },
+        enabled_minute: false,
+        multiple_dom: true,
+        multiple_month: true,
+        multiple_mins: true,
+        multiple_dow: true,
+        multiple_time_hours: true,
+        multiple_time_minutes: false,
+        default_period: 'day',
+        default_value: ${ coordinator_json | n,unicode }.properties.cron_frequency,
+        no_reset_button: true,
+        lang: 'i18n',
+        jquery_container: $('#jqCron-container'),
+        jquery_element: $('#jqCron-instance')
+      }).jqCronGetInstance();
+
+    function waitForVm() {
+      var _vm = $('#coord-frequency').data('__ko_vm');
+      if (typeof _vm.coordinator !== 'undefined' && typeof _vm.coordinator.properties !== 'undefined') {
+        if (_vm.coordinator.properties.cron_advanced() || !_vm.isEditing()) {
+          coordCron.disable();
+        }
+        else {
+          coordCron.enable();
+        }
+      }
+      else {
+        window.setTimeout(waitForVm, 100)
+      }
+    }
+
+    waitForVm();
+
+    $('#jqCron-container').on('cron:change', function(e, cron){
+      $('#coord-frequency').data('__ko_vm').coordinator.properties.cron_frequency(cron);
+    });
+  }
+
   </script>
   </script>
 </%def>
 </%def>

+ 1 - 62
apps/oozie/src/oozie/templates/editor2/coordinator_editor.mako

@@ -82,11 +82,8 @@ ${ layout.menubar(section='coordinators', is_editor=True, pullright=buttons) }
       location.href = "/oozie/editor/coordinator/edit/?" + window.location.hash.substr(1).replace(/(<([^>]+)>)/ig, "");
       location.href = "/oozie/editor/coordinator/edit/?" + window.location.hash.substr(1).replace(/(<([^>]+)>)/ig, "");
     }
     }
   }
   }
-  var datasetTypeaheadSource = ["/data/${'${'}YEAR}/${'${'}MONTH}/${'${'}DAY}", "${'${'}MINUTE}", "${'${'}HOUR}", "${'${'}DAY}", "${'${'}MONTH}", "${'${'}YEAR}", "${'${'}coord:nominalTime()}", "${'${'}coord:formatTime(coord:nominalTime(), 'yyyyMMdd')}"]
-
 </script>
 </script>
 
 
-
 ${ scheduler.import_layout() }
 ${ scheduler.import_layout() }
 ${ scheduler.import_modals() }
 ${ scheduler.import_modals() }
 
 
@@ -145,65 +142,6 @@ ${ scheduler.import_sla_cron(coordinator_json) }
 
 
 <script type="text/javascript">
 <script type="text/javascript">
 
 
-  $('#jqCron-container').on('cron:change', function(e, cron){
-    viewModel.coordinator.properties.cron_frequency(cron);
-  });
-
-  function zeroPadding(value) {
-    return (value < 10 ? '0':'') + value;
-  }
-
-  function convertDatasetVariables(path, hasSameStart, customStart, hasSameFrequency, customFrequencyUnit, startInstance, instanceChoice) {
-    var _startDate = moment(viewModel.coordinator.start_date.value()).utc();
-    if (!hasSameStart) {
-      _startDate = moment(customStart).utc();
-    }
-
-    var _startDiffObj = {
-      qty: 0,
-      freq: "minutes"
-    };
-    if (startInstance != 0 && instanceChoice == "single") {
-      _startDiffObj.qty = startInstance;
-      if (hasSameFrequency) {
-        var _freqs = $.trim(viewModel.coordinator.properties.cron_frequency()).split(" ");
-        if (_freqs.length >= 5) {
-          if (_freqs[_freqs.length - 1] == "*") {
-            _startDiffObj.freq = "years";
-          }
-          if (_freqs[_freqs.length - 2] == "*") {
-            _startDiffObj.freq = "months";
-          }
-          if (_freqs[_freqs.length - 3] == "*") {
-            _startDiffObj.freq = "days";
-          }
-          if (_freqs[_freqs.length - 4] == "*") {
-            _startDiffObj.freq = "hours";
-          }
-          if (_freqs[_freqs.length - 5] == "*") {
-            _startDiffObj.freq = "minutes";
-          }
-        }
-        else {
-          _startDiffObj.qty = 0;
-        }
-      }
-      else {
-        _startDiffObj.freq = customFrequencyUnit;
-      }
-    }
-
-    if (_startDate.isValid()) {
-      _startDate = _startDate.add(_startDiffObj.qty, _startDiffObj.freq);
-      path = path.replace(/\${'$'}{YEAR}/gi, _startDate.year());
-      path = path.replace(/\${'$'}{MONTH}/gi, zeroPadding((_startDate.month() + 1)));
-      path = path.replace(/\${'$'}{DAY}/gi, zeroPadding(_startDate.date()));
-      path = path.replace(/\${'$'}{HOUR}/gi, zeroPadding(_startDate.hours()));
-      path = path.replace(/\${'$'}{MINUTE}/gi, zeroPadding(_startDate.minutes()));
-    }
-    return path;
-  }
-
   var viewModel = new CoordinatorEditorViewModel(${ coordinator_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflows_json | n,unicode }, ${ can_edit_json | n,unicode });
   var viewModel = new CoordinatorEditorViewModel(${ coordinator_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflows_json | n,unicode }, ${ can_edit_json | n,unicode });
 
 
   ko.applyBindings(viewModel, $("#editor")[0]);
   ko.applyBindings(viewModel, $("#editor")[0]);
@@ -233,6 +171,7 @@ ${ scheduler.import_sla_cron(coordinator_json) }
   });
   });
 
 
   $(document).ready(function() {
   $(document).ready(function() {
+    renderJqCron();
     $("#chooseWorkflowDemiModal").modal({
     $("#chooseWorkflowDemiModal").modal({
       show: false
       show: false
     });
     });

+ 5 - 0
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -4054,5 +4054,10 @@
   };
   };
 
 
 
 
+  ko.bindingHandlers.attachViewModelToElementData = {
+    init: function (el, valueAccessor, allBindingsAccessor, viewModel) {
+      $(el).data('__ko_vm', viewModel);
+    }
+  }
 
 
 }));
 }));

+ 8 - 1
desktop/libs/notebook/src/notebook/static/notebook/css/notebook.css

@@ -88,8 +88,14 @@ body {
 .context-panel .nav-tabs {
 .context-panel .nav-tabs {
   padding-left: 10px;
   padding-left: 10px;
 }
 }
+
 .context-panel .tab-content {
 .context-panel .tab-content {
   padding: 12px;
   padding: 12px;
+  min-height: calc(100% - 90px);
+}
+
+.context-panel .tab-pane {
+  height: 100%;
 }
 }
 
 
 .resizer {
 .resizer {
@@ -1133,4 +1139,5 @@ pre {
 
 
 #schedulerEditor .container-fluid, #schedulerEditor .card-heading, #schedulerEditor .card-body {
 #schedulerEditor .container-fluid, #schedulerEditor .card-heading, #schedulerEditor .card-body {
   padding: 0;
   padding: 0;
-}
+}
+

+ 4 - 0
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -3208,6 +3208,10 @@ ${ hueIcons.symbols() }
         }
         }
       });
       });
 
 
+      $(document).on('shown', 'a[href="#scheduleTab"]', function(){
+        renderJqCron();
+      });
+
       $(document).on("gridShown", function (e, snippet) {
       $(document).on("gridShown", function (e, snippet) {
         window.setTimeout(function () {
         window.setTimeout(function () {
           resizeToggleResultSettings(snippet);
           resizeToggleResultSettings(snippet);