Prechádzať zdrojové kódy

HUE-1269 [fb] Did you know about trash activation

Kevin Wang 12 rokov pred
rodič
commit
e2a2fa7cf0

+ 23 - 0
apps/about/src/about/templates/admin_wizard.mako

@@ -76,6 +76,29 @@ ${ commonheader(_('Quick Start'), "quickstart", user, "100px") | n,unicode }
           ${ check_config | n,smart_unicode }
         </div>
       </div>
+
+      <div class="widget-box">
+        <div class="widget-title">
+          <span class="icon">
+            <i class="icon-trash"></i>
+          </span>
+          <h5>${ _('HDFS Trash configuration') }</h5>
+        </div>
+        <div class="widget-content">
+          <div class="container-fluid">
+          % if trash_enabled:
+            <h5>${ _('Trash is active.')}</h5>
+          % else:
+          ${ _('You can activate trash collection by setting fs.trash.interval in core-site.xml:')}<br/><br/>
+            <pre>
+  &#60;property&#62;
+    &#60;name&#62;fs.trash.interval&#60;/name&#62;
+    &#60;value&#62;10060&#60;/value&#62;
+  &#60;/property&#62;</pre>
+          % endif
+          </div>
+        </div>
+      </div>
     </div>
 
     <div id="step2" class="stepDetails hide">

+ 3 - 0
apps/about/src/about/views.py

@@ -29,6 +29,8 @@ from desktop.models import Settings
 from desktop.views import check_config
 from desktop import appmanager
 
+from hadoop.core_site import get_trash_interval
+
 
 def admin_wizard(request):
   apps = appmanager.get_apps(request.user)
@@ -42,6 +44,7 @@ def admin_wizard(request):
       'apps': dict([(app.name, app) for app in apps]),
       'app_names': app_names,
       'collect_usage': collect_usage,
+      'trash_enabled': get_trash_interval()
   })
 
 

+ 38 - 35
apps/filebrowser/src/filebrowser/templates/fb_components.mako

@@ -19,39 +19,42 @@ from django.utils.translation import ugettext as _
 %>
 
 <%def name="breadcrumbs(path, breadcrumbs, from_listdir=False)">
-    % if from_listdir:
-        <ul class="nav nav-pills hueBreadcrumbBar">
-            <li><a href="${url('filebrowser.views.view', path=urlencode(path))}?default_to_home" style="line-height:18px"><i class="icon-home"></i> ${_('Home')}</a></li>
-            <li>
-                <span style="float:right; margin-top:10px;"><i id="editBreadcrumb" class="icon-pencil hand" rel="tooltip" title="${_('Edit path')}"></i></span>
-                <ul class="hueBreadcrumb" data-bind="foreach: breadcrumbs" style="padding-right:40px">
-                    <li data-bind="visible: label == '/'"><a href="#" data-bind="click: show"><span class="divider" data-bind="text: label"></span></a></li>
-                    <li data-bind="visible: label != '/'"><a href="#" data-bind="text: label, click: show"></a><span class="divider">/</span></li>
-                </ul>
-                <input id="hueBreadcrumbText" type="text" class="input-xxlarge" style="margin-top:4px;margin-right:4px;display:none" data-bind="value: currentPath" />
-            </li>
-            <li class="pull-right">
-              <a href="${url('filebrowser.views.view', path=urlencode(path))}?default_to_trash" style="line-height:18px" data-bind="visible: trashEnabled" title="${_('View trash')}">
-                <i class="icon-trash"></i> ${_('View trash')}
-              </a>
-            </li>
-        </ul>
-    % else:
-        <ul class="nav nav-pills hueBreadcrumbBar">
-            <li><a href="${url('filebrowser.views.view', path=urlencode(path))}?default_to_home"><i class="icon-home"></i> ${_('Home')}</a></li>
-            <li>
-                <ul class="hueBreadcrumb">
-                        % for breadcrumb_item in breadcrumbs:
-                        <% label = breadcrumb_item['label'] %>
-                        %if label == '/':
-                                <li><a href="/filebrowser/view${breadcrumb_item['url']}"><span
-                                        class="divider">${label}</span></a></li>
-                        %else:
-                                <li><a href="/filebrowser/view${breadcrumb_item['url']}">${label}</a><span class="divider">/</span></li>
-                        %endif
-                        % endfor
-                </ul>
-            </li>
-        </ul>
-    % endif
+    <ul class="nav nav-pills hueBreadcrumbBar">
+        % if from_listdir:
+        <li><a href="${url('filebrowser.views.view', path=urlencode(path))}?default_to_home" style="line-height:18px"><i class="icon-home"></i> ${_('Home')}</a></li>
+        <li>
+            <span style="float:right; margin-top:10px;"><i id="editBreadcrumb" class="icon-pencil hand" rel="tooltip" title="${_('Edit path')}"></i></span>
+            <ul class="hueBreadcrumb" data-bind="foreach: breadcrumbs" style="padding-right:40px">
+                <li data-bind="visible: label == '/'"><a href="#" data-bind="click: show"><span class="divider" data-bind="text: label"></span></a></li>
+                <li data-bind="visible: label != '/'"><a href="#" data-bind="text: label, click: show"></a><span class="divider">/</span></li>
+            </ul>
+            <input id="hueBreadcrumbText" type="text" class="input-xxlarge" style="margin-top:4px;margin-right:4px;display:none" data-bind="value: currentPath" />
+        </li>
+        <li class="pull-right">
+          <a href="${url('filebrowser.views.view', path=urlencode(path))}?default_to_trash" style="line-height:18px" data-bind="visible: trashEnabled" title="${_('View trash')}">
+            <i class="icon-trash"></i> ${_('View trash')}
+          </a>
+        </li>
+        % else:
+        <li><a href="${url('filebrowser.views.view', path=urlencode(path))}?default_to_home"><i class="icon-home"></i> ${_('Home')}</a></li>
+        <li>
+            <ul class="hueBreadcrumb">
+                    % for breadcrumb_item in breadcrumbs:
+                    <% label = breadcrumb_item['label'] %>
+                    %if label == '/':
+                            <li><a href="/filebrowser/view${breadcrumb_item['url']}"><span
+                                    class="divider">${label}</span></a></li>
+                    %else:
+                            <li><a href="/filebrowser/view${breadcrumb_item['url']}">${label}</a><span class="divider">/</span></li>
+                    %endif
+                    % endfor
+            </ul>
+        </li>
+        % endif
+        % if not trash_enabled and is_superuser:
+        <li id="trash-help" class="pull-right" style="width:30px;text-align:right;line-height:35px;">
+            <i class='icon-question-sign'></i>
+        </li>
+        % endif
+    </ul>
 </%def>

+ 13 - 11
apps/filebrowser/src/filebrowser/templates/listdir.mako

@@ -43,7 +43,7 @@ ${ commonheader(None, 'filebrowser', user) | n,unicode }
             %if is_fs_superuser:
             <div id="ch-dropdown" class="btn-group" style="vertical-align: middle">
               <button href="#" class="btn dropdown-toggle" title="${_('Chown / Chmod')}" data-toggle="dropdown" data-bind="visible: !inTrash(), enable: selectedFiles().length > 0">
-                <i class="icon-remove"></i> ${_('Chmod / Chown')}
+                <i class="icon-user"></i> ${_('Chmod / Chown')}
                 <span class="caret"></span>
               </button>
               <ul class="dropdown-menu" style="top: auto">
@@ -57,18 +57,20 @@ ${ commonheader(None, 'filebrowser', user) | n,unicode }
             <button class="btn fileToolbarBtn" title="${_('Download')}" data-bind="visible: !inTrash(), click: downloadFile, enable: selectedFiles().length == 1 && selectedFile().type == 'file'"><i class="icon-download-alt"></i> ${_('Download')}</button>
             <button class="btn fileToolbarBtn" title="${_('Restore from trash')}" data-bind="visible: inRestorableTrash(), click: restoreTrashSelected, enable: selectedFiles().length > 0"><i class="icon-cloud-upload"></i> ${_('Restore')}</button>
             <!-- ko ifnot: inTrash -->
-              <div id="delete-dropdown" class="btn-group" style="vertical-align: middle">
-                <button id="trash-btn" class="btn toolbarBtn" data-bind="enable: selectedFiles().length > 0, click: trashSelected"><i class="icon-remove"></i> ${_('Move to trash')}</button>
-                <button id="trash-btn-caret" class="btn toolbarBtn dropdown-toggle" data-toggle="dropdown" data-bind="enable: selectedFiles().length > 0">
-                  <span class="caret"></span>
-                </button>
-                <ul class="dropdown-menu">
-                  <li><a href="#" class="delete-link" title="${_('Delete forever')}" data-bind="enable: selectedFiles().length > 0, click: deleteSelected"><i class="icon-bolt"></i> ${_('Delete forever')}</a></li>
-                </ul>
-              </div>
+              <!-- ko if: trashEnabled -->
+                <div id="delete-dropdown" class="btn-group" style="vertical-align: middle">
+                  <button id="trash-btn" class="btn toolbarBtn" data-bind="enable: selectedFiles().length > 0, click: trashSelected"><i class="icon-remove"></i> ${_('Move to trash')}</button>
+                  <button id="trash-btn-caret" class="btn toolbarBtn dropdown-toggle" data-toggle="dropdown" data-bind="enable: selectedFiles().length > 0">
+                    <span class="caret"></span>
+                  </button>
+                  <ul class="dropdown-menu">
+                    <li><a href="#" class="delete-link" title="${_('Delete forever')}" data-bind="enable: selectedFiles().length > 0, click: deleteSelected"><i class="icon-bolt"></i> ${_('Delete forever')}</a></li>
+                  </ul>
+                </div>
+              <!-- /ko -->
             <!-- /ko -->
             <!-- ko ifnot: trashEnabled -->
-            <button class="btn fileToolbarBtn delete-link" title="${_('Delete forever')}" data-bind="enable: selectedFiles().length > 0, click: deleteSelected"><i class="icon-bolt"></i> ${_('Delete forever')}</button>
+              <button class="btn fileToolbarBtn delete-link" title="${_('Delete forever')}" data-bind="enable: selectedFiles().length > 0, click: deleteSelected"><i class="icon-bolt"></i> ${_('Delete forever')}</button>
             <!-- /ko -->
           </div>
         </%def>

+ 10 - 0
apps/filebrowser/src/filebrowser/templates/listdir_components.mako

@@ -758,6 +758,15 @@ from django.utils.translation import ugettext as _
         $("#editBreadcrumb").show();
       });
 
+      % if not trash_enabled and is_superuser:
+        $("#trash-help").popover({
+            'title': "${_('Did you know?')}",
+            'content': '${_('You can activate HDFS trash by setting fs.trash.interval in core-site.xml.')}',
+            'trigger': 'hover',
+            'html': true,
+            'placement': 'left'
+        });
+      % endif
       $.ajaxSetup({
         error:function (x, e) {
           if (x.status == 500) {
@@ -979,6 +988,7 @@ from django.utils.translation import ugettext as _
         self.breadcrumbs(ko.utils.arrayMap(breadcrumbs, function (breadcrumb) {
           return new Breadcrumb(breadcrumb);
         }));
+
         self.currentPath(currentDirPath);
 
         $('.uploader').trigger('fb:updatePath', {dest:self.currentPath()});