Browse Source

Link editing

Trevor Elliott 4 years ago
parent
commit
ee262a794a
4 changed files with 64 additions and 1 deletions
  1. 22 0
      lc/app.py
  2. 8 0
      lc/model.py
  3. 30 0
      templates/edit_link.mustache
  4. 4 1
      templates/link.mustache

+ 22 - 0
lc/app.py

@@ -133,6 +133,15 @@ class GetLink(Endpoint):
     def api_get(self, user: str, link: str):
         pass
 
+    def api_post(self, user: str, link: str):
+        u = m.User.by_slug(user)
+        l = u.get_link(int(link))
+        if u == self.user:
+            req = self.request_data(r.Link)
+            l.update_from_request(req)
+
+        raise e.LCRedirect(l.link_url())
+
     def html(self, user: str, link: str):
         l = m.User.by_slug(user).get_link(int(link))
         return render(
@@ -143,6 +152,19 @@ class GetLink(Endpoint):
         )
 
 
+@endpoint("/u/<string:slug>/l/<string:link>/edit")
+class EditLink(Endpoint):
+    def html(self, slug: str, link: str):
+        u = m.User.by_slug(slug)
+        l = u.get_link(int(link))
+        if u != self.user:
+            raise e.LCRedirect(l.link_url())
+
+        return render(
+            "main", title="login", content=render("edit_link", link=l), user=self.user
+        )
+
+
 @endpoint("/u/<string:user>/t/<path:tag>")
 class GetTaggedLinks(Endpoint):
     def html(self, user: str, tag: str):

+ 8 - 0
lc/model.py

@@ -162,6 +162,14 @@ class Link(Model):
             )
         return l
 
+    def update_from_request(self, link: r.Link):
+        Link.update(
+            url=link.url,
+            name=link.name,
+            description=link.description,
+            private=link.private,
+        ).where(Link.id == self.id).execute()
+
 
 class Tag(Model):
     """

+ 30 - 0
templates/edit_link.mustache

@@ -0,0 +1,30 @@
+{{#link}}
+<div class="loginform">
+  <form name="edit_link" method="POST" action="{{link_url}}">
+    <div class="url">
+      <label for="url">URL</label>
+      <input name="url" type="text" value="{{url}}" />
+    </div>
+    <div class="name">
+      <label for="name">Link Name</label>
+      <input name="name" type="text" value="{{name}}" />
+    </div>
+    <div class="description">
+      <label for="description">Description</label>
+      <input name="description" type="text" value="{{description}}" />
+    </div>
+    <div class="private">
+      <label for="private">Private?</label>
+      <input name="private" type="checkbox" {{#private}}checked {{/private}}/>
+    </div>
+    <div class="tags">
+      <label for="tags">Tags</label>
+      <input name="tags" type="text" value="" />
+    </div>
+
+    <div class="submit">
+      <input type="submit" value="Save" />
+    </div>
+  </form>
+</div>
+{{/link}}

+ 4 - 1
templates/link.mustache

@@ -6,5 +6,8 @@
       <span class="tag"><a href="{{url}}">{{name}}</a></span>
     {{/tag}}
   {{/tags}}</div>
-  <div class="datetime"><a href="{{link_url}}">{{created}}</a></div>
+  <div class="datetime">
+    <a href="{{link_url}}">{{created}}</a>
+    <a href="{{link_url}}/edit">edit</a>
+  </div>
 </div>