diff of 5926e9cc36e0e7f3ded844c180958b567f6c020d
5926e9cc36e0e7f3ded844c180958b567f6c020d
diff --git a/src/view/rss.lisp b/src/view/rss.lisp
index daf469d..3c34957 100644
--- a/src/view/rss.lisp
+++ b/src/view/rss.lisp
@@ -1,7 +1,8 @@
(defpackage murja.view.rss
- (:use :cl :binding-arrows :spinneret :murja.rss.reader-db)
+ (:use :cl :binding-arrows :spinneret :murja.rss.reader-db :easy-routes :ps :paren-async)
(:import-from :murja.view.components.tabs :deftab)
- (:import-from :murja.middleware.auth :*user*)
+ (:import-from :murja.middleware.auth :*user* :@ssr-authenticated)
+ (:import-from :murja.middleware.db :@db)
(:import-from :murja.model.user :user-id))
(in-package :murja.view.rss)
@@ -17,7 +18,7 @@ RETURNING id, title, description, link, author, pubdate" item-id feed-id :list))
(destructuring-bind (id title description link author pubdate) post-row
(let ((p (make-instance 'murja.model.post:RSS-Post
:created-at pubdate
- :id nil
+ :id id
:tags nil
:creator (make-instance 'murja.model.user:user
:nickname author)
@@ -50,16 +51,48 @@ ORDER BY pubdate DESC" feed-id (not (not archived))))
(:ul
(dolist (item items)
(destructuring-bind (id fetched title link author pubdate) item
+ (declare (ignore fetched link author))
(:li (:a :href (easy-routes:genurl 'rss-single-item :feed-id feed-id :item-id id) title)
(:section ("Published ~a" (lisp-fixup:fix-timestamp pubdate)))))))))
+(defroute delete-feed-route ("/blog/feed/:id"
+ :decorators (@db
+ @ssr-authenticated)
+ :method :delete ) ()
+ (murja.rss.reader-db:delete-feed id (murja.model.user:user-id *user*))
+ (setf (hunchentoot:return-code*) 204)
+ "")
+
+(defun delete-script ()
+ (ps
+
+ (defun-async delete-feed (feed-id)
+ (let ((result (await (fetch (+ "/blog/feed/" feed-id)
+ (create method "DELETE")))))
+ (if (equal 204 (await (@ result status)))
+ (chain location (reload))
+ (alert (+ "FAIL " (await (chain result (text))))))))
+
+ (chain document
+ (add-event-listener "DOMContentLoaded"
+ (lambda (e)
+ (let ((buttons (chain
+ document
+ (query-selector-all "button.remove-feed"))))
+ (dolist (b buttons)
+ (chain b
+ (add-event-listener "click"
+ (lambda (e)
+ (when (confirm (+ "Are you sure you wish to DELETE " (@ e target dataset feedname) "?"))
+ (delete-feed (@ e target dataset feedid)))))))))))))
(deftab rss (:url "/blog/feeds/"
:title "RSS Feeds"
:require-login t)
(let ((feeds (get-user-feeds2 (user-id *user*) nil))
(lisp-fixup:*rfc822* t))
+ (:script (:raw (delete-script)))
(:ul.flowy-list
(dolist (feed feeds)
(destructuring-bind (id name url count last-modified) feed
@@ -68,4 +101,6 @@ ORDER BY pubdate DESC" feed-id (not (not archived))))
(:a :href (easy-routes:genurl 'rss-single-feed :feed-id id) (format nil "~a (~d)" name count)))
(:div "Feed is located in " (:a :href url url))
(:div ("Last updated ~a" (unless (equalp last-modified :NULL)
- (lisp-fixup:fix-timestamp last-modified))))))))))
+ (lisp-fixup:fix-timestamp last-modified))))
+
+ (:button.remove-feed :data-feedid id :data-feedname name "DELETE THIS FEED")))))))