Ver Fonte

AMBARI-11856. Disable delete button when applicable (Erik Bergenholtz via rlevas)

Erik Bergenholtz há 10 anos atrás
pai
commit
b314e8db0c

+ 9 - 3
contrib/views/files/src/main/resources/ui/app/components/confirmDelete.js

@@ -33,7 +33,9 @@ App.DropdownWrapComponent = Em.Component.extend({
 App.ConfirmDeleteComponent = Em.Component.extend({
   layoutName:'components/deleteBulk',
   tagName:'li',
+  classNameBindings:['access::disabled'],
   deleteForever:false,
+  access:false,
   isRemoving:false,
   cancelRemoving:function () {
     this.set('isRemoving',false);
@@ -45,15 +47,19 @@ App.ConfirmDeleteComponent = Em.Component.extend({
   },
   actions:{
     ask:function () {
-      this.get('parentView').trigger('resetConfirm');
-      this.set('isRemoving',true);
+      if (this.get('access')) {
+        this.get('parentView').trigger('resetConfirm');
+        this.set('isRemoving',true);
+      }
       return false;
     },
     cancel:function () {
       this.cancelRemoving();
     },
     confirm:function () {
-      this.sendAction('confirm',this.get('deleteForever'));
+      if (this.get('access')) {
+        this.sendAction('confirm',this.get('deleteForever'));
+      }
     }
   }
 });

+ 6 - 1
contrib/views/files/src/main/resources/ui/app/components/mkdirInput.js

@@ -41,5 +41,10 @@ App.MkdirInputComponent = Em.Component.extend({
     cancel:function () {
       this.setProperties({'newDirName':'','isMkdir':false});
     }
-  }
+  },
+  focusOnInput: function () {
+    Em.run.next(this,function() {
+      this.$('.mkdir-input').focus();
+    });
+  }.observes('isMkdir'),
 });

+ 1 - 0
contrib/views/files/src/main/resources/ui/app/components/toggleContext.js

@@ -65,6 +65,7 @@ App.ToggleContextComponent = Em.Component.extend({
   willClearRender:function () {
     var fileRow = this.$().parents('tr');
     fileRow.off('click');
+    fileRow.data('context').closemenu();
     fileRow.data('context').destroy();
   }
 });

+ 10 - 3
contrib/views/files/src/main/resources/ui/app/controllers/file.js

@@ -19,6 +19,7 @@
 var App = require('app');
 
 App.FileController = Ember.ObjectController.extend({
+  needs:['files'],
   actions:{
     download:function (option) {
       if (this.get('content.readAccess')) {
@@ -58,9 +59,13 @@ App.FileController = Ember.ObjectController.extend({
       }
     },
     deleteFile:function (deleteForever) {
-      this.store
-        .remove(this.get('content'),!deleteForever)
-        .then(null,Em.run.bind(this,this.deleteErrorCallback,this.get('content')));
+      if (this.get('dirInfo.writeAccess')) {
+        this.store
+          .remove(this.get('content'),!deleteForever)
+          .then(null,Em.run.bind(this,this.deleteErrorCallback,this.get('content')));
+      } else {
+        this.send('showAlert',{message:'Permission denied'});
+      }
     }
   },
   selected:false,
@@ -88,6 +93,8 @@ App.FileController = Ember.ObjectController.extend({
     this.sendAlert(error);
   },
 
+  dirInfo: Em.computed.alias('controllers.files.content.meta'),
+
   deleteErrorCallback:function (record,error) {
     this.get('parentController.model').pushRecord(record);
     this.send('showAlert',error);

+ 10 - 6
contrib/views/files/src/main/resources/ui/app/controllers/files.js

@@ -74,12 +74,16 @@ App.FilesController = Ember.ArrayController.extend({
 
     },
     deleteFile:function (deleteForever) {
-      var self = this;
-      var selected = this.get('selectedFiles');
-      var moveToTrash = !deleteForever;
-      selected.forEach(function (file) {
-        self.store.remove(file,moveToTrash).then(null,bind(self,self.deleteErrorCallback,file));
-      });
+      var self = this,
+          selected = this.get('selectedFiles'),
+          moveToTrash = !deleteForever;
+      if (this.get('content.meta.writeAccess')) {
+        selected.forEach(function (file) {
+          self.store.remove(file,moveToTrash).then(null,bind(self,self.deleteErrorCallback,file));
+        });
+      } else {
+        this.throwAlert({message:'Permission denied'});
+      }
     },
     download:function (option) {
       var files = this.get('selectedFiles').filterBy('readAccess',true);

+ 9 - 2
contrib/views/files/src/main/resources/ui/app/controllers/filesAlert.js

@@ -19,7 +19,14 @@
 App.FilesAlertController = App.ErrorController.extend({
   content:null,
   output:function () {
-    var error = this.get('content'),output;
-    return (error instanceof Em.Error)?error:{status:error.status, message:error.statusText||error.message};
+    var error = this.get('content'),
+        message = (error.responseJSON)?error.responseJSON.message:error.message,
+        output;
+
+    if (message) {
+      message = message.split('\n').objectAt(0);
+    }
+
+    return message;
   }.property('content')
 });

+ 1 - 0
contrib/views/files/src/main/resources/ui/app/initialize.js

@@ -78,6 +78,7 @@ require('components/toggleContext');
 /////////////////////////////////
 
 require('views/file');
+require('views/files');
 require('views/filesAlert');
 require('views/modalChmod');
 

+ 7 - 0
contrib/views/files/src/main/resources/ui/app/routes/file.js

@@ -99,5 +99,12 @@ App.FilesRoute = Em.Route.extend({
         });
       });
     }
+  },
+  afterModel: function (model) {
+    this.store.all('file').forEach(function (file) {
+      if (!model.contains(file)) {
+        file.unloadRecord();
+      }
+    });
   }
 });

+ 2 - 2
contrib/views/files/src/main/resources/ui/app/templates/components/contextMenu.hbs

@@ -34,8 +34,8 @@
         <i class="fa fa-chevron-right pull-right fa-right"></i>
       </a>
       <ul class="dropdown-menu">
-        {{confirm-delete confirm="removeFile" deleteForever=true }}
-        {{confirm-delete confirm="moveToTrash" deleteForever=false }}
+        {{confirm-delete confirm="removeFile" deleteForever=true access=target.dirInfo.writeAccess}}
+        {{confirm-delete confirm="moveToTrash" deleteForever=false access=target.dirInfo.writeAccess}}
       </ul>
     </li>
   </ul>

+ 1 - 1
contrib/views/files/src/main/resources/ui/app/templates/components/mkdirInput.hbs

@@ -22,7 +22,7 @@
   </button>
 {{else}}
   <div class="input-group input-group-sm pull-right mkdir-area">
-    {{input class="form-control mkdir-input" valueBinding='newDirName' placeholder="Enter Directory Name"}}
+    {{input class="form-control mkdir-input" valueBinding='newDirName' placeholder="Enter Directory Name" enter='create'}}
     <div class="input-group-btn">
       <button  type="button" {{action 'cancel'}} {{bind-attr class=":btn :btn-danger :btn-sm :btn-mkdir-cancel"}} >
         <i class="fa fa-times"></i> Cancel

+ 6 - 11
contrib/views/files/src/main/resources/ui/app/templates/error.hbs

@@ -17,21 +17,16 @@
 }}
 
 <div class="container">
-    <div class="alert alert-danger collapse-group">
-        <strong>{{content.status}}</strong> {{publicMessage}}
-    </div>
+  <div class="alert alert-danger collapse-group">
+    <strong>{{content.status}}</strong> {{publicMessage}}
+  </div>
   {{#if stackTrace}}
       <a href="#" {{action "toggleStackTrace" post}}>
-        {{#if isExpanded}}
-            <span class="glyphicon glyphicon-collapse-down"></span> Collapse Stack Trace
-        {{else}}
-            <span class="glyphicon glyphicon-expand"></span> Expand Stack Trace
-        {{/if}}
+        <i {{bind-attr class=":fa isExpanded:fa-toggle-down:fa-toggle-right"}}></i>
+        {{#if isExpanded}} Collapse Stack Trace {{else}} Expand Stack Trace {{/if}}
       </a>
     {{#if isExpanded}}
-        <pre class="prettyprint">
-{{stackTrace}}
-        </pre>
+        <pre class="prettyprint">{{stackTrace}}</pre>
     {{/if}}
   {{/if}}
 </div>

+ 2 - 2
contrib/views/files/src/main/resources/ui/app/templates/files.hbs

@@ -110,8 +110,8 @@
                   <i class="fa fa-chevron-left fa-gr fa-fw"></i> Delete
                 </a>
                 <ul class="dropdown-menu left-submenu">
-                  {{confirm-delete confirm="deleteFile" deleteForever=true selector='bulkDropdown'}}
-                  {{confirm-delete confirm="deleteFile" deleteForever=false selector='bulkDropdown'}}
+                  {{confirm-delete confirm="deleteFile" deleteForever=true selector='bulkDropdown' access=content.meta.writeAccess}}
+                  {{confirm-delete confirm="deleteFile" deleteForever=false selector='bulkDropdown' access=content.meta.writeAccess}}
                 </ul>
               </li>
             </ul>

+ 9 - 14
contrib/views/files/src/main/resources/ui/app/templates/util/errorRow.hbs

@@ -18,20 +18,15 @@
 
 <div>
   <button {{action 'removeAlert'}} type="button" class="close" aria-hidden="true">&times;</button>
-  <div class="text-center"><strong>{{content.status}} </strong> {{publicMessage}}
-    {{#if stackTrace}}<a href="#" {{action "toggleStackTrace" post}}>
-        {{#if isExpanded}}
-            <span class="glyphicon glyphicon-collapse-down"></span> Collapse Stack Trace
-        {{else}}
-            <span class="glyphicon glyphicon-expand"></span> Expand Stack Trace
-        {{/if}}
+  <div class="text-center"><strong>{{content.status}} </strong> {{output}}
+    {{#if stackTrace}}
+      <a href="#" {{action "toggleStackTrace" post}}>
+        <i {{bind-attr class=":fa isExpanded:fa-toggle-down:fa-toggle-right"}}></i>
+        {{#if isExpanded}} Collapse Stack Trace {{else}} Expand Stack Trace {{/if}}
       </a>
-    </div>
-    {{#if isExpanded}}
-        <pre class="prettyprint">
-{{publicMessage}}
-{{stackTrace}}
-        </pre>
+      {{#if isExpanded}}
+          <pre class="prettyprint">{{stackTrace}}</pre>
+      {{/if}}
     {{/if}}
-  {{/if}}
+  </div>
 </div>

+ 3 - 1
contrib/views/files/src/main/resources/ui/app/templates/util/fileRow.hbs

@@ -67,7 +67,9 @@
         <li>
           <a href="#" {{action 'moveFile' 'cut' this.content}} data-toggle="tooltip" data-placement="bottom" title="Move"><i class="fa fa-level-down fa-rotate-270 fa-fw fa-lg"></i></a>
         </li>
-        <li>{{popover-delete confirm="deleteFile"}}</li>
+        {{#if dirInfo.writeAccess}}
+          <li>{{popover-delete confirm="deleteFile"}}</li>
+        {{/if}}
       </ul>
     {{/unless}}
   </td>

+ 1 - 1
contrib/views/files/src/main/resources/ui/config.coffee

@@ -50,4 +50,4 @@ exports.config =
   overrides:
     development:
       paths:
-        public: '/usr/lib/ambari-server/web/views-debug/FILES/0.1.0/MyFiles/'
+        public: '/usr/lib/ambari-server/web/views-debug/FILES/1.0.0/MyFiles/'