瀏覽代碼

HUE-7743 [core] Extract and consolidate global JS variables into one js file

Johan Ahlen 8 年之前
父節點
當前提交
56a99c7ed6
共有 33 個文件被更改,包括 410 次插入464 次删除
  1. 4 5
      apps/filebrowser/src/filebrowser/templates/listdir_components.mako
  2. 2 2
      apps/metastore/src/metastore/static/metastore/js/metastore.model.js
  3. 3 14
      desktop/core/src/desktop/static/desktop/js/apiHelper.js
  4. 3 3
      desktop/core/src/desktop/static/desktop/js/document/hueFileEntry.js
  5. 1 1
      desktop/core/src/desktop/static/desktop/js/home2.vm.js
  6. 26 0
      desktop/core/src/desktop/static/desktop/js/hue.utils.js
  7. 5 29
      desktop/core/src/desktop/static/desktop/js/jquery.filechooser.js
  8. 3 15
      desktop/core/src/desktop/static/desktop/js/jquery.hdfstree.js
  9. 2 15
      desktop/core/src/desktop/static/desktop/js/jquery.tableextender.js
  10. 2 13
      desktop/core/src/desktop/static/desktop/js/jquery.tableextender2.js
  11. 11 11
      desktop/core/src/desktop/static/desktop/js/ko.charts.leaflet.js
  12. 1 1
      desktop/core/src/desktop/static/desktop/js/ko.common-dashboard.js
  13. 7 7
      desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js
  14. 1 1
      desktop/core/src/desktop/static/desktop/js/ko.selectize.js
  15. 2 2
      desktop/core/src/desktop/static/desktop/js/queryBuilder.js
  16. 40 40
      desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js
  17. 2 2
      desktop/core/src/desktop/static/desktop/spec/sqlAutocompleter3Spec.js
  18. 1 1
      desktop/core/src/desktop/templates/assist.mako
  19. 10 3
      desktop/core/src/desktop/templates/common_header.mako
  20. 1 217
      desktop/core/src/desktop/templates/common_header_footer_components.mako
  21. 52 40
      desktop/core/src/desktop/templates/common_header_m.mako
  22. 3 4
      desktop/core/src/desktop/templates/common_notebook_ko_components.mako
  23. 1 1
      desktop/core/src/desktop/templates/document_browser.mako
  24. 178 0
      desktop/core/src/desktop/templates/global_js_constants.mako
  25. 8 6
      desktop/core/src/desktop/templates/hue.mako
  26. 9 13
      desktop/core/src/desktop/templates/jasmineRunner.html
  27. 1 1
      desktop/core/src/desktop/templates/ko_components/ko_context_popover.mako
  28. 9 9
      desktop/core/src/desktop/templates/ko_components/ko_simple_ace_editor.mako
  29. 1 1
      desktop/core/src/desktop/templates/sql_syntax_dropdown.mako
  30. 3 0
      desktop/core/src/desktop/urls.py
  31. 11 0
      desktop/core/src/desktop/views.py
  32. 1 1
      desktop/libs/indexer/src/indexer/templates/importer.mako
  33. 6 6
      desktop/libs/notebook/src/notebook/templates/editor_components.mako

+ 4 - 5
apps/filebrowser/src/filebrowser/templates/listdir_components.mako

@@ -2081,7 +2081,7 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
                 '<span class="break-word" data-dz-name></span>' +
                 '<div class="pull-right">' +
                 '<span class="muted" data-dz-size></span>&nbsp;&nbsp;' +
-                '<span data-dz-remove><a href="javascript:undefined;" title="' + DropzoneGlobals.i18n.cancelUpload + '"><i class="fa fa-fw fa-times"></i></a></span>' +
+                '<span data-dz-remove><a href="javascript:undefined;" title="' + HUE_I18n.dropzone.cancelUpload + '"><i class="fa fa-fw fa-times"></i></a></span>' +
                 '<span style="display: none" data-dz-uploaded><i class="fa fa-fw fa-check muted"></i></span>' +
                 '</div>' +
                 '<div class="progress-row-bar" data-dz-uploadprogress></div>' +
@@ -2120,7 +2120,7 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
               $('#progressStatusBar div').width(progress.toFixed() + "%");
             },
             canceled: function () {
-              $.jHueNotify.info(DropzoneGlobals.i18n.uploadCanceled);
+              $.jHueNotify.info(HUE_I18n.dropzone.uploadCanceled);
             },
             complete: function (data) {
               if (data.xhr.response != '') {
@@ -2128,9 +2128,8 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
                 if (response && response.status != null) {
                   if (response.status != 0) {
                     $(document).trigger('error', response.data);
-                  }
-                  else {
-                    $(document).trigger('info', response.path + ' ' + DropzoneGlobals.i18n.uploadSucceeded);
+                  } else {
+                    $(document).trigger('info', response.path + ' ' + HUE_I18n.dropzone.uploadSucceeded);
                     viewModel.filesToHighlight.push(response.path);
                   }
                 }

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

@@ -424,7 +424,7 @@ var MetastoreTable = (function () {
     });
 
     self.partitionsCountLabel = ko.pureComputed(function () {
-      if (self.partitions.values().length === MetastoreGlobals.partitionsLimit) {
+      if (self.partitions.values().length === METASTORE_PARTITION_LIMIT) {
         return self.partitions.values().length + '+'
       }
       return self.partitions.values().length;
@@ -468,7 +468,7 @@ var MetastoreTable = (function () {
         },
         errorCallback: function (data) {
           self.refreshingTableStats(false);
-          $.jHueNotify.error(MetastoreGlobals.i18n.errorRefreshingTableStats);
+          $.jHueNotify.error(HUE_I18n.metastore.errorRefreshingTableStats);
           console.error('apiHelper.refreshTableStats error');
           console.error(data);
         }

+ 3 - 14
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -90,18 +90,8 @@ var ApiHelper = (function () {
     return typeof data !== 'undefined' && typeof data.status !== 'undefined' && data.status === 0;
   };
 
-  /**
-   * @param {Object} i18n
-   * @param {string} i18n.errorLoadingDatabases
-   * @param {string} i18n.errorLoadingTablePreview
-   * @param {string} user
-   *
-   * @constructor
-   */
-  function ApiHelper (i18n, user) {
+  function ApiHelper () {
     var self = this;
-    self.i18n = i18n;
-    self.user = user;
     self.lastKnownDatabases = {};
     self.queueManager = ApiQueueManager.getInstance();
     self.invalidateImpala = null;
@@ -182,8 +172,7 @@ var ApiHelper = (function () {
    * @returns {string}
    */
   ApiHelper.prototype.getTotalStorageUserPrefix = function (sourceType) {
-    var self = this;
-    return sourceType + '_' + self.user + '_' + window.location.hostname;
+    return sourceType + '_' + LOGGED_USERNAME + '_' + window.location.hostname;
   };
 
   /**
@@ -2282,7 +2271,7 @@ var ApiHelper = (function () {
      */
     getInstance: function () {
       if (instance === null) {
-        instance = new ApiHelper(ApiHelperGlobals.i18n, ApiHelperGlobals.user);
+        instance = new ApiHelper();
       }
       return instance;
     }

+ 3 - 3
desktop/core/src/desktop/static/desktop/js/document/hueFileEntry.js

@@ -108,7 +108,7 @@ var HueFileEntry = (function () {
         var type = entry.definition().type;
         if (!filters[type] && type !== 'directory') {
 
-          var label = DocumentTypeGlobals[type];
+          var label = HUE_I18n.documentType[type];
           if (!label) {
             if (type.indexOf('query-') === 0) {
               label = type.substring(6);
@@ -137,7 +137,7 @@ var HueFileEntry = (function () {
 
       result.unshift({
         type: 'all',
-        label: DocumentTypeGlobals['all']
+        label: HUE_I18n.documentType['all']
       });
 
       return result;
@@ -159,7 +159,7 @@ var HueFileEntry = (function () {
           var entryType = entry.definition().type;
           return (typeFilter === 'all' || entryType === typeFilter || entryType === 'directory')
             && (!filter || entry.definition().name.toLowerCase().indexOf(filter) !== -1 ||
-            (DocumentTypeGlobals[entryType] && DocumentTypeGlobals[entryType].toLowerCase().indexOf(filter) !== -1));
+            (HUE_I18n.documentType[entryType] && HUE_I18n.documentType[entryType].toLowerCase().indexOf(filter) !== -1));
         })
       }
       return self.entries();

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

@@ -37,7 +37,7 @@ var HomeViewModel = (function () {
     self.allDocumentTypes = ko.observableArray();
 
     var initialType = window.location.getParameter('type') !== '' ? window.location.getParameter('type') : 'all';
-    var availableTypes = $.map(DocumentTypeGlobals, function (value, key) {
+    var availableTypes = $.map(HUE_I18n.documentType, function (value, key) {
       var type = {
         type: key,
         label: value

+ 26 - 0
desktop/core/src/desktop/static/desktop/js/hue.utils.js

@@ -122,6 +122,32 @@ if (!('addRule' in CSSStyleSheet.prototype)) {
 (function (hueUtils) {
   'use strict';
 
+  hueUtils.bootstrapRatios = {
+    span3: function () {
+      var windowWidth = $(window).width();
+      if (windowWidth >= 1200) {
+        return 23.07692308;
+      } else if (windowWidth >= 768 && windowWidth <= 979) {
+        return 22.9281768;
+      } else {
+        return 23.17073171;
+      }
+    },
+    span9: function () {
+      var windowWidth = $(window).width();
+      if (windowWidth >= 1200) {
+        return 74.35897436;
+      } else if (windowWidth >= 768 && windowWidth <= 979) {
+        return 74.30939227;
+      } else {
+        return 74.3902439;
+      }
+    },
+    margin: function () {
+      return 2.56410256;
+    }
+  };
+
   /*
    * Convert text to URLs
    * Selector arg can be jQuery or document.querySelectorAll()

+ 5 - 29
desktop/core/src/desktop/static/desktop/js/jquery.filechooser.js

@@ -20,8 +20,6 @@
 (function ($, window, document, undefined) {
 
   var pluginName = "jHueFileChooser",
-  // global variables (jHueFileChooserGlobals, useful for i18n) can be set on
-  // desktop/templates/common_header.mako
     defaults = {
       initialPath: "",
       forceRefresh: false,
@@ -122,19 +120,9 @@
   function Plugin(element, options) {
     this.element = element;
     $(element).data('jHueFileChooser', this);
-    if (typeof jHueFileChooserGlobals != 'undefined') {
-      var extendedDefaults = $.extend({}, defaults, jHueFileChooserGlobals);
-      extendedDefaults.labels = $.extend({}, defaults.labels, jHueFileChooserGlobals.labels);
-      this.options = $.extend({}, extendedDefaults, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, extendedDefaults.labels, options.labels);
-      }
-    } else {
-      this.options = $.extend({}, defaults, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, defaults.labels, options.labels);
-      }
-    }
+
+    this.options = $.extend({}, defaults, { user: LOGGED_USERNAME }, options);
+    this.options.labels = $.extend({}, defaults.labels, HUE_I18n.jHueFileChooser, options ? options.labels : {});
     this._defaults = defaults;
     this._name = pluginName;
     this.previousPath = "";
@@ -143,20 +131,8 @@
 
   Plugin.prototype.setOptions = function (options) {
     var self = this;
-    if (typeof jHueFileChooserGlobals != 'undefined') {
-      var extendedDefaults = $.extend({}, defaults, jHueFileChooserGlobals);
-      extendedDefaults.labels = $.extend({}, defaults.labels, jHueFileChooserGlobals.labels);
-      self.options = $.extend({}, extendedDefaults, options);
-      if (options != null) {
-        self.options.labels = $.extend({}, extendedDefaults.labels, options.labels);
-      }
-    } else {
-      self.options = $.extend({}, defaults, options);
-      if (options != null) {
-        self.options.labels = $.extend({}, defaults.labels, options.labels);
-      }
-    }
-
+    self.options = $.extend({}, defaults, { user: LOGGED_USERNAME }, options);
+    self.options.labels = $.extend({}, defaults.labels, HUE_I18n.jHueFileChooser, options ? options.labels : {});
     var initialPath = $.trim(self.options.initialPath);
     var scheme = initialPath && initialPath.substring(0,initialPath.indexOf(":"));
     if (scheme && scheme.length) {

+ 3 - 15
desktop/core/src/desktop/static/desktop/js/jquery.hdfstree.js

@@ -43,24 +43,12 @@
           CANCEL: "Cancel",
           HOME: "Home"
         }
-      }
+      };
 
   function Plugin(element, options) {
     this.element = element;
-    if (typeof jHueHdfsTreeGlobals != 'undefined') {
-      var extendedDefaults = $.extend({}, defaults, jHueHdfsTreeGlobals);
-      extendedDefaults.labels = $.extend({}, defaults.labels, jHueHdfsTreeGlobals.labels);
-      this.options = $.extend({}, extendedDefaults, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, extendedDefaults.labels, options.labels);
-      }
-    }
-    else {
-      this.options = $.extend({}, defaults, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, defaults.labels, options.labels);
-      }
-    }
+    this.options = $.extend({}, defaults, options);
+    this.options.labels = $.extend({}, defaults.labels, HUE_I18n.jHueHdfsTree, options ? options.labels : {});
     this._defaults = defaults;
     this._name = pluginName;
     this.lastPath = "";

+ 2 - 15
desktop/core/src/desktop/static/desktop/js/jquery.tableextender.js

@@ -50,21 +50,8 @@
   }
 
   Plugin.prototype.setOptions = function (options) {
-    if (typeof jHueTableExtenderGlobals != 'undefined') {
-      var extendedDefaults = $.extend({}, defaults, jHueTableExtenderGlobals);
-      extendedDefaults.labels = $.extend({}, defaults.labels, jHueTableExtenderGlobals.labels);
-      this.options = $.extend({}, extendedDefaults, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, extendedDefaults.labels, options.labels);
-      }
-    }
-    else {
-      this.options = $.extend({}, defaults, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, defaults.labels, options.labels);
-      }
-    }
-
+    this.options = $.extend({}, defaults, options);
+    this.options.labels = $.extend({}, defaults.labels, HUE_I18n.jHueTableExtender, options ? options.labels : {});
     this._defaults = defaults;
 
     if (this.options.fixedHeader) {

+ 2 - 13
desktop/core/src/desktop/static/desktop/js/jquery.tableextender2.js

@@ -226,19 +226,8 @@
   };
 
   Plugin.prototype.setOptions = function (options) {
-    if (typeof jHueTableExtenderGlobals != 'undefined') {
-      var extendedDefaults = $.extend({}, DEFAULT_OPTIONS, jHueTableExtenderGlobals);
-      extendedDefaults.labels = $.extend({}, DEFAULT_OPTIONS.labels, jHueTableExtenderGlobals.labels);
-      this.options = $.extend({}, extendedDefaults, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, extendedDefaults.labels, options.labels);
-      }
-    } else {
-      this.options = $.extend({}, DEFAULT_OPTIONS, options);
-      if (options != null) {
-        this.options.labels = $.extend({}, DEFAULT_OPTIONS.labels, options.labels);
-      }
-    }
+    this.options = $.extend({}, DEFAULT_OPTIONS, options);
+    this.options.labels = $.extend({}, DEFAULT_OPTIONS.labels, HUE_I18n.jHueTableExtender, options ? options.labels : {})
   };
 
   Plugin.prototype.repositionHeader = function () {

+ 11 - 11
desktop/core/src/desktop/static/desktop/js/ko.charts.leaflet.js

@@ -86,22 +86,22 @@
         if (_hasAtLeastOneLat && _hasAtLeastOneLng) {
           try {
             if (_map == null) {
-              if (LeafletGlobals.mapOptions.crs) {
-                LeafletGlobals.mapOptions.crs = L.CRS[LeafletGlobals.mapOptions.crs];
+              if (LEAFLET_DEFAULTS.mapOptions.crs) {
+                LEAFLET_DEFAULTS.mapOptions.crs = L.CRS[LEAFLET_DEFAULTS.mapOptions.crs];
               }
-              _map = L.map(element, LeafletGlobals.mapOptions);
+              _map = L.map(element, LEAFLET_DEFAULTS.mapOptions);
               var tileLayerOptions = {
                 layer: 'http://{s}.tile.osm.org/{z}/{x}/{y}.png',
                 attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
+              };
+              if (LEAFLET_DEFAULTS.layer) {
+                tileLayerOptions.layer = LEAFLET_DEFAULTS.layer;
               }
-              if (LeafletGlobals) {
-                if (LeafletGlobals.layer) {
-                  tileLayerOptions.layer = LeafletGlobals.layer;
-                }
-                if (LeafletGlobals.attribution) {
-                  tileLayerOptions.attribution = LeafletGlobals.attribution;
-                }
-                tileLayerOptions = $.extend(tileLayerOptions, LeafletGlobals.layerOptions);
+              if (LEAFLET_DEFAULTS.attribution) {
+                tileLayerOptions.attribution = LEAFLET_DEFAULTS.attribution;
+              }
+              if (LEAFLET_DEFAULTS.layerOptions) {
+                tileLayerOptions = $.extend(tileLayerOptions, LEAFLET_DEFAULTS.layerOptions);
               }
               L.tileLayer(tileLayerOptions.layer, tileLayerOptions).addTo(_map);
 

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/ko.common-dashboard.js

@@ -133,7 +133,7 @@ var Row = function (widgets, vm, columns) {
   self.columns = ko.observableArray(columns ? columns : []);
   self.columns.subscribe(function (val) {
     self.columns().forEach(function (col) {
-      col.percWidth(Math.max(3, (100 - self.columns().length * BOOTSTRAP_RATIOS.MARGIN()) / self.columns().length));
+      col.percWidth(Math.max(3, (100 - self.columns().length * BOOTSTRAP_RATIOS.margin()) / self.columns().length));
     });
   });
 

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

@@ -4623,9 +4623,9 @@
                   if (token.notFound && token.syntaxError) {
                     var tooltipText;
                     if (token.syntaxError.expected.length > 0) {
-                      tooltipText = SyntaxCheckerGlobals.i18n.didYouMean + ' "' + token.syntaxError.expected[0].text + '"?';
+                      tooltipText = HUE_I18n.syntaxChecker.didYouMean + ' "' + token.syntaxError.expected[0].text + '"?';
                     } else {
-                      tooltipText = SyntaxCheckerGlobals.i18n.couldNotFind + ' "' + (token.qualifiedIdentifier || token.value) + '"';
+                      tooltipText = HUE_I18n.syntaxChecker.couldNotFind + ' "' + (token.qualifiedIdentifier || token.value) + '"';
                     }
                     var endCoordinates = editor.renderer.textToScreenCoordinates(pointerPosition.row, token.start);
                     contextTooltip.show(tooltipText, endCoordinates.pageX, endCoordinates.pageY + editor.renderer.lineHeight + 3);
@@ -4637,9 +4637,9 @@
                   if (token.syntaxError) {
                     var tooltipText;
                     if (token.syntaxError.expected.length > 0) {
-                      tooltipText = SyntaxCheckerGlobals.i18n.didYouMean + ' "' + token.syntaxError.expected[0].text + '"?';
+                      tooltipText = HUE_I18n.syntaxChecker.didYouMean + ' "' + token.syntaxError.expected[0].text + '"?';
                     } else if (token.syntaxError.expectedStatementEnd) {
-                      tooltipText = SyntaxCheckerGlobals.i18n.expectedStatementEnd;
+                      tooltipText = HUE_I18n.syntaxChecker.expectedStatementEnd;
                     }
                     if (tooltipText) {
                       var endCoordinates = editor.renderer.textToScreenCoordinates(pointerPosition.row, token.start);
@@ -6602,7 +6602,7 @@
         '<span class="break-word" data-dz-name></span>' +
         '<div class="pull-right">' +
         '<span class="muted" data-dz-size></span>&nbsp;&nbsp;' +
-        '<span data-dz-remove><a href="javascript:undefined;" title="' + DropzoneGlobals.i18n.cancelUpload + '"><i class="fa fa-fw fa-times"></i></a></span>' +
+        '<span data-dz-remove><a href="javascript:undefined;" title="' + HUE_I18n.dropzone.cancelUpload + '"><i class="fa fa-fw fa-times"></i></a></span>' +
           '<span style="display: none" data-dz-uploaded><i class="fa fa-fw fa-check muted"></i></span>' +
         '</div>' +
         '<div class="progress-row-bar" data-dz-uploadprogress></div>' +
@@ -6629,7 +6629,7 @@
           $('#progressStatusBar div').width(progress.toFixed() + "%");
         },
         canceled: function () {
-          $.jHueNotify.info(DropzoneGlobals.i18n.uploadCanceled);
+          $.jHueNotify.info(HUE_I18n.dropzone.uploadCanceled);
         },
         complete: function (file) {
           if (file.xhr.response != '') {
@@ -6642,7 +6642,7 @@
                 }
               }
               else {
-                $(document).trigger('info', response.path + ' ' + DropzoneGlobals.i18n.uploadSucceeded);
+                $(document).trigger('info', response.path + ' ' + HUE_I18n.dropzone.uploadSucceeded);
                 if (value.onComplete) {
                   value.onComplete(response.path);
                 }

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/ko.selectize.js

@@ -44,7 +44,7 @@ ko.bindingHandlers.browserAwareSelectize = {
 ko.bindingHandlers.selectize = {
   init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
     if (typeof allBindingsAccessor.get('optionsCaption') == 'undefined')
-      allBindingsAccessor = inject_binding(allBindingsAccessor, 'optionsCaption', SelectizeGlobals.i18n.CHOOSE);
+      allBindingsAccessor = inject_binding(allBindingsAccessor, 'optionsCaption', HUE_I18n.selectize.choose);
 
     ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
 

+ 2 - 2
desktop/core/src/desktop/static/desktop/js/queryBuilder.js

@@ -158,7 +158,7 @@
       // Should we have an input field?
       var inputField = '';
       if (hasInput) {
-        inputField = '<input type="text" placeholder="' + QueryBuilderGlobals.i18n.INSERT_VALUE_HERE + '" required>';
+        inputField = '<input type="text" placeholder="' + HUE_I18n.queryBuilder.insertValueHere + '" required>';
       }
 
       // Used to store new rule
@@ -256,7 +256,7 @@
       if (rules[PROJECT].length < 1 && rules[AGGREGATE].length < 1) {
         return {
           "status": "fail",
-          "message": QueryBuilderGlobals.i18n.QUERY_REQUIRE
+          "message": HUE_I18n.queryBuilder.queryRequire
         };
       }
 

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

@@ -31,28 +31,28 @@ var AutocompleteResults = (function () {
   };
 
   var CATEGORIES = {
-    ALL: { id: 'all', color: HueColors.BLUE, label: AutocompleterGlobals.i18n.category.all },
-    POPULAR: { id: 'popular', color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular },
-    POPULAR_AGGREGATE: { id: 'popularAggregate', weight: 1500, color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular, detailsTemplate: 'agg-udf' },
-    POPULAR_GROUP_BY: { id: 'popularGroupBy', weight: 1300, color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular, detailsTemplate: 'group-by' },
-    POPULAR_ORDER_BY: { id: 'popularOrderBy', weight: 1200, color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular, detailsTemplate: 'order-by' },
-    POPULAR_FILTER: { id: 'popularFilter', weight: 1400, color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular, detailsTemplate: 'filter' },
-    POPULAR_ACTIVE_JOIN: { id: 'popularActiveJoin', weight: 1500, color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular, detailsTemplate: 'join' },
-    POPULAR_JOIN_CONDITION: { id: 'popularJoinCondition', weight: 1500, color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular, detailsTemplate: 'join-condition' },
-    COLUMN: { id: 'column', weight: 1000, color: COLORS.COLUMN, label: AutocompleterGlobals.i18n.category.column, detailsTemplate: 'column' },
-    SAMPLE: { id: 'sample',weight: 900, color: COLORS.SAMPLE, label: AutocompleterGlobals.i18n.category.sample, detailsTemplate: 'value' },
-    IDENTIFIER: { id: 'identifier', weight: 800, color: COLORS.IDENT_CTE_VAR, label: AutocompleterGlobals.i18n.category.identifier, detailsTemplate: 'identifier' },
-    CTE: { id: 'cte', weight: 700, color: COLORS.IDENT_CTE_VAR, label: AutocompleterGlobals.i18n.category.cte, detailsTemplate: 'cte' },
-    TABLE: { id: 'table', weight: 600, color: COLORS.TABLE, label: AutocompleterGlobals.i18n.category.table, detailsTemplate: 'table' },
-    DATABASE: { id: 'database', weight: 500, color: COLORS.DATABASE, label: AutocompleterGlobals.i18n.category.database, detailsTemplate: 'database' },
-    UDF: { id: 'udf', weight: 400, color: COLORS.UDF, label: AutocompleterGlobals.i18n.category.udf, detailsTemplate: 'udf' },
-    OPTION: { id: 'option', weight: 400, color: COLORS.UDF, label: AutocompleterGlobals.i18n.category.option, detailsTemplate: 'option' },
-    HDFS: { id: 'hdfs', weight: 300, color: COLORS.HDFS, label: AutocompleterGlobals.i18n.category.hdfs, detailsTemplate: 'hdfs' },
-    VIRTUAL_COLUMN: { id: 'virtualColumn', weight: 200, color: COLORS.COLUMN, label: AutocompleterGlobals.i18n.category.column, detailsTemplate: 'column' },
-    COLREF_KEYWORD: { id: 'colrefKeyword', weight: 100, color: COLORS.KEYWORD, label: AutocompleterGlobals.i18n.category.keyword, detailsTemplate: 'keyword' },
-    VARIABLE: { id: 'variable', weight: 50, color: COLORS.IDENT_CTE_VAR, label: AutocompleterGlobals.i18n.category.variable, detailsTemplate: 'variable' },
-    KEYWORD: { id: 'keyword', weight: 0, color: COLORS.KEYWORD, label: AutocompleterGlobals.i18n.category.keyword, detailsTemplate: 'keyword' },
-    POPULAR_JOIN: { id: 'popularJoin', weight: 1500, color: COLORS.POPULAR, label: AutocompleterGlobals.i18n.category.popular, detailsTemplate: 'join' }
+    ALL: { id: 'all', color: HueColors.BLUE, label: HUE_I18n.autocomplete.category.all },
+    POPULAR: { id: 'popular', color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular },
+    POPULAR_AGGREGATE: { id: 'popularAggregate', weight: 1500, color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular, detailsTemplate: 'agg-udf' },
+    POPULAR_GROUP_BY: { id: 'popularGroupBy', weight: 1300, color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular, detailsTemplate: 'group-by' },
+    POPULAR_ORDER_BY: { id: 'popularOrderBy', weight: 1200, color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular, detailsTemplate: 'order-by' },
+    POPULAR_FILTER: { id: 'popularFilter', weight: 1400, color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular, detailsTemplate: 'filter' },
+    POPULAR_ACTIVE_JOIN: { id: 'popularActiveJoin', weight: 1500, color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular, detailsTemplate: 'join' },
+    POPULAR_JOIN_CONDITION: { id: 'popularJoinCondition', weight: 1500, color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular, detailsTemplate: 'join-condition' },
+    COLUMN: { id: 'column', weight: 1000, color: COLORS.COLUMN, label: HUE_I18n.autocomplete.category.column, detailsTemplate: 'column' },
+    SAMPLE: { id: 'sample',weight: 900, color: COLORS.SAMPLE, label: HUE_I18n.autocomplete.category.sample, detailsTemplate: 'value' },
+    IDENTIFIER: { id: 'identifier', weight: 800, color: COLORS.IDENT_CTE_VAR, label: HUE_I18n.autocomplete.category.identifier, detailsTemplate: 'identifier' },
+    CTE: { id: 'cte', weight: 700, color: COLORS.IDENT_CTE_VAR, label: HUE_I18n.autocomplete.category.cte, detailsTemplate: 'cte' },
+    TABLE: { id: 'table', weight: 600, color: COLORS.TABLE, label: HUE_I18n.autocomplete.category.table, detailsTemplate: 'table' },
+    DATABASE: { id: 'database', weight: 500, color: COLORS.DATABASE, label: HUE_I18n.autocomplete.category.database, detailsTemplate: 'database' },
+    UDF: { id: 'udf', weight: 400, color: COLORS.UDF, label: HUE_I18n.autocomplete.category.udf, detailsTemplate: 'udf' },
+    OPTION: { id: 'option', weight: 400, color: COLORS.UDF, label: HUE_I18n.autocomplete.category.option, detailsTemplate: 'option' },
+    HDFS: { id: 'hdfs', weight: 300, color: COLORS.HDFS, label: HUE_I18n.autocomplete.category.hdfs, detailsTemplate: 'hdfs' },
+    VIRTUAL_COLUMN: { id: 'virtualColumn', weight: 200, color: COLORS.COLUMN, label: HUE_I18n.autocomplete.category.column, detailsTemplate: 'column' },
+    COLREF_KEYWORD: { id: 'colrefKeyword', weight: 100, color: COLORS.KEYWORD, label: HUE_I18n.autocomplete.category.keyword, detailsTemplate: 'keyword' },
+    VARIABLE: { id: 'variable', weight: 50, color: COLORS.IDENT_CTE_VAR, label: HUE_I18n.autocomplete.category.variable, detailsTemplate: 'variable' },
+    KEYWORD: { id: 'keyword', weight: 0, color: COLORS.KEYWORD, label: HUE_I18n.autocomplete.category.keyword, detailsTemplate: 'keyword' },
+    POPULAR_JOIN: { id: 'popularJoin', weight: 1500, color: COLORS.POPULAR, label: HUE_I18n.autocomplete.category.popular, detailsTemplate: 'join' }
   };
 
   var POPULAR_CATEGORIES = [CATEGORIES.POPULAR_AGGREGATE, CATEGORIES.POPULAR_GROUP_BY, CATEGORIES.POPULAR_ORDER_BY, CATEGORIES.POPULAR_FILTER, CATEGORIES.POPULAR_ACTIVE_JOIN, CATEGORIES.POPULAR_JOIN_CONDITION, CATEGORIES.POPULAR_JOIN];
@@ -336,7 +336,7 @@ var AutocompleteResults = (function () {
       var keywordSuggestions = $.map(self.parseResult.suggestKeywords, function (keyword) {
         return {
           value: self.parseResult.lowerCase ? keyword.value.toLowerCase() : keyword.value,
-          meta: AutocompleterGlobals.i18n.meta.keyword,
+          meta: HUE_I18n.autocomplete.meta.keyword,
           category: CATEGORIES.KEYWORD,
           weightAdjust: keyword.weight,
           popular: ko.observable(false),
@@ -356,7 +356,7 @@ var AutocompleteResults = (function () {
             self.parseResult.suggestColRefKeywords[typeForKeywords].forEach(function (keyword) {
               colRefKeywordSuggestions.push({
                 value: self.parseResult.lowerCase ? keyword.toLowerCase() : keyword,
-                meta: AutocompleterGlobals.i18n.meta.keyword,
+                meta: HUE_I18n.autocomplete.meta.keyword,
                 category: CATEGORIES.COLREF_KEYWORD,
                 popular: ko.observable(false),
                 details: {
@@ -397,7 +397,7 @@ var AutocompleteResults = (function () {
         if (type === 'COLREF') {
           columnAliasSuggestions.push({
             value: columnAlias.name,
-            meta: AutocompleterGlobals.i18n.meta.alias,
+            meta: HUE_I18n.autocomplete.meta.alias,
             category: CATEGORIES.COLUMN,
             popular: ko.observable(false),
             details: columnAlias
@@ -428,7 +428,7 @@ var AutocompleteResults = (function () {
         commonTableExpressionSuggestions.push({
           value: prefix + expression.name,
           filterValue: expression.name,
-          meta: AutocompleterGlobals.i18n.meta.commonTableExpression,
+          meta: HUE_I18n.autocomplete.meta.commonTableExpression,
           category: CATEGORIES.CTE,
           popular: ko.observable(false),
           details: null
@@ -510,7 +510,7 @@ var AutocompleteResults = (function () {
           databaseSuggestions.push({
             value: prefix + SqlUtils.backTickIfNeeded(self.snippet.type(), db) + (suggestDatabases.appendDot ? '.' : ''),
             filterValue: db,
-            meta: AutocompleterGlobals.i18n.meta.database,
+            meta: HUE_I18n.autocomplete.meta.database,
             category: CATEGORIES.DATABASE,
             popular: ko.observable(false),
             details: null
@@ -553,7 +553,7 @@ var AutocompleteResults = (function () {
                 value: prefix + SqlUtils.backTickIfNeeded(self.snippet.type(), tableMeta.name),
                 filterValue: tableMeta.name,
                 tableName: tableMeta.name,
-                meta: AutocompleterGlobals.i18n.meta[tableMeta.type.toLowerCase()],
+                meta: HUE_I18n.autocomplete.meta[tableMeta.type.toLowerCase()],
                 category: CATEGORIES.TABLE,
                 popular: ko.observable(false),
                 details: details
@@ -612,14 +612,14 @@ var AutocompleteResults = (function () {
             if (self.snippet.type() === 'hive' && /[^\.]$/.test(self.editor().getTextBeforeCursor())) {
               columnSuggestions.push({
                 value: 'BLOCK__OFFSET__INSIDE__FILE',
-                meta: AutocompleterGlobals.i18n.meta.virtual,
+                meta: HUE_I18n.autocomplete.meta.virtual,
                 category: CATEGORIES.VIRTUAL_COLUMN,
                 popular: ko.observable(false),
                 details: null
               });
               columnSuggestions.push({
                 value: 'INPUT__FILE__NAME',
-                meta: AutocompleterGlobals.i18n.meta.virtual,
+                meta: HUE_I18n.autocomplete.meta.virtual,
                 category: CATEGORIES.VIRTUAL_COLUMN,
                 popular: ko.observable(false),
                 details: null
@@ -1012,7 +1012,7 @@ var AutocompleteResults = (function () {
       if (self.parseResult.colRef && self.parseResult.colRef.identifierChain) {
         valueSuggestions.push({
           value: '${' + self.parseResult.colRef.identifierChain[self.parseResult.colRef.identifierChain.length - 1].name + '}',
-          meta: AutocompleterGlobals.i18n.meta.variable,
+          meta: HUE_I18n.autocomplete.meta.variable,
           category: CATEGORIES.VARIABLE,
           popular: ko.observable(false),
           details: null
@@ -1026,7 +1026,7 @@ var AutocompleteResults = (function () {
           colRef.sample.forEach(function (sample) {
             valueSuggestions.push({
               value: isString ? startQuote + sample + endQuote : new String(sample),
-              meta: AutocompleterGlobals.i18n.meta.sample,
+              meta: HUE_I18n.autocomplete.meta.sample,
               category: CATEGORIES.SAMPLE,
               popular: ko.observable(false),
               details: null
@@ -1051,21 +1051,21 @@ var AutocompleteResults = (function () {
       if (path === '') {
         self.appendEntries([{
           value: 'adl://',
-          meta: AutocompleterGlobals.i18n.meta.keyword,
+          meta: HUE_I18n.autocomplete.meta.keyword,
           category: CATEGORIES.KEYWORD,
           weightAdjust: 0,
           popular: ko.observable(false),
           details: null
         },{
           value: 's3a://',
-          meta: AutocompleterGlobals.i18n.meta.keyword,
+          meta: HUE_I18n.autocomplete.meta.keyword,
           category: CATEGORIES.KEYWORD,
           weightAdjust: 0,
           popular: ko.observable(false),
           details: null
         },{
           value: 'hdfs://',
-          meta: AutocompleterGlobals.i18n.meta.keyword,
+          meta: HUE_I18n.autocomplete.meta.keyword,
           category: CATEGORIES.KEYWORD,
           weightAdjust: 0,
           popular: ko.observable(false),
@@ -1186,7 +1186,7 @@ var AutocompleteResults = (function () {
               totalCount += value.totalQueryCount;
               joinSuggestions.push({
                 value: suggestionString,
-                meta: AutocompleterGlobals.i18n.meta.join,
+                meta: HUE_I18n.autocomplete.meta.join,
                 category: suggestJoins.prependJoin ? CATEGORIES.POPULAR_JOIN : CATEGORIES.POPULAR_ACTIVE_JOIN,
                 popular: ko.observable(true),
                 details: value
@@ -1238,7 +1238,7 @@ var AutocompleteResults = (function () {
               totalCount += value.totalQueryCount;
               joinConditionSuggestions.push({
                 value: suggestionString,
-                meta: AutocompleterGlobals.i18n.meta.joinCondition,
+                meta: HUE_I18n.autocomplete.meta.joinCondition,
                 category: CATEGORIES.POPULAR_JOIN_CONDITION,
                 popular: ko.observable(true),
                 details: value
@@ -1388,7 +1388,7 @@ var AutocompleteResults = (function () {
               groupBySuggestions.push({
                 value: prefix + filterValue,
                 filterValue: filterValue,
-                meta: AutocompleterGlobals.i18n.meta.groupBy,
+                meta: HUE_I18n.autocomplete.meta.groupBy,
                 category: CATEGORIES.POPULAR_GROUP_BY,
                 weightAdjust: Math.min(value.columnCount, 99),
                 popular: ko.observable(true),
@@ -1434,7 +1434,7 @@ var AutocompleteResults = (function () {
               orderBySuggestions.push({
                 value: prefix + filterValue,
                 filterValue: filterValue,
-                meta: AutocompleterGlobals.i18n.meta.orderBy,
+                meta: HUE_I18n.autocomplete.meta.orderBy,
                 category: CATEGORIES.POPULAR_ORDER_BY,
                 weightAdjust: Math.min(value.columnCount, 99),
                 popular: ko.observable(true),
@@ -1491,7 +1491,7 @@ var AutocompleteResults = (function () {
                     totalCount += popularValue.count;
                     filterSuggestions.push({
                       value: compVal,
-                      meta: AutocompleterGlobals.i18n.meta.filter,
+                      meta: HUE_I18n.autocomplete.meta.filter,
                       category: CATEGORIES.POPULAR_FILTER,
                       popular: ko.observable(true),
                       details: popularValue

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

@@ -311,9 +311,9 @@
         });
         expect(subject.filtered().length).toBe(2);
         // Sorted by weight, case adjusted
-        expect(subject.filtered()[0].meta).toBe(AutocompleterGlobals.i18n.meta.keyword);
+        expect(subject.filtered()[0].meta).toBe(HUE_I18n.autocomplete.meta.keyword);
         expect(subject.filtered()[0].value).toBe('foo');
-        expect(subject.filtered()[1].meta).toBe(AutocompleterGlobals.i18n.meta.keyword);
+        expect(subject.filtered()[1].meta).toBe(HUE_I18n.autocomplete.meta.keyword);
         expect(subject.filtered()[1].value).toBe('bar');
       });
 

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

@@ -1349,7 +1349,7 @@ from desktop.views import _ko
         self.activeSort = ko.observable('defaultAsc');
         self.typeFilter = ko.observable({
           type: 'all',
-          label: DocumentTypeGlobals['all']
+          label: HUE_I18n.documentType['all']
         });
 
         var lastOpenedUuid = self.apiHelper.getFromTotalStorage('assist', 'last.opened.assist.doc.uuid');

+ 10 - 3
desktop/core/src/desktop/templates/common_header.mako

@@ -120,7 +120,11 @@ if USE_NEW_EDITOR.get():
     var IS_HUE_4 = false;
   </script>
 
-  ${ commonHeaderFooterComponents.header_i18n_redirection(user, is_s3_enabled, apps) }
+  ${ commonHeaderFooterComponents.header_i18n_redirection() }
+
+  % if user.is_authenticated():
+  <script src="/desktop/globalJsConstants.js"></script>
+  % endif
 
   % if not conf.DEV.get():
   <script src="${ static('desktop/js/hue.errorcatcher.js') }"></script>
@@ -168,8 +172,11 @@ if USE_NEW_EDITOR.get():
   <script src="${ static('desktop/ext/js/knockout.validation.min.js') }"></script>
   <script src="${ static('desktop/js/ko.switch-case.js') }"></script>
   <script src="${ static('desktop/js/ko.hue-bindings.js') }"></script>
-  <script src="${ static('desktop/js/sqlUtils.js') }"></script>
   <script src="${ static('desktop/ext/js/dropzone.min.js') }"></script>
+
+% if user.is_authenticated():
+
+  <script src="${ static('desktop/js/sqlUtils.js') }"></script>
   <script src="${ static('desktop/js/ace/ace.js') }"></script>
   <script src="${ static('desktop/js/ace/mode-impala.js') }"></script>
   <script src="${ static('desktop/js/ace/mode-hive.js') }"></script>
@@ -187,12 +194,12 @@ if USE_NEW_EDITOR.get():
   <script src="${ static('desktop/js/hdfsAutocompleter.js') }"></script>
   <script src="${ static('desktop/js/autocompleter.js') }"></script>
 
-
   <script>
     ace.config.set("basePath", "/static/desktop/js/ace");
   </script>
 
   <script src="${ static('metastore/js/metastore.model.js') }"></script>
+  %endif
 
   <%namespace name="charting" file="/charting.mako" />
   ${ charting.import_charts() }

+ 1 - 217
desktop/core/src/desktop/templates/common_header_footer_components.mako

@@ -25,223 +25,7 @@ from indexer.conf import ENABLE_NEW_INDEXER
 from metadata.conf import has_optimizer, OPTIMIZER
 %>
 
-<%def name="header_i18n_redirection(user, is_s3_enabled, apps)">
-  <script type="text/javascript">
-
-    var LOGGED_USERNAME = '${ user.username }';
-    var IS_S3_ENABLED = '${ is_s3_enabled }' === 'True';
-    var HAS_OPTIMIZER = '${ has_optimizer() }' === 'True';
-    %if hasattr(ENABLE_NEW_INDEXER, 'get') and ENABLE_NEW_INDEXER.get():
-    var IS_NEW_INDEXER_ENABLED = true;
-    %else:
-    var IS_NEW_INDEXER_ENABLED = false;
-    %endif
-
-    %if request and request.COOKIES and request.COOKIES.get('csrftoken','')!='':
-    window.CSRF_TOKEN = '${request.COOKIES.get('csrftoken')}';
-    %else:
-    window.CSRF_TOKEN = '';
-    %endif
-
-    var BOOTSTRAP_RATIOS = {
-      SPAN3: function () {
-        var _w = $(window).width();
-        if (_w >= 1200) {
-          return 23.07692308;
-        }
-        else if (_w >= 768 && _w <= 979) {
-          return 22.9281768;
-        }
-        else {
-          return 23.17073171;
-        }
-      },
-      SPAN9: function () {
-        var _w = $(window).width();
-        if (_w >= 1200) {
-          return 74.35897436;
-        }
-        else if (_w >= 768 && _w <= 979) {
-          return 74.30939227;
-        }
-        else {
-          return 74.3902439;
-        }
-      },
-      MARGIN: function () {
-        return 2.56410256;
-      }
-    };
-
-    var CACHEABLE_TTL = {
-      default: ${ conf.CUSTOM.CACHEABLE_TTL.get() },
-      optimizer: ${ OPTIMIZER.CACHEABLE_TTL.get() }
-    };
-
-    var AUTOCOMPLETE_TIMEOUT = ${ conf.EDITOR_AUTOCOMPLETE_TIMEOUT.get() };
-
-    var ENABLE_SQL_SYNTAX_CHECK = '${ conf.ENABLE_SQL_SYNTAX_CHECK.get() }' === 'True';
-
-
-    window.SQL_COLUMNS_KNOWN_FACET_VALUES = {
-      'type': {'array': -1, 'boolean': -1, 'bigint': -1, 'binary': -1, 'char': -1, 'date': -1, 'double': -1, 'decimal': -1, 'float': -1, 'int': -1, 'map': -1, 'real': -1, 'smallint': -1, 'string': -1, 'struct': -1, 'timestamp': -1, 'tinyint': -1, 'varchar': -1 }
-    };
-
-    var DocumentTypeGlobals = {
-      'all': '${_('All')}',
-      'directory': '${ _('Directory') }',
-      'link-pigscript': '${_('Pig Design')}',
-      'link-workflow': '${_('Job Design')}',
-      'notebook': '${_('Notebook')}',
-      'oozie-bundle2': '${_('Oozie Bundle')}',
-      'oozie-coordinator2': (IS_HUE_4 ? '${_('Oozie Schedule')}' : '${_('Oozie Coordinator')}'),
-      'oozie-workflow2': '${_('Oozie Workflow')}',
-      'query-hive': '${_('Hive Query')}',
-      'query-impala': '${_('Impala Query')}',
-      'search-dashboard': '${_('Search Dashboard')}',
-      'query-mapreduce': '${_('MapReduce Job')}',
-      'query-sqoop1': '${_('Import Job')}',
-      'query-spark2': '${_('Spark Job')}',
-      'query-java': '${_('Java Job')}',
-      'query-pig': '${_('Pig Script')}',
-      'query-shell': '${_('Shell Script')}',
-      'query-distcp': '${_('DistCp Job')}'
-    };
-
-    var SyntaxCheckerGlobals = {
-      i18n: {
-        didYouMean: '${_('Did you mean')}',
-        expectedStatementEnd: '${_('Expected end of statement')}',
-        suppressError: '${_('Ignore this type of error')}',
-        couldNotFind: '${_('Could not find')}'
-      }
-    };
-
-    // jHue plugins global configuration
-    var jHueFileChooserGlobals = {
-      labels: {
-        BACK: "${_('Back')}",
-        SELECT_FOLDER: "${_('Select this folder')}",
-        CREATE_FOLDER: "${_('Create folder')}",
-        FOLDER_NAME: "${_('Folder name')}",
-        CANCEL: "${_('Cancel')}",
-        FILE_NOT_FOUND: "${_('The file has not been found')}",
-        UPLOAD_FILE: "${_('Upload a file')}",
-        FAILED: "${_('Failed')}"
-      },
-      user: "${ user.username }"
-    };
-
-    var jHueHdfsTreeGlobals = {
-      labels: {
-        CREATE_FOLDER: "${_('Create folder')}",
-        FOLDER_NAME: "${_('Folder name')}",
-        CANCEL: "${_('Cancel')}"
-      }
-    };
-
-    var jHueTableExtenderGlobals = {
-      labels: {
-        GO_TO_COLUMN: "${_('Go to column:')}",
-        PLACEHOLDER: "${_('column name...')}",
-        LOCK: "${_('Lock this row')}",
-        UNLOCK: "${_('Unlock this row')}",
-        ROW_DETAILS: "${_('Show row details')}"
-      }
-    };
-
-    var LeafletGlobals = {
-      layer: '${ leaflet['layer'] |n,unicode }',
-      attribution: '${ leaflet['attribution'] |n,unicode }',
-      mapOptions: JSON.parse('${ leaflet['map_options'] |n,unicode }'),
-      layerOptions: JSON.parse('${ leaflet['layer_options'] |n,unicode }')
-    };
-
-    var ApiHelperGlobals = {
-      i18n: {
-        errorLoadingDatabases: '${ _('There was a problem loading the databases') }',
-        errorLoadingTablePreview: '${ _('There was a problem loading the preview') }'
-      },
-      user: '${ user.username }'
-    };
-
-    var DropzoneGlobals = {
-      homeDir: '${ user.get_home_directory() if not user.is_anonymous() else "" }',
-      i18n: {
-        cancelUpload: '${ _('Cancel upload') }',
-        uploadCanceled: '${ _('The upload has been canceled') }',
-        uploadSucceeded: '${ _('uploaded successfully') }'
-      }
-    };
-
-    var MetastoreGlobals = {
-      partitionsLimit: ${ hasattr(LIST_PARTITIONS_LIMIT, 'get') and LIST_PARTITIONS_LIMIT.get() or 1000 },
-      i18n: {
-        errorRefreshingTableStats: '${_('An error occurred refreshing the table stats. Please try again.')}',
-        errorLoadingDatabases: '${ _('There was a problem loading the databases. Please try again.') }',
-        errorLoadingTablePreview: '${ _('There was a problem loading the table preview. Please try again.') }'
-      }
-    };
-
-    var AutocompleterGlobals = {
-      i18n: {
-        category: {
-          all: '${ _('All') }',
-          column: '${ _('Columns') }',
-          cte: '${ _('CTEs') }',
-          database: '${ _('Databases') }',
-          field: '${ _('Field') }',
-          function: '${ _('Functions') }',
-          identifier: '${ _('Identifiers') }',
-          keyword: '${ _('Keywords') }',
-          popular: '${ _('Popular') }',
-          sample: '${ _('Samples') }',
-          table: '${ _('Tables') }',
-          udf: '${ _('UDFs') }',
-          option: '${ _('Options') }',
-          variable: '${ _('Variables') }'
-        },
-        meta: {
-          aggregateFunction: '${ _('aggregate') }',
-          alias: '${ _('alias') }',
-          commonTableExpression: '${ _('cte') }',
-          database: '${ _('database') }',
-          filter: '${ _('filter') }',
-          groupBy: '${ _('group by') }',
-          join: '${ _('join') }',
-          joinCondition: '${ _('condition') }',
-          keyword: '${ _('keyword') }',
-          orderBy: '${ _('order by') }',
-          table: '${ _('table') }',
-          sample: '${ _('sample') }',
-          variable: '${ _('variable') }',
-          view: '${ _('view') }',
-          virtual: '${ _('virtual') }'
-        }
-      }
-    };
-
-    var QueryBuilderGlobals = {
-      i18n: {
-        INSERT_VALUE_HERE: "${ _('Insert value here') }",
-        QUERY_REQUIRE: "${ _('Query requires a select or aggregate.') }"
-      }
-    }
-
-    var CopyToClipboardGlobals = {
-      i18n: {
-        ERROR: "${ _('Error while copying results.') }",
-        SUCCESS: "${ _('result(s) copied to the clipboard') }",
-      }
-    }
-
-    var SelectizeGlobals = {
-      i18n: {
-        CHOOSE: "${ _('Choose...') }"
-      }
-    }
-  </script>
-
+<%def name="header_i18n_redirection()">
   <!--[if lt IE 9]>
   <script type="text/javascript">
     if (document.documentMode && document.documentMode < 9){

+ 52 - 40
desktop/core/src/desktop/templates/common_header_m.mako

@@ -75,53 +75,65 @@ if USE_NEW_EDITOR.get():
       optimizer: ${ OPTIMIZER.CACHEABLE_TTL.get() }
     };
 
-    var AUTOCOMPLETE_TIMEOUT = ${ conf.EDITOR_AUTOCOMPLETE_TIMEOUT.get() }
-
-    // jHue plugins global configuration
-    jHueFileChooserGlobals = {
-      labels: {
-        BACK: "${_('Back')}",
-        SELECT_FOLDER: "${_('Select this folder')}",
-        CREATE_FOLDER: "${_('Create folder')}",
-        FOLDER_NAME: "${_('Folder name')}",
-        CANCEL: "${_('Cancel')}",
-        FILE_NOT_FOUND: "${_('The file has not been found')}",
-        UPLOAD_FILE: "${_('Upload a file')}",
-        FAILED: "${_('Failed')}"
+    var AUTOCOMPLETE_TIMEOUT = ${ conf.EDITOR_AUTOCOMPLETE_TIMEOUT.get() };
+
+    window.HUE_I18n = {
+      documentType: {
+        'all': '${_('All')}',
+        'directory': '${ _('Directory') }',
+        'link-pigscript': '${_('Pig Design')}',
+        'link-workflow': '${_('Job Design')}',
+        'notebook': '${_('Notebook')}',
+        'oozie-bundle2': '${_('Oozie Bundle')}',
+        'oozie-coordinator2': (IS_HUE_4 ? '${_('Oozie Schedule')}' : '${_('Oozie Coordinator')}'),
+        'oozie-workflow2': '${_('Oozie Workflow')}',
+        'query-hive': '${_('Hive Query')}',
+        'query-impala': '${_('Impala Query')}',
+        'search-dashboard': '${_('Search Dashboard')}',
+        'query-mapreduce': '${_('MapReduce Job')}',
+        'query-sqoop1': '${_('Import Job')}',
+        'query-spark2': '${_('Spark Job')}',
+        'query-java': '${_('Java Job')}',
+        'query-pig': '${_('Pig Script')}',
+        'query-shell': '${_('Shell Script')}',
+        'query-distcp': '${_('DistCp Job')}'
       },
-      user: "${ user.username }"
-    };
-
-    jHueHdfsTreeGlobals = {
-      labels: {
-        CREATE_FOLDER: "${_('Create folder')}",
-        FOLDER_NAME: "${_('Folder name')}",
-        CANCEL: "${_('Cancel')}"
-      }
-    };
-
-    jHueTableExtenderGlobals = {
-      labels: {
-        GO_TO_COLUMN: "${_('Go to column:')}",
-        PLACEHOLDER: "${_('column name...')}",
-        LOCK: "${_('Lock this row')}",
-        UNLOCK: "${_('Unlock this row')}",
-        ROW_DETAILS: "${_('Show row details')}"
+      jHueHdfsTree: {
+        GO_TO_COLUMN: '${_('Go to column:')}',
+        PLACEHOLDER: '${_('column name...')}',
+        LOCK: '${_('Lock this row')}',
+        UNLOCK: '${_('Unlock this row')}',
+        ROW_DETAILS: '${_('Show row details')}'
+      },
+      jHueFileChooser: {
+        BACK: '${_('Back')}',
+        SELECT_FOLDER: '${_('Select this folder')}',
+        CREATE_FOLDER: '${_('Create folder')}',
+        FOLDER_NAME: '${_('Folder name')}',
+        CANCEL: '${_('Cancel')}',
+        FILE_NOT_FOUND: '${_('The file has not been found')}',
+        UPLOAD_FILE: '${_('Upload a file')}',
+        FAILED: '${_('Failed')}'
+      },
+      jHueTableExtender: {
+        GO_TO_COLUMN: '${_('Go to column:')}',
+        PLACEHOLDER: '${_('column name...')}',
+        LOCK: '${_('Lock this row')}',
+        UNLOCK: '${_('Unlock this row')}',
+        ROW_DETAILS: '${_('Show row details')}'
+      },
+      syntaxChecker: {
+        didYouMean: '${_('Did you mean')}',
+        expectedStatementEnd: '${_('Expected end of statement')}',
+        suppressError: '${_('Ignore this type of error')}',
+        couldNotFind: '${_('Could not find')}'
       }
     };
 
-    LeafletGlobals = {
+    window.LEAFLET_DEFAULTS = {
       layer: '${ leaflet['layer'] |n,unicode }',
       attribution: '${ leaflet['attribution'] |n,unicode }'
     };
-
-    ApiHelperGlobals = {
-      i18n: {
-        errorLoadingDatabases: '${ _('There was a problem loading the databases') }',
-        errorLoadingTablePreview: '${ _('There was a problem loading the preview') }'
-      },
-      user: '${ user.username }'
-    }
   </script>
 
   <!--[if lt IE 9]>

+ 3 - 4
desktop/core/src/desktop/templates/common_notebook_ko_components.mako

@@ -366,15 +366,14 @@ except ImportError, e:
                 result += '\n';
               });
               return result;
-            }
-            else {
-              return CopyToClipboardGlobals.i18n.ERROR;
+            } else {
+              return HUE_I18n.copyToClipboard.error;
             }
           }
         });
 
         clipboard.on('success', function (e) {
-          $.jHueNotify.info(self.snippet.result.data().length + ' ' + CopyToClipboardGlobals.i18n.SUCCESS)
+          $.jHueNotify.info(self.snippet.result.data().length + ' ' + HUE_I18n.copyToClipboard.success);
           e.clearSelection();
         });
 

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

@@ -528,7 +528,7 @@ from desktop.views import _ko
               <div class="doc-browser-attr-group">
                 <!-- ko with: definition -->
                 <div class="doc-browser-attr-col doc-browser-description" data-bind="text: description, attr: { 'title': description }"></div>
-                <div class="doc-browser-attr-col doc-browser-type" data-bind="text: DocumentTypeGlobals[type] || type"></div>
+                <div class="doc-browser-attr-col doc-browser-type" data-bind="text: HUE_I18n.documentType[type] || type"></div>
                 <div class="doc-browser-attr-col doc-browser-owner" data-bind="text: owner, attr: { 'title': owner }"></div>
                 <div class="doc-browser-attr-col doc-browser-modified" data-bind="text: localeFormat(last_modified)"></div>
                 <!-- /ko -->

+ 178 - 0
desktop/core/src/desktop/templates/global_js_constants.mako

@@ -0,0 +1,178 @@
+## 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.
+
+<%!
+  from django.utils.translation import ugettext as _
+
+  from desktop import conf
+
+  from beeswax.conf import LIST_PARTITIONS_LIMIT
+  from indexer.conf import ENABLE_NEW_INDEXER
+  from metadata.conf import has_optimizer, OPTIMIZER
+%>
+
+(function () {
+  window.AUTOCOMPLETE_TIMEOUT = ${ conf.EDITOR_AUTOCOMPLETE_TIMEOUT.get() };
+
+  window.CACHEABLE_TTL = {
+    default: ${ conf.CUSTOM.CACHEABLE_TTL.get() },
+    optimizer: ${ OPTIMIZER.CACHEABLE_TTL.get() }
+  };
+
+  %if request and request.COOKIES and request.COOKIES.get('csrftoken', '') != '':
+    window.CSRF_TOKEN = '${request.COOKIES.get('csrftoken')}';
+  %else:
+    window.CSRF_TOKEN = '';
+  %endif
+
+  window.DROPZONE_HOME_DIR = '${ user.get_home_directory() if not user.is_anonymous() else "" }';
+
+  window.ENABLE_SQL_SYNTAX_CHECK = '${ conf.ENABLE_SQL_SYNTAX_CHECK.get() }' === 'True';
+
+  window.HAS_OPTIMIZER = '${ has_optimizer() }' === 'True';
+
+  window.HUE_I18n = {
+    autocomplete: {
+      category: {
+        all: '${ _('All') }',
+        column: '${ _('Columns') }',
+        cte: '${ _('CTEs') }',
+        database: '${ _('Databases') }',
+        field: '${ _('Field') }',
+        'function': '${ _('Functions') }',
+        identifier: '${ _('Identifiers') }',
+        keyword: '${ _('Keywords') }',
+        popular: '${ _('Popular') }',
+        sample: '${ _('Samples') }',
+        table: '${ _('Tables') }',
+        udf: '${ _('UDFs') }',
+        option: '${ _('Options') }',
+        variable: '${ _('Variables') }'
+      },
+      meta: {
+        aggregateFunction: '${ _('aggregate') }',
+        alias: '${ _('alias') }',
+        commonTableExpression: '${ _('cte') }',
+        database: '${ _('database') }',
+        filter: '${ _('filter') }',
+        groupBy: '${ _('group by') }',
+        join: '${ _('join') }',
+        joinCondition: '${ _('condition') }',
+        keyword: '${ _('keyword') }',
+        orderBy: '${ _('order by') }',
+        table: '${ _('table') }',
+        sample: '${ _('sample') }',
+        variable: '${ _('variable') }',
+        view: '${ _('view') }',
+        virtual: '${ _('virtual') }'
+      }
+    },
+    copyToClipboard: {
+      error: "${ _('Error while copying results.') }",
+      success: "${ _('result(s) copied to the clipboard') }",
+    },
+    documentType: {
+      'all': '${_('All')}',
+      'directory': '${ _('Directory') }',
+      'link-pigscript': '${_('Pig Design')}',
+      'link-workflow': '${_('Job Design')}',
+      'notebook': '${_('Notebook')}',
+      'oozie-bundle2': '${_('Oozie Bundle')}',
+      'oozie-coordinator2': IS_HUE_4 ? '${_('Oozie Schedule')}' : '${_('Oozie Coordinator')}',
+      'oozie-workflow2': '${_('Oozie Workflow')}',
+      'query-hive': '${_('Hive Query')}',
+      'query-impala': '${_('Impala Query')}',
+      'search-dashboard': '${_('Search Dashboard')}',
+      'query-mapreduce': '${_('MapReduce Job')}',
+      'query-sqoop1': '${_('Import Job')}',
+      'query-spark2': '${_('Spark Job')}',
+      'query-java': '${_('Java Job')}',
+      'query-pig': '${_('Pig Script')}',
+      'query-shell': '${_('Shell Script')}',
+      'query-distcp': '${_('DistCp Job')}'
+    },
+    dropzone: {
+      cancelUpload: '${ _('Cancel upload') }',
+      uploadCanceled: '${ _('The upload has been canceled') }',
+      uploadSucceeded: '${ _('uploaded successfully') }'
+    },
+    jHueHdfsTree: {
+      GO_TO_COLUMN: '${_('Go to column:')}',
+      PLACEHOLDER: '${_('column name...')}',
+      LOCK: '${_('Lock this row')}',
+      UNLOCK: '${_('Unlock this row')}',
+      ROW_DETAILS: '${_('Show row details')}'
+    },
+    jHueFileChooser: {
+      BACK: '${_('Back')}',
+      SELECT_FOLDER: '${_('Select this folder')}',
+      CREATE_FOLDER: '${_('Create folder')}',
+      FOLDER_NAME: '${_('Folder name')}',
+      CANCEL: '${_('Cancel')}',
+      FILE_NOT_FOUND: '${_('The file has not been found')}',
+      UPLOAD_FILE: '${_('Upload a file')}',
+      FAILED: '${_('Failed')}'
+    },
+    jHueTableExtender: {
+      GO_TO_COLUMN: '${_('Go to column:')}',
+      PLACEHOLDER: '${_('column name...')}',
+      LOCK: '${_('Lock this row')}',
+      UNLOCK: '${_('Unlock this row')}',
+      ROW_DETAILS: '${_('Show row details')}'
+    },
+    metastore: {
+      errorRefreshingTableStats: '${_('An error occurred refreshing the table stats. Please try again.')}'
+    },
+    selectize: {
+      choose: "${ _('Choose...') }"
+    },
+    syntaxChecker: {
+      didYouMean: '${_('Did you mean')}',
+      expectedStatementEnd: '${_('Expected end of statement')}',
+      suppressError: '${_('Ignore this type of error')}',
+      couldNotFind: '${_('Could not find')}'
+    },
+    queryBuilder: {
+      insertValueHere: "${ _('Insert value here') }",
+      queryRequire: "${ _('Query requires a select or aggregate.') }"
+    }
+  };
+
+  %if hasattr(ENABLE_NEW_INDEXER, 'get') and ENABLE_NEW_INDEXER.get():
+    window.IS_NEW_INDEXER_ENABLED = true;
+  %else:
+    window.IS_NEW_INDEXER_ENABLED = false;
+  %endif
+
+  window.IS_S3_ENABLED = '${ is_s3_enabled }' === 'True';
+
+  window.LEAFLET_DEFAULTS = {
+    layer: '${ leaflet['layer'] |n,unicode }',
+    attribution: '${ leaflet['attribution'] |n,unicode }',
+    mapOptions: JSON.parse('${ leaflet['map_options'] |n,unicode }'),
+    layerOptions: JSON.parse('${ leaflet['layer_options'] |n,unicode }')
+  };
+
+  window.LOGGED_USERNAME = '${ user.username }';
+
+  window.METASTORE_PARTITION_LIMIT = ${ hasattr(LIST_PARTITIONS_LIMIT, 'get') and LIST_PARTITIONS_LIMIT.get() or 1000 };
+
+  window.SQL_COLUMNS_KNOWN_FACET_VALUES = {
+    'type': { 'array': -1, 'boolean': -1, 'bigint': -1, 'binary': -1, 'char': -1, 'date': -1, 'double': -1,
+      'decimal': -1, 'float': -1, 'int': -1, 'map': -1, 'real': -1, 'smallint': -1, 'string': -1, 'struct': -1,
+      'timestamp': -1, 'tinyint': -1, 'varchar': -1 }
+  };
+})();

+ 8 - 6
desktop/core/src/desktop/templates/hue.mako

@@ -55,10 +55,12 @@
   <link href="${ static('desktop/css/home.css') }" rel="stylesheet">
 
   <script type="text/javascript">
-    var IS_HUE_4 = true;
+    window.IS_HUE_4 = true;
   </script>
 
-  ${ commonHeaderFooterComponents.header_i18n_redirection(user, is_s3_enabled, apps) }
+  ${ commonHeaderFooterComponents.header_i18n_redirection() }
+
+  <script src="/desktop/globalJsConstants.js"></script>
 
   % if not conf.DEV.get():
   <script src="${ static('desktop/js/hue.errorcatcher.js') }"></script>
@@ -284,8 +286,8 @@ ${ hueIcons.symbols() }
       <div class="sidebar-footer-panel">
         <div data-bind="dropzone: {
             clickable: false,
-            url: '/filebrowser/upload/file?dest=' + DropzoneGlobals.homeDir,
-            params: { dest: DropzoneGlobals.homeDir },
+            url: '/filebrowser/upload/file?dest=' + DROPZONE_HOME_DIR,
+            params: { dest: DROPZONE_HOME_DIR },
             paramName: 'hdfs_file',
             onError: onePageViewModel.dropzoneError,
             onComplete: onePageViewModel.dropzoneComplete },
@@ -903,7 +905,7 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
         self.dropzoneError = function (filename) {
           self.loadApp('importer');
           self.getActiveAppViewModel(function (vm) {
-            vm.createWizard.source.path(DropzoneGlobals.homeDir + '/' + filename);
+            vm.createWizard.source.path(DROPZONE_HOME_DIR + '/' + filename);
           });
           $('.dz-drag-hover').removeClass('dz-drag-hover');
         };
@@ -986,7 +988,7 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
           { url: '/filebrowser/view=*', app: 'filebrowser' },
           { url: '/filebrowser/download=*', app: 'filebrowser' },
           { url: '/filebrowser/*', app: function () {
-            page('/filebrowser/view=' + DropzoneGlobals.homeDir);
+            page('/filebrowser/view=' + DROPZONE_HOME_DIR);
           }},
           { url: '/hbase/', app: 'hbase' },
           { url: '/help', app: 'help' },

+ 9 - 13
desktop/core/src/desktop/templates/jasmineRunner.html

@@ -8,19 +8,12 @@
   <link rel="stylesheet" href="../static/desktop/ext/js/jasmine-2.3.4/jasmine.css">
 
   <script type="text/javascript" charset="utf-8">
-    var ApiHelperGlobals = {
-      i18n: {
-        errorLoadingDatabases: 'errorLoadingDatabases',
-        errorLoadingTablePreview: 'errorLoadingTablePreview'
-      },
-      user: 'user'
-    };
-
-
     var AUTOCOMPLETE_TIMEOUT = 0;
 
-    var AutocompleterGlobals = {
-      i18n: {
+    var LOGGED_USERNAME = 'test';
+
+    var HUE_I18n = {
+      autocomplete: {
         category: {
           all: 'All',
           column: 'Columns',
@@ -52,11 +45,14 @@
           virtual: 'virtual'
         }
       }
-    };
+    }
 
     var HAS_OPTIMIZER = false;
 
-    var CACHEABLE_TTL = 0;
+    var CACHEABLE_TTL = {
+      default: 0,
+      optmizer: 0
+    };
   </script>
 
   <script type="text/javascript" src="../static/desktop/ext/js/jquery/jquery-2.2.4.min.js"></script>

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

@@ -368,7 +368,7 @@ from metadata.conf import has_navigator
     <div style="width: 100%; margin-top: 20px; text-align:center">
       <a style="font-size: 20px;" href="javscript:void(0)" data-bind="text: name, hueLink: link, click: function () { $parents[1].close(); }"></a>
       <br/>
-      <span data-bind="text: DocumentTypeGlobals[type] || type"></span>
+      <span data-bind="text: HUE_I18n.documentType[type] || type"></span>
       <!-- ko if: description -->
       <div class="context-popover-doc-description" data-bind="html: description"></div>
       <!-- /ko -->

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

@@ -468,9 +468,9 @@ from desktop.views import _ko
         };
 
         var CATEGORIES = {
-          ALL: { id: 'all', color: COLORS.ALL, label: AutocompleterGlobals.i18n.category.all },
-          FIELD: { id: 'field', weight: 1000, color: COLORS.FIELD, label: AutocompleterGlobals.i18n.category.field, detailsTemplate: 'solr-field' },
-          FUNCTION: { id: 'function', weight: 900, color: COLORS.FUNCTION, label: AutocompleterGlobals.i18n.category.function, detailsTemplate: 'udf' }
+          ALL: { id: 'all', color: COLORS.ALL, label: HUE_I18n.autocomplete.category.all },
+          FIELD: { id: 'field', weight: 1000, color: COLORS.FIELD, label: HUE_I18n.autocomplete.category.field, detailsTemplate: 'solr-field' },
+          FUNCTION: { id: 'function', weight: 900, color: COLORS.FUNCTION, label: HUE_I18n.autocomplete.category.function, detailsTemplate: 'udf' }
         };
 
         var SolrFormulaSuggestions = function (fieldAccessor) {
@@ -578,10 +578,10 @@ from desktop.views import _ko
         var SAMPLE_LIMIT = 100;
 
         var CATEGORIES = {
-          ALL: { id: 'all', color: COLORS.ALL, label: AutocompleterGlobals.i18n.category.all },
-          FIELD: { id: 'field', weight: 1000, color: COLORS.FIELD, label: AutocompleterGlobals.i18n.category.field, detailsTemplate: 'solr-field' },
-          KEYWORD: { id: 'keyword', weight: 0, color: COLORS.KEYWORD, label: AutocompleterGlobals.i18n.category.keyword, detailsTemplate: 'keyword' },
-          SAMPLE: { id: 'sample', weight: 900, color: COLORS.SAMPLE, label: AutocompleterGlobals.i18n.category.sample, detailsTemplate: 'value' }
+          ALL: { id: 'all', color: COLORS.ALL, label: HUE_I18n.autocomplete.category.all },
+          FIELD: { id: 'field', weight: 1000, color: COLORS.FIELD, label: HUE_I18n.autocomplete.category.field, detailsTemplate: 'solr-field' },
+          KEYWORD: { id: 'keyword', weight: 0, color: COLORS.KEYWORD, label: HUE_I18n.autocomplete.category.keyword, detailsTemplate: 'keyword' },
+          SAMPLE: { id: 'sample', weight: 900, color: COLORS.SAMPLE, label: HUE_I18n.autocomplete.category.sample, detailsTemplate: 'value' }
         };
 
         var SolrQuerySuggestions = function (collection, editor) {
@@ -639,7 +639,7 @@ from desktop.views import _ko
               self.lastNonSampleSuggestions.push({
                 category: CATEGORIES.KEYWORD,
                 value: keyword,
-                meta: AutocompleterGlobals.i18n.meta.keyword,
+                meta: HUE_I18n.autocomplete.meta.keyword,
                 weightAdjust: 0,
                 popular: DEFAULT_POPULAR,
                 details: null
@@ -690,7 +690,7 @@ from desktop.views import _ko
                     }
                     sampleSuggestions.push({
                       value: shouldQuote ? '"' + sampleValue + '"' : sampleValue,
-                      meta: AutocompleterGlobals.i18n.meta.sample,
+                      meta: HUE_I18n.autocomplete.meta.sample,
                       category: CATEGORIES.SAMPLE,
                       popular: DEFAULT_POPULAR,
                       details: result.terms[i]

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

@@ -58,7 +58,7 @@ from django.utils.translation import ugettext as _
             });
           }
           expected.push({
-            label: SyntaxCheckerGlobals.i18n.suppressError,
+            label: HUE_I18n.syntaxChecker.suppressError,
             suppressRule: params.data.ruleId.toString() + params.data.text.toLowerCase()
           });
         }

+ 3 - 0
desktop/core/src/desktop/urls.py

@@ -108,6 +108,9 @@ dynamic_patterns += patterns('desktop.views',
   # Jasmine
   (r'^jasmine', 'jasmine'),
 
+  # JS that needs to be mako
+  (r'^desktop/globalJsConstants.js', 'global_js_constants'),
+
   # Web workers
   (r'^desktop/workers/aceSqlLocationWorker.js', 'ace_sql_location_worker'),
   (r'^desktop/workers/aceSqlSyntaxWorker.js', 'ace_sql_syntax_worker'),

+ 11 - 0
desktop/core/src/desktop/views.py

@@ -339,6 +339,17 @@ def jasmine(request):
   return render('jasmine.mako', request, None)
 
 
+def global_js_constants(request):
+  return HttpResponse(render('global_js_constants.mako', request, {
+    'is_s3_enabled': is_s3_enabled() and has_s3_access(request.user),
+    'leaflet': {
+      'layer': desktop.conf.LEAFLET_TILE_LAYER.get(),
+      'attribution': desktop.conf.LEAFLET_TILE_LAYER_ATTRIBUTION.get(),
+      'map_options': json.dumps(desktop.conf.LEAFLET_MAP_OPTIONS.get()),
+      'layer_options': json.dumps(desktop.conf.LEAFLET_TILE_LAYER_OPTIONS.get()),
+    }
+  }), content_type="application/javascript")
+
 def ace_sql_location_worker(request):
   return HttpResponse(render('ace_sql_location_worker.mako', request, None), content_type="application/javascript")
 

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

@@ -73,7 +73,7 @@ ${ assist.assistPanel() }
 % endif
 </style>
 
-<span id="importerComponents" class="notebook importer-main" data-bind="dropzone: { url: '/filebrowser/upload/file?dest=' + DropzoneGlobals.homeDir, params: {dest: DropzoneGlobals.homeDir}, paramName: 'hdfs_file', onComplete: function(path){ createWizard.source.path(path); } }">
+<span id="importerComponents" class="notebook importer-main" data-bind="dropzone: { url: '/filebrowser/upload/file?dest=' + DROPZONE_HOME_DIR, params: {dest: DROPZONE_HOME_DIR}, paramName: 'hdfs_file', onComplete: function(path){ createWizard.source.path(path); } }">
 <div class="dz-message" data-dz-message></div>
 <div class="navbar hue-title-bar">
   <div class="navbar-inner">

+ 6 - 6
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -3436,9 +3436,9 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
       }
 
       function resetResultsResizer(snippet) {
-        $("#snippet_" + snippet.id()).find('.table-results .column-side').width(BOOTSTRAP_RATIOS.SPAN3() + '%').data('newWidth', BOOTSTRAP_RATIOS.SPAN3());
+        $("#snippet_" + snippet.id()).find('.table-results .column-side').width(hueUtils.bootstrapRatios.span3() + '%').data('newWidth', hueUtils.bootstrapRatios.span3());
         if (snippet.isResultSettingsVisible()){
-          $("#snippet_" + snippet.id()).find('.table-results .grid-side').data('newWidth', BOOTSTRAP_RATIOS.SPAN9()).width(BOOTSTRAP_RATIOS.SPAN9() + '%');
+          $("#snippet_" + snippet.id()).find('.table-results .grid-side').data('newWidth', hueUtils.bootstrapRatios.span9()).width(hueUtils.bootstrapRatios.span9() + '%');
         }
         else {
           $("#snippet_" + snippet.id()).find('.table-results .grid-side').data('newWidth', 100).width('100%');
@@ -3456,7 +3456,7 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
           containment: $("#snippet_" + snippet.id()).find('.table-results'),
           create: function (event, ui) {
             initialPosition = $("#snippet_" + snippet.id()).find('.resize-bar').position().left;
-            $("#snippet_" + snippet.id()).find('.table-results .column-side').data('newWidth', BOOTSTRAP_RATIOS.SPAN3());
+            $("#snippet_" + snippet.id()).find('.table-results .column-side').data('newWidth', hueUtils.bootstrapRatios.span3());
             $("#snippet_" + snippet.id()).find('.meta-filter').width($("#snippet_" + snippet.id()).find('.table-results .column-side').width() - 28)
           },
           drag: function (event, ui) {
@@ -3464,8 +3464,8 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
               initialPosition = $("#snippet_" + snippet.id()).find('.resize-bar').position().left;
             }
             ui.position.left = Math.max(150, ui.position.left);
-            var newSpan3Width = ui.position.left * BOOTSTRAP_RATIOS.SPAN3() / initialPosition;
-            var newSpan9Width = 100 - newSpan3Width - BOOTSTRAP_RATIOS.MARGIN();
+            var newSpan3Width = ui.position.left * hueUtils.bootstrapRatios.span3() / initialPosition;
+            var newSpan9Width = 100 - newSpan3Width - hueUtils.bootstrapRatios.margin();
             $("#snippet_" + snippet.id()).find('.table-results .column-side').width(newSpan3Width + '%').data('newWidth', newSpan3Width);
             $("#snippet_" + snippet.id()).find('.table-results .grid-side').width(newSpan9Width + '%').data('newWidth', newSpan9Width);
             $("#snippet_" + snippet.id()).find('.meta-filter').width($("#snippet_" + snippet.id()).find('.table-results .column-side').width() - 28)
@@ -3485,7 +3485,7 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
             scrollInertia: 0
           });
           if (snippet.isResultSettingsVisible()){
-            $("#snippet_" + snippet.id()).find('.table-results .grid-side').width((100 - $("#snippet_" + snippet.id()).find('.table-results .column-side').data('newWidth') - BOOTSTRAP_RATIOS.MARGIN()) + '%');
+            $("#snippet_" + snippet.id()).find('.table-results .grid-side').width((100 - $("#snippet_" + snippet.id()).find('.table-results .column-side').data('newWidth') - hueUtils.bootstrapRatios.margin()) + '%');
           }
           else {
             $("#snippet_" + snippet.id()).find('.table-results .grid-side').width('100%');