iguazio.dashboard-controls 0.39.14-3.5.3 → 0.39.15-3.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3303,6 +3303,17 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
3303
3303
  }) + ': a–z, A–Z, 0–9, –, _, .',
3304
3304
  pattern: /^[a-zA-Z0-9\-_.]+$/
3305
3305
  }]
3306
+ },
3307
+ supportLogs: {
3308
+ contextId: [generateRule.validCharacters('0-9'), {
3309
+ name: 'minValue',
3310
+ label: $i18next.t('common:MIN', {
3311
+ lng: lng
3312
+ }) + ' 1',
3313
+ pattern: function pattern(value) {
3314
+ return value >= 1;
3315
+ }
3316
+ }]
3306
3317
  }
3307
3318
  },
3308
3319
  container: {
@@ -5812,6 +5823,96 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
5812
5823
  })();
5813
5824
  "use strict";
5814
5825
 
5826
+ (function () {
5827
+ 'use strict';
5828
+
5829
+ IgzImportProjectDialogController.$inject = ["$scope", "$i18next", "i18next", "lodash"];
5830
+ angular.module('iguazio.dashboard-controls').component('igzImportProjectDialog', {
5831
+ bindings: {
5832
+ closeDialog: '&',
5833
+ dialogTitle: '<',
5834
+ displayAllOptions: '<'
5835
+ },
5836
+ templateUrl: 'igz_controls/components/import-project-dialog/import-project-dialog.tpl.html',
5837
+ controller: IgzImportProjectDialogController
5838
+ });
5839
+ function IgzImportProjectDialogController($scope, $i18next, i18next, lodash) {
5840
+ var ctrl = this;
5841
+ var lng = i18next.language;
5842
+ var checkedItem = 'singleFunction';
5843
+ ctrl.option = [];
5844
+ ctrl.optionList = [{
5845
+ label: $i18next.t('common:APPLY_TO_ALL_FUNCTIONS_IN_THIS_PROJECT', {
5846
+ lng: lng
5847
+ }),
5848
+ id: 'singleProject',
5849
+ value: 'singleProject',
5850
+ disabled: false,
5851
+ visibility: true
5852
+ }, {
5853
+ label: $i18next.t('common:APPLY_TO_ALL_FUNCTIONS_IN_ALL_PROJECT', {
5854
+ lng: lng
5855
+ }),
5856
+ id: 'allProjects',
5857
+ value: 'allProjects',
5858
+ disabled: false,
5859
+ visibility: true
5860
+ }];
5861
+ ctrl.$onInit = onInit;
5862
+ ctrl.onClose = onClose;
5863
+ ctrl.onCheckboxChange = onCheckboxChange;
5864
+
5865
+ //
5866
+ // Hook methods
5867
+ //
5868
+
5869
+ /**
5870
+ * Initialization method
5871
+ */
5872
+ function onInit() {
5873
+ lodash.set(ctrl.optionList, '[1].visibility', ctrl.displayAllOptions);
5874
+ }
5875
+
5876
+ //
5877
+ // Public methods
5878
+ //
5879
+
5880
+ /**
5881
+ * Handles checking/un-checking checkbox
5882
+ */
5883
+ function onCheckboxChange() {
5884
+ if (!lodash.isNil(ctrl.option)) {
5885
+ if (lodash.includes(ctrl.option, 'allProjects')) {
5886
+ lodash.set(ctrl.optionList, '[0].disabled', true);
5887
+ if (ctrl.option.length === 1) {
5888
+ ctrl.option.unshift('singleProject');
5889
+ }
5890
+ } else {
5891
+ lodash.set(ctrl.optionList, '[0].disabled', false);
5892
+ }
5893
+ ctrl.optionList = angular.copy(ctrl.optionList);
5894
+ ctrl.option = angular.copy(ctrl.option);
5895
+ checkedItem = lodash.get(ctrl.option, [ctrl.option.length - 1]);
5896
+ } else {
5897
+ checkedItem = 'singleFunction';
5898
+ }
5899
+ }
5900
+
5901
+ /**
5902
+ * Closes dialog
5903
+ * @param {string} action
5904
+ */
5905
+ function onClose(action) {
5906
+ ctrl.closeDialog({
5907
+ action: action,
5908
+ option: checkedItem
5909
+ });
5910
+ ctrl.option = [];
5911
+ }
5912
+ }
5913
+ })();
5914
+ "use strict";
5915
+
5815
5916
  (function () {
5816
5917
  'use strict';
5817
5918
 
@@ -5949,96 +6050,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
5949
6050
  })();
5950
6051
  "use strict";
5951
6052
 
5952
- (function () {
5953
- 'use strict';
5954
-
5955
- IgzImportProjectDialogController.$inject = ["$scope", "$i18next", "i18next", "lodash"];
5956
- angular.module('iguazio.dashboard-controls').component('igzImportProjectDialog', {
5957
- bindings: {
5958
- closeDialog: '&',
5959
- dialogTitle: '<',
5960
- displayAllOptions: '<'
5961
- },
5962
- templateUrl: 'igz_controls/components/import-project-dialog/import-project-dialog.tpl.html',
5963
- controller: IgzImportProjectDialogController
5964
- });
5965
- function IgzImportProjectDialogController($scope, $i18next, i18next, lodash) {
5966
- var ctrl = this;
5967
- var lng = i18next.language;
5968
- var checkedItem = 'singleFunction';
5969
- ctrl.option = [];
5970
- ctrl.optionList = [{
5971
- label: $i18next.t('common:APPLY_TO_ALL_FUNCTIONS_IN_THIS_PROJECT', {
5972
- lng: lng
5973
- }),
5974
- id: 'singleProject',
5975
- value: 'singleProject',
5976
- disabled: false,
5977
- visibility: true
5978
- }, {
5979
- label: $i18next.t('common:APPLY_TO_ALL_FUNCTIONS_IN_ALL_PROJECT', {
5980
- lng: lng
5981
- }),
5982
- id: 'allProjects',
5983
- value: 'allProjects',
5984
- disabled: false,
5985
- visibility: true
5986
- }];
5987
- ctrl.$onInit = onInit;
5988
- ctrl.onClose = onClose;
5989
- ctrl.onCheckboxChange = onCheckboxChange;
5990
-
5991
- //
5992
- // Hook methods
5993
- //
5994
-
5995
- /**
5996
- * Initialization method
5997
- */
5998
- function onInit() {
5999
- lodash.set(ctrl.optionList, '[1].visibility', ctrl.displayAllOptions);
6000
- }
6001
-
6002
- //
6003
- // Public methods
6004
- //
6005
-
6006
- /**
6007
- * Handles checking/un-checking checkbox
6008
- */
6009
- function onCheckboxChange() {
6010
- if (!lodash.isNil(ctrl.option)) {
6011
- if (lodash.includes(ctrl.option, 'allProjects')) {
6012
- lodash.set(ctrl.optionList, '[0].disabled', true);
6013
- if (ctrl.option.length === 1) {
6014
- ctrl.option.unshift('singleProject');
6015
- }
6016
- } else {
6017
- lodash.set(ctrl.optionList, '[0].disabled', false);
6018
- }
6019
- ctrl.optionList = angular.copy(ctrl.optionList);
6020
- ctrl.option = angular.copy(ctrl.option);
6021
- checkedItem = lodash.get(ctrl.option, [ctrl.option.length - 1]);
6022
- } else {
6023
- checkedItem = 'singleFunction';
6024
- }
6025
- }
6026
-
6027
- /**
6028
- * Closes dialog
6029
- * @param {string} action
6030
- */
6031
- function onClose(action) {
6032
- ctrl.closeDialog({
6033
- action: action,
6034
- option: checkedItem
6035
- });
6036
- ctrl.option = [];
6037
- }
6038
- }
6039
- })();
6040
- "use strict";
6041
-
6042
6053
  (function () {
6043
6054
  'use strict';
6044
6055
 
@@ -8939,65 +8950,147 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
8939
8950
  (function () {
8940
8951
  'use strict';
8941
8952
 
8942
- /**
8943
- * @name igzTextEdit
8944
- * @description
8945
- * Text edit component. This component is a text editor based on `Monaco code editor`
8946
- * https://github.com/Microsoft/monaco-editor
8947
- *
8948
- * @param {string} content - main text content which can be edited.
8949
- * @param {Object} closeDialog - callback on closing editor dialog.
8950
- * @param {Object} closeButtonText - name of the bottom close/cancel button.
8951
- * @param {string} label - name of the text file.
8952
- * @param {string} language - language of the current content (`plain text`, `javascript` etc.).
8953
- * Note: uses for updating node after submitting
8954
- * @param {string} submitButtonText - name of the bottom submit/apply button.
8955
- * @param {Object} submitData - callback on submitting data.
8956
- */
8957
- IgzTextPreviewController.$inject = ["$i18next", "$rootScope", "$scope", "$timeout", "i18next", "ngDialog", "lodash", "DialogsService"];
8958
- angular.module('iguazio.dashboard-controls').component('igzTextEdit', {
8953
+ IgzToastStatusPanelController.$inject = ["$element", "$rootScope", "$timeout", "lodash"];
8954
+ angular.module('iguazio.dashboard-controls').component('igzToastStatusPanel', {
8959
8955
  bindings: {
8960
- content: '@',
8961
- closeDialog: '&',
8962
- closeButtonText: '@',
8963
- ngDialogId: '@',
8964
- label: '@',
8965
- language: '@',
8966
- submitButtonText: '@',
8967
- submitData: '&'
8956
+ onClose: '&?',
8957
+ panelMessages: '<',
8958
+ panelState: '<',
8959
+ permanent: '<?'
8968
8960
  },
8969
- templateUrl: 'igz_controls/components/text-edit/text-edit.tpl.html',
8970
- controller: IgzTextPreviewController
8961
+ templateUrl: 'igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
8962
+ controller: IgzToastStatusPanelController
8971
8963
  });
8972
- function IgzTextPreviewController($i18next, $rootScope, $scope, $timeout, i18next, ngDialog, lodash, DialogsService) {
8964
+ function IgzToastStatusPanelController($element, $rootScope, $timeout, lodash) {
8973
8965
  var ctrl = this;
8974
- var lng = i18next.language;
8975
- var contentCopy = '';
8976
- ctrl.enableWordWrap = false;
8977
- ctrl.fileChanged = false;
8978
- ctrl.isLoadingState = false;
8979
- ctrl.serverError = '';
8980
- ctrl.$onInit = onInit;
8981
- ctrl.onChangeText = onChangeText;
8982
- ctrl.onClose = onClose;
8983
- ctrl.onSubmit = onSubmit;
8966
+ var statusIcons = {
8967
+ 'succeeded': 'igz-icon-tick-round',
8968
+ 'in-progress': 'igz-icon-properties',
8969
+ 'failed': 'igz-icon-block'
8970
+ };
8971
+ ctrl.isToastPanelShown = false;
8972
+ ctrl.$onChanges = onChanges;
8973
+ ctrl.closeToastPanel = closeToastPanel;
8974
+ ctrl.getState = getState;
8975
+ ctrl.getStateMessage = getStateMessage;
8984
8976
 
8985
8977
  //
8986
- // Hook method
8978
+ // Hook methods
8987
8979
  //
8988
8980
 
8989
8981
  /**
8990
- * Init method
8982
+ * On changes method
8983
+ * @param {Object} changes
8991
8984
  */
8992
- function onInit() {
8993
- contentCopy = angular.copy(ctrl.content);
8994
- $scope.$on('close-dialog-service_close-dialog', ctrl.onClose);
8995
- }
8996
-
8997
- //
8998
- // Public methods
8999
- //
9000
-
8985
+ function onChanges(changes) {
8986
+ if (lodash.has(changes, 'panelState')) {
8987
+ ctrl.isToastPanelShown = !lodash.isNil(changes.panelState.currentValue);
8988
+ $element.find('.panel-status-icon').removeClass(lodash.get(statusIcons, changes.panelState.previousValue)).addClass(lodash.get(statusIcons, changes.panelState.currentValue));
8989
+ $element.find('.toast-status-panel').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
8990
+ $element.find('.panel-status').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
8991
+ }
8992
+ }
8993
+
8994
+ //
8995
+ // Public methods
8996
+ //
8997
+
8998
+ /**
8999
+ * Shows/hides toast panel
9000
+ */
9001
+ function closeToastPanel() {
9002
+ ctrl.isToastPanelShown = false;
9003
+ ctrl.panelState = null;
9004
+ if (lodash.isFunction(ctrl.onClose)) {
9005
+ ctrl.onClose();
9006
+ }
9007
+ $timeout(function () {
9008
+ $rootScope.$broadcast('igzWatchWindowResize::resize');
9009
+ });
9010
+ }
9011
+
9012
+ /**
9013
+ * Gets current state
9014
+ * @returns {?string} (e.g. "in-progress", "succeeded", "failed")
9015
+ */
9016
+ function getState() {
9017
+ return ctrl.panelState;
9018
+ }
9019
+
9020
+ /**
9021
+ * Gets status message of given state
9022
+ * @param {string} state (e.g. "in-progress", "succeeded", "failed")
9023
+ * @returns {string}
9024
+ */
9025
+ function getStateMessage(state) {
9026
+ return lodash.get(ctrl, ['panelMessages', state]);
9027
+ }
9028
+ }
9029
+ })();
9030
+ "use strict";
9031
+
9032
+ (function () {
9033
+ 'use strict';
9034
+
9035
+ /**
9036
+ * @name igzTextEdit
9037
+ * @description
9038
+ * Text edit component. This component is a text editor based on `Monaco code editor`
9039
+ * https://github.com/Microsoft/monaco-editor
9040
+ *
9041
+ * @param {string} content - main text content which can be edited.
9042
+ * @param {Object} closeDialog - callback on closing editor dialog.
9043
+ * @param {Object} closeButtonText - name of the bottom close/cancel button.
9044
+ * @param {string} label - name of the text file.
9045
+ * @param {string} language - language of the current content (`plain text`, `javascript` etc.).
9046
+ * Note: uses for updating node after submitting
9047
+ * @param {string} submitButtonText - name of the bottom submit/apply button.
9048
+ * @param {Object} submitData - callback on submitting data.
9049
+ */
9050
+ IgzTextPreviewController.$inject = ["$i18next", "$rootScope", "$scope", "$timeout", "i18next", "ngDialog", "lodash", "DialogsService"];
9051
+ angular.module('iguazio.dashboard-controls').component('igzTextEdit', {
9052
+ bindings: {
9053
+ content: '@',
9054
+ closeDialog: '&',
9055
+ closeButtonText: '@',
9056
+ ngDialogId: '@',
9057
+ label: '@',
9058
+ language: '@',
9059
+ submitButtonText: '@',
9060
+ submitData: '&'
9061
+ },
9062
+ templateUrl: 'igz_controls/components/text-edit/text-edit.tpl.html',
9063
+ controller: IgzTextPreviewController
9064
+ });
9065
+ function IgzTextPreviewController($i18next, $rootScope, $scope, $timeout, i18next, ngDialog, lodash, DialogsService) {
9066
+ var ctrl = this;
9067
+ var lng = i18next.language;
9068
+ var contentCopy = '';
9069
+ ctrl.enableWordWrap = false;
9070
+ ctrl.fileChanged = false;
9071
+ ctrl.isLoadingState = false;
9072
+ ctrl.serverError = '';
9073
+ ctrl.$onInit = onInit;
9074
+ ctrl.onChangeText = onChangeText;
9075
+ ctrl.onClose = onClose;
9076
+ ctrl.onSubmit = onSubmit;
9077
+
9078
+ //
9079
+ // Hook method
9080
+ //
9081
+
9082
+ /**
9083
+ * Init method
9084
+ */
9085
+ function onInit() {
9086
+ contentCopy = angular.copy(ctrl.content);
9087
+ $scope.$on('close-dialog-service_close-dialog', ctrl.onClose);
9088
+ }
9089
+
9090
+ //
9091
+ // Public methods
9092
+ //
9093
+
9001
9094
  /**
9002
9095
  * Sets file changed flag to true
9003
9096
  * @param {string} sourceCode - changed file content
@@ -9077,88 +9170,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9077
9170
  })();
9078
9171
  "use strict";
9079
9172
 
9080
- (function () {
9081
- 'use strict';
9082
-
9083
- IgzToastStatusPanelController.$inject = ["$element", "$rootScope", "$timeout", "lodash"];
9084
- angular.module('iguazio.dashboard-controls').component('igzToastStatusPanel', {
9085
- bindings: {
9086
- onClose: '&?',
9087
- panelMessages: '<',
9088
- panelState: '<',
9089
- permanent: '<?'
9090
- },
9091
- templateUrl: 'igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
9092
- controller: IgzToastStatusPanelController
9093
- });
9094
- function IgzToastStatusPanelController($element, $rootScope, $timeout, lodash) {
9095
- var ctrl = this;
9096
- var statusIcons = {
9097
- 'succeeded': 'igz-icon-tick-round',
9098
- 'in-progress': 'igz-icon-properties',
9099
- 'failed': 'igz-icon-block'
9100
- };
9101
- ctrl.isToastPanelShown = false;
9102
- ctrl.$onChanges = onChanges;
9103
- ctrl.closeToastPanel = closeToastPanel;
9104
- ctrl.getState = getState;
9105
- ctrl.getStateMessage = getStateMessage;
9106
-
9107
- //
9108
- // Hook methods
9109
- //
9110
-
9111
- /**
9112
- * On changes method
9113
- * @param {Object} changes
9114
- */
9115
- function onChanges(changes) {
9116
- if (lodash.has(changes, 'panelState')) {
9117
- ctrl.isToastPanelShown = !lodash.isNil(changes.panelState.currentValue);
9118
- $element.find('.panel-status-icon').removeClass(lodash.get(statusIcons, changes.panelState.previousValue)).addClass(lodash.get(statusIcons, changes.panelState.currentValue));
9119
- $element.find('.toast-status-panel').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
9120
- $element.find('.panel-status').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
9121
- }
9122
- }
9123
-
9124
- //
9125
- // Public methods
9126
- //
9127
-
9128
- /**
9129
- * Shows/hides toast panel
9130
- */
9131
- function closeToastPanel() {
9132
- ctrl.isToastPanelShown = false;
9133
- ctrl.panelState = null;
9134
- if (lodash.isFunction(ctrl.onClose)) {
9135
- ctrl.onClose();
9136
- }
9137
- $timeout(function () {
9138
- $rootScope.$broadcast('igzWatchWindowResize::resize');
9139
- });
9140
- }
9141
-
9142
- /**
9143
- * Gets current state
9144
- * @returns {?string} (e.g. "in-progress", "succeeded", "failed")
9145
- */
9146
- function getState() {
9147
- return ctrl.panelState;
9148
- }
9149
-
9150
- /**
9151
- * Gets status message of given state
9152
- * @param {string} state (e.g. "in-progress", "succeeded", "failed")
9153
- * @returns {string}
9154
- */
9155
- function getStateMessage(state) {
9156
- return lodash.get(ctrl, ['panelMessages', state]);
9157
- }
9158
- }
9159
- })();
9160
- "use strict";
9161
-
9162
9173
  (function () {
9163
9174
  'use strict';
9164
9175
 
@@ -9746,21 +9757,28 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9746
9757
  (function () {
9747
9758
  'use strict';
9748
9759
 
9749
- IgzInfoPageActionsBarController.$inject = ["$scope"];
9750
- angular.module('iguazio.dashboard-controls').component('igzInfoPageActionsBar', {
9760
+ IgzInfoPageContentController.$inject = ["$scope", "$timeout", "$window", "$element"];
9761
+ angular.module('iguazio.dashboard-controls').component('igzInfoPageContent', {
9751
9762
  bindings: {
9763
+ scrolled: '<',
9752
9764
  watchId: '@?'
9753
9765
  },
9754
- templateUrl: 'igz_controls/components/info-page/info-page-actions-bar/info-page-actions-bar.tpl.html',
9766
+ templateUrl: 'igz_controls/components/info-page/info-page-content/info-page-content.tpl.html',
9755
9767
  transclude: true,
9756
- controller: IgzInfoPageActionsBarController
9768
+ controller: IgzInfoPageContentController
9757
9769
  });
9758
- function IgzInfoPageActionsBarController($scope) {
9770
+ function IgzInfoPageContentController($scope, $timeout, $window, $element) {
9759
9771
  var ctrl = this;
9760
- ctrl.isUpperPaneShowed = false;
9761
9772
  ctrl.isFiltersShowed = false;
9762
9773
  ctrl.isInfoPaneShowed = false;
9774
+
9775
+ // Config for horizontal scrollbar on containers view
9776
+ ctrl.scrollConfigHorizontal = {
9777
+ axis: 'x',
9778
+ scrollInertia: 0
9779
+ };
9763
9780
  ctrl.$onInit = onInit;
9781
+ ctrl.$postLink = postLink;
9764
9782
 
9765
9783
  //
9766
9784
  // Hook methods
@@ -9774,12 +9792,42 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9774
9792
  $scope.$on('info-page-upper-pane_toggle-start' + watchId, onUpperPaneToggleStart);
9775
9793
  $scope.$on('info-page-filters_toggle-start' + watchId, onFiltersPaneToggleStart);
9776
9794
  $scope.$on('info-page-pane_toggle-start' + watchId, onInfoPaneToggleStart);
9795
+ $scope.$on('info-page-pane_toggled', dispatchResize);
9796
+ }
9797
+
9798
+ /**
9799
+ * Post linking method
9800
+ */
9801
+ function postLink() {
9802
+ $timeout(function () {
9803
+ manageHorizontalScroll();
9804
+ $scope.$on('info-page-filters_toggled', manageHorizontalScroll);
9805
+ $scope.$on('info-page-pane_toggled', manageHorizontalScroll);
9806
+ $scope.$on('igzWatchWindowResize::resize', manageHorizontalScroll);
9807
+ });
9777
9808
  }
9778
9809
 
9779
9810
  //
9780
9811
  // Private methods
9781
9812
  //
9782
9813
 
9814
+ /**
9815
+ * Manages x-scrollbar behavior
9816
+ * Needed to get rid of accidental wrong content width calculations made by 'ng-scrollbars' library
9817
+ * We just control x-scrollbar with lib's native enable/disable methods
9818
+ */
9819
+ function manageHorizontalScroll() {
9820
+ var $scrollXContainer = $element.find('.igz-scrollable-container.horizontal').first();
9821
+ var contentWrapperWidth = $element.find('.igz-info-page-content-wrapper').first().width();
9822
+ var contentMinWidth = parseInt($element.find('.igz-info-page-content').css('min-width'));
9823
+ if ($scrollXContainer.length && contentWrapperWidth < (contentMinWidth || 946)) {
9824
+ $scrollXContainer.mCustomScrollbar('update');
9825
+ } else if ($scrollXContainer.length) {
9826
+ $scrollXContainer.mCustomScrollbar('disable', true);
9827
+ $element.find('.mCSB_container').first().width('100%');
9828
+ }
9829
+ }
9830
+
9783
9831
  /**
9784
9832
  * Upper pane toggle start $broadcast listener
9785
9833
  * @param {Object} e - broadcast event
@@ -9806,6 +9854,15 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9806
9854
  function onInfoPaneToggleStart(e, isShown) {
9807
9855
  ctrl.isInfoPaneShowed = isShown;
9808
9856
  }
9857
+
9858
+ /**
9859
+ * Updates Ui-Layout library's containers size
9860
+ */
9861
+ function dispatchResize() {
9862
+ $timeout(function () {
9863
+ $window.dispatchEvent(new Event('resize'));
9864
+ }, 0);
9865
+ }
9809
9866
  }
9810
9867
  })();
9811
9868
  "use strict";
@@ -9813,121 +9870,8 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9813
9870
  (function () {
9814
9871
  'use strict';
9815
9872
 
9816
- IgzInfoPageContentController.$inject = ["$scope", "$timeout", "$window", "$element"];
9817
- angular.module('iguazio.dashboard-controls').component('igzInfoPageContent', {
9818
- bindings: {
9819
- scrolled: '<',
9820
- watchId: '@?'
9821
- },
9822
- templateUrl: 'igz_controls/components/info-page/info-page-content/info-page-content.tpl.html',
9823
- transclude: true,
9824
- controller: IgzInfoPageContentController
9825
- });
9826
- function IgzInfoPageContentController($scope, $timeout, $window, $element) {
9827
- var ctrl = this;
9828
- ctrl.isFiltersShowed = false;
9829
- ctrl.isInfoPaneShowed = false;
9830
-
9831
- // Config for horizontal scrollbar on containers view
9832
- ctrl.scrollConfigHorizontal = {
9833
- axis: 'x',
9834
- scrollInertia: 0
9835
- };
9836
- ctrl.$onInit = onInit;
9837
- ctrl.$postLink = postLink;
9838
-
9839
- //
9840
- // Hook methods
9841
- //
9842
-
9843
- /**
9844
- * Init method
9845
- */
9846
- function onInit() {
9847
- var watchId = angular.isDefined(ctrl.watchId) ? '-' + ctrl.watchId : '';
9848
- $scope.$on('info-page-upper-pane_toggle-start' + watchId, onUpperPaneToggleStart);
9849
- $scope.$on('info-page-filters_toggle-start' + watchId, onFiltersPaneToggleStart);
9850
- $scope.$on('info-page-pane_toggle-start' + watchId, onInfoPaneToggleStart);
9851
- $scope.$on('info-page-pane_toggled', dispatchResize);
9852
- }
9853
-
9854
- /**
9855
- * Post linking method
9856
- */
9857
- function postLink() {
9858
- $timeout(function () {
9859
- manageHorizontalScroll();
9860
- $scope.$on('info-page-filters_toggled', manageHorizontalScroll);
9861
- $scope.$on('info-page-pane_toggled', manageHorizontalScroll);
9862
- $scope.$on('igzWatchWindowResize::resize', manageHorizontalScroll);
9863
- });
9864
- }
9865
-
9866
- //
9867
- // Private methods
9868
- //
9869
-
9870
- /**
9871
- * Manages x-scrollbar behavior
9872
- * Needed to get rid of accidental wrong content width calculations made by 'ng-scrollbars' library
9873
- * We just control x-scrollbar with lib's native enable/disable methods
9874
- */
9875
- function manageHorizontalScroll() {
9876
- var $scrollXContainer = $element.find('.igz-scrollable-container.horizontal').first();
9877
- var contentWrapperWidth = $element.find('.igz-info-page-content-wrapper').first().width();
9878
- var contentMinWidth = parseInt($element.find('.igz-info-page-content').css('min-width'));
9879
- if ($scrollXContainer.length && contentWrapperWidth < (contentMinWidth || 946)) {
9880
- $scrollXContainer.mCustomScrollbar('update');
9881
- } else if ($scrollXContainer.length) {
9882
- $scrollXContainer.mCustomScrollbar('disable', true);
9883
- $element.find('.mCSB_container').first().width('100%');
9884
- }
9885
- }
9886
-
9887
- /**
9888
- * Upper pane toggle start $broadcast listener
9889
- * @param {Object} e - broadcast event
9890
- * @param {boolean} isShown - represents upper pane state
9891
- */
9892
- function onUpperPaneToggleStart(e, isShown) {
9893
- ctrl.isUpperPaneShowed = isShown;
9894
- }
9895
-
9896
- /**
9897
- * Filters pane toggle start $broadcast listener
9898
- * @param {Object} e - broadcast event
9899
- * @param {boolean} isShown - represents filters pane state
9900
- */
9901
- function onFiltersPaneToggleStart(e, isShown) {
9902
- ctrl.isFiltersShowed = isShown;
9903
- }
9904
-
9905
- /**
9906
- * Info pane toggle start $broadcast listener
9907
- * @param {Object} e - broadcast event
9908
- * @param {boolean} isShown - represents info pane state
9909
- */
9910
- function onInfoPaneToggleStart(e, isShown) {
9911
- ctrl.isInfoPaneShowed = isShown;
9912
- }
9913
-
9914
- /**
9915
- * Updates Ui-Layout library's containers size
9916
- */
9917
- function dispatchResize() {
9918
- $timeout(function () {
9919
- $window.dispatchEvent(new Event('resize'));
9920
- }, 0);
9921
- }
9922
- }
9923
- })();
9924
- "use strict";
9925
-
9926
- (function () {
9927
- 'use strict';
9928
-
9929
- IgzInfoPageFiltersController.$inject = ["$rootScope", "$scope", "$animate", "$element", "EventHelperService"];
9930
- angular.module('iguazio.dashboard-controls').component('igzInfoPageFilters', {
9873
+ IgzInfoPageFiltersController.$inject = ["$rootScope", "$scope", "$animate", "$element", "EventHelperService"];
9874
+ angular.module('iguazio.dashboard-controls').component('igzInfoPageFilters', {
9931
9875
  bindings: {
9932
9876
  isDisabled: '<?',
9933
9877
  isFiltersShowed: '<',
@@ -10105,6 +10049,73 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
10105
10049
  })();
10106
10050
  "use strict";
10107
10051
 
10052
+ (function () {
10053
+ 'use strict';
10054
+
10055
+ IgzInfoPageActionsBarController.$inject = ["$scope"];
10056
+ angular.module('iguazio.dashboard-controls').component('igzInfoPageActionsBar', {
10057
+ bindings: {
10058
+ watchId: '@?'
10059
+ },
10060
+ templateUrl: 'igz_controls/components/info-page/info-page-actions-bar/info-page-actions-bar.tpl.html',
10061
+ transclude: true,
10062
+ controller: IgzInfoPageActionsBarController
10063
+ });
10064
+ function IgzInfoPageActionsBarController($scope) {
10065
+ var ctrl = this;
10066
+ ctrl.isUpperPaneShowed = false;
10067
+ ctrl.isFiltersShowed = false;
10068
+ ctrl.isInfoPaneShowed = false;
10069
+ ctrl.$onInit = onInit;
10070
+
10071
+ //
10072
+ // Hook methods
10073
+ //
10074
+
10075
+ /**
10076
+ * Init method
10077
+ */
10078
+ function onInit() {
10079
+ var watchId = angular.isDefined(ctrl.watchId) ? '-' + ctrl.watchId : '';
10080
+ $scope.$on('info-page-upper-pane_toggle-start' + watchId, onUpperPaneToggleStart);
10081
+ $scope.$on('info-page-filters_toggle-start' + watchId, onFiltersPaneToggleStart);
10082
+ $scope.$on('info-page-pane_toggle-start' + watchId, onInfoPaneToggleStart);
10083
+ }
10084
+
10085
+ //
10086
+ // Private methods
10087
+ //
10088
+
10089
+ /**
10090
+ * Upper pane toggle start $broadcast listener
10091
+ * @param {Object} e - broadcast event
10092
+ * @param {boolean} isShown - represents upper pane state
10093
+ */
10094
+ function onUpperPaneToggleStart(e, isShown) {
10095
+ ctrl.isUpperPaneShowed = isShown;
10096
+ }
10097
+
10098
+ /**
10099
+ * Filters pane toggle start $broadcast listener
10100
+ * @param {Object} e - broadcast event
10101
+ * @param {boolean} isShown - represents filters pane state
10102
+ */
10103
+ function onFiltersPaneToggleStart(e, isShown) {
10104
+ ctrl.isFiltersShowed = isShown;
10105
+ }
10106
+
10107
+ /**
10108
+ * Info pane toggle start $broadcast listener
10109
+ * @param {Object} e - broadcast event
10110
+ * @param {boolean} isShown - represents info pane state
10111
+ */
10112
+ function onInfoPaneToggleStart(e, isShown) {
10113
+ ctrl.isInfoPaneShowed = isShown;
10114
+ }
10115
+ }
10116
+ })();
10117
+ "use strict";
10118
+
10108
10119
  (function () {
10109
10120
  'use strict';
10110
10121
 
@@ -10319,158 +10330,71 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
10319
10330
  (function () {
10320
10331
  'use strict';
10321
10332
 
10322
- NclTestEventsLogsController.$inject = ["lodash"];
10323
- angular.module('iguazio.dashboard-controls').component('nclTestEventsLogs', {
10333
+ NclVersionConfigurationAnnotationsController.$inject = ["$element", "$i18next", "$rootScope", "$timeout", "i18next", "lodash", "FormValidationService", "PreventDropdownCutOffService", "ValidationService"];
10334
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationAnnotations', {
10324
10335
  bindings: {
10325
- logs: '<'
10336
+ version: '<',
10337
+ onChangeCallback: '<',
10338
+ isFunctionDeploying: '&'
10326
10339
  },
10327
- templateUrl: 'nuclio/functions/version/version-code/function-event-pane/test-events-logs/test-events-logs.tpl.html',
10328
- controller: NclTestEventsLogsController
10340
+ templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-annotations/version-configuration-annotations.tpl.html',
10341
+ controller: NclVersionConfigurationAnnotationsController
10329
10342
  });
10330
- function NclTestEventsLogsController(lodash) {
10343
+ function NclVersionConfigurationAnnotationsController($element, $i18next, $rootScope, $timeout, i18next, lodash, FormValidationService, PreventDropdownCutOffService, ValidationService) {
10331
10344
  var ctrl = this;
10332
- var REQUIRED_PARAMETERS = ['level', 'name', 'time', 'err', 'message', 'ui'];
10333
- ctrl.$onInit = onInit;
10334
- ctrl.collapseRow = collapseRow;
10335
- ctrl.expandAllRows = expandAllRows;
10336
- ctrl.getLevelIconClass = getLevelIconClass;
10337
- ctrl.getParameters = getParameters;
10338
- ctrl.hasAdditionalParameters = hasAdditionalParameters;
10345
+ var lng = i18next.language;
10346
+ ctrl.annotationsForm = null;
10347
+ ctrl.igzScrollConfig = {
10348
+ maxElementsCount: 10,
10349
+ childrenSelector: '.table-body'
10350
+ };
10351
+ ctrl.scrollConfig = {
10352
+ axis: 'y',
10353
+ advanced: {
10354
+ updateOnContentResize: true
10355
+ }
10356
+ };
10357
+ ctrl.tooltip = '<a class="link" target="_blank" ' + 'href="https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/">' + $i18next.t('functions:TOOLTIP.ANNOTATIONS.HEAD', {
10358
+ lng: lng
10359
+ }) + '</a> ' + $i18next.t('functions:TOOLTIP.ANNOTATIONS.REST', {
10360
+ lng: lng
10361
+ });
10362
+ ctrl.keyTooltip = $i18next.t('functions:TOOLTIP.PREFIXED_NAME', {
10363
+ lng: lng,
10364
+ name: $i18next.t('functions:TOOLTIP.ANNOTATION', {
10365
+ lng: lng
10366
+ })
10367
+ });
10368
+ ctrl.validationRules = {
10369
+ key: ValidationService.getValidationRules('function.annotation.key', [{
10370
+ name: 'uniqueness',
10371
+ label: $i18next.t('functions:UNIQUENESS', {
10372
+ lng: lng
10373
+ }),
10374
+ pattern: validateUniqueness
10375
+ }])
10376
+ };
10377
+ ctrl.$postLink = postLink;
10378
+ ctrl.$onChanges = onChanges;
10379
+ ctrl.addNewAnnotation = addNewAnnotation;
10380
+ ctrl.handleAction = handleAction;
10381
+ ctrl.onChangeData = onChangeData;
10339
10382
 
10340
10383
  //
10341
- // Hook method
10384
+ // Hook methods
10342
10385
  //
10343
10386
 
10344
10387
  /**
10345
- * Initialization method
10388
+ * Post linking method
10346
10389
  */
10347
- function onInit() {
10348
- lodash.forEach(ctrl.logs, function (log) {
10349
- lodash.set(log, 'ui.collapsed', true);
10350
- });
10390
+ function postLink() {
10391
+ // Bind DOM-related preventDropdownCutOff method to component's controller
10392
+ PreventDropdownCutOffService.preventDropdownCutOff($element, '.three-dot-menu');
10351
10393
  }
10352
10394
 
10353
- //
10354
- // Public methods
10355
- //
10356
-
10357
10395
  /**
10358
- * Collapse/expand row depending on `collapse` value
10359
- * @param {Object} log
10360
- * @param {boolean} collapse
10361
- */
10362
- function collapseRow(log, collapse) {
10363
- lodash.set(log, 'ui.collapsed', collapse);
10364
- }
10365
-
10366
- /**
10367
- * Collapse/expand all rows depending on `expand` value
10368
- * @param {boolean} expand
10369
- */
10370
- function expandAllRows(expand) {
10371
- lodash.forEach(ctrl.logs, function (log) {
10372
- lodash.set(log, 'ui.collapsed', !expand);
10373
- });
10374
- }
10375
-
10376
- /**
10377
- * Gets css class depending on log.level
10378
- * @param {Object} log
10379
- * @returns {string}
10380
- */
10381
- function getLevelIconClass(log) {
10382
- return log.level === 'debug' ? 'ncl-icon-debug' : log.level === 'info' ? 'igz-icon-info-round' : log.level === 'warn' ? 'igz-icon-warning' : log.level === 'error' ? 'igz-icon-cancel-path' : '';
10383
- }
10384
-
10385
- /**
10386
- * Gets additional parameters
10387
- * @param {Object} log
10388
- * @returns {Object}
10389
- */
10390
- function getParameters(log) {
10391
- return lodash.omit(log, REQUIRED_PARAMETERS);
10392
- }
10393
-
10394
- /**
10395
- * Checks if log has additional parameters
10396
- * @param {Object} log
10397
- * @returns {boolean}
10398
- */
10399
- function hasAdditionalParameters(log) {
10400
- return !lodash.isEmpty(getParameters(log));
10401
- }
10402
- }
10403
- })();
10404
- "use strict";
10405
-
10406
- (function () {
10407
- 'use strict';
10408
-
10409
- NclVersionConfigurationAnnotationsController.$inject = ["$element", "$i18next", "$rootScope", "$timeout", "i18next", "lodash", "FormValidationService", "PreventDropdownCutOffService", "ValidationService"];
10410
- angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationAnnotations', {
10411
- bindings: {
10412
- version: '<',
10413
- onChangeCallback: '<',
10414
- isFunctionDeploying: '&'
10415
- },
10416
- templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-annotations/version-configuration-annotations.tpl.html',
10417
- controller: NclVersionConfigurationAnnotationsController
10418
- });
10419
- function NclVersionConfigurationAnnotationsController($element, $i18next, $rootScope, $timeout, i18next, lodash, FormValidationService, PreventDropdownCutOffService, ValidationService) {
10420
- var ctrl = this;
10421
- var lng = i18next.language;
10422
- ctrl.annotationsForm = null;
10423
- ctrl.igzScrollConfig = {
10424
- maxElementsCount: 10,
10425
- childrenSelector: '.table-body'
10426
- };
10427
- ctrl.scrollConfig = {
10428
- axis: 'y',
10429
- advanced: {
10430
- updateOnContentResize: true
10431
- }
10432
- };
10433
- ctrl.tooltip = '<a class="link" target="_blank" ' + 'href="https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/">' + $i18next.t('functions:TOOLTIP.ANNOTATIONS.HEAD', {
10434
- lng: lng
10435
- }) + '</a> ' + $i18next.t('functions:TOOLTIP.ANNOTATIONS.REST', {
10436
- lng: lng
10437
- });
10438
- ctrl.keyTooltip = $i18next.t('functions:TOOLTIP.PREFIXED_NAME', {
10439
- lng: lng,
10440
- name: $i18next.t('functions:TOOLTIP.ANNOTATION', {
10441
- lng: lng
10442
- })
10443
- });
10444
- ctrl.validationRules = {
10445
- key: ValidationService.getValidationRules('function.annotation.key', [{
10446
- name: 'uniqueness',
10447
- label: $i18next.t('functions:UNIQUENESS', {
10448
- lng: lng
10449
- }),
10450
- pattern: validateUniqueness
10451
- }])
10452
- };
10453
- ctrl.$postLink = postLink;
10454
- ctrl.$onChanges = onChanges;
10455
- ctrl.addNewAnnotation = addNewAnnotation;
10456
- ctrl.handleAction = handleAction;
10457
- ctrl.onChangeData = onChangeData;
10458
-
10459
- //
10460
- // Hook methods
10461
- //
10462
-
10463
- /**
10464
- * Post linking method
10465
- */
10466
- function postLink() {
10467
- // Bind DOM-related preventDropdownCutOff method to component's controller
10468
- PreventDropdownCutOffService.preventDropdownCutOff($element, '.three-dot-menu');
10469
- }
10470
-
10471
- /**
10472
- * On changes hook method.
10473
- * @param {Object} changes
10396
+ * On changes hook method.
10397
+ * @param {Object} changes
10474
10398
  */
10475
10399
  function onChanges(changes) {
10476
10400
  if (lodash.has(changes, 'version')) {
@@ -10591,78 +10515,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
10591
10515
  })();
10592
10516
  "use strict";
10593
10517
 
10594
- (function () {
10595
- 'use strict';
10596
-
10597
- NclTestEventsNavigationTabsController.$inject = ["$i18next", "i18next"];
10598
- angular.module('iguazio.dashboard-controls').component('nclTestEventsNavigationTabs', {
10599
- bindings: {
10600
- activeTab: '<',
10601
- tabItems: '<',
10602
- selectedLogLevel: '<?',
10603
- onChangeActiveTab: '&',
10604
- onChangeLogLevel: '&?'
10605
- },
10606
- templateUrl: 'nuclio/functions/version/version-code/function-event-pane/test-events-navigation-tabs/test-events-navigation-tabs.tpl.html',
10607
- controller: NclTestEventsNavigationTabsController
10608
- });
10609
- function NclTestEventsNavigationTabsController($i18next, i18next) {
10610
- var ctrl = this;
10611
- var lng = i18next.language;
10612
- ctrl.logLevelValues = [{
10613
- id: 'error',
10614
- name: $i18next.t('common:ERROR', {
10615
- lng: lng
10616
- }),
10617
- visible: true
10618
- }, {
10619
- id: 'warn',
10620
- name: $i18next.t('common:WARNING', {
10621
- lng: lng
10622
- }),
10623
- visible: true
10624
- }, {
10625
- id: 'info',
10626
- name: $i18next.t('common:INFO', {
10627
- lng: lng
10628
- }),
10629
- visible: true
10630
- }, {
10631
- id: 'debug',
10632
- name: $i18next.t('common:DEBUG', {
10633
- lng: lng
10634
- }),
10635
- visible: true
10636
- }];
10637
- ctrl.changeActiveTab = changeActiveTab;
10638
- ctrl.isActiveTab = isActiveTab;
10639
-
10640
- //
10641
- // Public methods
10642
- //
10643
-
10644
- /**
10645
- * Changes active nav tab
10646
- * @param {Object} item - current status
10647
- */
10648
- function changeActiveTab(item) {
10649
- ctrl.activeTab = item;
10650
- ctrl.onChangeActiveTab({
10651
- activeTab: item
10652
- });
10653
- }
10654
-
10655
- /**
10656
- * Checks if it is an active tab
10657
- * @param {Object} item - current tab
10658
- */
10659
- function isActiveTab(item) {
10660
- return ctrl.activeTab.id === item.id;
10661
- }
10662
- }
10663
- })();
10664
- "use strict";
10665
-
10666
10518
  (function () {
10667
10519
  'use strict';
10668
10520
 
@@ -11081,88 +10933,263 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
11081
10933
  (function () {
11082
10934
  'use strict';
11083
10935
 
11084
- NclVersionConfigurationLoggingController.$inject = ["lodash"];
11085
- angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationLogging', {
11086
- bindings: {
11087
- version: '<',
11088
- onChangeCallback: '<'
11089
- },
11090
- templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-logging/version-configuration-logging.tpl.html',
11091
- controller: NclVersionConfigurationLoggingController
11092
- });
11093
- function NclVersionConfigurationLoggingController(lodash) {
11094
- var ctrl = this;
11095
- ctrl.inputValueCallback = inputValueCallback;
11096
-
11097
- //
11098
- // Public methods
11099
- //
11100
-
11101
- /**
11102
- * Update data callback
11103
- * @param {string} newData
11104
- * @param {string} field
11105
- */
11106
- function inputValueCallback(newData, field) {
11107
- lodash.set(ctrl.version, field, newData);
11108
- ctrl.onChangeCallback();
11109
- }
11110
- }
11111
- })();
11112
- "use strict";
11113
-
11114
- (function () {
11115
- 'use strict';
11116
-
11117
- NclVersionConfigurationLabelsController.$inject = ["$element", "$i18next", "$rootScope", "$timeout", "i18next", "lodash", "FormValidationService", "FunctionsService", "PreventDropdownCutOffService", "ValidationService", "VersionHelperService"];
11118
- angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationLabels', {
10936
+ NclVersionConfigurationEnvironmentVariablesController.$inject = ["$element", "$i18next", "$rootScope", "$timeout", "i18next", "lodash", "FormValidationService", "PreventDropdownCutOffService", "ValidationService"];
10937
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationEnvironmentVariables', {
11119
10938
  bindings: {
11120
10939
  version: '<',
11121
10940
  onChangeCallback: '<',
11122
10941
  isFunctionDeploying: '&'
11123
10942
  },
11124
- templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-labels/version-configuration-labels.tpl.html',
11125
- controller: NclVersionConfigurationLabelsController
10943
+ templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-environment-variables/version-configuration-environment-variables.tpl.html',
10944
+ controller: NclVersionConfigurationEnvironmentVariablesController
11126
10945
  });
11127
- function NclVersionConfigurationLabelsController($element, $i18next, $rootScope, $timeout, i18next, lodash, FormValidationService, FunctionsService, PreventDropdownCutOffService, ValidationService, VersionHelperService) {
10946
+ function NclVersionConfigurationEnvironmentVariablesController($element, $i18next, $rootScope, $timeout, i18next, lodash, FormValidationService, PreventDropdownCutOffService, ValidationService) {
11128
10947
  var ctrl = this;
11129
10948
  var lng = i18next.language;
10949
+ ctrl.environmentVariablesForm = null;
11130
10950
  ctrl.igzScrollConfig = {
11131
10951
  maxElementsCount: 10,
11132
10952
  childrenSelector: '.table-body'
11133
10953
  };
11134
- ctrl.isKubePlatform = false;
11135
- ctrl.labelsForm = null;
11136
- ctrl.scrollConfig = {
11137
- axis: 'y',
11138
- advanced: {
11139
- updateOnContentResize: true
11140
- }
11141
- };
11142
- ctrl.tooltip = '<a class="link" target="_blank" ' + 'href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/">' + $i18next.t('functions:TOOLTIP.LABELS.HEAD', {
11143
- lng: lng
11144
- }) + '</a> ' + $i18next.t('functions:TOOLTIP.LABELS.REST', {
11145
- lng: lng
11146
- });
11147
- ctrl.keyTooltip = $i18next.t('functions:TOOLTIP.PREFIXED_NAME', {
11148
- lng: lng,
11149
- name: $i18next.t('common:LABEL', {
11150
- lng: lng
11151
- })
11152
- });
11153
10954
  ctrl.validationRules = {
11154
- key: ValidationService.getValidationRules('function.label.key', [{
10955
+ key: ValidationService.getValidationRules('k8s.envVarName', [{
11155
10956
  name: 'uniqueness',
11156
10957
  label: $i18next.t('functions:UNIQUENESS', {
11157
10958
  lng: lng
11158
10959
  }),
11159
- pattern: validateUniqueness
10960
+ pattern: validateUniqueness.bind(null, 'name')
11160
10961
  }]),
11161
- value: ValidationService.getValidationRules('k8s.qualifiedName')
11162
- };
11163
- ctrl.$postLink = postLink;
11164
- ctrl.$onChanges = onChanges;
11165
- ctrl.addNewLabel = addNewLabel;
10962
+ secretKey: ValidationService.getValidationRules('k8s.configMapKey'),
10963
+ secret: ValidationService.getValidationRules('k8s.secretName'),
10964
+ configmapKey: ValidationService.getValidationRules('k8s.configMapKey', [{
10965
+ name: 'uniqueness',
10966
+ label: $i18next.t('functions:UNIQUENESS', {
10967
+ lng: lng
10968
+ }),
10969
+ pattern: validateUniqueness.bind(null, 'valueFrom.configMapKeyRef.key')
10970
+ }])
10971
+ };
10972
+ ctrl.variables = [];
10973
+ ctrl.scrollConfig = {
10974
+ axis: 'y',
10975
+ advanced: {
10976
+ updateOnContentResize: true
10977
+ }
10978
+ };
10979
+ ctrl.$postLink = postLink;
10980
+ ctrl.$onChanges = onChanges;
10981
+ ctrl.addNewVariable = addNewVariable;
10982
+ ctrl.handleAction = handleAction;
10983
+ ctrl.onChangeData = onChangeData;
10984
+ ctrl.onChangeType = onChangeType;
10985
+
10986
+ //
10987
+ // Hook methods
10988
+ //
10989
+
10990
+ /**
10991
+ * Post linking method
10992
+ */
10993
+ function postLink() {
10994
+ // Bind DOM-related preventDropdownCutOff method to component's controller
10995
+ PreventDropdownCutOffService.preventDropdownCutOff($element, '.three-dot-menu');
10996
+ }
10997
+
10998
+ /**
10999
+ * On changes hook method.
11000
+ * @param {Object} changes
11001
+ */
11002
+ function onChanges(changes) {
11003
+ if (angular.isDefined(changes.version)) {
11004
+ ctrl.variables = lodash.chain(ctrl.version).get('spec.env', []).map(function (variable) {
11005
+ variable.ui = {
11006
+ editModeActive: false,
11007
+ isFormValid: false,
11008
+ name: 'variable'
11009
+ };
11010
+ return variable;
11011
+ }).value();
11012
+ ctrl.isOnlyValueTypeInputs = !lodash.some(ctrl.variables, 'valueFrom');
11013
+ $timeout(function () {
11014
+ if (ctrl.environmentVariablesForm.$invalid) {
11015
+ ctrl.environmentVariablesForm.$setSubmitted();
11016
+ $rootScope.$broadcast('change-state-deploy-button', {
11017
+ component: 'variable',
11018
+ isDisabled: true
11019
+ });
11020
+ }
11021
+ });
11022
+ }
11023
+ }
11024
+
11025
+ //
11026
+ // Public methods
11027
+ //
11028
+
11029
+ /**
11030
+ * Adds new variable
11031
+ */
11032
+ function addNewVariable(event) {
11033
+ if (ctrl.isFunctionDeploying()) {
11034
+ return;
11035
+ }
11036
+ $timeout(function () {
11037
+ if (ctrl.variables.length < 1 || lodash.chain(ctrl.variables).last().get('ui.isFormValid', true).value()) {
11038
+ ctrl.variables.push({
11039
+ name: '',
11040
+ value: '',
11041
+ ui: {
11042
+ editModeActive: true,
11043
+ isFormValid: false,
11044
+ name: 'variable'
11045
+ }
11046
+ });
11047
+ ctrl.environmentVariablesForm.$setPristine();
11048
+ $rootScope.$broadcast('change-state-deploy-button', {
11049
+ component: 'variable',
11050
+ isDisabled: true
11051
+ });
11052
+ event.stopPropagation();
11053
+ }
11054
+ }, 50);
11055
+ }
11056
+
11057
+ /**
11058
+ * Handler on specific action type
11059
+ * @param {string} actionType
11060
+ * @param {number} index - index of variable in array
11061
+ */
11062
+ function handleAction(actionType, index) {
11063
+ if (actionType === 'delete') {
11064
+ ctrl.variables.splice(index, 1);
11065
+ $timeout(function () {
11066
+ updateVariables();
11067
+ });
11068
+ }
11069
+ }
11070
+
11071
+ /**
11072
+ * Changes data of specific variable
11073
+ * @param {Object} variable
11074
+ * @param {number} index
11075
+ */
11076
+ function onChangeData(variable, index) {
11077
+ ctrl.variables[index] = lodash.cloneDeep(variable);
11078
+ updateVariables();
11079
+ }
11080
+
11081
+ /**
11082
+ * Handles a change of variables type
11083
+ * @param {Object} newType
11084
+ * @param {number} index
11085
+ */
11086
+ function onChangeType(newType, index) {
11087
+ var variablesCopy = angular.copy(ctrl.variables);
11088
+ variablesCopy[index] = newType.id === 'value' ? {} : {
11089
+ valueFrom: {}
11090
+ };
11091
+ ctrl.isOnlyValueTypeInputs = !lodash.some(variablesCopy, 'valueFrom');
11092
+ if (newType.id === 'secret') {
11093
+ var form = lodash.get(ctrl.environmentVariablesForm, '$$controls[' + index + '][value-key]');
11094
+ if (angular.isDefined(form)) {
11095
+ lodash.forEach(ctrl.validationRules.configmapKey, function (rule) {
11096
+ form.$setValidity(rule.name, true);
11097
+ });
11098
+ }
11099
+ }
11100
+ }
11101
+
11102
+ //
11103
+ // Private methods
11104
+ //
11105
+
11106
+ /**
11107
+ * Updates function's variables
11108
+ */
11109
+ function updateVariables() {
11110
+ var isFormValid = true;
11111
+ var variables = lodash.map(ctrl.variables, function (variable) {
11112
+ if (!variable.ui.isFormValid) {
11113
+ isFormValid = false;
11114
+ }
11115
+ return lodash.omit(variable, 'ui');
11116
+ });
11117
+
11118
+ // since uniqueness validation rule of some fields is dependent on the entire environment variable list,
11119
+ // then whenever the list is modified - the rest of the environment variables need to be re-validated
11120
+ FormValidationService.validateAllFields(ctrl.environmentVariablesForm);
11121
+ $rootScope.$broadcast('change-state-deploy-button', {
11122
+ component: 'variable',
11123
+ isDisabled: !isFormValid
11124
+ });
11125
+ lodash.set(ctrl.version, 'spec.env', variables);
11126
+ ctrl.onChangeCallback();
11127
+ }
11128
+
11129
+ /**
11130
+ * Determines `uniqueness` validation for `Key` and `ConfigMap key` fields
11131
+ * @param {string} path
11132
+ * @param {string} value
11133
+ */
11134
+ function validateUniqueness(path, value) {
11135
+ return lodash.filter(ctrl.variables, [path, value]).length === 1;
11136
+ }
11137
+ }
11138
+ })();
11139
+ "use strict";
11140
+
11141
+ (function () {
11142
+ 'use strict';
11143
+
11144
+ NclVersionConfigurationLabelsController.$inject = ["$element", "$i18next", "$rootScope", "$timeout", "i18next", "lodash", "FormValidationService", "FunctionsService", "PreventDropdownCutOffService", "ValidationService", "VersionHelperService"];
11145
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationLabels', {
11146
+ bindings: {
11147
+ version: '<',
11148
+ onChangeCallback: '<',
11149
+ isFunctionDeploying: '&'
11150
+ },
11151
+ templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-labels/version-configuration-labels.tpl.html',
11152
+ controller: NclVersionConfigurationLabelsController
11153
+ });
11154
+ function NclVersionConfigurationLabelsController($element, $i18next, $rootScope, $timeout, i18next, lodash, FormValidationService, FunctionsService, PreventDropdownCutOffService, ValidationService, VersionHelperService) {
11155
+ var ctrl = this;
11156
+ var lng = i18next.language;
11157
+ ctrl.igzScrollConfig = {
11158
+ maxElementsCount: 10,
11159
+ childrenSelector: '.table-body'
11160
+ };
11161
+ ctrl.isKubePlatform = false;
11162
+ ctrl.labelsForm = null;
11163
+ ctrl.scrollConfig = {
11164
+ axis: 'y',
11165
+ advanced: {
11166
+ updateOnContentResize: true
11167
+ }
11168
+ };
11169
+ ctrl.tooltip = '<a class="link" target="_blank" ' + 'href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/">' + $i18next.t('functions:TOOLTIP.LABELS.HEAD', {
11170
+ lng: lng
11171
+ }) + '</a> ' + $i18next.t('functions:TOOLTIP.LABELS.REST', {
11172
+ lng: lng
11173
+ });
11174
+ ctrl.keyTooltip = $i18next.t('functions:TOOLTIP.PREFIXED_NAME', {
11175
+ lng: lng,
11176
+ name: $i18next.t('common:LABEL', {
11177
+ lng: lng
11178
+ })
11179
+ });
11180
+ ctrl.validationRules = {
11181
+ key: ValidationService.getValidationRules('function.label.key', [{
11182
+ name: 'uniqueness',
11183
+ label: $i18next.t('functions:UNIQUENESS', {
11184
+ lng: lng
11185
+ }),
11186
+ pattern: validateUniqueness
11187
+ }]),
11188
+ value: ValidationService.getValidationRules('k8s.qualifiedName')
11189
+ };
11190
+ ctrl.$postLink = postLink;
11191
+ ctrl.$onChanges = onChanges;
11192
+ ctrl.addNewLabel = addNewLabel;
11166
11193
  ctrl.handleAction = handleAction;
11167
11194
  ctrl.isLabelsDisabled = isLabelsDisabled;
11168
11195
  ctrl.onChangeData = onChangeData;
@@ -11319,33 +11346,66 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
11319
11346
  })();
11320
11347
  "use strict";
11321
11348
 
11322
- /* eslint max-statements: ["error", 80] */
11323
11349
  (function () {
11324
11350
  'use strict';
11325
11351
 
11326
- NclVersionConfigurationResourcesController.$inject = ["$i18next", "$rootScope", "$scope", "$stateParams", "$timeout", "i18next", "lodash", "ConfigService", "DialogsService", "FormValidationService", "ValidationService"];
11327
- angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationResources', {
11352
+ NclVersionConfigurationLoggingController.$inject = ["lodash"];
11353
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationLogging', {
11328
11354
  bindings: {
11329
11355
  version: '<',
11330
- onChangeCallback: '<',
11331
- isFunctionDeploying: '&'
11356
+ onChangeCallback: '<'
11332
11357
  },
11333
- templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-resources/version-configuration-resources.tpl.html',
11334
- controller: NclVersionConfigurationResourcesController
11358
+ templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-logging/version-configuration-logging.tpl.html',
11359
+ controller: NclVersionConfigurationLoggingController
11335
11360
  });
11336
- function NclVersionConfigurationResourcesController($i18next, $rootScope, $scope, $stateParams, $timeout, i18next, lodash, ConfigService, DialogsService, FormValidationService, ValidationService) {
11361
+ function NclVersionConfigurationLoggingController(lodash) {
11337
11362
  var ctrl = this;
11338
- var lng = i18next.language;
11339
- var defaultUnit = {
11340
- id: 'gb',
11341
- name: 'GB',
11342
- unit: 'G',
11343
- root: 1000,
11344
- power: 3
11345
- };
11346
- var preemptionMode = '';
11347
- var scaleResourcesCopy = [];
11348
- var scaleToZero = {};
11363
+ ctrl.inputValueCallback = inputValueCallback;
11364
+
11365
+ //
11366
+ // Public methods
11367
+ //
11368
+
11369
+ /**
11370
+ * Update data callback
11371
+ * @param {string} newData
11372
+ * @param {string} field
11373
+ */
11374
+ function inputValueCallback(newData, field) {
11375
+ lodash.set(ctrl.version, field, newData);
11376
+ ctrl.onChangeCallback();
11377
+ }
11378
+ }
11379
+ })();
11380
+ "use strict";
11381
+
11382
+ /* eslint max-statements: ["error", 80] */
11383
+ (function () {
11384
+ 'use strict';
11385
+
11386
+ NclVersionConfigurationResourcesController.$inject = ["$i18next", "$rootScope", "$scope", "$stateParams", "$timeout", "i18next", "lodash", "ConfigService", "DialogsService", "FormValidationService", "ValidationService"];
11387
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationResources', {
11388
+ bindings: {
11389
+ version: '<',
11390
+ onChangeCallback: '<',
11391
+ isFunctionDeploying: '&'
11392
+ },
11393
+ templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-resources/version-configuration-resources.tpl.html',
11394
+ controller: NclVersionConfigurationResourcesController
11395
+ });
11396
+ function NclVersionConfigurationResourcesController($i18next, $rootScope, $scope, $stateParams, $timeout, i18next, lodash, ConfigService, DialogsService, FormValidationService, ValidationService) {
11397
+ var ctrl = this;
11398
+ var lng = i18next.language;
11399
+ var defaultUnit = {
11400
+ id: 'gb',
11401
+ name: 'GB',
11402
+ unit: 'G',
11403
+ root: 1000,
11404
+ power: 3
11405
+ };
11406
+ var preemptionMode = '';
11407
+ var scaleResourcesCopy = [];
11408
+ var scaleToZero = {};
11349
11409
  ctrl.cpuDropdownOptions = [{
11350
11410
  id: 'millicores',
11351
11411
  name: 'millicpu',
@@ -12180,214 +12240,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
12180
12240
  })();
12181
12241
  "use strict";
12182
12242
 
12183
- (function () {
12184
- 'use strict';
12185
-
12186
- NclVersionConfigurationEnvironmentVariablesController.$inject = ["$element", "$i18next", "$rootScope", "$timeout", "i18next", "lodash", "FormValidationService", "PreventDropdownCutOffService", "ValidationService"];
12187
- angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationEnvironmentVariables', {
12188
- bindings: {
12189
- version: '<',
12190
- onChangeCallback: '<',
12191
- isFunctionDeploying: '&'
12192
- },
12193
- templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-environment-variables/version-configuration-environment-variables.tpl.html',
12194
- controller: NclVersionConfigurationEnvironmentVariablesController
12195
- });
12196
- function NclVersionConfigurationEnvironmentVariablesController($element, $i18next, $rootScope, $timeout, i18next, lodash, FormValidationService, PreventDropdownCutOffService, ValidationService) {
12197
- var ctrl = this;
12198
- var lng = i18next.language;
12199
- ctrl.environmentVariablesForm = null;
12200
- ctrl.igzScrollConfig = {
12201
- maxElementsCount: 10,
12202
- childrenSelector: '.table-body'
12203
- };
12204
- ctrl.validationRules = {
12205
- key: ValidationService.getValidationRules('k8s.envVarName', [{
12206
- name: 'uniqueness',
12207
- label: $i18next.t('functions:UNIQUENESS', {
12208
- lng: lng
12209
- }),
12210
- pattern: validateUniqueness.bind(null, 'name')
12211
- }]),
12212
- secretKey: ValidationService.getValidationRules('k8s.configMapKey'),
12213
- secret: ValidationService.getValidationRules('k8s.secretName'),
12214
- configmapKey: ValidationService.getValidationRules('k8s.configMapKey', [{
12215
- name: 'uniqueness',
12216
- label: $i18next.t('functions:UNIQUENESS', {
12217
- lng: lng
12218
- }),
12219
- pattern: validateUniqueness.bind(null, 'valueFrom.configMapKeyRef.key')
12220
- }])
12221
- };
12222
- ctrl.variables = [];
12223
- ctrl.scrollConfig = {
12224
- axis: 'y',
12225
- advanced: {
12226
- updateOnContentResize: true
12227
- }
12228
- };
12229
- ctrl.$postLink = postLink;
12230
- ctrl.$onChanges = onChanges;
12231
- ctrl.addNewVariable = addNewVariable;
12232
- ctrl.handleAction = handleAction;
12233
- ctrl.onChangeData = onChangeData;
12234
- ctrl.onChangeType = onChangeType;
12235
-
12236
- //
12237
- // Hook methods
12238
- //
12239
-
12240
- /**
12241
- * Post linking method
12242
- */
12243
- function postLink() {
12244
- // Bind DOM-related preventDropdownCutOff method to component's controller
12245
- PreventDropdownCutOffService.preventDropdownCutOff($element, '.three-dot-menu');
12246
- }
12247
-
12248
- /**
12249
- * On changes hook method.
12250
- * @param {Object} changes
12251
- */
12252
- function onChanges(changes) {
12253
- if (angular.isDefined(changes.version)) {
12254
- ctrl.variables = lodash.chain(ctrl.version).get('spec.env', []).map(function (variable) {
12255
- variable.ui = {
12256
- editModeActive: false,
12257
- isFormValid: false,
12258
- name: 'variable'
12259
- };
12260
- return variable;
12261
- }).value();
12262
- ctrl.isOnlyValueTypeInputs = !lodash.some(ctrl.variables, 'valueFrom');
12263
- $timeout(function () {
12264
- if (ctrl.environmentVariablesForm.$invalid) {
12265
- ctrl.environmentVariablesForm.$setSubmitted();
12266
- $rootScope.$broadcast('change-state-deploy-button', {
12267
- component: 'variable',
12268
- isDisabled: true
12269
- });
12270
- }
12271
- });
12272
- }
12273
- }
12274
-
12275
- //
12276
- // Public methods
12277
- //
12278
-
12279
- /**
12280
- * Adds new variable
12281
- */
12282
- function addNewVariable(event) {
12283
- if (ctrl.isFunctionDeploying()) {
12284
- return;
12285
- }
12286
- $timeout(function () {
12287
- if (ctrl.variables.length < 1 || lodash.chain(ctrl.variables).last().get('ui.isFormValid', true).value()) {
12288
- ctrl.variables.push({
12289
- name: '',
12290
- value: '',
12291
- ui: {
12292
- editModeActive: true,
12293
- isFormValid: false,
12294
- name: 'variable'
12295
- }
12296
- });
12297
- ctrl.environmentVariablesForm.$setPristine();
12298
- $rootScope.$broadcast('change-state-deploy-button', {
12299
- component: 'variable',
12300
- isDisabled: true
12301
- });
12302
- event.stopPropagation();
12303
- }
12304
- }, 50);
12305
- }
12306
-
12307
- /**
12308
- * Handler on specific action type
12309
- * @param {string} actionType
12310
- * @param {number} index - index of variable in array
12311
- */
12312
- function handleAction(actionType, index) {
12313
- if (actionType === 'delete') {
12314
- ctrl.variables.splice(index, 1);
12315
- $timeout(function () {
12316
- updateVariables();
12317
- });
12318
- }
12319
- }
12320
-
12321
- /**
12322
- * Changes data of specific variable
12323
- * @param {Object} variable
12324
- * @param {number} index
12325
- */
12326
- function onChangeData(variable, index) {
12327
- ctrl.variables[index] = lodash.cloneDeep(variable);
12328
- updateVariables();
12329
- }
12330
-
12331
- /**
12332
- * Handles a change of variables type
12333
- * @param {Object} newType
12334
- * @param {number} index
12335
- */
12336
- function onChangeType(newType, index) {
12337
- var variablesCopy = angular.copy(ctrl.variables);
12338
- variablesCopy[index] = newType.id === 'value' ? {} : {
12339
- valueFrom: {}
12340
- };
12341
- ctrl.isOnlyValueTypeInputs = !lodash.some(variablesCopy, 'valueFrom');
12342
- if (newType.id === 'secret') {
12343
- var form = lodash.get(ctrl.environmentVariablesForm, '$$controls[' + index + '][value-key]');
12344
- if (angular.isDefined(form)) {
12345
- lodash.forEach(ctrl.validationRules.configmapKey, function (rule) {
12346
- form.$setValidity(rule.name, true);
12347
- });
12348
- }
12349
- }
12350
- }
12351
-
12352
- //
12353
- // Private methods
12354
- //
12355
-
12356
- /**
12357
- * Updates function's variables
12358
- */
12359
- function updateVariables() {
12360
- var isFormValid = true;
12361
- var variables = lodash.map(ctrl.variables, function (variable) {
12362
- if (!variable.ui.isFormValid) {
12363
- isFormValid = false;
12364
- }
12365
- return lodash.omit(variable, 'ui');
12366
- });
12367
-
12368
- // since uniqueness validation rule of some fields is dependent on the entire environment variable list,
12369
- // then whenever the list is modified - the rest of the environment variables need to be re-validated
12370
- FormValidationService.validateAllFields(ctrl.environmentVariablesForm);
12371
- $rootScope.$broadcast('change-state-deploy-button', {
12372
- component: 'variable',
12373
- isDisabled: !isFormValid
12374
- });
12375
- lodash.set(ctrl.version, 'spec.env', variables);
12376
- ctrl.onChangeCallback();
12377
- }
12378
-
12379
- /**
12380
- * Determines `uniqueness` validation for `Key` and `ConfigMap key` fields
12381
- * @param {string} path
12382
- * @param {string} value
12383
- */
12384
- function validateUniqueness(path, value) {
12385
- return lodash.filter(ctrl.variables, [path, value]).length === 1;
12386
- }
12387
- }
12388
- })();
12389
- "use strict";
12390
-
12391
12243
  (function () {
12392
12244
  'use strict';
12393
12245
 
@@ -12822,8 +12674,167 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
12822
12674
  (function () {
12823
12675
  'use strict';
12824
12676
 
12825
- NclVersionConfigurationBuildDialogController.$inject = ["EventHelperService"];
12826
- angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationBuildDialog', {
12677
+ NclTestEventsLogsController.$inject = ["lodash"];
12678
+ angular.module('iguazio.dashboard-controls').component('nclTestEventsLogs', {
12679
+ bindings: {
12680
+ logs: '<'
12681
+ },
12682
+ templateUrl: 'nuclio/functions/version/version-code/function-event-pane/test-events-logs/test-events-logs.tpl.html',
12683
+ controller: NclTestEventsLogsController
12684
+ });
12685
+ function NclTestEventsLogsController(lodash) {
12686
+ var ctrl = this;
12687
+ var REQUIRED_PARAMETERS = ['level', 'name', 'time', 'err', 'message', 'ui'];
12688
+ ctrl.$onInit = onInit;
12689
+ ctrl.collapseRow = collapseRow;
12690
+ ctrl.expandAllRows = expandAllRows;
12691
+ ctrl.getLevelIconClass = getLevelIconClass;
12692
+ ctrl.getParameters = getParameters;
12693
+ ctrl.hasAdditionalParameters = hasAdditionalParameters;
12694
+
12695
+ //
12696
+ // Hook method
12697
+ //
12698
+
12699
+ /**
12700
+ * Initialization method
12701
+ */
12702
+ function onInit() {
12703
+ lodash.forEach(ctrl.logs, function (log) {
12704
+ lodash.set(log, 'ui.collapsed', true);
12705
+ });
12706
+ }
12707
+
12708
+ //
12709
+ // Public methods
12710
+ //
12711
+
12712
+ /**
12713
+ * Collapse/expand row depending on `collapse` value
12714
+ * @param {Object} log
12715
+ * @param {boolean} collapse
12716
+ */
12717
+ function collapseRow(log, collapse) {
12718
+ lodash.set(log, 'ui.collapsed', collapse);
12719
+ }
12720
+
12721
+ /**
12722
+ * Collapse/expand all rows depending on `expand` value
12723
+ * @param {boolean} expand
12724
+ */
12725
+ function expandAllRows(expand) {
12726
+ lodash.forEach(ctrl.logs, function (log) {
12727
+ lodash.set(log, 'ui.collapsed', !expand);
12728
+ });
12729
+ }
12730
+
12731
+ /**
12732
+ * Gets css class depending on log.level
12733
+ * @param {Object} log
12734
+ * @returns {string}
12735
+ */
12736
+ function getLevelIconClass(log) {
12737
+ return log.level === 'debug' ? 'ncl-icon-debug' : log.level === 'info' ? 'igz-icon-info-round' : log.level === 'warn' ? 'igz-icon-warning' : log.level === 'error' ? 'igz-icon-cancel-path' : '';
12738
+ }
12739
+
12740
+ /**
12741
+ * Gets additional parameters
12742
+ * @param {Object} log
12743
+ * @returns {Object}
12744
+ */
12745
+ function getParameters(log) {
12746
+ return lodash.omit(log, REQUIRED_PARAMETERS);
12747
+ }
12748
+
12749
+ /**
12750
+ * Checks if log has additional parameters
12751
+ * @param {Object} log
12752
+ * @returns {boolean}
12753
+ */
12754
+ function hasAdditionalParameters(log) {
12755
+ return !lodash.isEmpty(getParameters(log));
12756
+ }
12757
+ }
12758
+ })();
12759
+ "use strict";
12760
+
12761
+ (function () {
12762
+ 'use strict';
12763
+
12764
+ NclTestEventsNavigationTabsController.$inject = ["$i18next", "i18next"];
12765
+ angular.module('iguazio.dashboard-controls').component('nclTestEventsNavigationTabs', {
12766
+ bindings: {
12767
+ activeTab: '<',
12768
+ tabItems: '<',
12769
+ selectedLogLevel: '<?',
12770
+ onChangeActiveTab: '&',
12771
+ onChangeLogLevel: '&?'
12772
+ },
12773
+ templateUrl: 'nuclio/functions/version/version-code/function-event-pane/test-events-navigation-tabs/test-events-navigation-tabs.tpl.html',
12774
+ controller: NclTestEventsNavigationTabsController
12775
+ });
12776
+ function NclTestEventsNavigationTabsController($i18next, i18next) {
12777
+ var ctrl = this;
12778
+ var lng = i18next.language;
12779
+ ctrl.logLevelValues = [{
12780
+ id: 'error',
12781
+ name: $i18next.t('common:ERROR', {
12782
+ lng: lng
12783
+ }),
12784
+ visible: true
12785
+ }, {
12786
+ id: 'warn',
12787
+ name: $i18next.t('common:WARNING', {
12788
+ lng: lng
12789
+ }),
12790
+ visible: true
12791
+ }, {
12792
+ id: 'info',
12793
+ name: $i18next.t('common:INFO', {
12794
+ lng: lng
12795
+ }),
12796
+ visible: true
12797
+ }, {
12798
+ id: 'debug',
12799
+ name: $i18next.t('common:DEBUG', {
12800
+ lng: lng
12801
+ }),
12802
+ visible: true
12803
+ }];
12804
+ ctrl.changeActiveTab = changeActiveTab;
12805
+ ctrl.isActiveTab = isActiveTab;
12806
+
12807
+ //
12808
+ // Public methods
12809
+ //
12810
+
12811
+ /**
12812
+ * Changes active nav tab
12813
+ * @param {Object} item - current status
12814
+ */
12815
+ function changeActiveTab(item) {
12816
+ ctrl.activeTab = item;
12817
+ ctrl.onChangeActiveTab({
12818
+ activeTab: item
12819
+ });
12820
+ }
12821
+
12822
+ /**
12823
+ * Checks if it is an active tab
12824
+ * @param {Object} item - current tab
12825
+ */
12826
+ function isActiveTab(item) {
12827
+ return ctrl.activeTab.id === item.id;
12828
+ }
12829
+ }
12830
+ })();
12831
+ "use strict";
12832
+
12833
+ (function () {
12834
+ 'use strict';
12835
+
12836
+ NclVersionConfigurationBuildDialogController.$inject = ["EventHelperService"];
12837
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationBuildDialog', {
12827
12838
  bindings: {
12828
12839
  closeDialog: '&'
12829
12840
  },
@@ -18232,38 +18243,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
18232
18243
  })();
18233
18244
  "use strict";
18234
18245
 
18235
- (function () {
18236
- 'use strict';
18237
-
18238
- NclFunctionConfigDialogController.$inject = ["ExportService", "MaskService"];
18239
- angular.module('iguazio.dashboard-controls').component('nclFunctionConfigDialog', {
18240
- bindings: {
18241
- closeDialog: '&',
18242
- function: '<'
18243
- },
18244
- templateUrl: 'nuclio/common/components/function-config-dialog/function-config-dialog.tpl.html',
18245
- controller: NclFunctionConfigDialogController
18246
- });
18247
- function NclFunctionConfigDialogController(ExportService, MaskService) {
18248
- var ctrl = this;
18249
- ctrl.$onInit = onInit;
18250
-
18251
- //
18252
- // Hook methods
18253
- //
18254
-
18255
- /**
18256
- * Initialization method
18257
- */
18258
- function onInit() {
18259
- var functionWithMask = MaskService.getObjectWithMask(ctrl.function);
18260
- ctrl.title = ctrl.function.metadata.name + ' - configuration';
18261
- ctrl.sourceCode = ExportService.getFunctionConfig(functionWithMask);
18262
- }
18263
- }
18264
- })();
18265
- "use strict";
18266
-
18267
18246
  (function () {
18268
18247
  'use strict';
18269
18248
 
@@ -19354,6 +19333,38 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
19354
19333
  })();
19355
19334
  "use strict";
19356
19335
 
19336
+ (function () {
19337
+ 'use strict';
19338
+
19339
+ NclFunctionConfigDialogController.$inject = ["ExportService", "MaskService"];
19340
+ angular.module('iguazio.dashboard-controls').component('nclFunctionConfigDialog', {
19341
+ bindings: {
19342
+ closeDialog: '&',
19343
+ function: '<'
19344
+ },
19345
+ templateUrl: 'nuclio/common/components/function-config-dialog/function-config-dialog.tpl.html',
19346
+ controller: NclFunctionConfigDialogController
19347
+ });
19348
+ function NclFunctionConfigDialogController(ExportService, MaskService) {
19349
+ var ctrl = this;
19350
+ ctrl.$onInit = onInit;
19351
+
19352
+ //
19353
+ // Hook methods
19354
+ //
19355
+
19356
+ /**
19357
+ * Initialization method
19358
+ */
19359
+ function onInit() {
19360
+ var functionWithMask = MaskService.getObjectWithMask(ctrl.function);
19361
+ ctrl.title = ctrl.function.metadata.name + ' - configuration';
19362
+ ctrl.sourceCode = ExportService.getFunctionConfig(functionWithMask);
19363
+ }
19364
+ }
19365
+ })();
19366
+ "use strict";
19367
+
19357
19368
  (function () {
19358
19369
  'use strict';
19359
19370
 
@@ -20809,39 +20820,86 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
20809
20820
  (function () {
20810
20821
  'use strict';
20811
20822
 
20812
- NclVersionCodeController.$inject = ["$element", "$rootScope", "$scope", "$timeout", "$window", "$i18next", "i18next", "lodash", "Base64", "ConfigService", "DialogsService", "VersionHelperService"];
20813
- angular.module('iguazio.dashboard-controls').component('nclVersionCode', {
20823
+ NclVersionConfigurationController.$inject = ["lodash", "ConfigService", "VersionHelperService"];
20824
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfiguration', {
20814
20825
  bindings: {
20815
20826
  version: '<',
20816
20827
  isFunctionDeploying: '&'
20817
20828
  },
20818
- templateUrl: 'nuclio/functions/version/version-code/version-code.tpl.html',
20819
- controller: NclVersionCodeController
20829
+ templateUrl: 'nuclio/functions/version/version-configuration/version-configuration.tpl.html',
20830
+ controller: NclVersionConfigurationController
20820
20831
  });
20821
- function NclVersionCodeController($element, $rootScope, $scope, $timeout, $window, $i18next, i18next, lodash, Base64, ConfigService, DialogsService, VersionHelperService) {
20832
+ function NclVersionConfigurationController(lodash, ConfigService, VersionHelperService) {
20822
20833
  var ctrl = this;
20823
- var scrollContainer = null;
20824
- var previousEntryType = null;
20825
- var lng = i18next.language;
20826
- ctrl.githubToken = '';
20827
- ctrl.layout = {
20828
- collapsed: false
20829
- };
20830
20834
  ctrl.scrollConfig = {
20831
- axis: 'xy',
20835
+ axis: 'y',
20832
20836
  advanced: {
20833
- autoScrollOnFocus: false
20837
+ autoScrollOnFocus: false,
20838
+ updateOnContentResize: true
20834
20839
  }
20835
20840
  };
20836
- ctrl.scrollConfigHorizontal = {
20837
- axis: 'x',
20838
- advanced: {
20839
- autoScrollOnFocus: false
20840
- },
20841
- callbacks: {
20842
- onCreate: function onCreate() {
20843
- scrollContainer = this.querySelector('.mCSB_container');
20844
- scrollContainer.style.height = '100%';
20841
+ ctrl.isDemoMode = ConfigService.isDemoMode;
20842
+ ctrl.isRuntimeBlockVisible = isRuntimeBlockVisible;
20843
+ ctrl.onConfigurationChangeCallback = onConfigurationChangeCallback;
20844
+
20845
+ //
20846
+ // Public methods
20847
+ //
20848
+
20849
+ /**
20850
+ * Checks if `Runtime Attributes` block is visible
20851
+ * @returns {boolean}
20852
+ */
20853
+ function isRuntimeBlockVisible() {
20854
+ return lodash.includes(['shell', 'java'], lodash.get(ctrl.version, 'spec.runtime'));
20855
+ }
20856
+
20857
+ /**
20858
+ * Checks if version's configuration was changed
20859
+ */
20860
+ function onConfigurationChangeCallback() {
20861
+ VersionHelperService.updateIsVersionChanged(ctrl.version);
20862
+ }
20863
+ }
20864
+ })();
20865
+ "use strict";
20866
+
20867
+ (function () {
20868
+ 'use strict';
20869
+
20870
+ NclVersionCodeController.$inject = ["$element", "$rootScope", "$scope", "$timeout", "$window", "$i18next", "i18next", "lodash", "Base64", "ConfigService", "DialogsService", "VersionHelperService"];
20871
+ angular.module('iguazio.dashboard-controls').component('nclVersionCode', {
20872
+ bindings: {
20873
+ version: '<',
20874
+ isFunctionDeploying: '&'
20875
+ },
20876
+ templateUrl: 'nuclio/functions/version/version-code/version-code.tpl.html',
20877
+ controller: NclVersionCodeController
20878
+ });
20879
+ function NclVersionCodeController($element, $rootScope, $scope, $timeout, $window, $i18next, i18next, lodash, Base64, ConfigService, DialogsService, VersionHelperService) {
20880
+ var ctrl = this;
20881
+ var scrollContainer = null;
20882
+ var previousEntryType = null;
20883
+ var lng = i18next.language;
20884
+ ctrl.githubToken = '';
20885
+ ctrl.layout = {
20886
+ collapsed: false
20887
+ };
20888
+ ctrl.scrollConfig = {
20889
+ axis: 'xy',
20890
+ advanced: {
20891
+ autoScrollOnFocus: false
20892
+ }
20893
+ };
20894
+ ctrl.scrollConfigHorizontal = {
20895
+ axis: 'x',
20896
+ advanced: {
20897
+ autoScrollOnFocus: false
20898
+ },
20899
+ callbacks: {
20900
+ onCreate: function onCreate() {
20901
+ scrollContainer = this.querySelector('.mCSB_container');
20902
+ scrollContainer.style.height = '100%';
20845
20903
  }
20846
20904
  }
20847
20905
  };
@@ -21380,122 +21438,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
21380
21438
  })();
21381
21439
  "use strict";
21382
21440
 
21383
- (function () {
21384
- 'use strict';
21385
-
21386
- NclVersionConfigurationController.$inject = ["lodash", "ConfigService", "VersionHelperService"];
21387
- angular.module('iguazio.dashboard-controls').component('nclVersionConfiguration', {
21388
- bindings: {
21389
- version: '<',
21390
- isFunctionDeploying: '&'
21391
- },
21392
- templateUrl: 'nuclio/functions/version/version-configuration/version-configuration.tpl.html',
21393
- controller: NclVersionConfigurationController
21394
- });
21395
- function NclVersionConfigurationController(lodash, ConfigService, VersionHelperService) {
21396
- var ctrl = this;
21397
- ctrl.scrollConfig = {
21398
- axis: 'y',
21399
- advanced: {
21400
- autoScrollOnFocus: false,
21401
- updateOnContentResize: true
21402
- }
21403
- };
21404
- ctrl.isDemoMode = ConfigService.isDemoMode;
21405
- ctrl.isRuntimeBlockVisible = isRuntimeBlockVisible;
21406
- ctrl.onConfigurationChangeCallback = onConfigurationChangeCallback;
21407
-
21408
- //
21409
- // Public methods
21410
- //
21411
-
21412
- /**
21413
- * Checks if `Runtime Attributes` block is visible
21414
- * @returns {boolean}
21415
- */
21416
- function isRuntimeBlockVisible() {
21417
- return lodash.includes(['shell', 'java'], lodash.get(ctrl.version, 'spec.runtime'));
21418
- }
21419
-
21420
- /**
21421
- * Checks if version's configuration was changed
21422
- */
21423
- function onConfigurationChangeCallback() {
21424
- VersionHelperService.updateIsVersionChanged(ctrl.version);
21425
- }
21426
- }
21427
- })();
21428
- "use strict";
21429
-
21430
- (function () {
21431
- 'use strict';
21432
-
21433
- NclVersionMonitoringController.$inject = ["$rootScope", "$timeout", "lodash", "FunctionsService"];
21434
- angular.module('iguazio.dashboard-controls').component('nclVersionMonitoring', {
21435
- bindings: {
21436
- version: '<'
21437
- },
21438
- templateUrl: 'nuclio/functions/version/version-monitoring/version-monitoring.tpl.html',
21439
- controller: NclVersionMonitoringController
21440
- });
21441
- function NclVersionMonitoringController($rootScope, $timeout, lodash, FunctionsService) {
21442
- var ctrl = this;
21443
- ctrl.scrollConfig = {
21444
- advanced: {
21445
- updateOnContentResize: true
21446
- }
21447
- };
21448
- ctrl.loggerScrollConfig = {
21449
- advanced: {
21450
- updateOnContentResize: true
21451
- },
21452
- theme: 'light-thin'
21453
- };
21454
- ctrl.rowIsCollapsed = {
21455
- buildLog: false,
21456
- errorLog: false
21457
- };
21458
- ctrl.$onInit = onInit;
21459
- ctrl.checkIsErrorState = checkIsErrorState;
21460
- ctrl.onRowCollapse = onRowCollapse;
21461
-
21462
- //
21463
- // Hook methods
21464
- //
21465
-
21466
- /**
21467
- * Initialization method
21468
- */
21469
- function onInit() {
21470
- ctrl.isFunctionDeploying = lodash.partial(FunctionsService.isFunctionDeploying, ctrl.version);
21471
- }
21472
-
21473
- //
21474
- // Public methods
21475
- //
21476
-
21477
- /**
21478
- * Checks if current version status is `error`
21479
- * @returns {boolean}
21480
- */
21481
- function checkIsErrorState() {
21482
- return lodash.includes(['error', 'unhealthy'], lodash.get(ctrl.version.status, 'state'));
21483
- }
21484
-
21485
- /**
21486
- * Called when row is collapsed/expanded
21487
- * @param {string} row - name of expanded/collapsed row
21488
- */
21489
- function onRowCollapse(row) {
21490
- ctrl.rowIsCollapsed[row] = !ctrl.rowIsCollapsed[row];
21491
- $timeout(function () {
21492
- $rootScope.$broadcast('igzWatchWindowResize::resize');
21493
- }, 350);
21494
- }
21495
- }
21496
- })();
21497
- "use strict";
21498
-
21499
21441
  (function () {
21500
21442
  'use strict';
21501
21443
 
@@ -21912,6 +21854,75 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
21912
21854
  })();
21913
21855
  "use strict";
21914
21856
 
21857
+ (function () {
21858
+ 'use strict';
21859
+
21860
+ NclVersionMonitoringController.$inject = ["$rootScope", "$timeout", "lodash", "FunctionsService"];
21861
+ angular.module('iguazio.dashboard-controls').component('nclVersionMonitoring', {
21862
+ bindings: {
21863
+ version: '<'
21864
+ },
21865
+ templateUrl: 'nuclio/functions/version/version-monitoring/version-monitoring.tpl.html',
21866
+ controller: NclVersionMonitoringController
21867
+ });
21868
+ function NclVersionMonitoringController($rootScope, $timeout, lodash, FunctionsService) {
21869
+ var ctrl = this;
21870
+ ctrl.scrollConfig = {
21871
+ advanced: {
21872
+ updateOnContentResize: true
21873
+ }
21874
+ };
21875
+ ctrl.loggerScrollConfig = {
21876
+ advanced: {
21877
+ updateOnContentResize: true
21878
+ },
21879
+ theme: 'light-thin'
21880
+ };
21881
+ ctrl.rowIsCollapsed = {
21882
+ buildLog: false,
21883
+ errorLog: false
21884
+ };
21885
+ ctrl.$onInit = onInit;
21886
+ ctrl.checkIsErrorState = checkIsErrorState;
21887
+ ctrl.onRowCollapse = onRowCollapse;
21888
+
21889
+ //
21890
+ // Hook methods
21891
+ //
21892
+
21893
+ /**
21894
+ * Initialization method
21895
+ */
21896
+ function onInit() {
21897
+ ctrl.isFunctionDeploying = lodash.partial(FunctionsService.isFunctionDeploying, ctrl.version);
21898
+ }
21899
+
21900
+ //
21901
+ // Public methods
21902
+ //
21903
+
21904
+ /**
21905
+ * Checks if current version status is `error`
21906
+ * @returns {boolean}
21907
+ */
21908
+ function checkIsErrorState() {
21909
+ return lodash.includes(['error', 'unhealthy'], lodash.get(ctrl.version.status, 'state'));
21910
+ }
21911
+
21912
+ /**
21913
+ * Called when row is collapsed/expanded
21914
+ * @param {string} row - name of expanded/collapsed row
21915
+ */
21916
+ function onRowCollapse(row) {
21917
+ ctrl.rowIsCollapsed[row] = !ctrl.rowIsCollapsed[row];
21918
+ $timeout(function () {
21919
+ $rootScope.$broadcast('igzWatchWindowResize::resize');
21920
+ }, 350);
21921
+ }
21922
+ }
21923
+ })();
21924
+ "use strict";
21925
+
21915
21926
  (function () {
21916
21927
  'use strict';
21917
21928
 
@@ -22380,20 +22391,222 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
22380
22391
  })();
22381
22392
  "use strict";
22382
22393
 
22383
- /* eslint max-statements: ["error", 100] */
22384
22394
  (function () {
22385
22395
  'use strict';
22386
22396
 
22387
- FunctionFromTemplateController.$inject = ["$element", "$window", "$scope", "$state", "$timeout", "$i18next", "i18next", "lodash", "ngDialog", "DialogsService", "FunctionsService", "ValidationService"];
22388
- angular.module('iguazio.dashboard-controls').component('nclFunctionFromTemplate', {
22397
+ FunctionImportController.$inject = ["$document", "$rootScope", "$scope", "$state", "$timeout", "$i18next", "i18next", "YAML", "lodash", "DialogsService", "EventHelperService", "FunctionsService", "MaskService", "YamlService"];
22398
+ angular.module('iguazio.dashboard-controls').component('nclFunctionImport', {
22389
22399
  bindings: {
22390
22400
  project: '<',
22391
22401
  projects: '<',
22392
- toggleSplashScreen: '&',
22393
22402
  getFunction: '&',
22394
- getFunctionTemplates: '&',
22403
+ toggleSplashScreen: '&',
22395
22404
  createNewProject: '<',
22396
- renderTemplate: '&',
22405
+ selectedProject: '<'
22406
+ },
22407
+ templateUrl: 'nuclio/common/screens/create-function/function-import/function-import.tpl.html',
22408
+ controller: FunctionImportController
22409
+ });
22410
+ function FunctionImportController($document, $rootScope, $scope, $state, $timeout, $i18next, i18next, YAML, lodash, DialogsService, EventHelperService, FunctionsService, MaskService, YamlService) {
22411
+ var ctrl = this;
22412
+ var importedFunction = null;
22413
+ var file = null;
22414
+ var lng = i18next.language;
22415
+ ctrl.functionImportForm = {};
22416
+ ctrl.sourceCode = null;
22417
+ ctrl.$onInit = onInit;
22418
+ ctrl.$onChanges = onChanges;
22419
+ ctrl.$onDestroy = onDestroy;
22420
+ ctrl.createFunction = createFunction;
22421
+ ctrl.importFunction = importFunction;
22422
+ ctrl.isCreateFunctionAllowed = isCreateFunctionAllowed;
22423
+ ctrl.isProjectsDropDownVisible = isProjectsDropDownVisible;
22424
+ ctrl.onProjectChange = onProjectChange;
22425
+
22426
+ //
22427
+ // Hook methods
22428
+ //
22429
+
22430
+ /**
22431
+ * Initialization function
22432
+ * Adds event listener on file input and when some file is loaded call importFunction()
22433
+ */
22434
+ function onInit() {
22435
+ $document.on('keypress', createFunction);
22436
+ $document.find('.function-import-input').on('change', importFunction);
22437
+ }
22438
+
22439
+ /**
22440
+ * Bindings changes hook
22441
+ * @param {Object} changes - changed bindings
22442
+ */
22443
+ function onChanges(changes) {
22444
+ if (angular.isDefined(changes.projects)) {
22445
+ prepareProjects();
22446
+ }
22447
+ }
22448
+
22449
+ /**
22450
+ * Destructor method
22451
+ */
22452
+ function onDestroy() {
22453
+ $document.off('keypress', createFunction);
22454
+ }
22455
+
22456
+ //
22457
+ // Public methods
22458
+ //
22459
+
22460
+ /**
22461
+ * Callback handler for 'create function' button
22462
+ * Creates function with imported data.
22463
+ */
22464
+ function createFunction(event) {
22465
+ $timeout(function () {
22466
+ if ((angular.isUndefined(event) || event.keyCode === EventHelperService.ENTER) && ctrl.isCreateFunctionAllowed()) {
22467
+ // create function only when imported file is .yml
22468
+ if (isYamlFile(file.name)) {
22469
+ ctrl.toggleSplashScreen({
22470
+ value: true
22471
+ });
22472
+ ctrl.getFunction({
22473
+ metadata: {
22474
+ name: importedFunction.metadata.name
22475
+ }
22476
+ }).then(function (existingFunction) {
22477
+ ctrl.toggleSplashScreen({
22478
+ value: false
22479
+ });
22480
+ FunctionsService.openFunctionConflictDialog(ctrl.project, importedFunction, existingFunction);
22481
+ }).catch(function (error) {
22482
+ if (error.status === 404) {
22483
+ ctrl.toggleSplashScreen({
22484
+ value: true
22485
+ });
22486
+ lodash.defaults(importedFunction, {
22487
+ metadata: {}
22488
+ });
22489
+ if (lodash.isEmpty(ctrl.project) && ctrl.selectedProject.id !== 'new_project') {
22490
+ ctrl.project = lodash.find(ctrl.projects, ['metadata.name', ctrl.selectedProject.id]);
22491
+ }
22492
+ $state.go('app.project.function.edit.code', {
22493
+ isNewFunction: true,
22494
+ id: ctrl.project.metadata.name,
22495
+ projectId: ctrl.project.metadata.name,
22496
+ projectNamespace: ctrl.project.metadata.namespace,
22497
+ functionId: importedFunction.metadata.name,
22498
+ functionData: importedFunction
22499
+ });
22500
+ }
22501
+ });
22502
+ }
22503
+ }
22504
+ }, 100);
22505
+ }
22506
+
22507
+ /**
22508
+ * Checks permissibility creation of new function.
22509
+ * Checks if source code of function exists into ctrl.sourceCode, and if function import form is valid
22510
+ * @returns {boolean}
22511
+ */
22512
+ function isCreateFunctionAllowed() {
22513
+ return !lodash.isNil(ctrl.sourceCode) && lodash.isEmpty(ctrl.functionImportForm.$error);
22514
+ }
22515
+
22516
+ /**
22517
+ * Import of selected YAML file from file system and parse it to JS object
22518
+ * @param event
22519
+ */
22520
+ function importFunction(event) {
22521
+ file = event.target.files[0];
22522
+ var reader = new FileReader();
22523
+ reader.onload = function () {
22524
+ try {
22525
+ importedFunction = YAML.parse(reader.result);
22526
+ if (lodash.has(importedFunction, 'metadata.name')) {
22527
+ ctrl.sourceCode = YamlService.prepareYamlObject(MaskService.getObjectWithMask(importedFunction));
22528
+ $scope.$apply();
22529
+ $rootScope.$broadcast('function-import-source-code', ctrl.sourceCode);
22530
+ } else {
22531
+ throw new Error('invalid yaml');
22532
+ }
22533
+ } catch (error) {
22534
+ DialogsService.alert($i18next.t('common:ERROR_MSG.IMPORT_YAML_FILE', {
22535
+ lng: lng
22536
+ }));
22537
+ }
22538
+ };
22539
+ reader.readAsText(file);
22540
+ }
22541
+
22542
+ /**
22543
+ * Projects drop-down callback.
22544
+ * Sets selected project to function.
22545
+ * @param {Object} item - new selected project
22546
+ */
22547
+ function onProjectChange(item) {
22548
+ ctrl.project = lodash.find(ctrl.projects, ['metadata.name', item.id]);
22549
+ }
22550
+
22551
+ /**
22552
+ * Hides or shows projects drop-down.
22553
+ * Show drop-down if 'Create Function' screen was reached from 'Projects' screen. Otherwise - hide drop-down
22554
+ * @returns {boolean}
22555
+ */
22556
+ function isProjectsDropDownVisible() {
22557
+ return $state.current.name === 'app.create-function';
22558
+ }
22559
+
22560
+ //
22561
+ // Private methods
22562
+ //
22563
+
22564
+ /**
22565
+ * Checks if file imported from file system is YAML extension.
22566
+ * Example: 'filename.yml'
22567
+ * @returns {boolean}
22568
+ */
22569
+ function isYamlFile(filename) {
22570
+ return lodash.includes(filename, '.yml') || lodash.includes(filename, '.yaml');
22571
+ }
22572
+
22573
+ /**
22574
+ * Converts projects for project drop-down.
22575
+ */
22576
+ function prepareProjects() {
22577
+ var newProject = {
22578
+ id: 'new_project',
22579
+ name: $i18next.t('functions:NEW_PROJECT', {
22580
+ lng: lng
22581
+ })
22582
+ };
22583
+ ctrl.selectedProject = lodash.isNil(ctrl.selectedProject) ? newProject : ctrl.selectedProject;
22584
+ ctrl.projectsList = lodash.chain(ctrl.projects).map(function (project) {
22585
+ return {
22586
+ id: project.metadata.name,
22587
+ name: project.metadata.name
22588
+ };
22589
+ }).sortBy(['name']).value();
22590
+ ctrl.selectedProject = lodash.isEmpty(ctrl.projectsList) ? newProject : ctrl.selectedProject.id !== 'new_project' ? ctrl.selectedProject : /* else */lodash.first(ctrl.projectsList);
22591
+ }
22592
+ }
22593
+ })();
22594
+ "use strict";
22595
+
22596
+ /* eslint max-statements: ["error", 100] */
22597
+ (function () {
22598
+ 'use strict';
22599
+
22600
+ FunctionFromTemplateController.$inject = ["$element", "$window", "$scope", "$state", "$timeout", "$i18next", "i18next", "lodash", "ngDialog", "DialogsService", "FunctionsService", "ValidationService"];
22601
+ angular.module('iguazio.dashboard-controls').component('nclFunctionFromTemplate', {
22602
+ bindings: {
22603
+ project: '<',
22604
+ projects: '<',
22605
+ toggleSplashScreen: '&',
22606
+ getFunction: '&',
22607
+ getFunctionTemplates: '&',
22608
+ createNewProject: '<',
22609
+ renderTemplate: '&',
22397
22610
  selectedProject: '<'
22398
22611
  },
22399
22612
  templateUrl: 'nuclio/common/screens/create-function/function-from-template/function-from-template.tpl.html',
@@ -22706,322 +22919,92 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
22706
22919
  }
22707
22920
 
22708
22921
  /**
22709
- * Init data for pagination
22710
- */
22711
- function initPagination() {
22712
- ctrl.page = {
22713
- number: 0,
22714
- size: 8
22715
- };
22716
- paginateTemplates();
22717
- }
22718
-
22719
- /**
22720
- * Gets runtime filters
22721
- * @returns {Array.<{id: string, name: string, visible: boolean}>}
22722
- */
22723
- function getRuntimeFilters() {
22724
- return [{
22725
- id: 'all',
22726
- name: $i18next.t('common:ALL', {
22727
- lng: lng
22728
- }),
22729
- visible: true
22730
- }, {
22731
- id: 'golang',
22732
- name: 'Go',
22733
- visible: true
22734
- }, {
22735
- id: 'python:3.6',
22736
- name: 'Python 3.6 ' + $i18next.t('functions:DEPRECATED_SOON_LABEL', {
22737
- lng: lng
22738
- }),
22739
- nameTemplate: 'Python 3.6 ' + '<b>' + $i18next.t('functions:DEPRECATED_SOON_LABEL', {
22740
- lng: lng
22741
- }) + '</b>',
22742
- visible: true
22743
- }, {
22744
- id: 'python:3.7',
22745
- name: 'Python 3.7',
22746
- visible: true
22747
- }, {
22748
- id: 'python:3.8',
22749
- name: 'Python 3.8',
22750
- visible: true
22751
- }, {
22752
- id: 'python:3.9',
22753
- name: 'Python 3.9',
22754
- visible: true
22755
- }, {
22756
- id: 'dotnetcore',
22757
- name: '.NET Core ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22758
- lng: lng
22759
- }),
22760
- visible: true
22761
- }, {
22762
- id: 'java',
22763
- name: 'Java ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22764
- lng: lng
22765
- }),
22766
- visible: true
22767
- }, {
22768
- id: 'nodejs',
22769
- name: 'NodeJS ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22770
- lng: lng
22771
- }),
22772
- visible: true
22773
- }, {
22774
- id: 'shell',
22775
- name: 'Shell ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22776
- lng: lng
22777
- }),
22778
- visible: true
22779
- }];
22780
- }
22781
-
22782
- /**
22783
- * Paginates function's templates
22784
- */
22785
- function paginateTemplates() {
22786
- // amount of visible items on one page
22787
- var pageSize = $window.innerWidth > 1453 && $window.innerWidth < 1822 ? 9 : 8;
22788
- ctrl.templatesWorkingCopy = lodash.chain(templatesOriginalObject).filter(filterByRuntime).filter(filterByTitleAndDescription).thru(function (filteredTemplates) {
22789
- ctrl.page.total = Math.ceil(lodash.size(filteredTemplates) / pageSize);
22790
- return lodash.slice(filteredTemplates, ctrl.page.number * pageSize, ctrl.page.number * pageSize + pageSize);
22791
- }).keyBy(function (template) {
22792
- return template.rendered.metadata.name.split(':')[0] + ' (' + template.rendered.spec.runtime + ')';
22793
- }).value();
22794
- $timeout(setLastLineClass);
22795
- }
22796
-
22797
- /**
22798
- * Converts projects for project drop-down.
22799
- */
22800
- function prepareProjects() {
22801
- var newProject = {
22802
- id: 'new_project',
22803
- name: $i18next.t('functions:NEW_PROJECT', {
22804
- lng: lng
22805
- })
22806
- };
22807
- ctrl.selectedProject = lodash.isNil(ctrl.selectedProject) ? newProject : ctrl.selectedProject;
22808
- ctrl.projectsList = lodash.chain(ctrl.projects).map(function (project) {
22809
- return {
22810
- id: project.metadata.name,
22811
- name: project.metadata.name
22812
- };
22813
- }).sortBy(['name']).value();
22814
- ctrl.selectedProject = lodash.isEmpty(ctrl.projectsList) ? newProject : ctrl.selectedProject.id !== 'new_project' ? ctrl.selectedProject : lodash.first(ctrl.projectsList);
22815
- }
22816
-
22817
- /**
22818
- * Sets class `last-line` to elements from the last row of the templates list.
22819
- */
22820
- function setLastLineClass() {
22821
- var TEMPLATE_WIDTH = 368;
22822
- var templates = $element.find('.function-template-wrapper');
22823
- var templatesWrapper = $element.find('.templates-wrapper');
22824
- var elementsPerLine = Math.floor(parseInt(templatesWrapper.css('width')) / TEMPLATE_WIDTH);
22825
- var countLastLineElements = lodash.size(templates) % elementsPerLine || elementsPerLine;
22826
- var lastLineElements = lodash.takeRight(templates, countLastLineElements);
22827
- templates.removeClass('last-line');
22828
- angular.element(lastLineElements).addClass('last-line');
22829
- }
22830
-
22831
- /**
22832
- * Sets the flag to show `Read more...` in the end of template's description
22833
- * when it is bigger than template's block can contain.
22834
- * @param {Array} templates
22835
- */
22836
- function setReadMoreButtonsState(templates) {
22837
- var templatesElements = $element.find('.template-description');
22838
- lodash.forEach(templates, function (template) {
22839
- var description = lodash.get(template, 'rendered.spec.description');
22840
- var templateElement = lodash.find(templatesElements, ['innerHTML', description]);
22841
- lodash.set(template, 'ui.readMore', templateElement.scrollHeight > angular.element(templateElement).height());
22842
- });
22843
- }
22844
- }
22845
- })();
22846
- "use strict";
22847
-
22848
- (function () {
22849
- 'use strict';
22850
-
22851
- FunctionImportController.$inject = ["$document", "$rootScope", "$scope", "$state", "$timeout", "$i18next", "i18next", "YAML", "lodash", "DialogsService", "EventHelperService", "FunctionsService", "MaskService", "YamlService"];
22852
- angular.module('iguazio.dashboard-controls').component('nclFunctionImport', {
22853
- bindings: {
22854
- project: '<',
22855
- projects: '<',
22856
- getFunction: '&',
22857
- toggleSplashScreen: '&',
22858
- createNewProject: '<',
22859
- selectedProject: '<'
22860
- },
22861
- templateUrl: 'nuclio/common/screens/create-function/function-import/function-import.tpl.html',
22862
- controller: FunctionImportController
22863
- });
22864
- function FunctionImportController($document, $rootScope, $scope, $state, $timeout, $i18next, i18next, YAML, lodash, DialogsService, EventHelperService, FunctionsService, MaskService, YamlService) {
22865
- var ctrl = this;
22866
- var importedFunction = null;
22867
- var file = null;
22868
- var lng = i18next.language;
22869
- ctrl.functionImportForm = {};
22870
- ctrl.sourceCode = null;
22871
- ctrl.$onInit = onInit;
22872
- ctrl.$onChanges = onChanges;
22873
- ctrl.$onDestroy = onDestroy;
22874
- ctrl.createFunction = createFunction;
22875
- ctrl.importFunction = importFunction;
22876
- ctrl.isCreateFunctionAllowed = isCreateFunctionAllowed;
22877
- ctrl.isProjectsDropDownVisible = isProjectsDropDownVisible;
22878
- ctrl.onProjectChange = onProjectChange;
22879
-
22880
- //
22881
- // Hook methods
22882
- //
22883
-
22884
- /**
22885
- * Initialization function
22886
- * Adds event listener on file input and when some file is loaded call importFunction()
22887
- */
22888
- function onInit() {
22889
- $document.on('keypress', createFunction);
22890
- $document.find('.function-import-input').on('change', importFunction);
22891
- }
22892
-
22893
- /**
22894
- * Bindings changes hook
22895
- * @param {Object} changes - changed bindings
22896
- */
22897
- function onChanges(changes) {
22898
- if (angular.isDefined(changes.projects)) {
22899
- prepareProjects();
22900
- }
22901
- }
22902
-
22903
- /**
22904
- * Destructor method
22905
- */
22906
- function onDestroy() {
22907
- $document.off('keypress', createFunction);
22908
- }
22909
-
22910
- //
22911
- // Public methods
22912
- //
22913
-
22914
- /**
22915
- * Callback handler for 'create function' button
22916
- * Creates function with imported data.
22917
- */
22918
- function createFunction(event) {
22919
- $timeout(function () {
22920
- if ((angular.isUndefined(event) || event.keyCode === EventHelperService.ENTER) && ctrl.isCreateFunctionAllowed()) {
22921
- // create function only when imported file is .yml
22922
- if (isYamlFile(file.name)) {
22923
- ctrl.toggleSplashScreen({
22924
- value: true
22925
- });
22926
- ctrl.getFunction({
22927
- metadata: {
22928
- name: importedFunction.metadata.name
22929
- }
22930
- }).then(function (existingFunction) {
22931
- ctrl.toggleSplashScreen({
22932
- value: false
22933
- });
22934
- FunctionsService.openFunctionConflictDialog(ctrl.project, importedFunction, existingFunction);
22935
- }).catch(function (error) {
22936
- if (error.status === 404) {
22937
- ctrl.toggleSplashScreen({
22938
- value: true
22939
- });
22940
- lodash.defaults(importedFunction, {
22941
- metadata: {}
22942
- });
22943
- if (lodash.isEmpty(ctrl.project) && ctrl.selectedProject.id !== 'new_project') {
22944
- ctrl.project = lodash.find(ctrl.projects, ['metadata.name', ctrl.selectedProject.id]);
22945
- }
22946
- $state.go('app.project.function.edit.code', {
22947
- isNewFunction: true,
22948
- id: ctrl.project.metadata.name,
22949
- projectId: ctrl.project.metadata.name,
22950
- projectNamespace: ctrl.project.metadata.namespace,
22951
- functionId: importedFunction.metadata.name,
22952
- functionData: importedFunction
22953
- });
22954
- }
22955
- });
22956
- }
22957
- }
22958
- }, 100);
22959
- }
22960
-
22961
- /**
22962
- * Checks permissibility creation of new function.
22963
- * Checks if source code of function exists into ctrl.sourceCode, and if function import form is valid
22964
- * @returns {boolean}
22965
- */
22966
- function isCreateFunctionAllowed() {
22967
- return !lodash.isNil(ctrl.sourceCode) && lodash.isEmpty(ctrl.functionImportForm.$error);
22968
- }
22969
-
22970
- /**
22971
- * Import of selected YAML file from file system and parse it to JS object
22972
- * @param event
22973
- */
22974
- function importFunction(event) {
22975
- file = event.target.files[0];
22976
- var reader = new FileReader();
22977
- reader.onload = function () {
22978
- try {
22979
- importedFunction = YAML.parse(reader.result);
22980
- if (lodash.has(importedFunction, 'metadata.name')) {
22981
- ctrl.sourceCode = YamlService.prepareYamlObject(MaskService.getObjectWithMask(importedFunction));
22982
- $scope.$apply();
22983
- $rootScope.$broadcast('function-import-source-code', ctrl.sourceCode);
22984
- } else {
22985
- throw new Error('invalid yaml');
22986
- }
22987
- } catch (error) {
22988
- DialogsService.alert($i18next.t('common:ERROR_MSG.IMPORT_YAML_FILE', {
22989
- lng: lng
22990
- }));
22991
- }
22992
- };
22993
- reader.readAsText(file);
22994
- }
22995
-
22996
- /**
22997
- * Projects drop-down callback.
22998
- * Sets selected project to function.
22999
- * @param {Object} item - new selected project
22922
+ * Init data for pagination
23000
22923
  */
23001
- function onProjectChange(item) {
23002
- ctrl.project = lodash.find(ctrl.projects, ['metadata.name', item.id]);
22924
+ function initPagination() {
22925
+ ctrl.page = {
22926
+ number: 0,
22927
+ size: 8
22928
+ };
22929
+ paginateTemplates();
23003
22930
  }
23004
22931
 
23005
22932
  /**
23006
- * Hides or shows projects drop-down.
23007
- * Show drop-down if 'Create Function' screen was reached from 'Projects' screen. Otherwise - hide drop-down
23008
- * @returns {boolean}
22933
+ * Gets runtime filters
22934
+ * @returns {Array.<{id: string, name: string, visible: boolean}>}
23009
22935
  */
23010
- function isProjectsDropDownVisible() {
23011
- return $state.current.name === 'app.create-function';
22936
+ function getRuntimeFilters() {
22937
+ return [{
22938
+ id: 'all',
22939
+ name: $i18next.t('common:ALL', {
22940
+ lng: lng
22941
+ }),
22942
+ visible: true
22943
+ }, {
22944
+ id: 'golang',
22945
+ name: 'Go',
22946
+ visible: true
22947
+ }, {
22948
+ id: 'python:3.6',
22949
+ name: 'Python 3.6 ' + $i18next.t('functions:DEPRECATED_SOON_LABEL', {
22950
+ lng: lng
22951
+ }),
22952
+ nameTemplate: 'Python 3.6 ' + '<b>' + $i18next.t('functions:DEPRECATED_SOON_LABEL', {
22953
+ lng: lng
22954
+ }) + '</b>',
22955
+ visible: true
22956
+ }, {
22957
+ id: 'python:3.7',
22958
+ name: 'Python 3.7',
22959
+ visible: true
22960
+ }, {
22961
+ id: 'python:3.8',
22962
+ name: 'Python 3.8',
22963
+ visible: true
22964
+ }, {
22965
+ id: 'python:3.9',
22966
+ name: 'Python 3.9',
22967
+ visible: true
22968
+ }, {
22969
+ id: 'dotnetcore',
22970
+ name: '.NET Core ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22971
+ lng: lng
22972
+ }),
22973
+ visible: true
22974
+ }, {
22975
+ id: 'java',
22976
+ name: 'Java ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22977
+ lng: lng
22978
+ }),
22979
+ visible: true
22980
+ }, {
22981
+ id: 'nodejs',
22982
+ name: 'NodeJS ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22983
+ lng: lng
22984
+ }),
22985
+ visible: true
22986
+ }, {
22987
+ id: 'shell',
22988
+ name: 'Shell ' + $i18next.t('functions:TECH_PREVIEW_LABEL', {
22989
+ lng: lng
22990
+ }),
22991
+ visible: true
22992
+ }];
23012
22993
  }
23013
22994
 
23014
- //
23015
- // Private methods
23016
- //
23017
-
23018
22995
  /**
23019
- * Checks if file imported from file system is YAML extension.
23020
- * Example: 'filename.yml'
23021
- * @returns {boolean}
22996
+ * Paginates function's templates
23022
22997
  */
23023
- function isYamlFile(filename) {
23024
- return lodash.includes(filename, '.yml') || lodash.includes(filename, '.yaml');
22998
+ function paginateTemplates() {
22999
+ // amount of visible items on one page
23000
+ var pageSize = $window.innerWidth > 1453 && $window.innerWidth < 1822 ? 9 : 8;
23001
+ ctrl.templatesWorkingCopy = lodash.chain(templatesOriginalObject).filter(filterByRuntime).filter(filterByTitleAndDescription).thru(function (filteredTemplates) {
23002
+ ctrl.page.total = Math.ceil(lodash.size(filteredTemplates) / pageSize);
23003
+ return lodash.slice(filteredTemplates, ctrl.page.number * pageSize, ctrl.page.number * pageSize + pageSize);
23004
+ }).keyBy(function (template) {
23005
+ return template.rendered.metadata.name.split(':')[0] + ' (' + template.rendered.spec.runtime + ')';
23006
+ }).value();
23007
+ $timeout(setLastLineClass);
23025
23008
  }
23026
23009
 
23027
23010
  /**
@@ -23041,7 +23024,35 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
23041
23024
  name: project.metadata.name
23042
23025
  };
23043
23026
  }).sortBy(['name']).value();
23044
- ctrl.selectedProject = lodash.isEmpty(ctrl.projectsList) ? newProject : ctrl.selectedProject.id !== 'new_project' ? ctrl.selectedProject : /* else */lodash.first(ctrl.projectsList);
23027
+ ctrl.selectedProject = lodash.isEmpty(ctrl.projectsList) ? newProject : ctrl.selectedProject.id !== 'new_project' ? ctrl.selectedProject : lodash.first(ctrl.projectsList);
23028
+ }
23029
+
23030
+ /**
23031
+ * Sets class `last-line` to elements from the last row of the templates list.
23032
+ */
23033
+ function setLastLineClass() {
23034
+ var TEMPLATE_WIDTH = 368;
23035
+ var templates = $element.find('.function-template-wrapper');
23036
+ var templatesWrapper = $element.find('.templates-wrapper');
23037
+ var elementsPerLine = Math.floor(parseInt(templatesWrapper.css('width')) / TEMPLATE_WIDTH);
23038
+ var countLastLineElements = lodash.size(templates) % elementsPerLine || elementsPerLine;
23039
+ var lastLineElements = lodash.takeRight(templates, countLastLineElements);
23040
+ templates.removeClass('last-line');
23041
+ angular.element(lastLineElements).addClass('last-line');
23042
+ }
23043
+
23044
+ /**
23045
+ * Sets the flag to show `Read more...` in the end of template's description
23046
+ * when it is bigger than template's block can contain.
23047
+ * @param {Array} templates
23048
+ */
23049
+ function setReadMoreButtonsState(templates) {
23050
+ var templatesElements = $element.find('.template-description');
23051
+ lodash.forEach(templates, function (template) {
23052
+ var description = lodash.get(template, 'rendered.spec.description');
23053
+ var templateElement = lodash.find(templatesElements, ['innerHTML', description]);
23054
+ lodash.set(template, 'ui.readMore', templateElement.scrollHeight > angular.element(templateElement).height());
23055
+ });
23045
23056
  }
23046
23057
  }
23047
23058
  })();
@@ -24148,14 +24159,8 @@ try {
24148
24159
  module = angular.module('iguazio.dashboard-controls.templates', []);
24149
24160
  }
24150
24161
  module.run(['$templateCache', function($templateCache) {
24151
- $templateCache.put('igz_controls/components/more-info/more-info.tpl.html',
24152
- '<div class="more-info-wrapper"> <div data-ng-if="!$ctrl.isDefaultTooltipEnabled"> <div data-ng-class="{\n' +
24153
- ' \'click-trigger\': $ctrl.isClickMode(),\n' +
24154
- ' \'disabled\': $ctrl.isDisabled,\n' +
24155
- ' \'igz-icon-alert-message\': $ctrl.selectedIconType === $ctrl.iconTypes.WARN,\n' +
24156
- ' \'igz-icon-help-round\': $ctrl.selectedIconType === $ctrl.iconTypes.INFO,\n' +
24157
- ' \'open\': $ctrl.isDescriptionVisible\n' +
24158
- ' }" data-ng-click="$ctrl.handleQuestionMarkClick($event)" class="question-mark"> </div> <div class="row-description-wrapper"> <div class="row-description" data-ng-if="$ctrl.isHtmlEnabled" data-ng-class="$ctrl.defaultTooltipPlacement" data-ng-bind-html="$ctrl.compiledDescription"> </div> <div class="row-description" data-ng-if="!$ctrl.isHtmlEnabled" data-ng-class="$ctrl.defaultTooltipPlacement"> {{$ctrl.description}} </div> </div> </div> <div data-ng-if="$ctrl.isDefaultTooltipEnabled"> <div data-ng-if="!$ctrl.isHtmlEnabled" class="question-mark igz-icon-help-round" data-ng-class="{\'disabled\': $ctrl.isDisabled}" data-tooltip-class="more-info-tooltip" data-uib-tooltip="{{$ctrl.description}}" data-tooltip-is-open="{{$ctrl.isOpen}}" data-tooltip-placement="{{$ctrl.defaultTooltipPlacement}}" data-tooltip-popup-delay="{{$ctrl.defaultTooltipPopupDelay}}" data-tooltip-trigger="$ctrl.trigger" data-tooltip-append-to-body="true"> </div> <div data-ng-if="$ctrl.isHtmlEnabled" class="question-mark igz-icon-help-round" data-ng-class="{\'disabled\': $ctrl.isDisabled}" data-tooltip-class="more-info-tooltip" data-uib-tooltip-html="$ctrl.description" data-tooltip-is-open="{{$ctrl.isOpen}}" data-tooltip-placement="{{$ctrl.defaultTooltipPlacement}}" data-tooltip-popup-delay="{{$ctrl.defaultTooltipPopupDelay}}" data-tooltip-trigger="$ctrl.trigger" data-tooltip-append-to-body="true"> </div> </div> </div> ');
24162
+ $templateCache.put('igz_controls/components/import-project-dialog/import-project-dialog.tpl.html',
24163
+ '<div class="import-project-dialog">{{$ctrl.dialogTitle}}</div> <igz-multiple-checkboxes data-ng-model="$ctrl.option" data-options="$ctrl.optionList" data-ng-change="$ctrl.onCheckboxChange($event)" data-ng-required="true" data-base-id="import-project-option_"> </igz-multiple-checkboxes> <div class="buttons"> <button class="igz-button-just-text" data-ng-click="$ctrl.onClose(\'skip\')"> {{ \'functions:SKIP\' | i18next }} </button> <button class="igz-button-primary" data-ng-click="$ctrl.onClose(\'replace\')"> {{ \'functions:REPLACE\' | i18next }} </button> </div>');
24159
24164
  }]);
24160
24165
  })();
24161
24166
 
@@ -24166,8 +24171,14 @@ try {
24166
24171
  module = angular.module('iguazio.dashboard-controls.templates', []);
24167
24172
  }
24168
24173
  module.run(['$templateCache', function($templateCache) {
24169
- $templateCache.put('igz_controls/components/import-project-dialog/import-project-dialog.tpl.html',
24170
- '<div class="import-project-dialog">{{$ctrl.dialogTitle}}</div> <igz-multiple-checkboxes data-ng-model="$ctrl.option" data-options="$ctrl.optionList" data-ng-change="$ctrl.onCheckboxChange($event)" data-ng-required="true" data-base-id="import-project-option_"> </igz-multiple-checkboxes> <div class="buttons"> <button class="igz-button-just-text" data-ng-click="$ctrl.onClose(\'skip\')"> {{ \'functions:SKIP\' | i18next }} </button> <button class="igz-button-primary" data-ng-click="$ctrl.onClose(\'replace\')"> {{ \'functions:REPLACE\' | i18next }} </button> </div>');
24174
+ $templateCache.put('igz_controls/components/more-info/more-info.tpl.html',
24175
+ '<div class="more-info-wrapper"> <div data-ng-if="!$ctrl.isDefaultTooltipEnabled"> <div data-ng-class="{\n' +
24176
+ ' \'click-trigger\': $ctrl.isClickMode(),\n' +
24177
+ ' \'disabled\': $ctrl.isDisabled,\n' +
24178
+ ' \'igz-icon-alert-message\': $ctrl.selectedIconType === $ctrl.iconTypes.WARN,\n' +
24179
+ ' \'igz-icon-help-round\': $ctrl.selectedIconType === $ctrl.iconTypes.INFO,\n' +
24180
+ ' \'open\': $ctrl.isDescriptionVisible\n' +
24181
+ ' }" data-ng-click="$ctrl.handleQuestionMarkClick($event)" class="question-mark"> </div> <div class="row-description-wrapper"> <div class="row-description" data-ng-if="$ctrl.isHtmlEnabled" data-ng-class="$ctrl.defaultTooltipPlacement" data-ng-bind-html="$ctrl.compiledDescription"> </div> <div class="row-description" data-ng-if="!$ctrl.isHtmlEnabled" data-ng-class="$ctrl.defaultTooltipPlacement"> {{$ctrl.description}} </div> </div> </div> <div data-ng-if="$ctrl.isDefaultTooltipEnabled"> <div data-ng-if="!$ctrl.isHtmlEnabled" class="question-mark igz-icon-help-round" data-ng-class="{\'disabled\': $ctrl.isDisabled}" data-tooltip-class="more-info-tooltip" data-uib-tooltip="{{$ctrl.description}}" data-tooltip-is-open="{{$ctrl.isOpen}}" data-tooltip-placement="{{$ctrl.defaultTooltipPlacement}}" data-tooltip-popup-delay="{{$ctrl.defaultTooltipPopupDelay}}" data-tooltip-trigger="$ctrl.trigger" data-tooltip-append-to-body="true"> </div> <div data-ng-if="$ctrl.isHtmlEnabled" class="question-mark igz-icon-help-round" data-ng-class="{\'disabled\': $ctrl.isDisabled}" data-tooltip-class="more-info-tooltip" data-uib-tooltip-html="$ctrl.description" data-tooltip-is-open="{{$ctrl.isOpen}}" data-tooltip-placement="{{$ctrl.defaultTooltipPlacement}}" data-tooltip-popup-delay="{{$ctrl.defaultTooltipPopupDelay}}" data-tooltip-trigger="$ctrl.trigger" data-tooltip-append-to-body="true"> </div> </div> </div> ');
24171
24182
  }]);
24172
24183
  })();
24173
24184
 
@@ -24301,8 +24312,8 @@ try {
24301
24312
  module = angular.module('iguazio.dashboard-controls.templates', []);
24302
24313
  }
24303
24314
  module.run(['$templateCache', function($templateCache) {
24304
- $templateCache.put('igz_controls/components/text-edit/text-edit.tpl.html',
24305
- '<div class="text-preview-directive-wrapper"> <div class="title text-ellipsis" tooltip="{{::$ctrl.label}}" data-tooltip-append-to-body="true" data-tooltip-popup-delay="400" data-tooltip-placement="bottom-left"> {{::$ctrl.label}} </div> <div class="text-preview-wrapper"> <div class="word-wrap-checkbox-wrapper"> <div class="word-wrap-checkbox col-50 col-checkbox"> <input id="wrap-checkbox" type="checkbox" data-ng-model="$ctrl.enableWordWrap"> <label for="wrap-checkbox">{{ \'common:WRAP\' | i18next }}</label> </div> </div> <ncl-monaco class="monaco-code-editor" data-function-source-code="$ctrl.content" data-selected-theme="\'vs-light\'" data-language="$ctrl.language" data-on-change-source-code-callback="$ctrl.onChangeText(sourceCode)" data-word-wrap="$ctrl.enableWordWrap"> </ncl-monaco> </div> <div class="close-button igz-icon-close" data-ng-click="$ctrl.onClose()"></div> <div class="buttons"> <button class="igz-button-just-text" tabindex="0" data-ng-hide="$ctrl.isLoadingState" data-ng-click="$ctrl.onClose()" data-ng-keydown="$ctrl.onClose($event)" data-test-id="general.text-edit_close.button"> {{::$ctrl.closeButtonText}} </button> <button class="igz-button-primary" tabindex="0" data-ng-hide="$ctrl.isLoadingState" data-ng-class="{\'disabled\': !$ctrl.fileChanged}" data-ng-click="$ctrl.onSubmit()" data-test-id="general.text-edit_save.button"> {{::$ctrl.submitButtonText}} </button> <button class="igz-button-primary" data-ng-show="$ctrl.isLoadingState"> {{ \'common:LOADING_CAPITALIZE_ELLIPSIS\' | i18next }} </button> <button class="error-text text-centered error-relative" data-ng-hide="$ctrl.serverError === \'\'"> {{ \'common:ERROR_COLON\' | i18next }} {{$ctrl.serverError}} </button> </div> </div> ');
24315
+ $templateCache.put('igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
24316
+ '<div class="toast-status-panel" data-ng-show="$ctrl.isToastPanelShown"> <div class="btn-close igz-icon-close" data-ng-if="!$ctrl.permanent && $ctrl.panelState !== \'in-progress\'" data-ng-click="$ctrl.closeToastPanel()"> </div> <div class="panel-status"> <span class="panel-status-icon"></span> <span class="panel-status-msg">{{$ctrl.getStateMessage($ctrl.panelState)}}</span> </div> </div> ');
24306
24317
  }]);
24307
24318
  })();
24308
24319
 
@@ -24313,8 +24324,8 @@ try {
24313
24324
  module = angular.module('iguazio.dashboard-controls.templates', []);
24314
24325
  }
24315
24326
  module.run(['$templateCache', function($templateCache) {
24316
- $templateCache.put('igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
24317
- '<div class="toast-status-panel" data-ng-show="$ctrl.isToastPanelShown"> <div class="btn-close igz-icon-close" data-ng-if="!$ctrl.permanent && $ctrl.panelState !== \'in-progress\'" data-ng-click="$ctrl.closeToastPanel()"> </div> <div class="panel-status"> <span class="panel-status-icon"></span> <span class="panel-status-msg">{{$ctrl.getStateMessage($ctrl.panelState)}}</span> </div> </div> ');
24327
+ $templateCache.put('igz_controls/components/text-edit/text-edit.tpl.html',
24328
+ '<div class="text-preview-directive-wrapper"> <div class="title text-ellipsis" tooltip="{{::$ctrl.label}}" data-tooltip-append-to-body="true" data-tooltip-popup-delay="400" data-tooltip-placement="bottom-left"> {{::$ctrl.label}} </div> <div class="text-preview-wrapper"> <div class="word-wrap-checkbox-wrapper"> <div class="word-wrap-checkbox col-50 col-checkbox"> <input id="wrap-checkbox" type="checkbox" data-ng-model="$ctrl.enableWordWrap"> <label for="wrap-checkbox">{{ \'common:WRAP\' | i18next }}</label> </div> </div> <ncl-monaco class="monaco-code-editor" data-function-source-code="$ctrl.content" data-selected-theme="\'vs-light\'" data-language="$ctrl.language" data-on-change-source-code-callback="$ctrl.onChangeText(sourceCode)" data-word-wrap="$ctrl.enableWordWrap"> </ncl-monaco> </div> <div class="close-button igz-icon-close" data-ng-click="$ctrl.onClose()"></div> <div class="buttons"> <button class="igz-button-just-text" tabindex="0" data-ng-hide="$ctrl.isLoadingState" data-ng-click="$ctrl.onClose()" data-ng-keydown="$ctrl.onClose($event)" data-test-id="general.text-edit_close.button"> {{::$ctrl.closeButtonText}} </button> <button class="igz-button-primary" tabindex="0" data-ng-hide="$ctrl.isLoadingState" data-ng-class="{\'disabled\': !$ctrl.fileChanged}" data-ng-click="$ctrl.onSubmit()" data-test-id="general.text-edit_save.button"> {{::$ctrl.submitButtonText}} </button> <button class="igz-button-primary" data-ng-show="$ctrl.isLoadingState"> {{ \'common:LOADING_CAPITALIZE_ELLIPSIS\' | i18next }} </button> <button class="error-text text-centered error-relative" data-ng-hide="$ctrl.serverError === \'\'"> {{ \'common:ERROR_COLON\' | i18next }} {{$ctrl.serverError}} </button> </div> </div> ');
24318
24329
  }]);
24319
24330
  })();
24320
24331
 
@@ -24489,8 +24500,8 @@ try {
24489
24500
  module = angular.module('iguazio.dashboard-controls.templates', []);
24490
24501
  }
24491
24502
  module.run(['$templateCache', function($templateCache) {
24492
- $templateCache.put('igz_controls/components/info-page/info-page-actions-bar/info-page-actions-bar.tpl.html',
24493
- '<div class="igz-info-page-actions-bar" data-ng-class="{\'filters-opened\' : $ctrl.isFiltersShowed, \'info-pane-opened\' : $ctrl.isInfoPaneShowed, \'upper-pane-opened\' : $ctrl.isUpperPaneShowed}"> <div data-ng-transclude></div> </div>');
24503
+ $templateCache.put('igz_controls/components/info-page/info-page-content/info-page-content.tpl.html',
24504
+ '<div class="igz-info-page-content-wrapper" data-ng-class="{\'info-pane-opened\' : $ctrl.isInfoPaneShowed, \'filters-opened\' : $ctrl.isFiltersShowed, \'upper-pane-opened\' : $ctrl.isUpperPaneShowed}"> <div data-ng-if="$ctrl.scrolled !== false" class="igz-scrollable-container horizontal" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfigHorizontal"> <div class="igz-info-page-content"> <div data-ng-transclude></div> </div> </div> <div data-ng-if="$ctrl.scrolled === false"> <div class="igz-info-page-content"> <div data-ng-transclude></div> </div> </div> </div>');
24494
24505
  }]);
24495
24506
  })();
24496
24507
 
@@ -24501,8 +24512,8 @@ try {
24501
24512
  module = angular.module('iguazio.dashboard-controls.templates', []);
24502
24513
  }
24503
24514
  module.run(['$templateCache', function($templateCache) {
24504
- $templateCache.put('igz_controls/components/info-page/info-page-content/info-page-content.tpl.html',
24505
- '<div class="igz-info-page-content-wrapper" data-ng-class="{\'info-pane-opened\' : $ctrl.isInfoPaneShowed, \'filters-opened\' : $ctrl.isFiltersShowed, \'upper-pane-opened\' : $ctrl.isUpperPaneShowed}"> <div data-ng-if="$ctrl.scrolled !== false" class="igz-scrollable-container horizontal" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfigHorizontal"> <div class="igz-info-page-content"> <div data-ng-transclude></div> </div> </div> <div data-ng-if="$ctrl.scrolled === false"> <div class="igz-info-page-content"> <div data-ng-transclude></div> </div> </div> </div>');
24515
+ $templateCache.put('igz_controls/components/info-page/info-page-filters/info-page-filters.tpl.html',
24516
+ '<div class="info-page-filters-wrapper"> <div class="info-page-filters" data-ng-show="$ctrl.isFiltersShowed" data-ng-keyup="$ctrl.onApplyFilters($event)"> <div class="info-page-filters-title">{{ \'common:FILTER\' | i18next }}</div> <div class="close-button igz-icon-close" data-ng-click="$ctrl.changeStateCallback({newVal: false})" data-ng-show="$ctrl.changeStateCallback"> </div> <div class="info-page-filters-body" data-ng-class="{\'buttons-shown\' : $ctrl.isShowFooterButtons()}" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollbarConfig"> <div data-ng-transclude></div> </div> <div class="info-page-filters-footer" data-ng-if="$ctrl.isShowFooterButtons()"> <button class="igz-button-just-text" tabindex="0" data-ng-click="$ctrl.onResetFilters()" data-ng-keydown="$ctrl.onResetFilters($event)" data-ng-disabled="$ctrl.isDisabled" data-ng-if="$ctrl.resetFilters">{{ \'common:RESET\' | i18next }} </button> <button class="igz-button-primary" tabindex="0" data-ng-click="$ctrl.onApplyFilters()" data-ng-keydown="$ctrl.onApplyFilters($event)" data-ng-disabled="$ctrl.isDisabled" data-ng-if="$ctrl.applyFilters">{{ \'common:APPLY\' | i18next }} </button> </div> </div> </div> ');
24506
24517
  }]);
24507
24518
  })();
24508
24519
 
@@ -24513,8 +24524,8 @@ try {
24513
24524
  module = angular.module('iguazio.dashboard-controls.templates', []);
24514
24525
  }
24515
24526
  module.run(['$templateCache', function($templateCache) {
24516
- $templateCache.put('igz_controls/components/info-page/info-page-filters/info-page-filters.tpl.html',
24517
- '<div class="info-page-filters-wrapper"> <div class="info-page-filters" data-ng-show="$ctrl.isFiltersShowed" data-ng-keyup="$ctrl.onApplyFilters($event)"> <div class="info-page-filters-title">{{ \'common:FILTER\' | i18next }}</div> <div class="close-button igz-icon-close" data-ng-click="$ctrl.changeStateCallback({newVal: false})" data-ng-show="$ctrl.changeStateCallback"> </div> <div class="info-page-filters-body" data-ng-class="{\'buttons-shown\' : $ctrl.isShowFooterButtons()}" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollbarConfig"> <div data-ng-transclude></div> </div> <div class="info-page-filters-footer" data-ng-if="$ctrl.isShowFooterButtons()"> <button class="igz-button-just-text" tabindex="0" data-ng-click="$ctrl.onResetFilters()" data-ng-keydown="$ctrl.onResetFilters($event)" data-ng-disabled="$ctrl.isDisabled" data-ng-if="$ctrl.resetFilters">{{ \'common:RESET\' | i18next }} </button> <button class="igz-button-primary" tabindex="0" data-ng-click="$ctrl.onApplyFilters()" data-ng-keydown="$ctrl.onApplyFilters($event)" data-ng-disabled="$ctrl.isDisabled" data-ng-if="$ctrl.applyFilters">{{ \'common:APPLY\' | i18next }} </button> </div> </div> </div> ');
24527
+ $templateCache.put('igz_controls/components/info-page/info-page-actions-bar/info-page-actions-bar.tpl.html',
24528
+ '<div class="igz-info-page-actions-bar" data-ng-class="{\'filters-opened\' : $ctrl.isFiltersShowed, \'info-pane-opened\' : $ctrl.isInfoPaneShowed, \'upper-pane-opened\' : $ctrl.isUpperPaneShowed}"> <div data-ng-transclude></div> </div>');
24518
24529
  }]);
24519
24530
  })();
24520
24531
 
@@ -24562,8 +24573,8 @@ try {
24562
24573
  module = angular.module('iguazio.dashboard-controls.templates', []);
24563
24574
  }
24564
24575
  module.run(['$templateCache', function($templateCache) {
24565
- $templateCache.put('nuclio/common/components/function-config-dialog/function-config-dialog.tpl.html',
24566
- '<div class="view-yaml-dialog-container"> <div class="view-yaml-dialog-header"> <div class="title">{{ $ctrl.title }}</div> <igz-copy-to-clipboard data-value="$ctrl.sourceCode"></igz-copy-to-clipboard> <div class="close-button igz-icon-close" data-ng-click="$ctrl.closeDialog()"></div> </div> <div class="main-content"> <ncl-monaco class="monaco-code-editor" data-function-source-code="$ctrl.sourceCode" data-mini-monaco="false" data-selected-theme="\'vs-light\'" data-language="\'yaml\'" data-read-only="true"> </ncl-monaco> </div> <div class="buttons"> <button class="igz-button-primary" tabindex="0" data-ng-click="$ctrl.closeDialog()"> {{ \'common:CLOSE\' | i18next }} </button> </div> </div> ');
24576
+ $templateCache.put('nuclio/common/components/deploy-log/deploy-log.tpl.html',
24577
+ '<div class="ncl-deploy-log-wrapper"> <div class="log-panel igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="log-entry" data-ng-if="$ctrl.lodash.isArray($ctrl.logEntries)" data-ng-repeat="log in $ctrl.logEntries track by $index"> <span class="log-entry-time" data-ng-if="log.time">[{{log.time | date:\'HH:mm:ss.sss\'}}]</span> <span class="log-entry-level-{{log.level}}" data-ng-if="log.level">&nbsp;({{$ctrl.getLogLevel(log.level)}})</span> <span class="log-entry-message">&nbsp;{{log.message}}</span> <span class="log-entry-error" data-ng-if="log.err">&nbsp;{{log.err}}</span> <span class="log-entry-params">&nbsp;{{$ctrl.getLogParams(log)}}</span> </div> <div class="log-entry" data-ng-if="!$ctrl.lodash.isArray($ctrl.logEntries)"> {{$ctrl.logEntries}} </div> </div> </div> ');
24567
24578
  }]);
24568
24579
  })();
24569
24580
 
@@ -24574,8 +24585,9 @@ try {
24574
24585
  module = angular.module('iguazio.dashboard-controls.templates', []);
24575
24586
  }
24576
24587
  module.run(['$templateCache', function($templateCache) {
24577
- $templateCache.put('nuclio/common/components/deploy-log/deploy-log.tpl.html',
24578
- '<div class="ncl-deploy-log-wrapper"> <div class="log-panel igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="log-entry" data-ng-if="$ctrl.lodash.isArray($ctrl.logEntries)" data-ng-repeat="log in $ctrl.logEntries track by $index"> <span class="log-entry-time" data-ng-if="log.time">[{{log.time | date:\'HH:mm:ss.sss\'}}]</span> <span class="log-entry-level-{{log.level}}" data-ng-if="log.level">&nbsp;({{$ctrl.getLogLevel(log.level)}})</span> <span class="log-entry-message">&nbsp;{{log.message}}</span> <span class="log-entry-error" data-ng-if="log.err">&nbsp;{{log.err}}</span> <span class="log-entry-params">&nbsp;{{$ctrl.getLogParams(log)}}</span> </div> <div class="log-entry" data-ng-if="!$ctrl.lodash.isArray($ctrl.logEntries)"> {{$ctrl.logEntries}} </div> </div> </div> ');
24588
+ $templateCache.put('nuclio/common/components/edit-item/edit-item.tpl.html',
24589
+ '<div class="ncl-edit-item" data-ng-keydown="$ctrl.onSubmitForm($event)"> <form name="$ctrl.editItemForm" novalidate autocomplete="off"> <div class="igz-row title-field-row"> <div class="igz-col-20 name-field"> <igz-validating-input-field data-field-type="input" data-input-name="itemName" data-input-value="$ctrl.getItemName()" data-is-focused="true" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules.itemName" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="name" autocomplete="off"> </igz-validating-input-field> <div class="error" data-ng-show="$ctrl.isShowFieldInvalidState($ctrl.editItemForm, \'itemName\') &&\n' +
24590
+ ' $ctrl.isShowFieldError($ctrl.editItemForm, \'itemName\', \'required\')"> {{ \'common:NAME_IS_REQUIRED\' | i18next }} </div> </div> <div class="igz-col-12-5 class-field"> <igz-default-dropdown data-select-property-only="id" data-input-name="itemClass" data-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder="{{ $ctrl.classPlaceholder }}" data-prevent-drop-up="true" data-values-array="$ctrl.classList" data-selected-item="$ctrl.selectedClass.id" data-form-object="$ctrl.editItemForm" data-item-select-callback="$ctrl.onSelectClass(item)" data-enable-overlap="true"> </igz-default-dropdown> </div> <div class="igz-col-65 tooltip-wrapper" data-ng-if="$ctrl.isSelectedClassMoreInfoVisible()"> <igz-more-info data-description="{{$ctrl.getSelectedClassMoreInfo()}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> </div> <div class="igz-row" data-ng-if="$ctrl.isNil($ctrl.selectedClass.id)"> <div class="igz-col-100 no-class-selected">{{ $ctrl.classPlaceholder }}</div> </div> <div class="igz-row" data-ng-if="!$ctrl.isNil($ctrl.selectedClass.id)"> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.mountPath)"> <div class="field-label"> <span class="asterisk">{{ \'functions:MOUNT_PATH\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:MOUNT_PATH_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="itemPath" data-input-value="$ctrl.item.volumeMount.mountPath" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules.itemPath" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_MOUNT_PATH\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volumeMount.mountPath" data-auto-complete="off"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.accessKey)"> <div class="field-label"> <span class="asterisk">{{ \'functions:ACCESS_KEY\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:ACCESS_KEY_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="password" data-input-name="secretRef" data-input-value="$ctrl.item.volume.flexVolume.options.accessKey" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_ACCESS_KEY\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.flexVolume.options.accessKey" data-auto-complete="current-password"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.container)"> <div class="field-label"> <span>{{ \'functions:CONTAINER_NAME\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:CONTAINER_NAME_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="containerName" data-input-value="$ctrl.item.volume.flexVolume.options.container" data-is-focused="false" data-read-only="$ctrl.readOnly" data-form-object="$ctrl.editItemForm" data-validation-rules="$ctrl.validationRules.containerName" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_CONTAINER_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.flexVolume.options.container" data-auto-complete="off"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.subPath)"> <div class="field-label"> <span>{{ \'common:PATH\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:PATH_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="containerSubPath" data-input-value="$ctrl.item.volume.flexVolume.options.subPath" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="false" data-read-only="$ctrl.readOnly" data-validation-max-length="{{$ctrl.maxLengths.containerSubPath}}" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_PATH_IN_CONTAINER\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.flexVolume.options.subPath" data-auto-complete="off"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.hostPath.path)"> <div class="field-label"> <span class="asterisk">{{ \'common:HOST_PATH\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="hostPath" data-input-value="$ctrl.item.volume.hostPath.path" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'common:PLACEHOLDER.ENTER_HOST_PATH\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.hostPath.path"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.readOnly)"> <input type="checkbox" id="{{$ctrl.getItemName()}}" data-ng-model="$ctrl.item.volumeMount.readOnly"> <label for="{{$ctrl.getItemName()}}">{{ \'common:READ_ONLY\' | i18next }}</label> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.secret.secretName)"> <div class="field-label"> <span class="asterisk">{{ \'functions:SECRET_NAME\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="secretName" data-input-value="$ctrl.item.volume.secret.secretName" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_SECRET_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.secret.secretName"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.configMap.name)"> <div class="field-label"> <span class="asterisk">{{ \'functions:CONFIG_MAP_NAME\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="configMap" data-input-value="$ctrl.item.volume.configMap.name" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_CONFIG_MAP_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.configMap.name"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.persistentVolumeClaim.claimName)"> <div class="field-label text-ellipsis"> <span class="asterisk">{{ \'functions:PERSISTENT_VOLUME_CLAIM_NAME\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="persistentVolumeClaim" data-input-value="$ctrl.item.volume.persistentVolumeClaim.claimName" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_PERSISTENT_VOLUME_CLAIM_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.persistentVolumeClaim.claimName"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field brokers-wrapper" data-ng-if="$ctrl.isKafkaTrigger()"> <div class="field-label asterisk">{{ \'functions:BROKERS\' | i18next }}</div> <div> <div class="table-body" data-ng-repeat="broker in $ctrl.brokers"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="broker" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-no-delete="$ctrl.brokers.length <= 1" data-item-index="$index" data-only-value-input="true" data-action-handler-callback="$ctrl.handleBrokerAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-broker-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewBroker($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:ADD_BROKER\' | i18next }} </div> </div> <div class="igz-col-45 attribute-field topics-wrapper" data-ng-if="$ctrl.isKafkaTrigger()"> <div class="field-label asterisk">{{ \'functions:TOPICS\' | i18next }}</div> <div> <div class="table-body" data-ng-repeat="topic in $ctrl.topics"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="topic" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-no-delete="$ctrl.topics.length <= 1" data-item-index="$index" data-only-value-input="true" data-action-handler-callback="$ctrl.handleTopicAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-topic-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewTopic($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:ADD_TOPIC\' | i18next }} </div> </div> <div class="igz-col-{{field.fieldType === \'schedule\' ? \'91\' : \'45\'}} attribute-field" data-ng-repeat="field in $ctrl.selectedClass.fields | filter:$ctrl.isFieldVisible() track by field.name"> <ncl-edit-item-field data-edit-item-form="$ctrl.editItemForm" data-field="field" data-item="$ctrl.item" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules" data-input-value-callback="$ctrl.inputValueCallback(newData, field)" data-number-input-callback="$ctrl.numberInputCallback(newData, field)" data-on-select-dropdown-value="$ctrl.onSelectDropdownValue(item, field)"> </ncl-edit-item-field> </div> <div class="igz-col-91 attribute-field ingresses-wrapper" data-ng-if="$ctrl.isHttpTrigger()"> <div class="field-label">{{ \'functions:INGRESSES_HOSTS\' | i18next }}</div> <div data-ng-if="$ctrl.ingresses.length > 0" class="table-headers ingresses-table-headers"> <div class="host-header asterisk">{{ \'functions:HOST\' | i18next }}</div> <div class="paths-header asterisk">{{ \'common:PATH\' | i18next }}</div> <div class="secret-header">{{ \'functions:SECRET\' | i18next }}</div> </div> <div class="igz-scrollable-container scrollable-ingresses" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="ingress in $ctrl.ingresses"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="ingress" data-use-type="false" data-use-additional-value="true" data-additional-value-optional="true" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-validation-rules="$ctrl.validationRules.host" data-action-handler-callback="$ctrl.handleIngressAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-ingress-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewIngress($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_HOST\' | i18next }} </div> </div> <div class="igz-col-91 attribute-field annotations-wrapper" data-ng-if="$ctrl.isHttpTrigger()"> <div class="field-label">{{ \'functions:ANNOTATIONS\' | i18next }}</div> <div data-ng-if="$ctrl.annotations.length > 0" class="table-headers"> <div class="key-header">{{ \'common:KEY\' | i18next }}</div> <div class="value-header">{{ \'common:VALUE\' | i18next }}</div> </div> <div class="igz-scrollable-container scrollable-annotations" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="annotation in $ctrl.annotations"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="annotation" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-action-handler-callback="$ctrl.handleAnnotationAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-annotation-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewAnnotation($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ANNOTATION\' | i18next }} </div> </div> <div class="igz-col-91 attribute-field event-headers-wrapper" data-ng-if="$ctrl.isCronTrigger()"> <div class="field-label">{{ \'functions:EVENT_HEADERS\' | i18next }}</div> <div data-ng-if="$ctrl.eventHeaders.length > 0" class="table-headers"> <div class="key-header">{{ \'common:KEY\' | i18next }}</div> <div class="value-header">{{ \'common:VALUE\' | i18next }}</div> </div> <div class="igz-scrollable-container scrollable-event-headers" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="header in $ctrl.eventHeaders"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="header" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-action-handler-callback="$ctrl.handleEventHeaderAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-event-header" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewEventHeader($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_EVENT_HEADER\' | i18next }} </div> </div> <div class="igz-col-91 attribute-field subscriptions-wrapper" data-ng-if="$ctrl.isMqttTrigger()"> <div class="field-label">{{ \'functions:SUBSCRIPTIONS\' | i18next }}</div> <div data-ng-if="$ctrl.subscriptions.length > 0" class="table-headers"> <div class="key-header">{{ \'functions:TOPIC\' | i18next }}</div> <div class="value-header">{{ \'functions:QOS\' | i18next }}</div> </div> <div> <div class="table-body" data-ng-repeat="subscription in $ctrl.subscriptions"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-key-optional="false" data-row-data="subscription" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-validation-rules="$ctrl.validationRules.subscriptionQoS" data-value-placeholder="0, 1 or 2" data-action-handler-callback="$ctrl.handleSubscriptionAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-subscription-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewSubscription($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_SUBSCRIPTION\' | i18next }} </div> </div> <div class="advanced-section igz-col-100" data-ng-if="$ctrl.isAdvancedVisible"> <div class="collapsed-block-title" data-ng-click="$ctrl.isAdvancedCollapsed = !$ctrl.isAdvancedCollapsed" data-ng-class="{\'collapsed\': $ctrl.isAdvancedCollapsed}"> <span class="igz-icon-down icon-collapsed" data-ng-if="!$ctrl.isAdvancedCollapsed"></span> <span class="igz-icon-right icon-collapsed" data-ng-if="$ctrl.isAdvancedCollapsed"></span> {{ \'common:ADVANCED\' | i18next }} </div> <div class="collapsed-block-content-wrapper" data-uib-collapse="$ctrl.isAdvancedCollapsed"> <div class="igz-col-{{field.fieldType === \'schedule\' ? \'91\' : \'45\'}} attribute-field" data-ng-repeat="field in $ctrl.selectedClass.fields | filter:$ctrl.isFieldVisible(true) track by field.name"> <ncl-edit-item-field data-edit-item-form="$ctrl.editItemForm" data-field="field" data-item="$ctrl.item" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules" data-input-value-callback="$ctrl.inputValueCallback(newData, field)" data-number-input-callback="$ctrl.numberInputCallback(newData, field)" data-on-select-dropdown-value="$ctrl.onSelectDropdownValue(item, field)"> </ncl-edit-item-field> </div> </div> </div> </div> </form> </div> ');
24579
24591
  }]);
24580
24592
  })();
24581
24593
 
@@ -24586,9 +24598,8 @@ try {
24586
24598
  module = angular.module('iguazio.dashboard-controls.templates', []);
24587
24599
  }
24588
24600
  module.run(['$templateCache', function($templateCache) {
24589
- $templateCache.put('nuclio/common/components/edit-item/edit-item.tpl.html',
24590
- '<div class="ncl-edit-item" data-ng-keydown="$ctrl.onSubmitForm($event)"> <form name="$ctrl.editItemForm" novalidate autocomplete="off"> <div class="igz-row title-field-row"> <div class="igz-col-20 name-field"> <igz-validating-input-field data-field-type="input" data-input-name="itemName" data-input-value="$ctrl.getItemName()" data-is-focused="true" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules.itemName" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="name" autocomplete="off"> </igz-validating-input-field> <div class="error" data-ng-show="$ctrl.isShowFieldInvalidState($ctrl.editItemForm, \'itemName\') &&\n' +
24591
- ' $ctrl.isShowFieldError($ctrl.editItemForm, \'itemName\', \'required\')"> {{ \'common:NAME_IS_REQUIRED\' | i18next }} </div> </div> <div class="igz-col-12-5 class-field"> <igz-default-dropdown data-select-property-only="id" data-input-name="itemClass" data-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder="{{ $ctrl.classPlaceholder }}" data-prevent-drop-up="true" data-values-array="$ctrl.classList" data-selected-item="$ctrl.selectedClass.id" data-form-object="$ctrl.editItemForm" data-item-select-callback="$ctrl.onSelectClass(item)" data-enable-overlap="true"> </igz-default-dropdown> </div> <div class="igz-col-65 tooltip-wrapper" data-ng-if="$ctrl.isSelectedClassMoreInfoVisible()"> <igz-more-info data-description="{{$ctrl.getSelectedClassMoreInfo()}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> </div> <div class="igz-row" data-ng-if="$ctrl.isNil($ctrl.selectedClass.id)"> <div class="igz-col-100 no-class-selected">{{ $ctrl.classPlaceholder }}</div> </div> <div class="igz-row" data-ng-if="!$ctrl.isNil($ctrl.selectedClass.id)"> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.mountPath)"> <div class="field-label"> <span class="asterisk">{{ \'functions:MOUNT_PATH\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:MOUNT_PATH_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="itemPath" data-input-value="$ctrl.item.volumeMount.mountPath" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules.itemPath" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_MOUNT_PATH\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volumeMount.mountPath" data-auto-complete="off"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.accessKey)"> <div class="field-label"> <span class="asterisk">{{ \'functions:ACCESS_KEY\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:ACCESS_KEY_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="password" data-input-name="secretRef" data-input-value="$ctrl.item.volume.flexVolume.options.accessKey" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_ACCESS_KEY\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.flexVolume.options.accessKey" data-auto-complete="current-password"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.container)"> <div class="field-label"> <span>{{ \'functions:CONTAINER_NAME\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:CONTAINER_NAME_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="containerName" data-input-value="$ctrl.item.volume.flexVolume.options.container" data-is-focused="false" data-read-only="$ctrl.readOnly" data-form-object="$ctrl.editItemForm" data-validation-rules="$ctrl.validationRules.containerName" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_CONTAINER_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.flexVolume.options.container" data-auto-complete="off"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.subPath)"> <div class="field-label"> <span>{{ \'common:PATH\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:PATH_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="containerSubPath" data-input-value="$ctrl.item.volume.flexVolume.options.subPath" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="false" data-read-only="$ctrl.readOnly" data-validation-max-length="{{$ctrl.maxLengths.containerSubPath}}" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_PATH_IN_CONTAINER\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.flexVolume.options.subPath" data-auto-complete="off"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.hostPath.path)"> <div class="field-label"> <span class="asterisk">{{ \'common:HOST_PATH\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="hostPath" data-input-value="$ctrl.item.volume.hostPath.path" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'common:PLACEHOLDER.ENTER_HOST_PATH\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.hostPath.path"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.readOnly)"> <input type="checkbox" id="{{$ctrl.getItemName()}}" data-ng-model="$ctrl.item.volumeMount.readOnly"> <label for="{{$ctrl.getItemName()}}">{{ \'common:READ_ONLY\' | i18next }}</label> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.secret.secretName)"> <div class="field-label"> <span class="asterisk">{{ \'functions:SECRET_NAME\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="secretName" data-input-value="$ctrl.item.volume.secret.secretName" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_SECRET_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.secret.secretName"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.configMap.name)"> <div class="field-label"> <span class="asterisk">{{ \'functions:CONFIG_MAP_NAME\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="configMap" data-input-value="$ctrl.item.volume.configMap.name" data-is-focused="false" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_CONFIG_MAP_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.configMap.name"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field" data-ng-if="!$ctrl.isNil($ctrl.item.volume.persistentVolumeClaim.claimName)"> <div class="field-label text-ellipsis"> <span class="asterisk">{{ \'functions:PERSISTENT_VOLUME_CLAIM_NAME\' | i18next }}</span> </div> <igz-validating-input-field data-field-type="input" data-input-name="persistentVolumeClaim" data-input-value="$ctrl.item.volume.persistentVolumeClaim.claimName" data-form-object="$ctrl.editItemForm" data-validation-is-required="true" data-read-only="$ctrl.readOnly" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_PERSISTENT_VOLUME_CLAIM_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="volume.persistentVolumeClaim.claimName"> </igz-validating-input-field> </div> <div class="igz-col-45 attribute-field brokers-wrapper" data-ng-if="$ctrl.isKafkaTrigger()"> <div class="field-label asterisk">{{ \'functions:BROKERS\' | i18next }}</div> <div> <div class="table-body" data-ng-repeat="broker in $ctrl.brokers"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="broker" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-no-delete="$ctrl.brokers.length <= 1" data-item-index="$index" data-only-value-input="true" data-action-handler-callback="$ctrl.handleBrokerAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-broker-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewBroker($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:ADD_BROKER\' | i18next }} </div> </div> <div class="igz-col-45 attribute-field topics-wrapper" data-ng-if="$ctrl.isKafkaTrigger()"> <div class="field-label asterisk">{{ \'functions:TOPICS\' | i18next }}</div> <div> <div class="table-body" data-ng-repeat="topic in $ctrl.topics"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="topic" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-no-delete="$ctrl.topics.length <= 1" data-item-index="$index" data-only-value-input="true" data-action-handler-callback="$ctrl.handleTopicAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-topic-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewTopic($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:ADD_TOPIC\' | i18next }} </div> </div> <div class="igz-col-{{field.fieldType === \'schedule\' ? \'91\' : \'45\'}} attribute-field" data-ng-repeat="field in $ctrl.selectedClass.fields | filter:$ctrl.isFieldVisible() track by field.name"> <ncl-edit-item-field data-edit-item-form="$ctrl.editItemForm" data-field="field" data-item="$ctrl.item" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules" data-input-value-callback="$ctrl.inputValueCallback(newData, field)" data-number-input-callback="$ctrl.numberInputCallback(newData, field)" data-on-select-dropdown-value="$ctrl.onSelectDropdownValue(item, field)"> </ncl-edit-item-field> </div> <div class="igz-col-91 attribute-field ingresses-wrapper" data-ng-if="$ctrl.isHttpTrigger()"> <div class="field-label">{{ \'functions:INGRESSES_HOSTS\' | i18next }}</div> <div data-ng-if="$ctrl.ingresses.length > 0" class="table-headers ingresses-table-headers"> <div class="host-header asterisk">{{ \'functions:HOST\' | i18next }}</div> <div class="paths-header asterisk">{{ \'common:PATH\' | i18next }}</div> <div class="secret-header">{{ \'functions:SECRET\' | i18next }}</div> </div> <div class="igz-scrollable-container scrollable-ingresses" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="ingress in $ctrl.ingresses"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="ingress" data-use-type="false" data-use-additional-value="true" data-additional-value-optional="true" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-validation-rules="$ctrl.validationRules.host" data-action-handler-callback="$ctrl.handleIngressAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-ingress-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewIngress($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_HOST\' | i18next }} </div> </div> <div class="igz-col-91 attribute-field annotations-wrapper" data-ng-if="$ctrl.isHttpTrigger()"> <div class="field-label">{{ \'functions:ANNOTATIONS\' | i18next }}</div> <div data-ng-if="$ctrl.annotations.length > 0" class="table-headers"> <div class="key-header">{{ \'common:KEY\' | i18next }}</div> <div class="value-header">{{ \'common:VALUE\' | i18next }}</div> </div> <div class="igz-scrollable-container scrollable-annotations" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="annotation in $ctrl.annotations"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="annotation" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-action-handler-callback="$ctrl.handleAnnotationAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-annotation-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewAnnotation($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ANNOTATION\' | i18next }} </div> </div> <div class="igz-col-91 attribute-field event-headers-wrapper" data-ng-if="$ctrl.isCronTrigger()"> <div class="field-label">{{ \'functions:EVENT_HEADERS\' | i18next }}</div> <div data-ng-if="$ctrl.eventHeaders.length > 0" class="table-headers"> <div class="key-header">{{ \'common:KEY\' | i18next }}</div> <div class="value-header">{{ \'common:VALUE\' | i18next }}</div> </div> <div class="igz-scrollable-container scrollable-event-headers" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="header in $ctrl.eventHeaders"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-row-data="header" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-action-handler-callback="$ctrl.handleEventHeaderAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-event-header" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewEventHeader($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_EVENT_HEADER\' | i18next }} </div> </div> <div class="igz-col-91 attribute-field subscriptions-wrapper" data-ng-if="$ctrl.isMqttTrigger()"> <div class="field-label">{{ \'functions:SUBSCRIPTIONS\' | i18next }}</div> <div data-ng-if="$ctrl.subscriptions.length > 0" class="table-headers"> <div class="key-header">{{ \'functions:TOPIC\' | i18next }}</div> <div class="value-header">{{ \'functions:QOS\' | i18next }}</div> </div> <div> <div class="table-body" data-ng-repeat="subscription in $ctrl.subscriptions"> <ncl-key-value-input class="new-label-input" data-change-state-broadcast="change-state-deploy-button" data-key-optional="false" data-row-data="subscription" data-use-type="false" data-submit-on-fly="true" data-is-disabled="$ctrl.readOnly" data-item-index="$index" data-validation-rules="$ctrl.validationRules.subscriptionQoS" data-value-placeholder="0, 1 or 2" data-action-handler-callback="$ctrl.handleSubscriptionAction(actionType, index)" data-change-data-callback="$ctrl.onChangeKeyValueData(newData, index)"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-subscription-button" data-ng-class="{\'disabled\': $ctrl.readOnly}" data-ng-click="$ctrl.addNewSubscription($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_SUBSCRIPTION\' | i18next }} </div> </div> <div class="advanced-section igz-col-100" data-ng-if="$ctrl.isAdvancedVisible"> <div class="collapsed-block-title" data-ng-click="$ctrl.isAdvancedCollapsed = !$ctrl.isAdvancedCollapsed" data-ng-class="{\'collapsed\': $ctrl.isAdvancedCollapsed}"> <span class="igz-icon-down icon-collapsed" data-ng-if="!$ctrl.isAdvancedCollapsed"></span> <span class="igz-icon-right icon-collapsed" data-ng-if="$ctrl.isAdvancedCollapsed"></span> {{ \'common:ADVANCED\' | i18next }} </div> <div class="collapsed-block-content-wrapper" data-uib-collapse="$ctrl.isAdvancedCollapsed"> <div class="igz-col-{{field.fieldType === \'schedule\' ? \'91\' : \'45\'}} attribute-field" data-ng-repeat="field in $ctrl.selectedClass.fields | filter:$ctrl.isFieldVisible(true) track by field.name"> <ncl-edit-item-field data-edit-item-form="$ctrl.editItemForm" data-field="field" data-item="$ctrl.item" data-read-only="$ctrl.readOnly" data-validation-rules="$ctrl.validationRules" data-input-value-callback="$ctrl.inputValueCallback(newData, field)" data-number-input-callback="$ctrl.numberInputCallback(newData, field)" data-on-select-dropdown-value="$ctrl.onSelectDropdownValue(item, field)"> </ncl-edit-item-field> </div> </div> </div> </div> </form> </div> ');
24601
+ $templateCache.put('nuclio/common/components/function-config-dialog/function-config-dialog.tpl.html',
24602
+ '<div class="view-yaml-dialog-container"> <div class="view-yaml-dialog-header"> <div class="title">{{ $ctrl.title }}</div> <igz-copy-to-clipboard data-value="$ctrl.sourceCode"></igz-copy-to-clipboard> <div class="close-button igz-icon-close" data-ng-click="$ctrl.closeDialog()"></div> </div> <div class="main-content"> <ncl-monaco class="monaco-code-editor" data-function-source-code="$ctrl.sourceCode" data-mini-monaco="false" data-selected-theme="\'vs-light\'" data-language="\'yaml\'" data-read-only="true"> </ncl-monaco> </div> <div class="buttons"> <button class="igz-button-primary" tabindex="0" data-ng-click="$ctrl.closeDialog()"> {{ \'common:CLOSE\' | i18next }} </button> </div> </div> ');
24592
24603
  }]);
24593
24604
  })();
24594
24605
 
@@ -24683,6 +24694,18 @@ module.run(['$templateCache', function($templateCache) {
24683
24694
  }]);
24684
24695
  })();
24685
24696
 
24697
+ (function(module) {
24698
+ try {
24699
+ module = angular.module('iguazio.dashboard-controls.templates');
24700
+ } catch (e) {
24701
+ module = angular.module('iguazio.dashboard-controls.templates', []);
24702
+ }
24703
+ module.run(['$templateCache', function($templateCache) {
24704
+ $templateCache.put('nuclio/functions/version/version-configuration/version-configuration.tpl.html',
24705
+ '<div class="ncl-version-configuration ncl-version" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="ncl-version-configuration-wrapper"> <div class="row"> <ncl-version-configuration-basic-settings class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-basic-settings> <ncl-version-configuration-resources class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-resources> </div> <div class="row"> <ncl-version-configuration-environment-variables class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-environment-variables> </div> <div class="row"> <ncl-version-configuration-labels class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-labels> <ncl-version-configuration-annotations class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-annotations> </div> <div class="row"> <ncl-version-configuration-volumes class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback()"> </ncl-version-configuration-volumes> <ncl-version-configuration-build class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-build> </div> <div class="row"> <ncl-version-configuration-logging data-ng-if="false" class="configuration-block" data-version="$ctrl.version" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-logging> <ncl-version-configuration-runtime-attributes data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block runtime-attributes" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-runtime-attributes> <div data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block invisible"></div> </div> </div> </div> </div> ');
24706
+ }]);
24707
+ })();
24708
+
24686
24709
  (function(module) {
24687
24710
  try {
24688
24711
  module = angular.module('iguazio.dashboard-controls.templates');
@@ -24714,8 +24737,8 @@ try {
24714
24737
  module = angular.module('iguazio.dashboard-controls.templates', []);
24715
24738
  }
24716
24739
  module.run(['$templateCache', function($templateCache) {
24717
- $templateCache.put('nuclio/functions/version/version-configuration/version-configuration.tpl.html',
24718
- '<div class="ncl-version-configuration ncl-version" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="ncl-version-configuration-wrapper"> <div class="row"> <ncl-version-configuration-basic-settings class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-basic-settings> <ncl-version-configuration-resources class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-resources> </div> <div class="row"> <ncl-version-configuration-environment-variables class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-environment-variables> </div> <div class="row"> <ncl-version-configuration-labels class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-labels> <ncl-version-configuration-annotations class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-annotations> </div> <div class="row"> <ncl-version-configuration-volumes class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback()"> </ncl-version-configuration-volumes> <ncl-version-configuration-build class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-build> </div> <div class="row"> <ncl-version-configuration-logging data-ng-if="false" class="configuration-block" data-version="$ctrl.version" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-logging> <ncl-version-configuration-runtime-attributes data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block runtime-attributes" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-runtime-attributes> <div data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block invisible"></div> </div> </div> </div> </div> ');
24740
+ $templateCache.put('nuclio/functions/version/version-triggers/version-triggers.tpl.html',
24741
+ '<div class="ncl-version-trigger ncl-version"> <div class="common-table"> <div class="content-message-pane" data-ng-if="$ctrl.isHttpTriggerMsgShown()" data-ng-i18next="[html]functions:HTTP_TRIGGER_MSG"> </div> <div class="common-table-header header-row"> <div class="common-table-cell header-name"> {{ \'common:NAME\' | i18next }} </div> <div class="common-table-cell header-class"> {{ \'common:CLASS\' | i18next }} </div> <div class="igz-col-70 common-table-cell"> {{ \'common:INFO\' | i18next }} </div> </div> <div class="content-message-pane" data-ng-if="$ctrl.triggers.length === 0"> {{ \'functions:TRIGGERS_NOT_FOUND\' | i18next }} </div> <div class="common-table-body" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <ncl-collapsing-row data-ng-repeat="trigger in $ctrl.triggers track by trigger.name" data-item="trigger" data-type="trigger" data-read-only="$ctrl.isFunctionDeploying()" data-delete-test-id="functions.triggers_delete.button" data-action-handler-callback="$ctrl.handleAction(actionType, selectedItem)"> <ncl-edit-item class="common-table-cells-container edit-trigger-row" data-item="trigger" data-class-list="$ctrl.classList" data-type="trigger" data-read-only="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.validationRules" data-default-fields="$ctrl.defaultFields" data-on-select-class-callback="$ctrl.checkClassUniqueness()" data-on-submit-callback="$ctrl.editTriggerCallback(item)"> </ncl-edit-item> </ncl-collapsing-row> <div class="common-table-row create-trigger-button igz-create-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-if="$ctrl.isCreateNewTriggerEnabled()" data-ng-click="$ctrl.createTrigger($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_TRIGGER\' | i18next }} </div> </div> </div> </div> </div> ');
24719
24742
  }]);
24720
24743
  })();
24721
24744
 
@@ -24731,18 +24754,6 @@ module.run(['$templateCache', function($templateCache) {
24731
24754
  }]);
24732
24755
  })();
24733
24756
 
24734
- (function(module) {
24735
- try {
24736
- module = angular.module('iguazio.dashboard-controls.templates');
24737
- } catch (e) {
24738
- module = angular.module('iguazio.dashboard-controls.templates', []);
24739
- }
24740
- module.run(['$templateCache', function($templateCache) {
24741
- $templateCache.put('nuclio/functions/version/version-triggers/version-triggers.tpl.html',
24742
- '<div class="ncl-version-trigger ncl-version"> <div class="common-table"> <div class="content-message-pane" data-ng-if="$ctrl.isHttpTriggerMsgShown()" data-ng-i18next="[html]functions:HTTP_TRIGGER_MSG"> </div> <div class="common-table-header header-row"> <div class="common-table-cell header-name"> {{ \'common:NAME\' | i18next }} </div> <div class="common-table-cell header-class"> {{ \'common:CLASS\' | i18next }} </div> <div class="igz-col-70 common-table-cell"> {{ \'common:INFO\' | i18next }} </div> </div> <div class="content-message-pane" data-ng-if="$ctrl.triggers.length === 0"> {{ \'functions:TRIGGERS_NOT_FOUND\' | i18next }} </div> <div class="common-table-body" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <ncl-collapsing-row data-ng-repeat="trigger in $ctrl.triggers track by trigger.name" data-item="trigger" data-type="trigger" data-read-only="$ctrl.isFunctionDeploying()" data-delete-test-id="functions.triggers_delete.button" data-action-handler-callback="$ctrl.handleAction(actionType, selectedItem)"> <ncl-edit-item class="common-table-cells-container edit-trigger-row" data-item="trigger" data-class-list="$ctrl.classList" data-type="trigger" data-read-only="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.validationRules" data-default-fields="$ctrl.defaultFields" data-on-select-class-callback="$ctrl.checkClassUniqueness()" data-on-submit-callback="$ctrl.editTriggerCallback(item)"> </ncl-edit-item> </ncl-collapsing-row> <div class="common-table-row create-trigger-button igz-create-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-if="$ctrl.isCreateNewTriggerEnabled()" data-ng-click="$ctrl.createTrigger($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_TRIGGER\' | i18next }} </div> </div> </div> </div> </div> ');
24743
- }]);
24744
- })();
24745
-
24746
24757
  (function(module) {
24747
24758
  try {
24748
24759
  module = angular.module('iguazio.dashboard-controls.templates');
@@ -24786,8 +24797,8 @@ try {
24786
24797
  module = angular.module('iguazio.dashboard-controls.templates', []);
24787
24798
  }
24788
24799
  module.run(['$templateCache', function($templateCache) {
24789
- $templateCache.put('nuclio/common/screens/create-function/function-from-template/function-from-template.tpl.html',
24790
- '<div class="function-from-template-content"> <div class="templates-wrapper"> <span class="title"> {{ \'functions:CHOOSE_TEMPLATE\' | i18next }} </span> <div class="templates-controls"> <div class="templates-search-input"> <div class="igz-icon-search search-icon"></div> <input class="input-field field" tabindex="0" data-ng-model="$ctrl.searchQuery" data-ng-change="$ctrl.onChangeSearchQuery()" placeholder="{{ \'functions:PLACEHOLDER.SEARCH_TEMPLATE\' | i18next }}" data-igz-input-blur-on-enter> </div> <div class="templates-runtime-drop-down"> <span class="input-label"> {{ \'functions:RUNTIME\' | i18next }} </span> <igz-default-dropdown data-values-array="$ctrl.runtimeFilters" data-selected-item="$ctrl.selectedRuntimeFilter" data-item-select-callback="$ctrl.onRuntimeFilterChange(item, isItemChanged)"> </igz-default-dropdown> </div> <div class="templates-pagination"> <igz-pagination data-page-data="$ctrl.page" data-is-per-page-visible="true" data-pagination-callback="$ctrl.paginationCallback(page)"> </igz-pagination> </div> </div> <div class="function-templates"> <form name="$ctrl.functionFromTemplateForm" class="function-templates-form" novalidate> <div class="function-template-wrapper" data-ng-repeat="(key, value) in $ctrl.templatesWorkingCopy track by $index" data-ng-class="{\'selected\': $ctrl.isTemplateSelected(key)}" data-ng-click="$ctrl.selectTemplate(key)"> <div class="function-template"> <div data-ng-show="!$ctrl.isTemplateSelected(key)" class="function-template-content"> <div class="template-title">{{key}}</div> <div class="template-description">{{value.rendered.spec.description}}</div> <div data-ng-if="value.ui.readMore" class="template-read-more"> {{ \'common:READ_MORE\' | i18next }}... </div> </div> <div data-ng-show="$ctrl.isTemplateSelected(key)" class="function-template-content"> <ng-form name="templateForm{{$index}}"> <div data-ng-if="$ctrl.isProjectsDropDownVisible()" class="projects-drop-down"> <span class="input-label asterisk"> {{ \'common:PROJECT\' | i18next }} </span> <igz-default-dropdown data-is-required="true" data-values-array="$ctrl.projectsList" data-selected-item="$ctrl.selectedProject" data-item-select-callback="$ctrl.onProjectChange(item, isItemChanged)" data-form-object="$ctrl.functionFromTemplateForm[\'templateForm\' + $index]" data-input-name="project"> <div class="transcluded-item" data-ng-click="$ctrl.createNewProject()"> {{ \'functions:NEW_PROJECT\' | i18next }} </div> </igz-default-dropdown> </div> <div class="function-name"> <span class="input-label asterisk"> {{ \'common:NAME\' | i18next }} </span> <igz-validating-input-field data-field-type="input" data-input-name="function-name-{{$index}}" data-input-value="$ctrl.functionName" data-form-object="$ctrl.functionFromTemplateForm[\'templateForm\' + $index]" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.functionName" data-validation-max-length="{{$ctrl.maxLengths.functionName}}" data-input-model-options="$ctrl.inputModelOptions" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_FUNCTION_NAME\' | i18next }}..."> </igz-validating-input-field> </div> <div class="buttons-wrapper"> <button class="ncl-secondary-button igz-button-just-text" data-ng-click="$ctrl.unselectTemplate($event)"> {{ \'common:CANCEL\' | i18next }} </button> <button class="ncl-primary-button igz-button-primary" data-ng-click="$ctrl.createFunction()" data-ng-class="{\'disabled\': !$ctrl.isCreateFunctionAllowed()}"> {{ \'common:CREATE\' | i18next }} </button> </div> </ng-form> </div> </div> </div> </form> </div> </div> </div> ');
24800
+ $templateCache.put('nuclio/common/screens/create-function/function-import/function-import.tpl.html',
24801
+ '<div class="function-import-wrapper-content"> <form name="$ctrl.functionImportForm" class="function-import-form" novalidate> <div class="projects-drop-down" data-ng-if="$ctrl.isProjectsDropDownVisible()"> <span class="input-label"> {{ \'functions:PROJECT\' | i18next }}* </span> <igz-default-dropdown data-is-required="true" data-values-array="$ctrl.projectsList" data-selected-item="$ctrl.selectedProject" data-item-select-callback="$ctrl.onProjectChange(item, isItemChanged)" data-form-object="$ctrl.functionImportForm" data-input-name="project"> <div class="transcluded-item" data-ng-click="$ctrl.createNewProject()"> {{ \'functions:NEW_PROJECT\' | i18next }} </div> </igz-default-dropdown> </div> <div class="function-import-actions-bar"> <div class="function-import-file-picker"> <label class="file-picker-wrapper ncl-primary-button igz-button-secondary" for="function-import"> <span class="igz-icon-upload"></span> {{ \'functions:IMPORT\' | i18next }} </label> <input class="function-import-input" type="file" id="function-import" accept=".yml, .yaml"> </div> <button class="ncl-primary-button igz-button-primary" data-ng-click="$ctrl.createFunction()" data-ng-disabled="!$ctrl.isCreateFunctionAllowed()" data-ng-class="{\'disabled\': !$ctrl.isCreateFunctionAllowed()}"> {{ \'common:CREATE\' | i18next }} </button> </div> </form> <div class="function-import-monaco"> <ncl-monaco class="monaco-code-editor" data-function-source-code="$ctrl.sourceCode" data-mini-monaco="false" data-selected-theme="\'vs-light\'" data-language="\'yaml\'" data-read-only="true"> </ncl-monaco> </div> </div> ');
24791
24802
  }]);
24792
24803
  })();
24793
24804
 
@@ -24798,8 +24809,8 @@ try {
24798
24809
  module = angular.module('iguazio.dashboard-controls.templates', []);
24799
24810
  }
24800
24811
  module.run(['$templateCache', function($templateCache) {
24801
- $templateCache.put('nuclio/common/screens/create-function/function-import/function-import.tpl.html',
24802
- '<div class="function-import-wrapper-content"> <form name="$ctrl.functionImportForm" class="function-import-form" novalidate> <div class="projects-drop-down" data-ng-if="$ctrl.isProjectsDropDownVisible()"> <span class="input-label"> {{ \'functions:PROJECT\' | i18next }}* </span> <igz-default-dropdown data-is-required="true" data-values-array="$ctrl.projectsList" data-selected-item="$ctrl.selectedProject" data-item-select-callback="$ctrl.onProjectChange(item, isItemChanged)" data-form-object="$ctrl.functionImportForm" data-input-name="project"> <div class="transcluded-item" data-ng-click="$ctrl.createNewProject()"> {{ \'functions:NEW_PROJECT\' | i18next }} </div> </igz-default-dropdown> </div> <div class="function-import-actions-bar"> <div class="function-import-file-picker"> <label class="file-picker-wrapper ncl-primary-button igz-button-secondary" for="function-import"> <span class="igz-icon-upload"></span> {{ \'functions:IMPORT\' | i18next }} </label> <input class="function-import-input" type="file" id="function-import" accept=".yml, .yaml"> </div> <button class="ncl-primary-button igz-button-primary" data-ng-click="$ctrl.createFunction()" data-ng-disabled="!$ctrl.isCreateFunctionAllowed()" data-ng-class="{\'disabled\': !$ctrl.isCreateFunctionAllowed()}"> {{ \'common:CREATE\' | i18next }} </button> </div> </form> <div class="function-import-monaco"> <ncl-monaco class="monaco-code-editor" data-function-source-code="$ctrl.sourceCode" data-mini-monaco="false" data-selected-theme="\'vs-light\'" data-language="\'yaml\'" data-read-only="true"> </ncl-monaco> </div> </div> ');
24812
+ $templateCache.put('nuclio/common/screens/create-function/function-from-template/function-from-template.tpl.html',
24813
+ '<div class="function-from-template-content"> <div class="templates-wrapper"> <span class="title"> {{ \'functions:CHOOSE_TEMPLATE\' | i18next }} </span> <div class="templates-controls"> <div class="templates-search-input"> <div class="igz-icon-search search-icon"></div> <input class="input-field field" tabindex="0" data-ng-model="$ctrl.searchQuery" data-ng-change="$ctrl.onChangeSearchQuery()" placeholder="{{ \'functions:PLACEHOLDER.SEARCH_TEMPLATE\' | i18next }}" data-igz-input-blur-on-enter> </div> <div class="templates-runtime-drop-down"> <span class="input-label"> {{ \'functions:RUNTIME\' | i18next }} </span> <igz-default-dropdown data-values-array="$ctrl.runtimeFilters" data-selected-item="$ctrl.selectedRuntimeFilter" data-item-select-callback="$ctrl.onRuntimeFilterChange(item, isItemChanged)"> </igz-default-dropdown> </div> <div class="templates-pagination"> <igz-pagination data-page-data="$ctrl.page" data-is-per-page-visible="true" data-pagination-callback="$ctrl.paginationCallback(page)"> </igz-pagination> </div> </div> <div class="function-templates"> <form name="$ctrl.functionFromTemplateForm" class="function-templates-form" novalidate> <div class="function-template-wrapper" data-ng-repeat="(key, value) in $ctrl.templatesWorkingCopy track by $index" data-ng-class="{\'selected\': $ctrl.isTemplateSelected(key)}" data-ng-click="$ctrl.selectTemplate(key)"> <div class="function-template"> <div data-ng-show="!$ctrl.isTemplateSelected(key)" class="function-template-content"> <div class="template-title">{{key}}</div> <div class="template-description">{{value.rendered.spec.description}}</div> <div data-ng-if="value.ui.readMore" class="template-read-more"> {{ \'common:READ_MORE\' | i18next }}... </div> </div> <div data-ng-show="$ctrl.isTemplateSelected(key)" class="function-template-content"> <ng-form name="templateForm{{$index}}"> <div data-ng-if="$ctrl.isProjectsDropDownVisible()" class="projects-drop-down"> <span class="input-label asterisk"> {{ \'common:PROJECT\' | i18next }} </span> <igz-default-dropdown data-is-required="true" data-values-array="$ctrl.projectsList" data-selected-item="$ctrl.selectedProject" data-item-select-callback="$ctrl.onProjectChange(item, isItemChanged)" data-form-object="$ctrl.functionFromTemplateForm[\'templateForm\' + $index]" data-input-name="project"> <div class="transcluded-item" data-ng-click="$ctrl.createNewProject()"> {{ \'functions:NEW_PROJECT\' | i18next }} </div> </igz-default-dropdown> </div> <div class="function-name"> <span class="input-label asterisk"> {{ \'common:NAME\' | i18next }} </span> <igz-validating-input-field data-field-type="input" data-input-name="function-name-{{$index}}" data-input-value="$ctrl.functionName" data-form-object="$ctrl.functionFromTemplateForm[\'templateForm\' + $index]" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.functionName" data-validation-max-length="{{$ctrl.maxLengths.functionName}}" data-input-model-options="$ctrl.inputModelOptions" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_FUNCTION_NAME\' | i18next }}..."> </igz-validating-input-field> </div> <div class="buttons-wrapper"> <button class="ncl-secondary-button igz-button-just-text" data-ng-click="$ctrl.unselectTemplate($event)"> {{ \'common:CANCEL\' | i18next }} </button> <button class="ncl-primary-button igz-button-primary" data-ng-click="$ctrl.createFunction()" data-ng-class="{\'disabled\': !$ctrl.isCreateFunctionAllowed()}"> {{ \'common:CREATE\' | i18next }} </button> </div> </ng-form> </div> </div> </div> </form> </div> </div> </div> ');
24803
24814
  }]);
24804
24815
  })();
24805
24816
 
@@ -24837,8 +24848,8 @@ try {
24837
24848
  module = angular.module('iguazio.dashboard-controls.templates', []);
24838
24849
  }
24839
24850
  module.run(['$templateCache', function($templateCache) {
24840
- $templateCache.put('nuclio/functions/version/version-code/function-event-pane/test-events-logs/test-events-logs.tpl.html',
24841
- '<div class="ncl-test-events-logs"> <div class="functional-buttons" data-ng-if="$ctrl.logs.length > 0"> <div class="ncl-icon-expand-all" data-ng-click="$ctrl.expandAllRows(true)" data-uib-tooltip="{{ \'functions:EXPAND_ALL\' | i18next }}" data-tooltip-popup-delay="300" data-tooltip-placement="left" data-tooltip-append-to-body="true"> </div> <div class="ncl-icon-collapse-all" data-ng-click="$ctrl.expandAllRows(false)" data-uib-tooltip="{{ \'functions:COLLAPSE_ALL\' | i18next }}" data-tooltip-popup-delay="300" data-tooltip-placement="left" data-tooltip-append-to-body="true"> </div> </div> <div data-ng-repeat="log in $ctrl.logs track by $index"> <div class="collapsed-row text-ellipsis" data-ng-if="log.ui.collapsed"> <span class="igz-icon-right" data-ng-click="$ctrl.collapseRow(log, false)"></span> <div class="level-icon {{$ctrl.getLevelIconClass(log)}}"></div> <span class="date">{{log.time | date: "EEE, MMM d, yyyy, HH:mm:ss\'GMT\'" : "+0000"}}</span> <div class="message text-ellipsis">{{log.message}}</div> <div class="ncl-icon-parameters" data-ng-if="$ctrl.hasAdditionalParameters(log)"></div> </div> <div class="expanded-row" data-ng-if="!log.ui.collapsed"> <div class="header"> <span class="igz-icon-down" data-ng-click="$ctrl.collapseRow(log, true)"></span> <div class="level-icon {{$ctrl.getLevelIconClass(log)}}"></div> <span class="date">{{log.time | date: "EEE, MMM d, yyyy, HH:mm:ss\'GMT\'" : "+0000"}}</span> <div class="ncl-icon-parameters" data-ng-if="$ctrl.hasAdditionalParameters(log)"></div> </div> <div class="expanded-body"> <div class="message">{{log.message}}</div> <div class="error" data-ng-if="log.err">{{log.err}}</div> <div class="parameters" data-ng-if="$ctrl.hasAdditionalParameters(log)"> <span class="parameters-header"> {{ \'common:PARAMETERS\' | i18next }} </span> <div data-ng-repeat="(key, value) in $ctrl.getParameters(log)"> <div class="text-ellipsis labels">{{key}}:</div> <div class="text-ellipsis values">{{value}}</div> </div> </div> </div> </div> </div> <div class="no-logs" data-ng-if="$ctrl.logs.length === 0"> {{ \'functions:NO_LOGS_HAVE_BEEN_FOUND\' | i18next }} </div> </div> ');
24851
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-annotations/version-configuration-annotations.tpl.html',
24852
+ '<div class="ncl-version-configuration-annotations"> <div class="title"> <span>{{ \'functions:ANNOTATIONS\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.tooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <form name="$ctrl.annotationsForm" class="annotations-wrapper" novalidate> <div data-ng-if="$ctrl.annotations.length > 0" class="table-headers"> <div class="key-header"> {{ \'common:KEY\' | i18next }} <igz-more-info data-description="{{$ctrl.keyTooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="value-header"> {{ \'common:VALUE\' | i18next }} </div> </div> <div class="igz-scrollable-container scrollable-annotations" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="annotation in $ctrl.annotations"> <ncl-key-value-input class="new-label-input" data-row-data="annotation" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-index="$index" data-validation-rules="$ctrl.validationRules" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-annotation-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewAnnotation($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ANNOTATION\' | i18next }} </div> </form> </div> ');
24842
24853
  }]);
24843
24854
  })();
24844
24855
 
@@ -24849,8 +24860,8 @@ try {
24849
24860
  module = angular.module('iguazio.dashboard-controls.templates', []);
24850
24861
  }
24851
24862
  module.run(['$templateCache', function($templateCache) {
24852
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-annotations/version-configuration-annotations.tpl.html',
24853
- '<div class="ncl-version-configuration-annotations"> <div class="title"> <span>{{ \'functions:ANNOTATIONS\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.tooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <form name="$ctrl.annotationsForm" class="annotations-wrapper" novalidate> <div data-ng-if="$ctrl.annotations.length > 0" class="table-headers"> <div class="key-header"> {{ \'common:KEY\' | i18next }} <igz-more-info data-description="{{$ctrl.keyTooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="value-header"> {{ \'common:VALUE\' | i18next }} </div> </div> <div class="igz-scrollable-container scrollable-annotations" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="annotation in $ctrl.annotations"> <ncl-key-value-input class="new-label-input" data-row-data="annotation" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-index="$index" data-validation-rules="$ctrl.validationRules" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-annotation-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewAnnotation($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ANNOTATION\' | i18next }} </div> </form> </div> ');
24863
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-basic-settings/version-configuration-basic-settings.tpl.html',
24864
+ '<div class="ncl-version-configuration-basic-settings"> <div class="title">{{ \'common:BASIC_SETTINGS\' | i18next }}</div> <form name="$ctrl.basicSettingsForm" class="basic-settings-wrapper" novalidate> <div class="row enable-checkbox"> <input type="checkbox" class="small" id="enable" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableFunction" data-ng-change="$ctrl.updateEnableStatus()"> <label for="enable" class="checkbox-inline">{{ \'common:ENABLED\' | i18next }}</label> </div> <div class="row" data-ng-if="$ctrl.isDemoMode()"> <div class="timeout-block"> <div class="label"> <div class="timeout-checkbox"> <input type="checkbox" class="small" id="timeout" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableTimeout"> <label for="timeout" class="checkbox-inline">{{ \'functions:TIMEOUT\' | i18next }}</label> </div> </div> <div class="timeout-values"> <div class="inputs"> <igz-validating-input-field data-field-type="input" data-input-name="min" data-input-value="$ctrl.timeout.min" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.min" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'common:MIN\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'common:MIN\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="sec" data-input-value="$ctrl.timeout.sec" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.sec" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'functions:SEC\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'functions:SEC\' | i18next }}</div> </div> </div> </div> </div> <div class="row"> <div class="description-block"> <div class="label">{{ \'common:DESCRIPTION\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="description" data-input-value="$ctrl.version.spec.description" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.description" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESCRIPTION\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="account-block"> <div class="label">{{ \'functions:SERVICE_ACCOUNT\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="serviceAccount" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.serviceAccount" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.serviceAccount" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.MY_SERVICE_ACCOUNT\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="run-as-user-block"> <div class="label" data-ng-class="{asterisk: $ctrl.version.spec.securityContext.runAsGroup}"> {{ \'common:RUN_AS_USER\' | i18next }} </div> <igz-number-input data-allow-empty-field="true" data-validation-is-required="$ctrl.lodash.isNumber($ctrl.version.spec.securityContext.runAsGroup)" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_user" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsUser" data-current-value="$ctrl.version.spec.securityContext.runAsUser"> </igz-number-input> </div> <div class="run-as-group-block"> <div class="label">{{ \'common:RUN_AS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsGroup" data-current-value="$ctrl.version.spec.securityContext.runAsGroup"> </igz-number-input> </div> <div class="fs-group-block" data-ng-if="!$ctrl.platformIsKube"> <div class="label">{{ \'common:FS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="fs_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.fsGroup" data-current-value="$ctrl.version.spec.securityContext.fsGroup"> </igz-number-input> </div> </div> <div class="row"> <div class="logger-block"> <div class="logger-dropdown"> <span class="label">{{ \'functions:LOGGER_LEVEL\' | i18next }}</span> <igz-default-dropdown data-selected-item="$ctrl.version.spec.loggerSinks[0].level" data-select-property-only="id" data-values-array="$ctrl.logLevelValues" data-item-select-callback="$ctrl.setPriority(item)" data-read-only="$ctrl.isFunctionDeploying()" data-enable-overlap="true" data-prevent-drop-up="true"> </igz-default-dropdown> </div> <div class="logger-input" data-ng-if="$ctrl.isDemoMode()"> <span class="label">{{ \'functions:LOGGER_DESTINATION\' | i18next }}</span> <igz-validating-input-field data-field-type="input" data-input-name="arguments" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.loggerSinks[0].sink" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.loggerSinks[0].sink" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESTINATION\' | i18next }}"> </igz-validating-input-field> </div> </div> </div> </form> </div> ');
24854
24865
  }]);
24855
24866
  })();
24856
24867
 
@@ -24861,8 +24872,8 @@ try {
24861
24872
  module = angular.module('iguazio.dashboard-controls.templates', []);
24862
24873
  }
24863
24874
  module.run(['$templateCache', function($templateCache) {
24864
- $templateCache.put('nuclio/functions/version/version-code/function-event-pane/test-events-navigation-tabs/test-events-navigation-tabs.tpl.html',
24865
- '<div class="ncl-test-events-navigation-tabs"> <div class="test-events-navigation-tab" data-ng-repeat="item in $ctrl.tabItems" data-ng-click="$ctrl.changeActiveTab(item)" data-ng-class="{\'active\': $ctrl.isActiveTab(item)}"> {{item.tabName | uppercase}} <span class="badge" data-ng-if="item.badge">{{item.badge}}</span> </div> <igz-default-dropdown data-ng-if="$ctrl.selectedLogLevel" data-values-array="$ctrl.logLevelValues" data-select-property-only="id" data-selected-item="$ctrl.selectedLogLevel" data-item-select-callback="$ctrl.onChangeLogLevel({selectedLogLevel: item})" data-enable-overlap="true"> </igz-default-dropdown> </div> ');
24875
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-build/version-configuration-build.tpl.html',
24876
+ '<div class="ncl-version-configuration-build" data-ng-class="{ disabled: $ctrl.disabled }"> <div class="configuration-build-title-wrapper"> <div class="title pull-left">{{ \'functions:BUILD\' | i18next }}</div> <igz-action-menu data-ng-if="$ctrl.isDemoMode() && !$ctrl.disabled && !$ctrl.isFunctionDeploying()" data-actions="$ctrl.actions" data-icon-class="ncl-icon-paperclip" data-on-fire-action="$ctrl.onFireAction"> </igz-action-menu> <small class="pull-right" data-ng-if="$ctrl.disabled">{{ \'functions:DISABLED_FOR_IMAGE_CODE_ENTRY_TYPE\' | i18next }}</small> </div> <form name="$ctrl.buildForm" class="build-wrapper" novalidate> <div class="igz-row"> <div class="igz-col-100 build-field build-image-field"> <div class="field-label"> <span>{{ \'functions:IMAGE_NAME\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:IMAGE_NAME_DESCRIPTION\' | i18next:{defaultImageName: $ctrl.version.ui.defaultImageName} }}" data-is-html-enabled="true" data-trigger="click"> </igz-more-info> </div> <div class="align-items-baseline"> <span class="flex-none">{{ $ctrl.version.ui.imageNamePrefix }}</span> <igz-validating-input-field data-field-type="input" data-input-name="imageName" data-input-value="$ctrl.imageName" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_IMAGE_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-validation-max-length="{{$ctrl.maxLengths.imageName}}" data-validation-pattern="$ctrl.imageNameValidationPattern" data-is-disabled="$ctrl.disabled" class="flex-auto"> </igz-validating-input-field> </div> </div> <div class="igz-col-50 build-field build-base-image-field"> <div class="field-label label-with-tooltip align-items-center"> <span>{{ \'functions:BASE_IMAGE\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:BASE_IMAGE_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="baseImage" data-input-value="$ctrl.version.spec.build.baseImage" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_BASE_IMAGE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.build.baseImage" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-50 build-field build-onbuild-image-field"> <div class="field-label label-with-tooltip align-items-center"> <span>{{ \'functions:ONBUILD_IMAGE\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.onBuildImageDescription}}" data-default-tooltip-placement="left" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="onbuildImage" data-input-value="$ctrl.version.spec.build.onbuildImage" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_ONBUILD_IMAGE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.build.onbuildImage" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field"> <div class="field-label"> <span>{{ \'functions:BUILD_COMMANDS\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:BUILD_COMMANDS_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="textarea" data-input-name="commands" data-input-value="$ctrl.build.commands" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_COMMAND_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="commands" data-is-disabled="$ctrl.disabled" class="build-textarea-input build-commands-input"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field"> <div class="field-label label-with-tooltip align-items-center"> <span>{{ \'functions:READINESS_TIMEOUT_SECONDS\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:READINESS_TIMEOUT_SECONDS_DESCRIPTION\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.readinessTimeoutSeconds} }}" data-trigger="click"> </igz-more-info> </div> <igz-number-input data-form-object="$ctrl.buildForm" data-input-name="readinessTimeoutSeconds" data-current-value="$ctrl.version.spec.readinessTimeoutSeconds" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.readinessTimeoutSeconds" data-allow-empty-field="true" data-value-step="1" data-validation-is-required="false" data-min-value="1" data-is-disabled="$ctrl.disabled || $ctrl.isFunctionDeploying()"> </igz-number-input> </div> <div class="igz-col-100 build-field" data-ng-if="$ctrl.version.spec.runtime === \'java\'"> <div class="field-label">{{ \'functions:REPOSITORIES\' | i18next }}</div> <igz-validating-input-field data-field-type="textarea" data-input-name="repositories" data-input-value="$ctrl.build.runtimeAttributes.repositories" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_REPOSITORY_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="runtimeAttributes.repositories" class="build-textarea-input" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field" data-ng-if="$ctrl.version.spec.runtime === \'java\'"> <div class="field-label">{{ \'functions:DEPENDENCIES\' | i18next }}</div> <igz-validating-input-field data-field-type="textarea" data-input-name="dependencies" data-input-value="$ctrl.build.dependencies" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DEPENDENCY_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="dependencies" class="build-textarea-input" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field build-checkboxes"> <div class="checkbox-block"> <input type="checkbox" class="small" id="noCache" data-ng-model="$ctrl.version.spec.build.noCache" data-ng-disabled="$ctrl.disabled || $ctrl.isFunctionDeploying()"> <label for="noCache" class="checkbox-inline">{{ \'functions:DISABLE_CACHE\' | i18next }}</label> <igz-more-info data-description="{{ \'functions:TOOLTIP.DISABLE_CACHE\' | i18next }}" data-trigger="click" data-default-tooltip-placement="top"> </igz-more-info> </div> <div class="checkbox-block" data-ng-if="$ctrl.platformKindIsKube"> <input type="checkbox" class="small" id="wait-readiness-timeout-before-failure" data-ng-model="$ctrl.version.spec.waitReadinessTimeoutBeforeFailure" data-ng-disabled="$ctrl.disabled || $ctrl.isFunctionDeploying()"> <label for="wait-readiness-timeout-before-failure" class="checkbox-inline">{{ \'functions:ALWAYS_WAIT_FOR_READINESS_TIMEOUT_EXPIRATION\' | i18next }}</label> <igz-more-info data-description="{{ \'functions:TOOLTIP.ALWAYS_WAIT_FOR_READINESS_TIMEOUT_EXPIRATION\' | i18next }}" data-trigger="click" data-default-tooltip-placement="top-left"> </igz-more-info> </div> </div> <div class="igz-col-100 build-field files-field"> <div class="uploading-files"> <div class="uploading-proccess-wrapper" data-ng-class="{\'one-file-uploaded\': $ctrl.file.uploaded || $ctrl.script.uploaded}" data-ng-if="$ctrl.getFileConfig().uploading && $ctrl.getFileConfig().name"> <div class="file-block uploading text-ellipsis" data-ng-class="{\'uploading-file\': $ctrl.file.uploading}"> <span class="{{$ctrl.getFileConfig().icon}}"></span> <button class="build-close-button"> <span class="ncl-icon-close"></span> </button> <span class="file-name"> {{$ctrl.getFileConfig().name}} </span> <div class="progress"> <div class="progress-bar" role="uib-progressbar" aria-valuemin="0" aria-valuemax="100" data-ng-style="{\'width\': $ctrl.getFileConfig().progress}"> </div> </div> </div> </div> <div class="uploaded-wrapper" data-ng-if="$ctrl.file.uploaded|| $ctrl.script.uploaded"> <div class="file-block uploaded text-ellipsis" data-ng-if="$ctrl.script.uploaded" data-ng-class="{\'one-file-uploaded\': $ctrl.file.uploaded}"> <span class="ncl-icon-script"></span> <span class="file-name"> {{$ctrl.script.name}} <span class="uploaded-file-directory">(/usr/bin/mybinary)</span> </span> <button class="build-close-button" data-ng-click="$ctrl.deleteFile(\'script\')"> <span class="ncl-icon-close"></span> </button> </div> <div class="file-block uploaded text-ellipsis uploaded-file" data-ng-if="$ctrl.file.uploaded"> <span class="ncl-icon-file"></span> <span class="file-name"> {{$ctrl.file.name}} <span class="uploaded-file-directory">(/usr/bin/mybinary)</span> </span> <button class="build-close-button" data-ng-click="$ctrl.deleteFile(\'file\')"> <span class="ncl-icon-close"></span> </button> </div> </div> </div> </div> </div> </form> </div> ');
24866
24877
  }]);
24867
24878
  })();
24868
24879
 
@@ -24873,8 +24884,8 @@ try {
24873
24884
  module = angular.module('iguazio.dashboard-controls.templates', []);
24874
24885
  }
24875
24886
  module.run(['$templateCache', function($templateCache) {
24876
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-basic-settings/version-configuration-basic-settings.tpl.html',
24877
- '<div class="ncl-version-configuration-basic-settings"> <div class="title">{{ \'common:BASIC_SETTINGS\' | i18next }}</div> <form name="$ctrl.basicSettingsForm" class="basic-settings-wrapper" novalidate> <div class="row enable-checkbox"> <input type="checkbox" class="small" id="enable" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableFunction" data-ng-change="$ctrl.updateEnableStatus()"> <label for="enable" class="checkbox-inline">{{ \'common:ENABLED\' | i18next }}</label> </div> <div class="row" data-ng-if="$ctrl.isDemoMode()"> <div class="timeout-block"> <div class="label"> <div class="timeout-checkbox"> <input type="checkbox" class="small" id="timeout" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableTimeout"> <label for="timeout" class="checkbox-inline">{{ \'functions:TIMEOUT\' | i18next }}</label> </div> </div> <div class="timeout-values"> <div class="inputs"> <igz-validating-input-field data-field-type="input" data-input-name="min" data-input-value="$ctrl.timeout.min" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.min" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'common:MIN\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'common:MIN\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="sec" data-input-value="$ctrl.timeout.sec" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.sec" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'functions:SEC\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'functions:SEC\' | i18next }}</div> </div> </div> </div> </div> <div class="row"> <div class="description-block"> <div class="label">{{ \'common:DESCRIPTION\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="description" data-input-value="$ctrl.version.spec.description" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.description" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESCRIPTION\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="account-block"> <div class="label">{{ \'functions:SERVICE_ACCOUNT\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="serviceAccount" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.serviceAccount" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.serviceAccount" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.MY_SERVICE_ACCOUNT\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="run-as-user-block"> <div class="label" data-ng-class="{asterisk: $ctrl.version.spec.securityContext.runAsGroup}"> {{ \'common:RUN_AS_USER\' | i18next }} </div> <igz-number-input data-allow-empty-field="true" data-validation-is-required="$ctrl.lodash.isNumber($ctrl.version.spec.securityContext.runAsGroup)" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_user" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsUser" data-current-value="$ctrl.version.spec.securityContext.runAsUser"> </igz-number-input> </div> <div class="run-as-group-block"> <div class="label">{{ \'common:RUN_AS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsGroup" data-current-value="$ctrl.version.spec.securityContext.runAsGroup"> </igz-number-input> </div> <div class="fs-group-block" data-ng-if="!$ctrl.platformIsKube"> <div class="label">{{ \'common:FS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="fs_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.fsGroup" data-current-value="$ctrl.version.spec.securityContext.fsGroup"> </igz-number-input> </div> </div> <div class="row"> <div class="logger-block"> <div class="logger-dropdown"> <span class="label">{{ \'functions:LOGGER_LEVEL\' | i18next }}</span> <igz-default-dropdown data-selected-item="$ctrl.version.spec.loggerSinks[0].level" data-select-property-only="id" data-values-array="$ctrl.logLevelValues" data-item-select-callback="$ctrl.setPriority(item)" data-read-only="$ctrl.isFunctionDeploying()" data-enable-overlap="true" data-prevent-drop-up="true"> </igz-default-dropdown> </div> <div class="logger-input" data-ng-if="$ctrl.isDemoMode()"> <span class="label">{{ \'functions:LOGGER_DESTINATION\' | i18next }}</span> <igz-validating-input-field data-field-type="input" data-input-name="arguments" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.loggerSinks[0].sink" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.loggerSinks[0].sink" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESTINATION\' | i18next }}"> </igz-validating-input-field> </div> </div> </div> </form> </div> ');
24887
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-environment-variables/version-configuration-environment-variables.tpl.html',
24888
+ '<div class="ncl-version-configuration-environment-variables"> <div class="title">{{ \'common:ENVIRONMENT_VARIABLES\' | i18next }}</div> <form name="$ctrl.environmentVariablesForm" class="resources-wrapper" novalidate> <div class="igz-scrollable-container scrollable-environment-variables" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="variable in $ctrl.variables"> <ncl-key-value-input class="new-label-input" data-row-data="variable" data-item-index="$index" data-use-type="true" data-use-labels="true" data-is-disabled="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.validationRules" data-all-value-types="$ctrl.isOnlyValueTypeInputs" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-change-type-callback="$ctrl.onChangeType(newType, index)" data-dropdown-overlap="true" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-variable-button" data-ng-class="{ \'disabled\': $ctrl.isFunctionDeploying() }" data-ng-click="$ctrl.addNewVariable($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ENVIRONMENT_VARIABLE\' | i18next }} </div> </form> </div> ');
24878
24889
  }]);
24879
24890
  })();
24880
24891
 
@@ -24885,8 +24896,8 @@ try {
24885
24896
  module = angular.module('iguazio.dashboard-controls.templates', []);
24886
24897
  }
24887
24898
  module.run(['$templateCache', function($templateCache) {
24888
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-build/version-configuration-build.tpl.html',
24889
- '<div class="ncl-version-configuration-build" data-ng-class="{ disabled: $ctrl.disabled }"> <div class="configuration-build-title-wrapper"> <div class="title pull-left">{{ \'functions:BUILD\' | i18next }}</div> <igz-action-menu data-ng-if="$ctrl.isDemoMode() && !$ctrl.disabled && !$ctrl.isFunctionDeploying()" data-actions="$ctrl.actions" data-icon-class="ncl-icon-paperclip" data-on-fire-action="$ctrl.onFireAction"> </igz-action-menu> <small class="pull-right" data-ng-if="$ctrl.disabled">{{ \'functions:DISABLED_FOR_IMAGE_CODE_ENTRY_TYPE\' | i18next }}</small> </div> <form name="$ctrl.buildForm" class="build-wrapper" novalidate> <div class="igz-row"> <div class="igz-col-100 build-field build-image-field"> <div class="field-label"> <span>{{ \'functions:IMAGE_NAME\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:IMAGE_NAME_DESCRIPTION\' | i18next:{defaultImageName: $ctrl.version.ui.defaultImageName} }}" data-is-html-enabled="true" data-trigger="click"> </igz-more-info> </div> <div class="align-items-baseline"> <span class="flex-none">{{ $ctrl.version.ui.imageNamePrefix }}</span> <igz-validating-input-field data-field-type="input" data-input-name="imageName" data-input-value="$ctrl.imageName" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_IMAGE_NAME\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-validation-max-length="{{$ctrl.maxLengths.imageName}}" data-validation-pattern="$ctrl.imageNameValidationPattern" data-is-disabled="$ctrl.disabled" class="flex-auto"> </igz-validating-input-field> </div> </div> <div class="igz-col-50 build-field build-base-image-field"> <div class="field-label label-with-tooltip align-items-center"> <span>{{ \'functions:BASE_IMAGE\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:BASE_IMAGE_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="baseImage" data-input-value="$ctrl.version.spec.build.baseImage" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_BASE_IMAGE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.build.baseImage" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-50 build-field build-onbuild-image-field"> <div class="field-label label-with-tooltip align-items-center"> <span>{{ \'functions:ONBUILD_IMAGE\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.onBuildImageDescription}}" data-default-tooltip-placement="left" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="input" data-input-name="onbuildImage" data-input-value="$ctrl.version.spec.build.onbuildImage" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_ONBUILD_IMAGE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.build.onbuildImage" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field"> <div class="field-label"> <span>{{ \'functions:BUILD_COMMANDS\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:BUILD_COMMANDS_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <igz-validating-input-field data-field-type="textarea" data-input-name="commands" data-input-value="$ctrl.build.commands" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_COMMAND_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="commands" data-is-disabled="$ctrl.disabled" class="build-textarea-input build-commands-input"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field"> <div class="field-label label-with-tooltip align-items-center"> <span>{{ \'functions:READINESS_TIMEOUT_SECONDS\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:READINESS_TIMEOUT_SECONDS_DESCRIPTION\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.readinessTimeoutSeconds} }}" data-trigger="click"> </igz-more-info> </div> <igz-number-input data-form-object="$ctrl.buildForm" data-input-name="readinessTimeoutSeconds" data-current-value="$ctrl.version.spec.readinessTimeoutSeconds" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.readinessTimeoutSeconds" data-allow-empty-field="true" data-value-step="1" data-validation-is-required="false" data-min-value="1" data-is-disabled="$ctrl.disabled || $ctrl.isFunctionDeploying()"> </igz-number-input> </div> <div class="igz-col-100 build-field" data-ng-if="$ctrl.version.spec.runtime === \'java\'"> <div class="field-label">{{ \'functions:REPOSITORIES\' | i18next }}</div> <igz-validating-input-field data-field-type="textarea" data-input-name="repositories" data-input-value="$ctrl.build.runtimeAttributes.repositories" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_REPOSITORY_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="runtimeAttributes.repositories" class="build-textarea-input" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field" data-ng-if="$ctrl.version.spec.runtime === \'java\'"> <div class="field-label">{{ \'functions:DEPENDENCIES\' | i18next }}</div> <igz-validating-input-field data-field-type="textarea" data-input-name="dependencies" data-input-value="$ctrl.build.dependencies" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.buildForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DEPENDENCY_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="dependencies" class="build-textarea-input" data-is-disabled="$ctrl.disabled"> </igz-validating-input-field> </div> <div class="igz-col-100 build-field build-checkboxes"> <div class="checkbox-block"> <input type="checkbox" class="small" id="noCache" data-ng-model="$ctrl.version.spec.build.noCache" data-ng-disabled="$ctrl.disabled || $ctrl.isFunctionDeploying()"> <label for="noCache" class="checkbox-inline">{{ \'functions:DISABLE_CACHE\' | i18next }}</label> <igz-more-info data-description="{{ \'functions:TOOLTIP.DISABLE_CACHE\' | i18next }}" data-trigger="click" data-default-tooltip-placement="top"> </igz-more-info> </div> <div class="checkbox-block" data-ng-if="$ctrl.platformKindIsKube"> <input type="checkbox" class="small" id="wait-readiness-timeout-before-failure" data-ng-model="$ctrl.version.spec.waitReadinessTimeoutBeforeFailure" data-ng-disabled="$ctrl.disabled || $ctrl.isFunctionDeploying()"> <label for="wait-readiness-timeout-before-failure" class="checkbox-inline">{{ \'functions:ALWAYS_WAIT_FOR_READINESS_TIMEOUT_EXPIRATION\' | i18next }}</label> <igz-more-info data-description="{{ \'functions:TOOLTIP.ALWAYS_WAIT_FOR_READINESS_TIMEOUT_EXPIRATION\' | i18next }}" data-trigger="click" data-default-tooltip-placement="top-left"> </igz-more-info> </div> </div> <div class="igz-col-100 build-field files-field"> <div class="uploading-files"> <div class="uploading-proccess-wrapper" data-ng-class="{\'one-file-uploaded\': $ctrl.file.uploaded || $ctrl.script.uploaded}" data-ng-if="$ctrl.getFileConfig().uploading && $ctrl.getFileConfig().name"> <div class="file-block uploading text-ellipsis" data-ng-class="{\'uploading-file\': $ctrl.file.uploading}"> <span class="{{$ctrl.getFileConfig().icon}}"></span> <button class="build-close-button"> <span class="ncl-icon-close"></span> </button> <span class="file-name"> {{$ctrl.getFileConfig().name}} </span> <div class="progress"> <div class="progress-bar" role="uib-progressbar" aria-valuemin="0" aria-valuemax="100" data-ng-style="{\'width\': $ctrl.getFileConfig().progress}"> </div> </div> </div> </div> <div class="uploaded-wrapper" data-ng-if="$ctrl.file.uploaded|| $ctrl.script.uploaded"> <div class="file-block uploaded text-ellipsis" data-ng-if="$ctrl.script.uploaded" data-ng-class="{\'one-file-uploaded\': $ctrl.file.uploaded}"> <span class="ncl-icon-script"></span> <span class="file-name"> {{$ctrl.script.name}} <span class="uploaded-file-directory">(/usr/bin/mybinary)</span> </span> <button class="build-close-button" data-ng-click="$ctrl.deleteFile(\'script\')"> <span class="ncl-icon-close"></span> </button> </div> <div class="file-block uploaded text-ellipsis uploaded-file" data-ng-if="$ctrl.file.uploaded"> <span class="ncl-icon-file"></span> <span class="file-name"> {{$ctrl.file.name}} <span class="uploaded-file-directory">(/usr/bin/mybinary)</span> </span> <button class="build-close-button" data-ng-click="$ctrl.deleteFile(\'file\')"> <span class="ncl-icon-close"></span> </button> </div> </div> </div> </div> </div> </form> </div> ');
24899
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-labels/version-configuration-labels.tpl.html',
24900
+ '<div class="ncl-version-configuration-labels"> <div class="title"> <span>{{ \'common:LABELS\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.tooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <form name="$ctrl.labelsForm" class="labels-wrapper" novalidate> <div data-ng-if="$ctrl.labels.length > 0" class="table-headers"> <div class="key-header"> {{ \'common:KEY\' | i18next }} <igz-more-info data-description="{{$ctrl.keyTooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="value-header"> {{ \'common:VALUE\' | i18next }} </div> </div> <div class="igz-scrollable-container scrollable-labels" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="label in $ctrl.labels"> <ncl-key-value-input class="new-label-input" data-row-data="label" data-item-index="$index" data-use-type="false" data-validation-rules="$ctrl.validationRules" data-is-disabled="$ctrl.isLabelsDisabled() || $ctrl.isFunctionDeploying()" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true" data-key-tooltip="$ctrl.isLabelsDisabled() ? $ctrl.addNewLabelTooltip : \'\'" data-value-tooltip="$ctrl.isLabelsDisabled() ? $ctrl.addNewLabelTooltip : \'\'"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-label-button" data-ng-class="{\'disabled\': $ctrl.isLabelsDisabled() || $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewLabel($event)" data-uib-tooltip="{{$ctrl.isLabelsDisabled() ? $ctrl.addNewLabelTooltip : \'\'}}" data-tooltip-append-to-body="true" data-tooltip-placement="right" data-tooltip-popup-delay="100"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_LABEL\' | i18next }} </div> </form> </div> ');
24890
24901
  }]);
24891
24902
  })();
24892
24903
 
@@ -24909,8 +24920,8 @@ try {
24909
24920
  module = angular.module('iguazio.dashboard-controls.templates', []);
24910
24921
  }
24911
24922
  module.run(['$templateCache', function($templateCache) {
24912
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-labels/version-configuration-labels.tpl.html',
24913
- '<div class="ncl-version-configuration-labels"> <div class="title"> <span>{{ \'common:LABELS\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.tooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <form name="$ctrl.labelsForm" class="labels-wrapper" novalidate> <div data-ng-if="$ctrl.labels.length > 0" class="table-headers"> <div class="key-header"> {{ \'common:KEY\' | i18next }} <igz-more-info data-description="{{$ctrl.keyTooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="value-header"> {{ \'common:VALUE\' | i18next }} </div> </div> <div class="igz-scrollable-container scrollable-labels" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="label in $ctrl.labels"> <ncl-key-value-input class="new-label-input" data-row-data="label" data-item-index="$index" data-use-type="false" data-validation-rules="$ctrl.validationRules" data-is-disabled="$ctrl.isLabelsDisabled() || $ctrl.isFunctionDeploying()" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true" data-key-tooltip="$ctrl.isLabelsDisabled() ? $ctrl.addNewLabelTooltip : \'\'" data-value-tooltip="$ctrl.isLabelsDisabled() ? $ctrl.addNewLabelTooltip : \'\'"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-label-button" data-ng-class="{\'disabled\': $ctrl.isLabelsDisabled() || $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewLabel($event)" data-uib-tooltip="{{$ctrl.isLabelsDisabled() ? $ctrl.addNewLabelTooltip : \'\'}}" data-tooltip-append-to-body="true" data-tooltip-placement="right" data-tooltip-popup-delay="100"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_LABEL\' | i18next }} </div> </form> </div> ');
24923
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-resources/version-configuration-resources.tpl.html',
24924
+ '<div class="ncl-version-configuration-resources"> <form name="$ctrl.resourcesForm" class="resources-wrapper" novalidate> <div class="title">{{ \'common:RESOURCES\' | i18next }}</div> <div class="row"> <div class="igz-row form-row" data-ng-if="$ctrl.selectedPodTolerationOption"> <div class="igz-col-40 row-title">{{ \'functions:RUN_ON_SPOT_NODES\' | i18next }} <igz-more-info data-description="{{$ctrl.selectedPodTolerationOption.tooltip}}"></igz-more-info> </div> <div class="igz-col-20 input-wrapper"></div> <div class="igz-col-40 input-wrapper"> <div class="row-input preemtion-mode-input"> <igz-default-dropdown data-values-array="$ctrl.podTolerationsOptions" data-selected-item="$ctrl.selectedPodTolerationOption" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-select-callback="$ctrl.podTolerationDropdownCallback(item, isItemChanged, field)" data-item-select-field="spec.preemptionMode"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row"> <div class="igz-col-40 row-title">{{ \'functions:PODS_PRIORITY\' | i18next }}</div> <div class="igz-col-20 input-wrapper"></div> <div class="igz-col-40 input-wrapper"> <div class="row-input priority-class-input"> <igz-default-dropdown data-values-array="$ctrl.podsPriorityOptions" data-selected-item="$ctrl.selectedPodsPriority" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-select-callback="$ctrl.podsPriorityDropdownCallback(item, isItemChanged, field)" data-item-select-field="spec.priorityClassName"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title">{{ \'common:MEMORY\' | i18next }} <igz-more-info data-trigger="click" data-is-html-enabled="true" data-is-open="$ctrl.memoryWarningOpen" data-icon-type="{{$ctrl.memoryWarningOpen ? \'warn\' : \'info\'}}" data-description="{{ \'common:RESOURCES_WARNING_LIMIT_FILLED_REQUEST_EMPTY\' | i18next:{ when: \'the function is deployed\' } }}"> </igz-more-info> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:REQUEST\' | i18next }}</div> <div class="row-input memory-input memory-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="requestMemory" data-update-number-input-callback="$ctrl.memoryInputCallback(newData, field)" data-update-number-input-field="resources.requests.memory" data-min-value="1" data-current-value="$ctrl.resources.requests.memory" data-value-step="1"> </igz-number-input> </div> <div class="row-input memory-input memory-size-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.dropdownOptions" data-selected-item="$ctrl.selectedRequestUnit" data-item-select-callback="$ctrl.memoryDropdownCallback(item, isItemChanges, field)" data-item-select-field="spec.resources.requests.memory"> </igz-default-dropdown> </div> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:LIMIT\' | i18next }}</div> <div class="row-input memory-input memory-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="limitsMemory" data-min-value="1" data-update-number-input-callback="$ctrl.memoryInputCallback(newData, field)" data-update-number-input-field="resources.limits.memory" data-current-value="$ctrl.resources.limits.memory" data-value-step="1"> </igz-number-input> </div> <div class="row-input memory-input memory-size-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.dropdownOptions" data-selected-item="$ctrl.selectedLimitUnit" data-item-select-callback="$ctrl.memoryDropdownCallback(item, isItemChanges, field)" data-item-select-field="spec.resources.limits.memory"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title">{{ \'common:CPU\' | i18next }}</div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:REQUEST\' | i18next }}</div> <div class="row-input cpu-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="requestCpu" data-placeholder="{{ $ctrl.selectedCpuRequestItem.placeholder }}" data-update-number-input-callback="$ctrl.cpuInputCallback(newData, field)" data-update-number-input-field="resources.requests.cpu" data-min-value="$ctrl.selectedCpuRequestItem.minValue" data-precision="{{ $ctrl.selectedCpuRequestItem.precision }}" data-value-step="{{ $ctrl.selectedCpuRequestItem.step }}" data-current-value="$ctrl.resources.requests.cpu"> </igz-number-input> </div> <div class="row-input cpu-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.cpuDropdownOptions" data-selected-item="$ctrl.selectedCpuRequestItem" data-item-select-callback="$ctrl.cpuDropdownCallback(item, isItemChanged, field)" data-item-select-field="selectedCpuRequestItem"> </igz-default-dropdown> </div> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:LIMIT\' | i18next }}</div> <div class="row-input cpu-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="limitsCpu" data-placeholder="{{ $ctrl.selectedCpuLimitItem.placeholder }}" data-update-number-input-callback="$ctrl.cpuInputCallback(newData, field)" data-update-number-input-field="resources.limits.cpu" data-min-value="$ctrl.selectedCpuLimitItem.minValue" data-precision="{{ $ctrl.selectedCpuLimitItem.precision }}" data-value-step="{{ $ctrl.selectedCpuLimitItem.step }}" data-current-value="$ctrl.resources.limits.cpu"> </igz-number-input> </div> <div class="row-input cpu-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.cpuDropdownOptions" data-selected-item="$ctrl.selectedCpuLimitItem" data-item-select-callback="$ctrl.cpuDropdownCallback(item, isItemChanged, field)" data-item-select-field="selectedCpuLimitItem"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title">{{ \'common:GPU\' | i18next }}</div> <div class="igz-col-40 input-wrapper"></div> <div class="igz-col-40 input-wrapper" data-uib-tooltip="{{ \'functions:TOOLTIP.GPU_LIMIT\' | i18next }}" data-tooltip-append-to-body="true" data-tooltip-placement="bottom" data-tooltip-popup-delay="500"> <div class="input-title">{{ \'common:LIMIT\' | i18next }}</div> <div class="row-input gpu-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="limitsGpu" data-update-number-input-callback="$ctrl.gpuInputCallback(newData, field)" data-update-number-input-field="limits" data-min-value="1" data-max-value="4" data-value-step="1" data-current-value="$ctrl.resources.limits.gpu"> </igz-number-input> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title"> {{ \'common:REPLICAS\' | i18next }} </div> <div class="igz-col-40 input-wrapper"> <div class="input-title"> {{ \'common:MIN\' | i18next }} <igz-more-info data-description="{{ \'functions:MIN_REPLICAS\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.minReplicas} }}" data-default-tooltip-placement="top" data-trigger="click"> </igz-more-info> </div> <div class="row-input replicas-number-input"> <igz-number-input data-form-object="$ctrl.resourcesForm" data-input-name="minReplicas" data-current-value="$ctrl.minReplicas" data-update-number-input-callback="$ctrl.replicasInputCallback(newData, field)" data-update-number-input-field="minReplicas" data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-placeholder="" data-precision="0" data-value-step="1" data-min-value="0" data-max-value="$ctrl.maxReplicas || Infinity"> </igz-number-input> </div> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title" data-ng-class="{ asterisk: $ctrl.minReplicas === 0 }"> {{ \'functions:MAX\' | i18next }} <igz-more-info data-description="{{ \'functions:MAX_REPLICAS\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.maxReplicas} }}" data-default-tooltip-placement="top" data-trigger="click"> </igz-more-info> </div> <div class="row-input replicas-number-input"> <igz-number-input data-form-object="$ctrl.resourcesForm" data-input-name="maxReplicas" data-current-value="$ctrl.maxReplicas" data-update-number-input-callback="$ctrl.replicasInputCallback(newData, field)" data-update-number-input-field="maxReplicas" data-allow-empty-field="true" data-is-disabled="$ctrl.isFunctionDeploying()" data-placeholder="{{ $ctrl.minReplicas === 0 ? (\'functions:PLACEHOLDER.MAX_REQUIRED\' | i18next) : \'\' }}" data-precision="0" data-value-step="1" data-validation-is-required="$ctrl.minReplicas === 0" data-min-value="$ctrl.minReplicas || 1"> </igz-number-input> </div> </div> </div> <div class="igz-row form-row align-items-center slider-block" data-ng-if="$ctrl.isInactivityWindowShown()"> <div class="igz-col-25 row-title no-margin"> <span>{{ \'common:INACTIVITY_WINDOW\' | i18next }}</span> <igz-more-info data-description="{{ \'common:INACTIVITY_WINDOW_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <div class="igz-col-75 row-input slider" data-uib-tooltip="{{ \'functions:TOOLTIP.INACTIVITY_WINDOW\' | i18next }}" data-tooltip-enable="$ctrl.windowSizeSlider.options.disabled" data-tooltip-append-to-body="true" data-tooltip-placement="bottom" data-tooltip-popup-delay="500"> <rzslider class="rzslider" data-rz-slider-model="$ctrl.windowSizeSlider.value" data-rz-slider-options="$ctrl.windowSizeSlider.options"> </rzslider> </div> </div> <div class="igz-row form-row range-inputs-row slider-block"> <div class="igz-col-25 row-title no-margin target-cpu-title"> <span>{{ \'common:TARGET_CPU\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:TARGET_CPU_DESCRIPTION\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.targetCPU} }}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="igz-col-75 row-input slider"> <igz-slider-input-block data-slider-config="$ctrl.targetCpuSliderConfig" data-measure-units="null" data-value-unit="$ctrl.targetCpuValueUnit" data-slider-block-updating-broadcast="" data-on-change-callback="$ctrl.sliderInputCallback" data-update-slider-input="spec.targetCPU" data-allow-full-range="true" data-uib-tooltip="{{ \'functions:TOOLTIP.TARGET_CPU\' | i18next }}" data-tooltip-enable="$ctrl.targetCpuSliderConfig.options.disabled" data-tooltip-append-to-body="true" data-tooltip-placement="bottom" data-tooltip-popup-delay="500"> </igz-slider-input-block> </div> </div> </div> </form> <form name="$ctrl.nodeSelectorsForm" novalidate> <div class="igz-row-flex"> <div class="title">{{ \'functions:NODE_SELECTORS\' | i18next }}</div> <a class="link" data-ng-class="{ \'disabled\': $ctrl.isFunctionDeploying() }" data-ng-click="$ctrl.handleRevertToDefaultsClick()" data-ng-hide="$ctrl.revertToDefaultsBtnIsHidden"> {{ \'functions:REVERT_TO_DEFAULTS\' | i18next }} </a> </div> <div class="row"> <div class="igz-row form-row"> <div class="table-body" data-ng-repeat="nodeSelector in $ctrl.nodeSelectors"> <ncl-key-value-input class="node-selectors" data-row-data="nodeSelector" data-item-index="$index" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.nodeSelectorsValidationRules" data-action-handler-callback="$ctrl.handleNodeSelectorsAction(actionType, index)" data-change-data-callback="$ctrl.onChangeNodeSelectorsData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> <div class="igz-create-button" data-ng-class="{ \'disabled\': $ctrl.isFunctionDeploying() }" data-ng-click="$ctrl.addNewNodeSelector($event)"> <span class="igz-icon-add-round"></span> {{ \'common:CREATE_NEW_ENTRY\' | i18next }} </div> </div> </div> </form> </div> ');
24914
24925
  }]);
24915
24926
  })();
24916
24927
 
@@ -24921,8 +24932,8 @@ try {
24921
24932
  module = angular.module('iguazio.dashboard-controls.templates', []);
24922
24933
  }
24923
24934
  module.run(['$templateCache', function($templateCache) {
24924
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-resources/version-configuration-resources.tpl.html',
24925
- '<div class="ncl-version-configuration-resources"> <form name="$ctrl.resourcesForm" class="resources-wrapper" novalidate> <div class="title">{{ \'common:RESOURCES\' | i18next }}</div> <div class="row"> <div class="igz-row form-row" data-ng-if="$ctrl.selectedPodTolerationOption"> <div class="igz-col-40 row-title">{{ \'functions:RUN_ON_SPOT_NODES\' | i18next }} <igz-more-info data-description="{{$ctrl.selectedPodTolerationOption.tooltip}}"></igz-more-info> </div> <div class="igz-col-20 input-wrapper"></div> <div class="igz-col-40 input-wrapper"> <div class="row-input preemtion-mode-input"> <igz-default-dropdown data-values-array="$ctrl.podTolerationsOptions" data-selected-item="$ctrl.selectedPodTolerationOption" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-select-callback="$ctrl.podTolerationDropdownCallback(item, isItemChanged, field)" data-item-select-field="spec.preemptionMode"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row"> <div class="igz-col-40 row-title">{{ \'functions:PODS_PRIORITY\' | i18next }}</div> <div class="igz-col-20 input-wrapper"></div> <div class="igz-col-40 input-wrapper"> <div class="row-input priority-class-input"> <igz-default-dropdown data-values-array="$ctrl.podsPriorityOptions" data-selected-item="$ctrl.selectedPodsPriority" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-select-callback="$ctrl.podsPriorityDropdownCallback(item, isItemChanged, field)" data-item-select-field="spec.priorityClassName"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title">{{ \'common:MEMORY\' | i18next }} <igz-more-info data-trigger="click" data-is-html-enabled="true" data-is-open="$ctrl.memoryWarningOpen" data-icon-type="{{$ctrl.memoryWarningOpen ? \'warn\' : \'info\'}}" data-description="{{ \'common:RESOURCES_WARNING_LIMIT_FILLED_REQUEST_EMPTY\' | i18next:{ when: \'the function is deployed\' } }}"> </igz-more-info> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:REQUEST\' | i18next }}</div> <div class="row-input memory-input memory-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="requestMemory" data-update-number-input-callback="$ctrl.memoryInputCallback(newData, field)" data-update-number-input-field="resources.requests.memory" data-min-value="1" data-current-value="$ctrl.resources.requests.memory" data-value-step="1"> </igz-number-input> </div> <div class="row-input memory-input memory-size-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.dropdownOptions" data-selected-item="$ctrl.selectedRequestUnit" data-item-select-callback="$ctrl.memoryDropdownCallback(item, isItemChanges, field)" data-item-select-field="spec.resources.requests.memory"> </igz-default-dropdown> </div> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:LIMIT\' | i18next }}</div> <div class="row-input memory-input memory-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="limitsMemory" data-min-value="1" data-update-number-input-callback="$ctrl.memoryInputCallback(newData, field)" data-update-number-input-field="resources.limits.memory" data-current-value="$ctrl.resources.limits.memory" data-value-step="1"> </igz-number-input> </div> <div class="row-input memory-input memory-size-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.dropdownOptions" data-selected-item="$ctrl.selectedLimitUnit" data-item-select-callback="$ctrl.memoryDropdownCallback(item, isItemChanges, field)" data-item-select-field="spec.resources.limits.memory"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title">{{ \'common:CPU\' | i18next }}</div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:REQUEST\' | i18next }}</div> <div class="row-input cpu-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="requestCpu" data-placeholder="{{ $ctrl.selectedCpuRequestItem.placeholder }}" data-update-number-input-callback="$ctrl.cpuInputCallback(newData, field)" data-update-number-input-field="resources.requests.cpu" data-min-value="$ctrl.selectedCpuRequestItem.minValue" data-precision="{{ $ctrl.selectedCpuRequestItem.precision }}" data-value-step="{{ $ctrl.selectedCpuRequestItem.step }}" data-current-value="$ctrl.resources.requests.cpu"> </igz-number-input> </div> <div class="row-input cpu-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.cpuDropdownOptions" data-selected-item="$ctrl.selectedCpuRequestItem" data-item-select-callback="$ctrl.cpuDropdownCallback(item, isItemChanged, field)" data-item-select-field="selectedCpuRequestItem"> </igz-default-dropdown> </div> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title">{{ \'common:LIMIT\' | i18next }}</div> <div class="row-input cpu-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="limitsCpu" data-placeholder="{{ $ctrl.selectedCpuLimitItem.placeholder }}" data-update-number-input-callback="$ctrl.cpuInputCallback(newData, field)" data-update-number-input-field="resources.limits.cpu" data-min-value="$ctrl.selectedCpuLimitItem.minValue" data-precision="{{ $ctrl.selectedCpuLimitItem.precision }}" data-value-step="{{ $ctrl.selectedCpuLimitItem.step }}" data-current-value="$ctrl.resources.limits.cpu"> </igz-number-input> </div> <div class="row-input cpu-dropdown"> <igz-default-dropdown data-read-only="$ctrl.isFunctionDeploying()" data-values-array="$ctrl.cpuDropdownOptions" data-selected-item="$ctrl.selectedCpuLimitItem" data-item-select-callback="$ctrl.cpuDropdownCallback(item, isItemChanged, field)" data-item-select-field="selectedCpuLimitItem"> </igz-default-dropdown> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title">{{ \'common:GPU\' | i18next }}</div> <div class="igz-col-40 input-wrapper"></div> <div class="igz-col-40 input-wrapper" data-uib-tooltip="{{ \'functions:TOOLTIP.GPU_LIMIT\' | i18next }}" data-tooltip-append-to-body="true" data-tooltip-placement="bottom" data-tooltip-popup-delay="500"> <div class="input-title">{{ \'common:LIMIT\' | i18next }}</div> <div class="row-input gpu-number-input"> <igz-number-input data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.resourcesForm" data-input-name="limitsGpu" data-update-number-input-callback="$ctrl.gpuInputCallback(newData, field)" data-update-number-input-field="limits" data-min-value="1" data-max-value="4" data-value-step="1" data-current-value="$ctrl.resources.limits.gpu"> </igz-number-input> </div> </div> </div> <div class="igz-row form-row range-inputs-row"> <div class="igz-col-20 row-title"> {{ \'common:REPLICAS\' | i18next }} </div> <div class="igz-col-40 input-wrapper"> <div class="input-title"> {{ \'common:MIN\' | i18next }} <igz-more-info data-description="{{ \'functions:MIN_REPLICAS\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.minReplicas} }}" data-default-tooltip-placement="top" data-trigger="click"> </igz-more-info> </div> <div class="row-input replicas-number-input"> <igz-number-input data-form-object="$ctrl.resourcesForm" data-input-name="minReplicas" data-current-value="$ctrl.minReplicas" data-update-number-input-callback="$ctrl.replicasInputCallback(newData, field)" data-update-number-input-field="minReplicas" data-allow-empty-field="true" data-validation-is-required="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-placeholder="" data-precision="0" data-value-step="1" data-min-value="0" data-max-value="$ctrl.maxReplicas || Infinity"> </igz-number-input> </div> </div> <div class="igz-col-40 input-wrapper"> <div class="input-title" data-ng-class="{ asterisk: $ctrl.minReplicas === 0 }"> {{ \'functions:MAX\' | i18next }} <igz-more-info data-description="{{ \'functions:MAX_REPLICAS\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.maxReplicas} }}" data-default-tooltip-placement="top" data-trigger="click"> </igz-more-info> </div> <div class="row-input replicas-number-input"> <igz-number-input data-form-object="$ctrl.resourcesForm" data-input-name="maxReplicas" data-current-value="$ctrl.maxReplicas" data-update-number-input-callback="$ctrl.replicasInputCallback(newData, field)" data-update-number-input-field="maxReplicas" data-allow-empty-field="true" data-is-disabled="$ctrl.isFunctionDeploying()" data-placeholder="{{ $ctrl.minReplicas === 0 ? (\'functions:PLACEHOLDER.MAX_REQUIRED\' | i18next) : \'\' }}" data-precision="0" data-value-step="1" data-validation-is-required="$ctrl.minReplicas === 0" data-min-value="$ctrl.minReplicas || 1"> </igz-number-input> </div> </div> </div> <div class="igz-row form-row align-items-center slider-block" data-ng-if="$ctrl.isInactivityWindowShown()"> <div class="igz-col-25 row-title no-margin"> <span>{{ \'common:INACTIVITY_WINDOW\' | i18next }}</span> <igz-more-info data-description="{{ \'common:INACTIVITY_WINDOW_DESCRIPTION\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <div class="igz-col-75 row-input slider" data-uib-tooltip="{{ \'functions:TOOLTIP.INACTIVITY_WINDOW\' | i18next }}" data-tooltip-enable="$ctrl.windowSizeSlider.options.disabled" data-tooltip-append-to-body="true" data-tooltip-placement="bottom" data-tooltip-popup-delay="500"> <rzslider class="rzslider" data-rz-slider-model="$ctrl.windowSizeSlider.value" data-rz-slider-options="$ctrl.windowSizeSlider.options"> </rzslider> </div> </div> <div class="igz-row form-row range-inputs-row slider-block"> <div class="igz-col-25 row-title no-margin target-cpu-title"> <span>{{ \'common:TARGET_CPU\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:TARGET_CPU_DESCRIPTION\' | i18next:{default: $ctrl.defaultFunctionConfig.spec.targetCPU} }}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="igz-col-75 row-input slider"> <igz-slider-input-block data-slider-config="$ctrl.targetCpuSliderConfig" data-measure-units="null" data-value-unit="$ctrl.targetCpuValueUnit" data-slider-block-updating-broadcast="" data-on-change-callback="$ctrl.sliderInputCallback" data-update-slider-input="spec.targetCPU" data-allow-full-range="true" data-uib-tooltip="{{ \'functions:TOOLTIP.TARGET_CPU\' | i18next }}" data-tooltip-enable="$ctrl.targetCpuSliderConfig.options.disabled" data-tooltip-append-to-body="true" data-tooltip-placement="bottom" data-tooltip-popup-delay="500"> </igz-slider-input-block> </div> </div> </div> </form> <form name="$ctrl.nodeSelectorsForm" novalidate> <div class="igz-row-flex"> <div class="title">{{ \'functions:NODE_SELECTORS\' | i18next }}</div> <a class="link" data-ng-class="{ \'disabled\': $ctrl.isFunctionDeploying() }" data-ng-click="$ctrl.handleRevertToDefaultsClick()" data-ng-hide="$ctrl.revertToDefaultsBtnIsHidden"> {{ \'functions:REVERT_TO_DEFAULTS\' | i18next }} </a> </div> <div class="row"> <div class="igz-row form-row"> <div class="table-body" data-ng-repeat="nodeSelector in $ctrl.nodeSelectors"> <ncl-key-value-input class="node-selectors" data-row-data="nodeSelector" data-item-index="$index" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.nodeSelectorsValidationRules" data-action-handler-callback="$ctrl.handleNodeSelectorsAction(actionType, index)" data-change-data-callback="$ctrl.onChangeNodeSelectorsData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> <div class="igz-create-button" data-ng-class="{ \'disabled\': $ctrl.isFunctionDeploying() }" data-ng-click="$ctrl.addNewNodeSelector($event)"> <span class="igz-icon-add-round"></span> {{ \'common:CREATE_NEW_ENTRY\' | i18next }} </div> </div> </div> </form> </div> ');
24935
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-runtime-attributes/version-configuration-runtime-attributes.tpl.html',
24936
+ '<div class="ncl-version-configuration-runtime-attributes"> <div class="title">{{ \'functions:RUNTIME_ATTRIBUTES\' | i18next }}</div> <form name="$ctrl.runtimeAttributesForm" class="runtime-attributes-wrapper" novalidate> <div class="row" data-ng-class="{\'info-row\': $ctrl.version.spec.runtime !== \'shell\'}" data-ng-if="$ctrl.version.spec.runtime !== \'java\'"> <div class="runtime-title"> <span class="label">{{ \'functions:RUNTIME\' | i18next }}</span> <div class="runtime"> {{$ctrl.version.spec.runtime}} </div> </div> <div class="arguments-input" data-ng-if="$ctrl.version.spec.runtime === \'shell\'"> <span class="label">{{ \'common:ARGUMENTS\' | i18next }}</span> <igz-validating-input-field data-field-type="input" data-input-name="arguments" data-input-value="$ctrl.runtimeAttributes.arguments" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="arguments" data-form-object="$ctrl.runtimeAttributesForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_ARGUMENTS\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row igz-col-100 info-row" data-ng-if="$ctrl.version.spec.runtime === \'java\'"> <div class="row igz-col-100 info-row"> <span class="field-label">{{ \'functions:JVM_OPTIONS\' | i18next }}</span> <igz-validating-input-field data-field-type="textarea" data-input-name="jvmOptions" data-input-value="$ctrl.runtimeAttributes.jvmOptions" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.runtimeAttributesForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_OPTION_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="jvmOptions" class="build-command-field java-attribute"> </igz-validating-input-field> </div> </div> <div class="row info-row" data-ng-if="$ctrl.version.spec.runtime === \'shell\'"> <span class="label">{{ \'functions:RESPONSE_HEADERS\' | i18next }}</span> <div data-ng-if="$ctrl.attributes.length > 0" class="table-headers"> <div class="key-header">{{ \'common:KEY\' | i18next }}</div> <div class="value-header">{{ \'common:VALUE\' | i18next }}</div> </div> <div class="igz-scrollable-container" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="attribute in $ctrl.attributes"> <ncl-key-value-input class="new-label-input" data-row-data="attribute" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-index="$index" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-label-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewAttribute($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_RUNTIME_ATTRIBUTE\' | i18next }} </div> </div> </form> </div> ');
24926
24937
  }]);
24927
24938
  })();
24928
24939
 
@@ -24933,8 +24944,8 @@ try {
24933
24944
  module = angular.module('iguazio.dashboard-controls.templates', []);
24934
24945
  }
24935
24946
  module.run(['$templateCache', function($templateCache) {
24936
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-environment-variables/version-configuration-environment-variables.tpl.html',
24937
- '<div class="ncl-version-configuration-environment-variables"> <div class="title">{{ \'common:ENVIRONMENT_VARIABLES\' | i18next }}</div> <form name="$ctrl.environmentVariablesForm" class="resources-wrapper" novalidate> <div class="igz-scrollable-container scrollable-environment-variables" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="variable in $ctrl.variables"> <ncl-key-value-input class="new-label-input" data-row-data="variable" data-item-index="$index" data-use-type="true" data-use-labels="true" data-is-disabled="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.validationRules" data-all-value-types="$ctrl.isOnlyValueTypeInputs" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-change-type-callback="$ctrl.onChangeType(newType, index)" data-dropdown-overlap="true" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-variable-button" data-ng-class="{ \'disabled\': $ctrl.isFunctionDeploying() }" data-ng-click="$ctrl.addNewVariable($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ENVIRONMENT_VARIABLE\' | i18next }} </div> </form> </div> ');
24947
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-volumes/version-configuration-volumes.tpl.html',
24948
+ '<div class="ncl-version-configuration-volumes"> <div class="title"> <span>{{ \'functions:VOLUMES\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:TOOLTIP.VOLUMES\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <form name="$ctrl.volumesForm" class="volumes-wrapper" novalidate> <div class="ncl-version-volume"> <div class="common-table"> <div data-ng-if="$ctrl.volumes.length > 0" class="common-table-header item-header"> <div class="common-table-cell item-name"> {{ \'common:NAME\' | i18next }} </div> <div class="common-table-cell item-class"> {{ \'common:TYPE\' | i18next }} </div> <div class="common-table-cell item-info"> {{ \'functions:MOUNT_PATH_PARAMS\' | i18next }} </div> </div> <div class="common-table-body"> <div class="igz-scrollable-container scrollable-volumes" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <ncl-collapsing-row data-ng-repeat="volume in $ctrl.volumes" data-item="volume" data-item-index="$index" data-type="volume" data-read-only="$ctrl.isFunctionDeploying()" data-action-handler-callback="$ctrl.handleAction(actionType, selectedItem, index)"> <ncl-edit-item class="common-table-cells-container edit-volume-row" data-item="volume" data-class-list="$ctrl.classList" data-class-placeholder="{{ \'functions:PLACEHOLDER.SELECT_TYPE\' | i18next }}" data-type="volume" data-read-only="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.validationRules" data-max-lengths="$ctrl.maxLengths" data-on-submit-callback="$ctrl.editVolumeCallback(item)"> </ncl-edit-item> </ncl-collapsing-row> </div> </div> </div> </div> <div class="igz-create-button create-volume-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.createVolume($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_VOLUME\' | i18next }} </div> </form> </div> ');
24938
24949
  }]);
24939
24950
  })();
24940
24951
 
@@ -24945,8 +24956,8 @@ try {
24945
24956
  module = angular.module('iguazio.dashboard-controls.templates', []);
24946
24957
  }
24947
24958
  module.run(['$templateCache', function($templateCache) {
24948
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-runtime-attributes/version-configuration-runtime-attributes.tpl.html',
24949
- '<div class="ncl-version-configuration-runtime-attributes"> <div class="title">{{ \'functions:RUNTIME_ATTRIBUTES\' | i18next }}</div> <form name="$ctrl.runtimeAttributesForm" class="runtime-attributes-wrapper" novalidate> <div class="row" data-ng-class="{\'info-row\': $ctrl.version.spec.runtime !== \'shell\'}" data-ng-if="$ctrl.version.spec.runtime !== \'java\'"> <div class="runtime-title"> <span class="label">{{ \'functions:RUNTIME\' | i18next }}</span> <div class="runtime"> {{$ctrl.version.spec.runtime}} </div> </div> <div class="arguments-input" data-ng-if="$ctrl.version.spec.runtime === \'shell\'"> <span class="label">{{ \'common:ARGUMENTS\' | i18next }}</span> <igz-validating-input-field data-field-type="input" data-input-name="arguments" data-input-value="$ctrl.runtimeAttributes.arguments" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="arguments" data-form-object="$ctrl.runtimeAttributesForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_ARGUMENTS\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row igz-col-100 info-row" data-ng-if="$ctrl.version.spec.runtime === \'java\'"> <div class="row igz-col-100 info-row"> <span class="field-label">{{ \'functions:JVM_OPTIONS\' | i18next }}</span> <igz-validating-input-field data-field-type="textarea" data-input-name="jvmOptions" data-input-value="$ctrl.runtimeAttributes.jvmOptions" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.runtimeAttributesForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_OPTION_ON_EACH_LINE\' | i18next }}" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="jvmOptions" class="build-command-field java-attribute"> </igz-validating-input-field> </div> </div> <div class="row info-row" data-ng-if="$ctrl.version.spec.runtime === \'shell\'"> <span class="label">{{ \'functions:RESPONSE_HEADERS\' | i18next }}</span> <div data-ng-if="$ctrl.attributes.length > 0" class="table-headers"> <div class="key-header">{{ \'common:KEY\' | i18next }}</div> <div class="value-header">{{ \'common:VALUE\' | i18next }}</div> </div> <div class="igz-scrollable-container" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="attribute in $ctrl.attributes"> <ncl-key-value-input class="new-label-input" data-row-data="attribute" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-index="$index" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-label-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewAttribute($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_RUNTIME_ATTRIBUTE\' | i18next }} </div> </div> </form> </div> ');
24959
+ $templateCache.put('nuclio/functions/version/version-code/function-event-pane/test-events-logs/test-events-logs.tpl.html',
24960
+ '<div class="ncl-test-events-logs"> <div class="functional-buttons" data-ng-if="$ctrl.logs.length > 0"> <div class="ncl-icon-expand-all" data-ng-click="$ctrl.expandAllRows(true)" data-uib-tooltip="{{ \'functions:EXPAND_ALL\' | i18next }}" data-tooltip-popup-delay="300" data-tooltip-placement="left" data-tooltip-append-to-body="true"> </div> <div class="ncl-icon-collapse-all" data-ng-click="$ctrl.expandAllRows(false)" data-uib-tooltip="{{ \'functions:COLLAPSE_ALL\' | i18next }}" data-tooltip-popup-delay="300" data-tooltip-placement="left" data-tooltip-append-to-body="true"> </div> </div> <div data-ng-repeat="log in $ctrl.logs track by $index"> <div class="collapsed-row text-ellipsis" data-ng-if="log.ui.collapsed"> <span class="igz-icon-right" data-ng-click="$ctrl.collapseRow(log, false)"></span> <div class="level-icon {{$ctrl.getLevelIconClass(log)}}"></div> <span class="date">{{log.time | date: "EEE, MMM d, yyyy, HH:mm:ss\'GMT\'" : "+0000"}}</span> <div class="message text-ellipsis">{{log.message}}</div> <div class="ncl-icon-parameters" data-ng-if="$ctrl.hasAdditionalParameters(log)"></div> </div> <div class="expanded-row" data-ng-if="!log.ui.collapsed"> <div class="header"> <span class="igz-icon-down" data-ng-click="$ctrl.collapseRow(log, true)"></span> <div class="level-icon {{$ctrl.getLevelIconClass(log)}}"></div> <span class="date">{{log.time | date: "EEE, MMM d, yyyy, HH:mm:ss\'GMT\'" : "+0000"}}</span> <div class="ncl-icon-parameters" data-ng-if="$ctrl.hasAdditionalParameters(log)"></div> </div> <div class="expanded-body"> <div class="message">{{log.message}}</div> <div class="error" data-ng-if="log.err">{{log.err}}</div> <div class="parameters" data-ng-if="$ctrl.hasAdditionalParameters(log)"> <span class="parameters-header"> {{ \'common:PARAMETERS\' | i18next }} </span> <div data-ng-repeat="(key, value) in $ctrl.getParameters(log)"> <div class="text-ellipsis labels">{{key}}:</div> <div class="text-ellipsis values">{{value}}</div> </div> </div> </div> </div> </div> <div class="no-logs" data-ng-if="$ctrl.logs.length === 0"> {{ \'functions:NO_LOGS_HAVE_BEEN_FOUND\' | i18next }} </div> </div> ');
24950
24961
  }]);
24951
24962
  })();
24952
24963
 
@@ -24957,8 +24968,8 @@ try {
24957
24968
  module = angular.module('iguazio.dashboard-controls.templates', []);
24958
24969
  }
24959
24970
  module.run(['$templateCache', function($templateCache) {
24960
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-volumes/version-configuration-volumes.tpl.html',
24961
- '<div class="ncl-version-configuration-volumes"> <div class="title"> <span>{{ \'functions:VOLUMES\' | i18next }}</span> <igz-more-info data-description="{{ \'functions:TOOLTIP.VOLUMES\' | i18next }}" data-trigger="click"> </igz-more-info> </div> <form name="$ctrl.volumesForm" class="volumes-wrapper" novalidate> <div class="ncl-version-volume"> <div class="common-table"> <div data-ng-if="$ctrl.volumes.length > 0" class="common-table-header item-header"> <div class="common-table-cell item-name"> {{ \'common:NAME\' | i18next }} </div> <div class="common-table-cell item-class"> {{ \'common:TYPE\' | i18next }} </div> <div class="common-table-cell item-info"> {{ \'functions:MOUNT_PATH_PARAMS\' | i18next }} </div> </div> <div class="common-table-body"> <div class="igz-scrollable-container scrollable-volumes" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <ncl-collapsing-row data-ng-repeat="volume in $ctrl.volumes" data-item="volume" data-item-index="$index" data-type="volume" data-read-only="$ctrl.isFunctionDeploying()" data-action-handler-callback="$ctrl.handleAction(actionType, selectedItem, index)"> <ncl-edit-item class="common-table-cells-container edit-volume-row" data-item="volume" data-class-list="$ctrl.classList" data-class-placeholder="{{ \'functions:PLACEHOLDER.SELECT_TYPE\' | i18next }}" data-type="volume" data-read-only="$ctrl.isFunctionDeploying()" data-validation-rules="$ctrl.validationRules" data-max-lengths="$ctrl.maxLengths" data-on-submit-callback="$ctrl.editVolumeCallback(item)"> </ncl-edit-item> </ncl-collapsing-row> </div> </div> </div> </div> <div class="igz-create-button create-volume-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.createVolume($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_VOLUME\' | i18next }} </div> </form> </div> ');
24971
+ $templateCache.put('nuclio/functions/version/version-code/function-event-pane/test-events-navigation-tabs/test-events-navigation-tabs.tpl.html',
24972
+ '<div class="ncl-test-events-navigation-tabs"> <div class="test-events-navigation-tab" data-ng-repeat="item in $ctrl.tabItems" data-ng-click="$ctrl.changeActiveTab(item)" data-ng-class="{\'active\': $ctrl.isActiveTab(item)}"> {{item.tabName | uppercase}} <span class="badge" data-ng-if="item.badge">{{item.badge}}</span> </div> <igz-default-dropdown data-ng-if="$ctrl.selectedLogLevel" data-values-array="$ctrl.logLevelValues" data-select-property-only="id" data-selected-item="$ctrl.selectedLogLevel" data-item-select-callback="$ctrl.onChangeLogLevel({selectedLogLevel: item})" data-enable-overlap="true"> </igz-default-dropdown> </div> ');
24962
24973
  }]);
24963
24974
  })();
24964
24975