]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
WUI: hook up an "overwrite" button on mutable files
authorZooko O'Whielacronx <zooko@zooko.com>
Sat, 10 Nov 2007 17:53:45 +0000 (10:53 -0700)
committerZooko O'Whielacronx <zooko@zooko.com>
Sat, 10 Nov 2007 17:53:45 +0000 (10:53 -0700)
src/allmydata/web/directory.xhtml
src/allmydata/webish.py

index 478f5bc8cceb262d81a549a7660b3484cc8f400e..27302b1f1487ef8a8601fbc3d639d7a16fbb5c1a 100644 (file)
@@ -31,6 +31,7 @@
     <td></td>
     <td></td>
     <td></td>
+    <td></td>
     <td>Checker Results</td>
   </tr>
   <tr n:pattern="item" n:render="row">
@@ -39,7 +40,9 @@
     <td><n:slot name="size"/></td>
     <td><n:slot name="data"/></td>
     <td><n:slot name="delete"/></td>
+             <td><div n:render="overwrite"/></td>
     <td><n:slot name="rename"/></td>
+
     <td><n:slot name="check"/></td>
     <td><n:slot name="checker_results"/></td>
   </tr>
index a8e888a620e17071e4dc2cdc89a66b88337fc3e3..afd808f5eb08e2e993d3904d6a452d013d9ffc75 100644 (file)
@@ -332,6 +332,25 @@ class Directory(rend.Page):
                 T.div(class_="freeform-form")[mount],
                 ]
 
+    def render_overwrite(self, ctx, data):
+        name, target = data
+        if IMutableFileNode.providedBy(target):
+            overwrite = T.form(action=".", method="post",
+                               enctype="multipart/form-data")[
+                T.fieldset[
+                T.input(type="hidden", name="t", value="overwrite"),
+                T.input(type='hidden', name='name', value=name),
+                T.input(type='hidden', name='when_done', value=url.here),
+                T.legend(class_="freeform-form-label")["Overwrite"],
+                "Choose new file: ",
+                T.input(type="file", name="file", class_="freeform-input-file"),
+                " ",
+                T.input(type="submit", value="Overwrite")
+                ]]
+            return [T.div(class_="freeform-form")[overwrite],]
+        else:
+            return []
+
     def render_results(self, ctx, data):
         req = inevow.IRequest(ctx)
         if "results" in req.args:
@@ -790,6 +809,17 @@ class POSTHandler(rend.Page):
                     return newnode.get_uri()
                 d.addCallback(_done)
 
+        elif t == "overwrite":
+            contents = req.fields["file"]
+            # SDMF: files are small, and we can only upload data.
+            contents.file.seek(0)
+            data = contents.file.read()
+            d = self._node.get(name)
+            def _got_child(child_node):
+                child_node.replace(data)
+                return child_node.get_uri()
+            d.addCallback(_got_child)
+
         elif t == "check":
             d = self._node.get(name)
             def _got_child(child_node):