Преглед на файлове

HUE-8687 [frontend] Modularize and bundle the ApiHelper and related util classes

Johan Ahlen преди 6 години
родител
ревизия
361770c
променени са 56 файла, в които са добавени 3209 реда и са изтрити 558 реда
  1. 1 1
      apps/beeswax/src/beeswax/templates/create_database.mako
  2. 1 1
      apps/beeswax/src/beeswax/templates/create_table_manually.mako
  3. 1 1
      apps/beeswax/src/beeswax/templates/execute.mako
  4. 1 1
      apps/beeswax/src/beeswax/templates/import_wizard_choose_delimiter.mako
  5. 1 1
      apps/beeswax/src/beeswax/templates/import_wizard_choose_file.mako
  6. 1 1
      apps/beeswax/src/beeswax/templates/import_wizard_define_columns.mako
  7. 1 3
      apps/filebrowser/src/filebrowser/templates/listdir_components.mako
  8. 1 1
      apps/jobbrowser/src/jobbrowser/templates/job_browser.mako
  9. 3 3
      apps/metastore/src/metastore/static/metastore/js/metastore.ko.js
  10. 6 6
      apps/metastore/src/metastore/static/metastore/js/metastore.model.js
  11. 1 1
      apps/oozie/src/oozie/templates/editor2/workflow_editor.mako
  12. 1 3
      apps/pig/src/pig/templates/app.mako
  13. 1 3
      apps/useradmin/src/useradmin/templates/list_configurations.mako
  14. 23 19
      desktop/core/src/desktop/js/hue.js
  15. 232 321
      desktop/core/src/desktop/js/utils/apiHelper.js
  16. 40 0
      desktop/core/src/desktop/js/utils/apiQueueManager.js
  17. 123 0
      desktop/core/src/desktop/js/utils/cancellablePromise.js
  18. 3 3
      desktop/core/src/desktop/static/desktop/js/assist/assistDbSource.js
  19. 2 2
      desktop/core/src/desktop/static/desktop/js/assist/assistStorageEntry.js
  20. 1 1
      desktop/core/src/desktop/static/desktop/js/clusterConfig.js
  21. 4 4
      desktop/core/src/desktop/static/desktop/js/contextCatalog.js
  22. 12 12
      desktop/core/src/desktop/static/desktop/js/dataCatalog.js
  23. 1 1
      desktop/core/src/desktop/static/desktop/js/home2.vm.js
  24. 0 0
      desktop/core/src/desktop/static/desktop/js/hue-bundle-6bd3f5f21e9d494b3f9e.js.map
  25. 2680 96
      desktop/core/src/desktop/static/desktop/js/hue-bundle-af87daf64bcf8bd84638.js
  26. 0 0
      desktop/core/src/desktop/static/desktop/js/hue-bundle-af87daf64bcf8bd84638.js.map
  27. 7 7
      desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js
  28. 1 1
      desktop/core/src/desktop/static/desktop/js/share2.vm.js
  29. 1 1
      desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js
  30. 2 5
      desktop/core/src/desktop/static/desktop/spec/apiHelperSpec.js
  31. 1 4
      desktop/core/src/desktop/static/desktop/spec/hdfsAutocompleterSpec.js
  32. 1 1
      desktop/core/src/desktop/static/desktop/spec/sqlAutocompleter3Spec.js
  33. 6 6
      desktop/core/src/desktop/templates/assist.mako
  34. 1 1
      desktop/core/src/desktop/templates/assist_m.mako
  35. 1 1
      desktop/core/src/desktop/templates/catalog.mako
  36. 0 1
      desktop/core/src/desktop/templates/common_header.mako
  37. 2 3
      desktop/core/src/desktop/templates/hue.mako
  38. 5 5
      desktop/core/src/desktop/templates/ko_components/ko_context_popover.mako
  39. 2 2
      desktop/core/src/desktop/templates/ko_components/ko_context_selector.mako
  40. 1 1
      desktop/core/src/desktop/templates/ko_components/ko_dw_sidebar.mako
  41. 2 2
      desktop/core/src/desktop/templates/ko_components/ko_execution_analysis.mako
  42. 1 1
      desktop/core/src/desktop/templates/ko_components/ko_global_search.mako
  43. 8 8
      desktop/core/src/desktop/templates/ko_components/ko_performance_graph.mako
  44. 1 1
      desktop/core/src/desktop/templates/ko_components/ko_simple_ace_editor.mako
  45. 1 1
      desktop/core/src/desktop/templates/metrics.mako
  46. 2 2
      desktop/core/src/desktop/templates/sql_syntax_dropdown.mako
  47. 1 1
      desktop/core/src/desktop/templates/threads.mako
  48. 1 1
      desktop/libs/dashboard/src/dashboard/static/dashboard/js/search.ko.js
  49. 1 1
      desktop/libs/dashboard/src/dashboard/templates/common_search.mako
  50. 1 1
      desktop/libs/indexer/src/indexer/templates/importer.mako
  51. 1 1
      desktop/libs/indexer/src/indexer/templates/indexer.mako
  52. 1 1
      desktop/libs/indexer/src/indexer/templates/indexes.mako
  53. 1 1
      desktop/libs/indexer/src/indexer/templates/topics.mako
  54. 7 7
      desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js
  55. 1 1
      webpack-stats.json
  56. 7 4
      webpack.config.js

+ 1 - 1
apps/beeswax/src/beeswax/templates/create_database.mako

@@ -227,7 +227,7 @@ ${ assist.assistPanel() }
 
     function CreateDatabaseViewModel() {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
 
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();

+ 1 - 1
apps/beeswax/src/beeswax/templates/create_table_manually.mako

@@ -549,7 +549,7 @@ ${ assist.assistPanel() }
 
     function CreateTableViewModel() {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 1 - 1
apps/beeswax/src/beeswax/templates/execute.mako

@@ -1175,7 +1175,7 @@ editorViewModelOptions.languages.push({
   name: HIVE_AUTOCOMPLETE_APP == "impala" ? "Impala" : "Hive"
 });
 
-var apiHelper = ApiHelper.getInstance();
+var apiHelper = window.apiHelper;
 
 var editorViewModel = {
   sqlSourceTypes: [{

+ 1 - 1
apps/beeswax/src/beeswax/templates/import_wizard_choose_delimiter.mako

@@ -189,7 +189,7 @@ ${ assist.assistPanel() }
 
     function ImportWizardChooseDelimiterViewModel() {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 1 - 1
apps/beeswax/src/beeswax/templates/import_wizard_choose_file.mako

@@ -196,7 +196,7 @@ ${ assist.assistPanel() }
 
     function ImportWizardChooseFileViewModel() {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 1 - 1
apps/beeswax/src/beeswax/templates/import_wizard_define_columns.mako

@@ -224,7 +224,7 @@ ${ assist.assistPanel() }
 
     function ImportWizardDefineColumnsViewModel() {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 1 - 3
apps/filebrowser/src/filebrowser/templates/listdir_components.mako

@@ -730,9 +730,7 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
       }
     };
 
-    var apiHelper = ApiHelper.getInstance({
-      user: "${ user }"
-    });
+    var apiHelper = window.apiHelper;
 
     // ajax modal windows
     var openChownWindow = function (path, user, group, next) {

+ 1 - 1
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -3208,7 +3208,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     var JobBrowserViewModel = function () {
       var self = this;
 
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 3 - 3
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -26,7 +26,7 @@ var MetastoreViewModel = (function () {
 
     self.partitionsLimit = options.partitionsLimit;
     self.assistAvailable = ko.observable(true);
-    self.apiHelper = ApiHelper.getInstance();
+    self.apiHelper = window.apiHelper;
     self.isHue4 = ko.observable(options.hue4);
     self.isLeftPanelVisible = ko.observable();
     self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);
@@ -300,8 +300,8 @@ var MetastoreViewModel = (function () {
         }
       }
 
-      if (!namespaceId && ApiHelper.getInstance().getFromTotalStorage('contextSelector', 'lastSelectedNamespace')) {
-        namespaceId = ApiHelper.getInstance().getFromTotalStorage('contextSelector', 'lastSelectedNamespace').id;
+      if (!namespaceId && window.apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedNamespace')) {
+        namespaceId = window.apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedNamespace').id;
       }
 
       self.source().lastLoadNamespacesDeferred.done(function () {

+ 6 - 6
apps/metastore/src/metastore/static/metastore/js/metastore.model.js

@@ -49,7 +49,7 @@ var MetastoreSource = (function () {
 
     huePubSub.subscribe("assist.db.panel.ready", function () {
       self.lastLoadNamespacesDeferred.done(function () {
-        var lastSelectedDb = ApiHelper.getInstance().getFromTotalStorage('assist_' + self.sourceType + '_' + self.namespace.id, 'lastSelectedDb', 'default');
+        var lastSelectedDb = window.apiHelper.getFromTotalStorage('assist_' + self.sourceType + '_' + self.namespace.id, 'lastSelectedDb', 'default');
         huePubSub.publish('assist.set.database', {
           source: self.type,
           namespace: self.namespace().namespace,
@@ -203,7 +203,7 @@ var MetastoreNamespace = (function () {
 
   var MetastoreNamespace = function (options) {
     var self = this;
-    self.apiHelper = ApiHelper.getInstance();
+    self.apiHelper = window.apiHelper;
     self.namespace = options.namespace;
 
     // TODO: Compute selection in the metastore?
@@ -354,7 +354,7 @@ var MetastoreDatabase = (function () {
    */
   function MetastoreDatabase(options) {
     var self = this;
-    self.apiHelper = ApiHelper.getInstance();
+    self.apiHelper = window.apiHelper;
     self.catalogEntry = options.catalogEntry;
     self.metastoreViewModel = options.metastoreViewModel;
 
@@ -554,7 +554,7 @@ var MetastoreTable = (function () {
     });
 
     self.metastoreTable = options.metastoreTable;
-    self.apiHelper = ApiHelper.getInstance();
+    self.apiHelper = window.apiHelper;
 
     self.loaded = ko.observable(false);
     self.loading = ko.observable(false);
@@ -691,7 +691,7 @@ var MetastoreTable = (function () {
     self.navigatorEnabled = options.navigatorEnabled;
     self.catalogEntry = options.catalogEntry;
 
-    self.apiHelper = ApiHelper.getInstance();
+    self.apiHelper = window.apiHelper;
 
     // TODO: Check if enough or if we need to fetch additional details
     self.isView = ko.observable(self.catalogEntry.isView());
@@ -920,7 +920,7 @@ var MetastoreTable = (function () {
 
         var found = analysis.properties && analysis.properties.some(function (property) {
           if (property.col_name.toLowerCase() === 'view original text:') {
-            ApiHelper.getInstance().formatSql({ statements: property.data_type }).done(function (formatResponse) {
+            window.apiHelper.formatSql({ statements: property.data_type }).done(function (formatResponse) {
               self.viewSql(formatResponse.status === 0 ? formatResponse.formatted_statements : property.data_type)
             }).fail(function () {
               self.viewSql(property.data_type)

+ 1 - 1
apps/oozie/src/oozie/templates/editor2/workflow_editor.mako

@@ -627,7 +627,7 @@ ${ utils.submit_popup_event() }
 <script type="text/javascript">
   ${ utils.slaGlobal() }
 
-  var apiHelper = ApiHelper.getInstance();
+  var apiHelper = window.apiHelper;
 
   var viewModel = new WorkflowEditorViewModel(${ layout_json | n,unicode }, ${ workflow_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflow_properties_json | n,unicode }, ${ subworkflows_json | n,unicode }, ${ can_edit_json | n,unicode });
   ko.applyBindings(viewModel, $("#oozie_workflowComponents")[0]);

+ 1 - 3
apps/pig/src/pig/templates/app.mako

@@ -1017,9 +1017,7 @@ ${ commonshare() | n,unicode }
     var availableTables = '';
 
     % if autocomplete_base_url != '':
-      var apiHelper = ApiHelper.getInstance({
-        user: '${ user }'
-      });
+      var apiHelper = window.apiHelper;
       ContextCatalog.getNamespaces({ sourceType: 'hive' }).done(function (context) {
         // TODO: Namespace and compute selection
         DataCatalog.getChildren({ namespace: context.namespaces[0], compute: context.namespaces[0].computes[0], sourceType: 'hive', path: ['default'], silenceErrors: true }).done(function (childEntries) {

+ 1 - 3
apps/useradmin/src/useradmin/templates/list_configurations.mako

@@ -175,9 +175,7 @@ ${ configKoComponents.config() }
 
     var ConfigurationsViewModel = function () {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance({
-        user: '${ user.username }'
-      });
+      self.apiHelper = window.apiHelper;
       self.hasErrors = ko.observable(false);
       self.loading = ko.observable(false);
       self.apps = ko.observableArray();

+ 23 - 19
desktop/core/src/desktop/js/hue.js

@@ -14,28 +14,32 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-import './ext/jquery/hue.jquery.lib';
-import './ext/bootstrap.2.3.2.min';
-import _ from 'lodash';
-import filesize from 'filesize';
-import qq from './ext/fileuploader.custom';
-import ko from 'knockout';
-import komapping from 'knockout.mapping';
-import page from 'page';
-import hueUtils from 'utils/hueUtils';
-import hueAnalytics from 'utils/hueAnalytics';
-import hueDebug from 'utils/hueDebug';
-import huePubSub from 'utils/huePubSub';
-import hueDrop from 'utils/hueDrop';
-import localforage from 'localforage';
-import 'ext/ko.editable.custom';
-import 'ext/ko.selectize.custom';
-import 'knockout-switch-case';
-import 'knockout-sortable';
-import 'knockout.validation';
+import './ext/jquery/hue.jquery.lib'
+import './ext/bootstrap.2.3.2.min'
+import _ from 'lodash'
+import filesize from 'filesize'
+import qq from './ext/fileuploader.custom'
+import ko from 'knockout'
+import komapping from 'knockout.mapping'
+import page from 'page'
+import hueUtils from 'utils/hueUtils'
+import hueAnalytics from 'utils/hueAnalytics'
+import hueDebug from 'utils/hueDebug'
+import huePubSub from 'utils/huePubSub'
+import hueDrop from 'utils/hueDrop'
+import localforage from 'localforage'
+import 'ext/ko.editable.custom'
+import 'ext/ko.selectize.custom'
+import 'knockout-switch-case'
+import 'knockout-sortable'
+import 'knockout.validation'
+import apiHelper from 'utils/apiHelper';
+import CancellablePromise from 'utils/cancellablePromise'
 
 // TODO: Migrate away
 window._ = _;
+window.apiHelper = apiHelper;
+window.CancellablePromise = CancellablePromise;
 window.filesize = filesize;
 window.ko = ko;
 window.ko.mapping = komapping;

Файловите разлики са ограничени, защото са твърде много
+ 232 - 321
desktop/core/src/desktop/js/utils/apiHelper.js


+ 40 - 0
desktop/core/src/desktop/js/utils/apiQueueManager.js

@@ -0,0 +1,40 @@
+// Licensed to Cloudera, Inc. under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  Cloudera, Inc. licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+class ApiQueueManager {
+  constructor() {
+    var self = this;
+    self.callQueue = {};
+  }
+
+  getQueued(url, hash) {
+    var self = this;
+    return self.callQueue[url + (hash || '')];
+  };
+
+  addToQueue(promise, url, hash) {
+    var self = this;
+    self.callQueue[url + (hash || '')] = promise;
+    promise.always(function () {
+      delete self.callQueue[url + (hash || '')];
+    })
+  };
+}
+
+let apiQueueManager = new ApiQueueManager();
+
+export default apiQueueManager;

+ 123 - 0
desktop/core/src/desktop/js/utils/cancellablePromise.js

@@ -0,0 +1,123 @@
+// Licensed to Cloudera, Inc. under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  Cloudera, Inc. licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import apiHelper from './apiHelper'
+
+class CancellablePromise {
+
+  constructor (deferred, request, otherCancellables) {
+    var self = this;
+    self.cancelCallbacks = [];
+    self.deferred = deferred;
+    self.request = request;
+    self.otherCancellables = otherCancellables;
+    self.cancelled = false;
+    self.cancelPrevented = false;
+  }
+
+  /**
+   * A promise might be shared across multiple components in the UI, in some cases cancel is not an option and calling
+   * this will prevent that to happen.
+   *
+   * One example is autocompletion of databases while the assist is loading the database tree, closing the autocomplete
+   * results would make the assist loading fail if cancel hasn't been prevented.
+   *
+   * @returns {CancellablePromise}
+   */
+  preventCancel() {
+    var self = this;
+    self.cancelPrevented = true;
+    return self;
+  };
+
+  cancel() {
+    var self = this;
+    if (self.cancelPrevented || self.cancelled || self.state() !== 'pending') {
+      return;
+    }
+    self.cancelled = true;
+    if (self.request) {
+      apiHelper.cancelActiveRequest(self.request);
+    }
+
+    if (self.state && self.state() === 'pending' && self.deferred.reject) {
+      self.deferred.reject();
+    }
+
+    if (self.otherCancellables) {
+      self.otherCancellables.forEach(function (cancellable) { if (cancellable.cancel) { cancellable.cancel() } });
+    }
+
+    while (self.cancelCallbacks.length) {
+      self.cancelCallbacks.pop()();
+    }
+    return self;
+  };
+
+  onCancel(callback) {
+    var self = this;
+    if (self.cancelled) {
+      callback();
+    } else {
+      self.cancelCallbacks.push(callback);
+    }
+    return self;
+  };
+
+  then() {
+    var self = this;
+    self.deferred.then.apply(self.deferred, arguments);
+    return self;
+  };
+
+  done(callback) {
+    var self = this;
+    self.deferred.done.apply(self.deferred, arguments);
+    return self;
+  };
+
+  fail(callback) {
+    var self = this;
+    self.deferred.fail.apply(self.deferred, arguments);
+    return self;
+  };
+
+  always(callback) {
+    var self = this;
+    self.deferred.always.apply(self.deferred, arguments);
+    return self;
+  };
+
+  pipe(callback) {
+    var self = this;
+    self.deferred.pipe.apply(self.deferred, arguments);
+    return self;
+  };
+
+  progress(callback) {
+    var self = this;
+    self.deferred.progress.apply(self.deferred, arguments);
+    return self;
+  };
+
+  state() {
+    var self = this;
+    return self.deferred.state && self.deferred.state();
+  };
+}
+
+export default CancellablePromise;
+

+ 3 - 3
desktop/core/src/desktop/static/desktop/js/assist/assistDbSource.js

@@ -34,7 +34,7 @@ var AssistDbSource = (function () {
     self.i18n = options.i18n;
     self.nonSqlType = options.nonSqlType;
     self.navigationSettings = options.navigationSettings;
-    var apiHelper = ApiHelper.getInstance();
+    var apiHelper = window.apiHelper;
     self.initialNamespace = options.initialNamespace || apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedNamespace');
     self.initialCompute = options.initialCompute || apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedCompute');
 
@@ -341,7 +341,7 @@ var AssistDbNamespace = (function () {
           self.selectedDatabase().loadEntries()
         }
         if (!self.navigationSettings.rightAssist) {
-          ApiHelper.getInstance().setInTotalStorage('assist_' + self.sourceType + '_' + self.namespace.id, 'lastSelectedDb', self.selectedDatabase().catalogEntry.name);
+          window.apiHelper.setInTotalStorage('assist_' + self.sourceType + '_' + self.namespace.id, 'lastSelectedDb', self.selectedDatabase().catalogEntry.name);
           huePubSub.publish('assist.database.set', {
             sourceType: self.sourceType,
             namespace: self.namespace,
@@ -364,7 +364,7 @@ var AssistDbNamespace = (function () {
         self.selectedDatabaseChanged();
         return;
       }
-      var lastSelectedDb = ApiHelper.getInstance().getFromTotalStorage('assist_' + self.sourceType + '_' + self.namespace.id, 'lastSelectedDb', 'default');
+      var lastSelectedDb = window.apiHelper.getFromTotalStorage('assist_' + self.sourceType + '_' + self.namespace.id, 'lastSelectedDb', 'default');
       if (lastSelectedDb && self.dbIndex[lastSelectedDb]) {
         self.selectedDatabase(self.dbIndex[lastSelectedDb]);
         self.selectedDatabaseChanged();

+ 2 - 2
desktop/core/src/desktop/static/desktop/js/assist/assistStorageEntry.js

@@ -110,7 +110,7 @@ var AssistStorageEntry = (function () {
   AssistStorageEntry.prototype.loadPreview = function () {
     var self = this;
     self.loading(true);
-    ApiHelper.getInstance().fetchStoragePreview({
+    window.apiHelper.fetchStoragePreview({
       path: self.getHierarchy(),
       type: self.type,
       silenceErrors: true
@@ -351,7 +351,7 @@ var AssistStorageEntry = (function () {
         type: 'dir'
       },
       parent: null,
-      apiHelper: ApiHelper.getInstance()
+      apiHelper: window.apiHelper
     });
 
     var path = (typeMatch ? typeMatch[2] : path).replace(/(?:^\/)|(?:\/$)/g, '').split('/');

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/clusterConfig.js

@@ -22,7 +22,7 @@ function ClusterConfig(params) {
   self.loading = true;
 
   var refreshConfig = function () {
-    ApiHelper.getInstance().getClusterConfig(params).done(function (data) {
+    window.apiHelper.getClusterConfig(params).done(function (data) {
       if (data.status === 0) {
         self.loading = false;
         self.clusterConfig = data;

+ 4 - 4
desktop/core/src/desktop/static/desktop/js/contextCatalog.js

@@ -147,7 +147,7 @@ var ContextCatalog = (function () {
         window.clearTimeout(pollTimeout);
         window.setTimeout(function () {
           if (Object.keys(startingNamespaces).length) {
-            ApiHelper.getInstance().fetchContextNamespaces(options).done(function (namespaces) {
+            window.apiHelper.fetchContextNamespaces(options).done(function (namespaces) {
               if (namespaces[options.sourceType]) {
                 var namespaces = namespaces[options.sourceType];
                 if (namespaces) {
@@ -184,7 +184,7 @@ var ContextCatalog = (function () {
       });
 
       var fetchNamespaces = function () {
-        ApiHelper.getInstance().fetchContextNamespaces(options).done(function (namespaces) {
+        window.apiHelper.fetchContextNamespaces(options).done(function (namespaces) {
           if (namespaces[options.sourceType]) {
             var dynamic = namespaces.dynamicClusters;
             var namespaces = namespaces[options.sourceType];
@@ -260,7 +260,7 @@ var ContextCatalog = (function () {
       var deferred = $.Deferred();
       self.computePromises[options.sourceType] = deferred.promise();
 
-      ApiHelper.getInstance().fetchContextComputes(options).done(function (computes) {
+      window.apiHelper.fetchContextComputes(options).done(function (computes) {
         if (computes[options.sourceType]) {
           var computes = computes[options.sourceType];
           if (computes) {
@@ -299,7 +299,7 @@ var ContextCatalog = (function () {
       var deferred = $.Deferred();
       self.clusterPromises[options.sourceType] = deferred.promise();
 
-      ApiHelper.getInstance().fetchContextClusters(options).done(function (clusters) {
+      window.apiHelper.fetchContextClusters(options).done(function (clusters) {
         if (clusters && clusters[options.sourceType]) {
           self.clusters[options.sourceType] = clusters[options.sourceType];
           deferred.resolve(self.clusters[options.sourceType])

+ 12 - 12
desktop/core/src/desktop/static/desktop/js/dataCatalog.js

@@ -94,7 +94,7 @@ var DataCatalog = (function () {
    * @param {boolean} [apiOptions.silenceErrors]
    */
   var fetchAndSave = function (apiHelperFunction, attributeName, entry, apiOptions) {
-    return ApiHelper.getInstance()[apiHelperFunction]({
+    return window.apiHelper[apiHelperFunction]({
       sourceType: entry.dataCatalog.sourceType,
       compute: entry.compute,
       path: entry.path, // Set for DataCatalogEntry
@@ -274,7 +274,7 @@ var DataCatalog = (function () {
       $.when.apply($, existingPromises).always(function () {
         var loadDeferred = $.Deferred();
         if (pathsToLoad.length) {
-          cancellablePromises.push(ApiHelper.getInstance().fetchNavOptPopularity({
+          cancellablePromises.push(window.apiHelper.fetchNavOptPopularity({
             silenceErrors: options.silenceErrors,
             paths: pathsToLoad
           }).done(function (data) {
@@ -935,7 +935,7 @@ var DataCatalog = (function () {
         if (self.dataCatalog.invalidatePromise) {
           invalidatePromise = self.dataCatalog.invalidatePromise;
         } else {
-          invalidatePromise = ApiHelper.getInstance().invalidateSourceMetadata({
+          invalidatePromise = window.apiHelper.invalidateSourceMetadata({
             sourceType: self.getSourceType(),
             compute: self.compute,
             invalidate: invalidate,
@@ -1134,7 +1134,7 @@ var DataCatalog = (function () {
           });
         };
 
-        cancellablePromises.push(ApiHelper.getInstance().searchEntities({
+        cancellablePromises.push(window.apiHelper.searchEntities({
           query: query,
           rawQuery: true,
           limit: children.length,
@@ -1265,7 +1265,7 @@ var DataCatalog = (function () {
           deferred.resolve(childEntries.filter(function (entry) { return entry.navOptPopularity }));
         }).fail(deferred.reject));
       } else if (self.isDatabase() || self.isTableOrView()) {
-        cancellablePromises.push(ApiHelper.getInstance().fetchNavOptPopularity({
+        cancellablePromises.push(window.apiHelper.fetchNavOptPopularity({
           silenceErrors: options && options.silenceErrors,
           refreshCache: options && options.refreshCache,
           paths: [ self.path ]
@@ -1405,7 +1405,7 @@ var DataCatalog = (function () {
         }
         self.getNavigatorMeta(apiOptions).done(function (navigatorMeta) {
           if (navigatorMeta) {
-            ApiHelper.getInstance().updateNavigatorProperties({
+            window.apiHelper.updateNavigatorProperties({
               identity: navigatorMeta.identity,
               modifiedCustomMetadata: modifiedCustomMetadata,
               deletedCustomMetadataKeys: deletedCustomMetadataKeys
@@ -1451,7 +1451,7 @@ var DataCatalog = (function () {
         }
         self.getNavigatorMeta(apiOptions).done(function (navigatorMeta) {
           if (navigatorMeta) {
-            ApiHelper.getInstance().updateNavigatorProperties({
+            window.apiHelper.updateNavigatorProperties({
               identity: navigatorMeta.identity,
               properties: {
                 description: comment
@@ -1472,7 +1472,7 @@ var DataCatalog = (function () {
           }
         }).fail(deferred.reject);
       } else {
-        ApiHelper.getInstance().updateSourceMetadata({
+        window.apiHelper.updateSourceMetadata({
           sourceType: self.getSourceType(),
           path: self.path,
           properties: {
@@ -1504,7 +1504,7 @@ var DataCatalog = (function () {
       if (self.canHaveNavigatorMetadata()) {
         self.getNavigatorMeta().done(function (navMeta) {
           if (navMeta && typeof navMeta.identity !== 'undefined') {
-            ApiHelper.getInstance().addNavTags(navMeta.identity, tags).done(function (entity) {
+            window.apiHelper.addNavTags(navMeta.identity, tags).done(function (entity) {
               if (entity) {
                 self.navigatorMeta = entity;
                 self.navigatorMetaPromise = $.Deferred().resolve(self.navigatorMeta).promise();
@@ -1537,7 +1537,7 @@ var DataCatalog = (function () {
       if (self.canHaveNavigatorMetadata()) {
         self.getNavigatorMeta().done(function (navMeta) {
           if (navMeta && typeof navMeta.identity !== 'undefined') {
-            ApiHelper.getInstance().deleteNavTags(navMeta.identity, tags).done(function (entity) {
+            window.apiHelper.deleteNavTags(navMeta.identity, tags).done(function (entity) {
               if (entity) {
                 self.navigatorMeta = entity;
                 self.navigatorMetaPromise = $.Deferred().resolve(self.navigatorMeta).promise();
@@ -1966,7 +1966,7 @@ var DataCatalog = (function () {
 
       // This prevents caching of any non-standard sample queries, i.e. DISTINCT etc.
       if (options && options.operation && options.operation !== 'default') {
-        return applyCancellable(ApiHelper.getInstance().fetchSample({
+        return applyCancellable(window.apiHelper.fetchSample({
           sourceType: self.dataCatalog.sourceType,
           compute: self.compute,
           path: self.path,
@@ -2321,7 +2321,7 @@ var DataCatalog = (function () {
       self.allNavigatorTagsPromise = deferred.promise();
 
       var reloadAllTags = function () {
-        ApiHelper.getInstance().fetchAllNavigatorTags({
+        window.apiHelper.fetchAllNavigatorTags({
           silenceErrors: options && options.silenceErrors,
         }).done(deferred.resolve).fail(deferred.reject);
 

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/home2.vm.js

@@ -28,7 +28,7 @@ var HomeViewModel = (function () {
 
     self.user = options.user;
     self.superuser = options.superuser;
-    self.apiHelper = ApiHelper.getInstance(options);
+    self.apiHelper = window.apiHelper;
     self.isLeftPanelVisible = ko.observable(false);
     // Uncomment to enable the assist panel
     // self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/hue-bundle-6bd3f5f21e9d494b3f9e.js.map


Файловите разлики са ограничени, защото са твърде много
+ 2680 - 96
desktop/core/src/desktop/static/desktop/js/hue-bundle-af87daf64bcf8bd84638.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/hue-bundle-af87daf64bcf8bd84638.js.map


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

@@ -2571,7 +2571,7 @@
         return function () {
           var options = valueAccessor();
 
-          ApiHelper.getInstance().fetchDocument({
+          window.apiHelper.fetchDocument({
             uuid: options.uuid,
             fetchContents: true,
             silenceErrors: true
@@ -4702,7 +4702,7 @@
           return;
         }
 
-        var suppressedRules = ApiHelper.getInstance().getFromTotalStorage('hue.syntax.checker', 'suppressedRules', {});
+        var suppressedRules = window.apiHelper.getFromTotalStorage('hue.syntax.checker', 'suppressedRules', {});
         if (e.data.syntaxError && e.data.syntaxError.ruleId && !suppressedRules[e.data.syntaxError.ruleId.toString() + e.data.syntaxError.text.toLowerCase()]) {
           if (self.snippet.positionStatement() && SqlUtils.locationEquals(e.data.statementLocation, self.snippet.positionStatement().location)) {
             self.snippet.positionStatement().syntaxError = true;
@@ -5260,7 +5260,7 @@
         aceErrorsSub.dispose();
       });
 
-      var darkThemeEnabled = ApiHelper.getInstance().getFromTotalStorage('ace', 'dark.theme.enabled', false);
+      var darkThemeEnabled = window.apiHelper.getFromTotalStorage('ace', 'dark.theme.enabled', false);
       editor.setTheme(darkThemeEnabled ? 'ace/theme/hue_dark' : 'ace/theme/hue');
 
       var editorOptions = {
@@ -5282,7 +5282,7 @@
       editor.customMenuOptions = {
         setEnableDarkTheme: function (enabled) {
           darkThemeEnabled = enabled;
-          ApiHelper.getInstance().setInTotalStorage('ace', 'dark.theme.enabled', darkThemeEnabled);
+          window.apiHelper.setInTotalStorage('ace', 'dark.theme.enabled', darkThemeEnabled);
           editor.setTheme(darkThemeEnabled ? 'ace/theme/hue_dark' : 'ace/theme/hue');
         },
         getEnableDarkTheme: function () {
@@ -5346,7 +5346,7 @@
           return errorHighlightingEnabled;
         };
         editor.customMenuOptions.setClearIgnoredSyntaxChecks = function (flag) {
-          ApiHelper.getInstance().setInTotalStorage('hue.syntax.checker', 'suppressedRules', {});
+          window.apiHelper.setInTotalStorage('hue.syntax.checker', 'suppressedRules', {});
           $('#setClearIgnoredSyntaxChecks').hide();
           $('#setClearIgnoredSyntaxChecks').before('<div style="margin-top:5px;float:right;">done</div>');
         };
@@ -5580,7 +5580,7 @@
         bindKey: { win: 'Ctrl-Alt-t', mac: 'Command-Alt-t' },
         exec: function () {
           darkThemeEnabled = !darkThemeEnabled;
-          ApiHelper.getInstance().setInTotalStorage('ace', 'dark.theme.enabled', darkThemeEnabled);
+          window.apiHelper.setInTotalStorage('ace', 'dark.theme.enabled', darkThemeEnabled);
           editor.setTheme(darkThemeEnabled ? 'ace/theme/hue_dark' : 'ace/theme/hue');
         }
       });
@@ -7143,7 +7143,7 @@
           if (query === '' && options.value && !firstLoad){
             firstLoad = true;
           }
-          ApiHelper.getInstance().searchDocuments({
+          window.apiHelper.searchDocuments({
             type: type,
             text: query,
             include_trashed: false,

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/share2.vm.js

@@ -28,7 +28,7 @@ function ShareViewModel(updateDocF) {
   self.idToUserMap = {};
   self.groupMap = {};
   self.items = [];
-  self.apiHelper = ApiHelper.getInstance();
+  self.apiHelper = window.apiHelper;
   self.searchInput = ko.observable();
   self.selectedPerm = ko.observable('read');
   self.selectedPermLabel = ko.computed(function() {

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js

@@ -96,7 +96,7 @@ var AutocompleteResults = (function () {
    */
   function AutocompleteResults (options) {
     var self = this;
-    self.apiHelper = ApiHelper.getInstance();
+    self.apiHelper = window.apiHelper;
     self.snippet = options.snippet;
     self.editor = options.editor;
     self.temporaryOnly = options.snippet.autocompleteSettings && options.snippet.autocompleteSettings.temporaryOnly;

+ 2 - 5
desktop/core/src/desktop/static/desktop/spec/apiHelperSpec.js

@@ -16,13 +16,10 @@
 (function() {
 
   describe('apiHelper.js', function() {
-    var subject = ApiHelper.getInstance({
-      i18n: {},
-      user: 'testUser'
-    });
+    var subject = window.apiHelper;
 
     it('should be singleton', function() {
-      var otherHelper = ApiHelper.getInstance();
+      var otherHelper = window.apiHelper;
       expect(subject === otherHelper).toBeTruthy();
     });
 

+ 1 - 4
desktop/core/src/desktop/static/desktop/spec/hdfsAutocompleterSpec.js

@@ -21,10 +21,7 @@
       responseForUrls: {}
     };
 
-    var apiHelper = ApiHelper.getInstance({
-      i18n: {},
-      user: 'testUser'
-    });
+    var apiHelper = window.apiHelper;
 
     var snippet = {
       type: ko.observable(),

+ 1 - 1
desktop/core/src/desktop/static/desktop/spec/sqlAutocompleter3Spec.js

@@ -272,7 +272,7 @@
             }
           });
 
-          ApiHelper.getInstance();
+          window.apiHelper;
           huePubSub.publish('assist.clear.all.caches');
         });
 

+ 6 - 6
desktop/core/src/desktop/templates/assist.mako

@@ -1357,7 +1357,7 @@ from desktop.views import _ko
                         name: assistDbSource.selectedNamespace().selectedDatabase().name
                       })
                     } else {
-                      var lastSelectedDb = ApiHelper.getInstance().getFromTotalStorage('assist_' + source + '_' + assistDbSource.selectedNamespace().namespace.id, 'lastSelectedDb', 'default');
+                      var lastSelectedDb = window.apiHelper.getFromTotalStorage('assist_' + source + '_' + assistDbSource.selectedNamespace().namespace.id, 'lastSelectedDb', 'default');
                       deferred.resolve({
                         sourceType: source,
                         namespace: assistDbSource.selectedNamespace().namespace,
@@ -1773,7 +1773,7 @@ from desktop.views import _ko
        **/
       function AssistGitPanel (options) {
         var self = this;
-        self.apiHelper = ApiHelper.getInstance();
+        self.apiHelper = window.apiHelper;
 
         self.selectedGitEntry = ko.observable();
         self.reload = function () {
@@ -2020,7 +2020,7 @@ from desktop.views import _ko
           errorLoadingTablePreview: "${ _('There was a problem loading the index preview') }"
         };
 
-        self.apiHelper = ApiHelper.getInstance();
+        self.apiHelper = window.apiHelper;
 
         self.tabsEnabled = '${ USE_NEW_SIDE_PANELS.get() }' === 'True';
 
@@ -2382,7 +2382,7 @@ from desktop.views import _ko
           return self.loadDeferred.promise();
         }
         self.loading(true);
-        ApiHelper.getInstance().simpleGet(IMPALA_DOC_INDEX[self.ref]).done(function (doc) {
+        window.apiHelper.simpleGet(IMPALA_DOC_INDEX[self.ref]).done(function (doc) {
           self.body(doc.body);
         }).always(function () {
           self.loading(false);
@@ -2626,7 +2626,7 @@ from desktop.views import _ko
           return result;
         });
 
-        var apiHelper = ApiHelper.getInstance();
+        var apiHelper = window.apiHelper;
 
         self.activeType.subscribe(function (newType) {
           self.selectedFunction(selectedFunctionPerType[newType]);
@@ -3595,7 +3595,7 @@ from desktop.views import _ko
         self.langRefTabAvailable = ko.observable(false);
         self.schedulesTabAvailable = ko.observable(false);
 
-        var apiHelper = ApiHelper.getInstance();
+        var apiHelper = window.apiHelper;
         self.lastActiveTabEditor = apiHelper.withTotalStorage('assist', 'last.open.right.panel', ko.observable(), EDITOR_ASSISTANT_TAB);
         self.lastActiveTabDashboard = apiHelper.withTotalStorage('assist', 'last.open.right.panel.dashboard', ko.observable(), DASHBOARD_ASSISTANT_TAB);
 

+ 1 - 1
desktop/core/src/desktop/templates/assist_m.mako

@@ -70,7 +70,7 @@ ${ assist.assistPanel() }
 
     function AssistViewModel(options) {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 1 - 1
desktop/core/src/desktop/templates/catalog.mako

@@ -70,7 +70,7 @@
 
     var CatalogViewModel = function () {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
 
       self.query = ko.observable("");
 

+ 0 - 1
desktop/core/src/desktop/templates/common_header.mako

@@ -207,7 +207,6 @@ if USE_NEW_EDITOR.get():
 % if user.is_authenticated():
   <script src="${ static('desktop/ext/js/localforage.min.js') }"></script>
   <script src="${ static('desktop/js/dataCatalog.js') }"></script>
-  <script src="${ static('desktop/js/apiHelper.js') }"></script>
   <script src="${ static('desktop/js/clusterConfig.js') }"></script>
 
   <script type="text/javascript">

+ 2 - 3
desktop/core/src/desktop/templates/hue.mako

@@ -485,7 +485,6 @@ ${ render_bundle('hue') | n,unicode }
 
 <script src="${ static('desktop/js/hue.colors.js') }"></script>
 <script src="${ static('desktop/js/dataCatalog.js') }"></script>
-<script src="${ static('desktop/js/apiHelper.js') }"></script>
 
 <script src="${ static('desktop/js/ko.hue-bindings.js') }"></script>
 <script src="${ static('desktop/js/sqlUtils.js') }"></script>
@@ -1300,7 +1299,7 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
     var sidePanelViewModel = (function () {
       function SidePanelViewModel () {
         var self = this;
-        self.apiHelper = ApiHelper.getInstance();
+        self.apiHelper = window.apiHelper;
         self.assistWithoutStorage = ko.observable(false);
         self.leftAssistVisible = ko.observable(self.apiHelper.getFromTotalStorage('assist', 'left_assist_panel_visible', true));
         self.leftAssistVisible.subscribe(function (val) {
@@ -1469,7 +1468,7 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
 
         // TODO: Drop. Just for PoC
         self.pocClusterMode = ko.observable();
-        ApiHelper.getInstance().withTotalStorage('topNav', 'multiCluster', self.pocClusterMode, 'dw')
+        window.apiHelper.withTotalStorage('topNav', 'multiCluster', self.pocClusterMode, 'dw')
         huePubSub.subscribe('set.multi.cluster.mode', self.pocClusterMode);
 
         self.onePageViewModel.currentApp.subscribe(function () {

+ 5 - 5
desktop/core/src/desktop/templates/ko_components/ko_context_popover.mako

@@ -632,7 +632,7 @@ from metadata.conf import has_navigator
           }).done(function (analysis) {
             var found = analysis.properties && analysis.properties.some(function (property) {
               if (property.col_name.toLowerCase() === 'view original text:') {
-                ApiHelper.getInstance().formatSql({statements: property.data_type}).done(function (formatResponse) {
+                window.apiHelper.formatSql({statements: property.data_type}).done(function (formatResponse) {
                   if (formatResponse.status === 0) {
                     viewSqlDeferred.resolve(formatResponse.formatted_statements);
                   } else {
@@ -990,7 +990,7 @@ from metadata.conf import has_navigator
         var self = this;
         self.hasErrors(false);
         self.loading(true);
-        ApiHelper.getInstance().fetchDocument({
+        window.apiHelper.fetchDocument({
           uuid: self.data.uuid,
           fetchContents: true,
           silenceErrors: true
@@ -1006,7 +1006,7 @@ from metadata.conf import has_navigator
       function CollectionContextTabs(data) {
         var self = this;
 
-        self.apiHelper = ApiHelper.getInstance();
+        self.apiHelper = window.apiHelper;
 
         self.disposals = [];
 
@@ -1130,7 +1130,7 @@ from metadata.conf import has_navigator
       function ResizeHelper (orientation, leftAdjust, topAdjust) {
         var self = this;
 
-        var apiHelper = ApiHelper.getInstance();
+        var apiHelper = window.apiHelper;
 
         var originalMidX, originalWidth, originalRightX, originalLeftX, originalMidY, originalHeight, originalTopY, originalBottomY;
         var rightX, leftX, leftDiff, rightDiff, topY, bottomY, topDiff, bottomDiff;
@@ -1287,7 +1287,7 @@ from metadata.conf import has_navigator
         var self = this;
         self.disposals = [];
 
-        var apiHelper = ApiHelper.getInstance();
+        var apiHelper = window.apiHelper;
 
         self.left = ko.observable(0);
         self.top = ko.observable(0);

+ 2 - 2
desktop/core/src/desktop/templates/ko_components/ko_context_selector.mako

@@ -146,7 +146,7 @@ from desktop.views import _ko
       var HueContextSelector = function (params) {
         var self = this;
 
-        self.apiHelper = ApiHelper.getInstance();
+        self.apiHelper = window.apiHelper;
 
         self.sourceType = params.sourceType;
         self.disposals = [];
@@ -371,7 +371,7 @@ from desktop.views import _ko
                   self.availableDatabases([]);
                 }).always(function () {
                   if (!self.database() || self.availableDatabases().indexOf(self.database()) === -1) {
-                    var lastSelectedDb = ApiHelper.getInstance().getFromTotalStorage('assist_' + ko.unwrap(self.sourceType) + '_' + self[TYPES_INDEX.namespace.name]().id, 'lastSelectedDb', 'default');
+                    var lastSelectedDb = window.apiHelper.getFromTotalStorage('assist_' + ko.unwrap(self.sourceType) + '_' + self[TYPES_INDEX.namespace.name]().id, 'lastSelectedDb', 'default');
                     if (self.availableDatabases().length === 0 || self.availableDatabases().indexOf(lastSelectedDb) !== -1) {
                       self.database(lastSelectedDb);
                     } else {

+ 1 - 1
desktop/core/src/desktop/templates/ko_components/ko_dw_sidebar.mako

@@ -111,7 +111,7 @@
             $(element).removeClass('collapsed')
           }
         });
-        ApiHelper.getInstance().withTotalStorage('sidebar', 'collapsed', self.collapsed, false);
+        window.apiHelper.withTotalStorage('sidebar', 'collapsed', self.collapsed, false);
 
         self.activeUrl = ko.observable();
 

+ 2 - 2
desktop/core/src/desktop/templates/ko_components/ko_execution_analysis.mako

@@ -149,7 +149,7 @@ from desktop.views import _ko
       ExecutionAnalysis.prototype.loadAnalysis = function (compute, queryId) {
         var self = this;
         self.loading(true);
-        self.lastAnalysisPromise = ApiHelper.getInstance().fetchQueryExecutionAnalysis({
+        self.lastAnalysisPromise = window.apiHelper.fetchQueryExecutionAnalysis({
           silenceErrors: true,
           compute: compute,
           queryId: queryId
@@ -221,7 +221,7 @@ from desktop.views import _ko
 
       ExecutionAnalysis.prototype.handleFix = function (fix) {
         var self = this;
-        ApiHelper.getInstance().fixQueryExecutionAnalysis({ fix: fix, start_time: ko.mapping.toJSON((new Date()).getTime()), compute: self.details().compute })
+        window.apiHelper.fixQueryExecutionAnalysis({ fix: fix, start_time: ko.mapping.toJSON((new Date()).getTime()), compute: self.details().compute })
         .done(function(resp) {
           huePubSub.publish('notebook.task.submitted', resp.task.history_uuid);
           fix.fixed = true;

+ 1 - 1
desktop/core/src/desktop/templates/ko_components/ko_global_search.mako

@@ -122,7 +122,7 @@ from desktop.views import _ko
 
       var GlobalSearch = function () {
         var self = this;
-        self.apiHelper = ApiHelper.getInstance();
+        self.apiHelper = window.apiHelper;
         self.knownFacetValues = ko.observable({
           'type': { 'field': 1, 'table': 1, 'view': 1, 'database': 1, 'partition': 1, 'document' : 1 }
         });

+ 8 - 8
desktop/core/src/desktop/templates/ko_components/ko_performance_graph.mako

@@ -75,7 +75,7 @@
           step: 5 * 60 * 1000 // Every 5 minutes
         }];
 
-        self.selectedGranularity = ko.observable(self.availableGranularities[ApiHelper.getInstance().getFromTotalStorage('warehouses', 'performanceGraphGranularity', 0)]);
+        self.selectedGranularity = ko.observable(self.availableGranularities[window.apiHelper.getFromTotalStorage('warehouses', 'performanceGraphGranularity', 0)]);
         self.clusterName = ko.observable(params.clusterName);
 
         // Load the initial data
@@ -99,7 +99,7 @@
             self.selectedGranularity.subscribe(function (granularity) {
               for (var i = 0; i < self.availableGranularities.length; i++) {
                 if (granularity === self.availableGranularities[i]) {
-                  ApiHelper.getInstance().setInTotalStorage('warehouses', 'performanceGraphGranularity', i);
+                  window.apiHelper.setInTotalStorage('warehouses', 'performanceGraphGranularity', i);
                   break;
                 }
               }
@@ -310,7 +310,7 @@
             tooltip: options.tooltip,
             toggle: function () {
               enabled = !enabled;
-              ApiHelper.getInstance().setInTotalStorage('warehouses', options.id + 'GraphEnabled', enabled);
+              window.apiHelper.setInTotalStorage('warehouses', options.id + 'GraphEnabled', enabled);
               mainGroup.select('.highlight-point-' + options.id).style('display', enabled ? null : 'none');
               mainGroup.select('.line-' + options.id).transition().style('opacity', enabled ? 1 : 0);
               subGroup.select('.line-' + options.id).transition().style('opacity', enabled ? 1 : 0);
@@ -346,7 +346,7 @@
           createLineGraph({
             id: 'queries',
             label: '${ _("Queries") }',
-            enabled: ApiHelper.getInstance().getFromTotalStorage('warehouses', 'queriesGraphEnabled', true),
+            enabled: window.apiHelper.getFromTotalStorage('warehouses', 'queriesGraphEnabled', true),
             color: '#A9DBF1',
             subLineColor: '#DCDCDC',
             area: true,
@@ -367,7 +367,7 @@
           }),
           createLineGraph({
             id: 'cpu',
-            enabled: ApiHelper.getInstance().getFromTotalStorage('warehouses', 'cpuGraphEnabled', false),
+            enabled: window.apiHelper.getFromTotalStorage('warehouses', 'cpuGraphEnabled', false),
             label: '${ _("CPU") }',
             color: '#654C94',
             subLine: true,
@@ -377,7 +377,7 @@
           }),
           createLineGraph({
             id: 'memory',
-            enabled: ApiHelper.getInstance().getFromTotalStorage('warehouses', 'memoryGraphEnabled', false),
+            enabled: window.apiHelper.getFromTotalStorage('warehouses', 'memoryGraphEnabled', false),
             label: '${ _("Memory") }',
             color: '#83C1B9',
             subLine: true,
@@ -387,7 +387,7 @@
           }),
           createLineGraph({
             id: 'io',
-            enabled: ApiHelper.getInstance().getFromTotalStorage('warehouses', 'ioGraphEnabled', false),
+            enabled: window.apiHelper.getFromTotalStorage('warehouses', 'ioGraphEnabled', false),
             label: '${ _("IO") }',
             color: '#D4965E',
             subLine: true,
@@ -652,7 +652,7 @@
 
       PerformanceGraph.prototype.loadData = function () {
         var self = this;
-        return ApiHelper.getInstance().fetchResourceStats({
+        return window.apiHelper.fetchResourceStats({
           clusterName: self.clusterName(),
           pastMs: self.selectedGranularity().totalTime,
           stepMs: self.selectedGranularity().step

+ 1 - 1
desktop/core/src/desktop/templates/ko_components/ko_simple_ace_editor.mako

@@ -596,7 +596,7 @@ from desktop.views import _ko
           self.entries = ko.observableArray();
           self.editor = editor;
           self.collection = collection;
-          self.apiHelper = ApiHelper.getInstance();
+          self.apiHelper = window.apiHelper;
           self.lastNonSampleSuggestions = [];
           self.parseResult = {};
 

+ 1 - 1
desktop/core/src/desktop/templates/metrics.mako

@@ -39,7 +39,7 @@ ${ commonheader(_('Metrics'), "about", user, request) | n,unicode }
   (function () {
     var MetricsViewModel = function () {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.metricsFilter = ko.observable();
       self.metrics = ko.observableArray();
       self.selectedMetric = ko.observable('All');

+ 2 - 2
desktop/core/src/desktop/templates/sql_syntax_dropdown.mako

@@ -66,9 +66,9 @@ from django.utils.translation import ugettext as _
 
         var selectedSub = self.selected.subscribe(function (newValue) {
           if (typeof newValue.suppressRule !== 'undefined') {
-            var suppressedRules = ApiHelper.getInstance().getFromTotalStorage('hue.syntax.checker', 'suppressedRules', {});
+            var suppressedRules = window.apiHelper.getFromTotalStorage('hue.syntax.checker', 'suppressedRules', {});
             suppressedRules[newValue.suppressRule] = true;
-            ApiHelper.getInstance().setInTotalStorage('hue.syntax.checker', 'suppressedRules', suppressedRules);
+            window.apiHelper.setInTotalStorage('hue.syntax.checker', 'suppressedRules', suppressedRules);
             huePubSub.publish('editor.refresh.statement.locations', params.snippet);
           } else {
             params.editor.session.replace(params.range, newValue);

+ 1 - 1
desktop/core/src/desktop/templates/threads.mako

@@ -30,7 +30,7 @@ ${ commonheader(_('Threads'), "about", user, request) | n,unicode }
   (function () {
     var ThreadsViewModel = function () {
       var self = this;
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.threads = ko.observable();
       self.fetchThreads = function () {
         self.apiHelper.simpleGet('/desktop/debug/threads', {}, {successCallback: self.threads});

+ 1 - 1
desktop/libs/dashboard/src/dashboard/static/dashboard/js/search.ko.js

@@ -2000,7 +2000,7 @@ var TempDocument = function () {
   self.uuid = ko.observable();
   self.uuid.subscribe(function (val) {
     if (val) {
-      ApiHelper.getInstance().fetchDocument({ uuid: val, silenceErrors: false, fetchContents: true }).done(function (data) {
+      window.apiHelper.fetchDocument({ uuid: val, silenceErrors: false, fetchContents: true }).done(function (data) {
         if (data && data.data && data.data.snippets.length > 0) {
           self.name(data.document.name);
           var snippet = data.data.snippets[0];

+ 1 - 1
desktop/libs/dashboard/src/dashboard/templates/common_search.mako

@@ -5066,7 +5066,7 @@ $(document).ready(function () {
   huePubSub.subscribe('app.dom.unload', function (app) {
     if (app === 'dashboard') {
       %if is_report:
-      if (ApiHelper.getInstance().getFromTotalStorage('assist', 'right_assist_panel_visible', false)) {
+      if (window.apiHelper.getFromTotalStorage('assist', 'right_assist_panel_visible', false)) {
         huePubSub.publish('right.assist.show');
       }
       %endif

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -2972,7 +2972,7 @@ ${ assist.assistPanel() }
     var IndexerViewModel = function () {
       var self = this;
 
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.sourceType = window.location.getParameter('sourceType', true) || '${ source_type }';
       self.namespaceId = window.location.getParameter('namespace', true);
       self.computeId =  window.location.getParameter('compute', true);

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/indexer.mako

@@ -933,7 +933,7 @@ ${ assist.assistPanel() }
     var IndexerViewModel = function () {
       var self = this;
 
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.assistAvailable = ko.observable(true);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/indexes.mako

@@ -657,7 +657,7 @@ ${ assist.assistPanel() }
       });
 
       self.assistAvailable = ko.observable(true);
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.isHue4 = ko.observable(options.hue4);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/topics.mako

@@ -588,7 +588,7 @@ ${ assist.assistPanel() }
       });
 
       self.assistAvailable = ko.observable(true);
-      self.apiHelper = ApiHelper.getInstance();
+      self.apiHelper = window.apiHelper;
       self.isHue4 = ko.observable(options.hue4);
       self.isLeftPanelVisible = ko.observable();
       self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);

+ 7 - 7
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -422,7 +422,7 @@ var EditorViewModel = (function() {
     };
 
     self.getApiHelper = function() {
-      return ApiHelper.getInstance(vm);
+      return window.apiHelper;
     };
 
     // namespace and compute might be initialized as empty object {}
@@ -2761,7 +2761,7 @@ var EditorViewModel = (function() {
     };
 
     self.saveDefaultUserProperties = function (session) {
-      var apiHelper = ApiHelper.getInstance();
+      var apiHelper = window.apiHelper;
       apiHelper.saveConfiguration({
         app: session.type(),
         properties: session.properties,
@@ -3301,18 +3301,18 @@ var EditorViewModel = (function() {
 
     self.assistWithoutStorage = ko.observable(false);
 
-    self.isLeftPanelVisible = ko.observable(ApiHelper.getInstance().getFromTotalStorage('assist', 'assist_panel_visible', true));
+    self.isLeftPanelVisible = ko.observable(window.apiHelper.getFromTotalStorage('assist', 'assist_panel_visible', true));
     self.isLeftPanelVisible.subscribe(function (val) {
       if (!self.assistWithoutStorage()){
-        ApiHelper.getInstance().setInTotalStorage('assist', 'assist_panel_visible', val);
+        window.apiHelper.setInTotalStorage('assist', 'assist_panel_visible', val);
       }
     });
 
     self.isRightPanelAvailable = ko.observable(options.assistAvailable && HAS_OPTIMIZER);
-    self.isRightPanelVisible = ko.observable(ApiHelper.getInstance().getFromTotalStorage('assist', 'right_assist_panel_visible', true));
+    self.isRightPanelVisible = ko.observable(window.apiHelper.getFromTotalStorage('assist', 'right_assist_panel_visible', true));
     self.isRightPanelVisible.subscribe(function (val) {
       if (!self.assistWithoutStorage()){
-        ApiHelper.getInstance().setInTotalStorage('assist', 'right_assist_panel_visible', val);
+        window.apiHelper.setInTotalStorage('assist', 'right_assist_panel_visible', val);
       }
     });
 
@@ -3371,7 +3371,7 @@ var EditorViewModel = (function() {
             }
           }
         };
-        ApiHelper.getInstance().saveSnippetToFile(data, options);
+        window.apiHelper.saveSnippetToFile(data, options);
       });
     }, self.huePubSubId);
 

+ 1 - 1
webpack-stats.json

@@ -1 +1 @@
-{"status":"done","chunks":{"hue":[{"name":"hue-bundle-6bd3f5f21e9d494b3f9e.js","path":"/Users/jahlen/dev/hue/desktop/core/src/desktop/static/desktop/js/hue-bundle-6bd3f5f21e9d494b3f9e.js"},{"name":"hue-bundle-6bd3f5f21e9d494b3f9e.js.map","path":"/Users/jahlen/dev/hue/desktop/core/src/desktop/static/desktop/js/hue-bundle-6bd3f5f21e9d494b3f9e.js.map"}]}}
+{"status":"done","chunks":{"hue":[{"name":"hue-bundle-af87daf64bcf8bd84638.js","path":"/Users/jahlen/dev/hue/desktop/core/src/desktop/static/desktop/js/hue-bundle-af87daf64bcf8bd84638.js"},{"name":"hue-bundle-af87daf64bcf8bd84638.js.map","path":"/Users/jahlen/dev/hue/desktop/core/src/desktop/static/desktop/js/hue-bundle-af87daf64bcf8bd84638.js.map"}]}}

+ 7 - 4
webpack.config.js

@@ -41,10 +41,13 @@ module.exports = {
         loader: 'babel-loader'
       },
       { test: /lodash$/, loader: 'expose-loader?_' },
-      { test: /jquery.js$/, loader: [
-        'expose-loader?$',
-          'expose-loader?jQuery'] },
-      // needed for moment-timezone
+      {
+        test: /jquery.js$/,
+        loader: [
+          'expose-loader?$',
+          'expose-loader?jQuery'
+        ]
+      },
       { include: /\.json$/, loaders: ['json-loader'] }
     ]
   },

Някои файлове не бяха показани, защото твърде много файлове са промени