浏览代码

HUE-5456 [fb] The file edit save button should submit via AJAX

Enrico Berti 9 年之前
父节点
当前提交
6f181a8d96

+ 29 - 16
apps/filebrowser/src/filebrowser/templates/edit.mako

@@ -35,17 +35,14 @@ ${ fb_components.menubar() }
 
 <div class="container-fluid">
   <div class="row-fluid">
-    <div class="span2">
-      ${ fb_components.file_sidebar(path_enc, dirname_enc, stats, show_download_button) }
-    </div>
-    <div class="span10">
+    <div class="span12">
       <div class="card card-small">
       % if breadcrumbs:
         ${fb_components.breadcrumbs(path, breadcrumbs)}
       %endif
         <div class="card-body">
           <p>
-            <form class="form-stacked" method="post" action="${url('filebrowser.views.save_file')}">
+            <form id="saveForm" class="form-stacked" method="post" action="${url('filebrowser.views.save_file')}">
               ${ csrf_token(request) | n,unicode }
               % if form.errors:
               <div class="alert-message">
@@ -110,14 +107,34 @@ ${ fb_components.menubar() }
         $("#saveAsModal").modal("hide");
       });
 
-      $("#saveAsForm").submit(function () {
-        if ($.trim($("#saveAsForm").find("input[name='path']").val()) == "") {
-          $("#saveAsForm").find("input[name='path']").addClass("fieldError");
-          $("#saveAsNameRequiredAlert").show();
-          resetPrimaryButtonsStatus(); //globally available
-          return false;
+      $('#saveForm').ajaxForm({
+        dataType: 'json',
+        success: function (data) {
+          if (data && data.exists) {
+            resetPrimaryButtonsStatus();
+            $.jHueNotify.info(data.path + " ${ _('saved correctly') }")
+          }
+        }
+      });
+
+      $('#saveAsForm').ajaxForm({
+        dataType: 'json',
+        beforeSubmit: function() {
+          if ($.trim($("#saveAsForm").find("input[name='path']").val()) == "") {
+            $("#saveAsForm").find("input[name='path']").addClass("fieldError");
+            $("#saveAsNameRequiredAlert").show();
+            resetPrimaryButtonsStatus(); //globally available
+            return false;
+          }
+          return true;
+        },
+        success: function (data) {
+          if (data && data.exists) {
+            resetPrimaryButtonsStatus();
+            $("#saveAsModal").modal("hide");
+            $.jHueNotify.info(data.path + " ${ _('saved correctly') }")
+          }
         }
-        return true;
       });
 
       $("#saveAsForm").find("input[name='path']").focus(function () {
@@ -141,10 +158,6 @@ ${ fb_components.menubar() }
         $("#fileChooserSaveModal").slideDown();
       });
 
-      $("#refreshBtn").click(function(){
-        window.location.reload();
-      });
-
       function resizeTextarea() {
         var RESIZE_CORRECTION = 246;
         $("textarea[name='contents']").height($(window).height() - RESIZE_CORRECTION);

+ 0 - 61
apps/filebrowser/src/filebrowser/templates/fb_components.mako

@@ -99,64 +99,3 @@ from aws import get_client
   </div>
 </%def>
 
-<%def name="file_sidebar(path_enc, dirname_enc, stats, show_download_button, view=None)">
-  <div class="sidebar-nav" style="padding-top: 0">
-    <ul class="nav nav-list">
-      <li class="nav-header">${_('Actions')}</li>
-      % if view:
-        <%
-          base_url = url('filebrowser.views.view', path=path_enc)
-        %>
-        % if view['mode'] == "binary":
-          <li><a href="${base_url}?mode=text&compression=${view['compression']}"><i class="fa fa-font"></i> ${_('View as text')}</a></li>
-        % endif
-
-        % if view['mode'] == "text":
-          <li><a href="${base_url}?mode=binary&compression=${view['compression']}"><i class="fa fa-barcode"></i> ${_('View as binary')}</a></li>
-        % endif
-
-        % if view['compression'] != "gzip" and path.endswith('.gz'):
-          <li><a href="${base_url}?offset=0&length=2000&mode=${view['mode']}&compression=gzip"><i class="fa fa-youtube-play"></i> ${_('Preview as Gzip')}</a></li>
-        % endif
-
-        % if view['compression'] != "avro" and view['compression'] != "snappy_avro" and path.endswith('.avro'):
-          <li><a href="${base_url}?offset=0&length=2000&mode=${view['mode']}&compression=avro"><i class="fa fa-youtube-play"></i> ${_('Preview as Avro')}</a></li>
-        % endif
-
-        % if view['compression'] and view['compression'] != "none":
-          <li><a href="${base_url}?offset=0&length=2000&mode=${view['mode']}&compression=none"><i class="fa fa-times-circle"></i> ${_('Stop preview')}</a></li>
-        % endif
-
-        % if editable and view['compression'] == "none":
-          <li><a href="${url('filebrowser.views.edit', path=path_enc)}"><i class="fa fa-pencil"></i> ${_('Edit file')}</a></li>
-        % endif
-      % else:
-        <li><a href="${url('filebrowser.views.view', path=path_enc)}"><i class="fa fa-eye"></i> ${_('View file')}</a></li>
-      % endif
-
-      % if show_download_button:
-       <li><a href="${url('filebrowser.views.download', path=path_enc)}"><i class="fa fa-download"></i> ${_('Download')}</a></li>
-      % endif
-       <li><a href="${url('filebrowser.views.view', path=dirname_enc)}"><i class="fa fa-file-text"></i> ${_('View file location')}</a></li>
-       <li><a id="refreshBtn" href="#"><i class="fa fa-refresh"></i> ${_('Refresh')}</a></li>
-
-       % if stats is not None: # Case new file
-       <li class="nav-header">${_('Info')}</li>
-       <li class="white">
-        <dl>
-          <dt>${_('Last modified')}</dt>
-          <dd>${date(datetime.datetime.fromtimestamp(stats['mtime']))} ${time(datetime.datetime.fromtimestamp(stats['mtime']))}</dd>
-          <dt>${_('User')}</dt>
-          <dd>${stats['user']}</dd>
-          <dt>${_('Group')}</dt>
-          <dd>${stats['group']}</dd>
-          <dt>${_('Size')}</dt>
-          <dd>${stats['size']|filesizeformat}</dd>
-          <dt>${_('Mode')}</dt>
-          <dd>${stringformat(stats['mode'], "o")}</dd>
-        </dl>
-       </li>
-       % endif
-    </ul>
-  </div>
-</%def>

+ 5 - 5
apps/filebrowser/src/filebrowser/views.py

@@ -259,13 +259,14 @@ def edit(request, path, form=None):
 
     data = dict(
         exists=(stats is not None),
-        stats=stats,
-        form=form,
         path=path,
         filename=os.path.basename(path),
         dirname=os.path.dirname(path),
-        breadcrumbs = parse_breadcrumbs(path),
-        show_download_button = SHOW_DOWNLOAD_BUTTON.get())
+        breadcrumbs=parse_breadcrumbs(path),
+        show_download_button=SHOW_DOWNLOAD_BUTTON.get())
+    if request.META.get('HTTP_X_REQUESTED_WITH') != 'XMLHttpRequest':
+        data['stats'] = stats;
+        data['form'] = form;
     return render("edit.mako", request, data)
 
 def save_file(request):
@@ -302,7 +303,6 @@ def save_file(request):
     except Exception, e:
         raise PopupException(_("The file could not be saved"), detail=e)
 
-    messages.info(request, _('Saved %(path)s.') % {'path': os.path.basename(path)})
     request.path = reverse("filebrowser.views.edit", kwargs=dict(path=path))
     return edit(request, path, form)