WUI: hook up an "overwrite" button on mutable files

This commit is contained in:
Zooko O'Whielacronx 2007-11-10 10:53:45 -07:00
parent 97de6a03d2
commit 85b972a4c3
2 changed files with 33 additions and 0 deletions

View File

@ -31,6 +31,7 @@
<td></td> <td></td>
<td></td> <td></td>
<td></td> <td></td>
<td></td>
<td>Checker Results</td> <td>Checker Results</td>
</tr> </tr>
<tr n:pattern="item" n:render="row"> <tr n:pattern="item" n:render="row">
@ -39,7 +40,9 @@
<td><n:slot name="size"/></td> <td><n:slot name="size"/></td>
<td><n:slot name="data"/></td> <td><n:slot name="data"/></td>
<td><n:slot name="delete"/></td> <td><n:slot name="delete"/></td>
<td><div n:render="overwrite"/></td>
<td><n:slot name="rename"/></td> <td><n:slot name="rename"/></td>
<td><n:slot name="check"/></td> <td><n:slot name="check"/></td>
<td><n:slot name="checker_results"/></td> <td><n:slot name="checker_results"/></td>
</tr> </tr>

View File

@ -332,6 +332,25 @@ class Directory(rend.Page):
T.div(class_="freeform-form")[mount], 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): def render_results(self, ctx, data):
req = inevow.IRequest(ctx) req = inevow.IRequest(ctx)
if "results" in req.args: if "results" in req.args:
@ -790,6 +809,17 @@ class POSTHandler(rend.Page):
return newnode.get_uri() return newnode.get_uri()
d.addCallback(_done) 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": elif t == "check":
d = self._node.get(name) d = self._node.get(name)
def _got_child(child_node): def _got_child(child_node):