Эх сурвалжийг харах

HUE-7248 [adls] fix path autocomplete

jdesjean 8 жил өмнө
parent
commit
9c5a8a3

+ 24 - 2
apps/filebrowser/src/filebrowser/templates/listdir_components.mako

@@ -1049,6 +1049,25 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
         return self.currentPath().toLowerCase().indexOf('s3a://') === 0;
       });
 
+      function root(path) {
+        var path = path && path.toLowerCase();
+        if (path.indexOf('s3a://') >= 0) {
+          return 's3a://';
+        } else if (path.indexOf('adl:/') >= 0) {
+          return 'adl:/';
+        } else {
+          return '/';
+        }
+      };
+
+      self.rootCurrent = ko.pureComputed(function () {
+        return root(self.currentPath());
+      });
+
+      self.rootTarget = ko.pureComputed(function () {
+        return root(self.targetPath());
+      });
+
       self.isHdfs = ko.pureComputed(function () {
         var currentPath = self.currentPath().toLowerCase();
         return currentPath.indexOf('/') === 0 || currentPath.indexOf('hdfs') === 0
@@ -2257,7 +2276,8 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
           onEnter: function (el) {
             $("#jHueHdfsAutocomplete").hide();
           },
-          isS3: viewModel.isS3()
+          isS3: viewModel.isS3(),
+          root: viewModel.rootCurrent()
         });
         $("#copyDestination").jHueHdfsAutocomplete({
           showOnFocus: true,
@@ -2266,7 +2286,8 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
           onEnter: function (el) {
             $("#jHueHdfsAutocomplete").hide();
           },
-          isS3: viewModel.isS3()
+          isS3: viewModel.isS3(),
+          root: viewModel.rootCurrent()
         });
       });
 
@@ -2392,6 +2413,7 @@ from filebrowser.conf import ENABLE_EXTRACT_UPLOADED_ARCHIVE
 
       $("#hueBreadcrumbText").jHueHdfsAutocomplete({
         home: "/user/${ user }/",
+        root: viewModel.rootTarget(),
         skipKeydownEvents: true,
         onEnter: function (el) {
           viewModel.targetPath("${url('filebrowser.views.view', path='')}" + stripHashes(el.val()));

+ 12 - 35
desktop/core/src/desktop/static/desktop/js/jquery.hdfsautocomplete.js

@@ -35,6 +35,7 @@
         skipEnter: false,
         skipScrollEvent: false,
         zIndex: 33000,
+        root: "/",
         isS3: false
       };
 
@@ -219,28 +220,15 @@
     var BASE_PATH = "/filebrowser/view=";
     var _currentFiles = [];
 
-    function prepareAutocompletePath(path) {
-      if (_this.options.isS3){
-        if (path.indexOf('s3a://') === 0){
-          path = path.substr(6);
-        }
-        if (path.indexOf('/') === 0){
-          path = path.substr(1);
-        }
-        return path;
-      }
-      if (path.indexOf('/') == 0 || /^([a-zA-Z0-9]+):\/\//.test(path))
-        return path.substr(0, path.lastIndexOf("/") + 1);
-      if (path.indexOf("/") > 0)
-        return _this.options.home + path.substr(0, path.lastIndexOf("/"));
-      return _this.options.home;
-    }
-
     function showHdfsAutocomplete(callback) {
-      if (_this.options.isS3 && BASE_PATH.indexOf('S3A://') == -1) {
-        BASE_PATH += 'S3A://';
+      var base = "";
+      var path = _el.val();
+      var hasScheme = path.indexOf(":/") >= 0;
+      var isRelative = !hasScheme && path.charAt(0) !== "/";
+      if (isRelative && _this.options.root) {
+        base += _this.options.root;
       }
-      var autocompleteUrl = BASE_PATH + prepareAutocompletePath(_el.val());
+      var autocompleteUrl = BASE_PATH + base + path;
       $.getJSON(autocompleteUrl + "?pagesize=1000&format=json", function (data) {
         _currentFiles = [];
         if (data.error == null) {
@@ -260,23 +248,12 @@
               smartTooltipMaker();
               e.preventDefault();
               var item = $(this).text().trim();
-              var path = autocompleteUrl.substring(BASE_PATH.length);
               if (item == "..") { // one folder up
-                if (_this.options.isS3) {
-                  path = path.substring(0, path.lastIndexOf("/"));
-                }
-                _el.val(path.substring(0, path.lastIndexOf("/")));
-              }
-              else {
-                _el.val(path + (path.charAt(path.length - 1) == "/" ? "" : "/") + item);
-              }
-              if (_this.options.isS3 && _el.val().indexOf('s3a://') === -1) {
-                var val = _el.val();
-                if (val.indexOf('/') === 0){
-                  val = val.substr(1);
-                }
-                _el.val('s3a://' + val);
+                path = path.substring(0, path.lastIndexOf("/"));
+              } else {
+                path = path + (path.charAt(path.length - 1) == "/" ? "" : "/") + item;
               }
+              _el.val(base + path);
               if ($(this).html().indexOf("folder") > -1) {
                 _el.val(_el.val() + "/");
                 _this.options.onPathChange(_el.val());

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

@@ -5992,6 +5992,7 @@
       $element.jHueHdfsTree({
         home: '',
         isS3: !!options.isS3,
+        root: options.root,
         initialPath: options.path,
         withTopPadding: false,
         onPathChange: function (path) {