diff of 6615ffc75e868e68111c664c830cd5662dafad34
6615ffc75e868e68111c664c830cd5662dafad34
diff --git a/aggressive-murja.asd b/aggressive-murja.asd
index 3075e73..56bc25c 100644
--- a/aggressive-murja.asd
+++ b/aggressive-murja.asd
@@ -35,11 +35,57 @@
:description "A rewrite of the <a href=\"https://github.com/feuery/murja-blog/\">murja blogging engine</a> in lisp"
:components ((:module "src"
:components
- ((:module "local-lib"
+ ((:module "packages"
+ :components
+ ((:file "lisp-fixup")
+ (:file "halisql")
+ (:file "migrations")
+ (:file "json")
+ (:file "session-db")
+ (:file "middleware-db")
+ (:file "user")
+ (:file "post")
+ (:file "log")
+ (:file "settings")
+ (:file "setting-definitions")
+ (:file "genurl")
+ (:file "json-middleware")
+ (:file "auth")
+ (:file "session")
+ (:file "post-db")
+ (:file "media-db")
+ (:file "reader-db")
+ (:file "login-routes")
+ (:file "post-routes")
+ (:file "media-routes")
+ (:file "rss-routes")
+ (:file "rss-reader-routes")
+ (:file "user-editor")
+ (:file "root-routes")
+ (:file "root-component")
+ (:file "tabs-component")
+ (:file "blogpost-component")
+ (:file "single-post")
+ (:file "blog-root")
+ (:file "tag-script")
+ (:file "previouslies-script")
+ (:file "dnd-script")
+ (:file "editor")
+ (:file "components-log")
+ (:file "post-list")
+ (:file "media-admin")
+ (:file "new-post")
+ (:file "logs")
+ (:file "rss")
+ (:file "settings-view")
+ (:file "main")))
+
+ (:module "local-lib"
:components ((:file "lisp-fixup")
(:file "halisql")
(:file "migrations")
(:file "json")))
+
(:file "migration-list")
(:file "session-db")
(:file "middleware-db")
diff --git a/src/genurl.lisp b/src/genurl.lisp
index b1e6f1e..c32dfbd 100644
--- a/src/genurl.lisp
+++ b/src/genurl.lisp
@@ -1,17 +1,37 @@
-(defpackage murja.genurl
- (:use :cl)
- (:export :route->url)
- (:documentation "Provides functions for transforming murja.view.components.tabs:deftab'bed and easy-routes:defroute'd url symbols into correctly prefixed url strings")
- (:local-nicknames (:settings :murja.setting-definitions)))
-
(in-package :murja.genurl)
(defun route->url (symbol &rest params)
+ "A server side route->url transformer. Symbol and params are passed on into #'easy-routes:genurl, refer to its documentation or murja's genurl-tests.lisp for usage"
(format nil "~a~a"
(settings:prefix)
(apply #'easy-routes:genurl symbol params)))
-;; (route->url 'murja.view.rss::rss-single-item :feed-id "ffffeed-id" :item-id "itemiiii-id")
-;; "/feeds/ffffeed-id/item/itemiiii-id"
-;; "/feeds/feed-id/item/item-id"
+(defun route->url-ps (symbol &rest params)
+ "route->url for the frontend code.
+
+usage: (ps ....
+ (lisp (route>url-ps 'murja.view.rss::rss-single-item
+ :feed-id 'feedy-id :item-id 'ps-symboli))),
+where feedy-id and ps-symboli are expected to be found in the containing ps scope.
+
+THIS FUNCTION RETURNS LISTS TO PASS INTO (ps:lisp)"
+ (let* ((params-map (alexandria:plist-hash-table params))
+ (js-placeholders (make-hash-table :test 'equal)))
+ (maphash (lambda (k v)
+ (setf (gethash k js-placeholders) (format nil "SPLIT_FOR_~a" v)))
+ params-map)
+
+ (let* ((url (apply #'easy-routes:genurl symbol (alexandria:hash-table-plist js-placeholders)))
+ (body (alexandria:flatten
+ `(+ ,(settings:prefix)
+ ,@(map 'list (lambda (part)
+ (if (str:starts-with-p "SPLIT_FOR_" part)
+ (list
+ (read-from-string (str:replace-all "SPLIT_FOR_" "" part)) "/")
+ (format nil "~a/"
+ part)))
+ (str:split "/" url))))))
+ (if (equalp (alexandria:last-elt body) "/")
+ (butlast body)
+ body))))
diff --git a/src/local-lib/halisql.lisp b/src/local-lib/halisql.lisp
index 4ec7a3f..fe8f72e 100644
--- a/src/local-lib/halisql.lisp
+++ b/src/local-lib/halisql.lisp
@@ -1,8 +1,3 @@
-(defpackage halisql
- (:use :cl :binding-arrows)
- (:import-from :lisp-fixup :slurp-utf-8 :drop :partial :compose)
- (:export :slurp-sql :get-sql :*log* :pick-queries :defqueries :*system-name*))
-
(in-package :halisql)
(defvar *system-name* :aggressive-murja
diff --git a/src/local-lib/json.lisp b/src/local-lib/json.lisp
index 358f587..d37cd94 100644
--- a/src/local-lib/json.lisp
+++ b/src/local-lib/json.lisp
@@ -1,10 +1,3 @@
-(defpackage murja.json
- (:use :cl)
- (:import-from :binding-arrows :->>)
- (:import-from :com.inuoe.jzon :stringify :parse)
- (:export :bind-json)
- (:documentation "Convenience tools for handling json"))
-
(in-package :murja.json)
(defmacro bind-json (requireds optionals json &rest body)
diff --git a/src/local-lib/lisp-fixup.lisp b/src/local-lib/lisp-fixup.lisp
index d594457..f7da698 100644
--- a/src/local-lib/lisp-fixup.lisp
+++ b/src/local-lib/lisp-fixup.lisp
@@ -1,17 +1,3 @@
-(defpackage lisp-fixup
- (:use :cl :cl-hash-util)
- (:export :if-modified-since->simpledate-timestamp :*rfc822*
- :month->string
- :group-by
- :*dev?* :to-secs
- :fix-timestamp
- :*now*
- :sha-512 :partial
- :compose :drop
- :slurp-bytes :slurp-utf-8
- :range :range2
- :formdata->hashmap))
-
(in-package :lisp-fixup)
(eval-when (:compile-toplevel :load-toplevel :execute)
diff --git a/src/local-lib/migrations.lisp b/src/local-lib/migrations.lisp
index 65298c4..6f4df1a 100644
--- a/src/local-lib/migrations.lisp
+++ b/src/local-lib/migrations.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.migrations
- (:use :halisql)
- (:use :cl)
- (:export :migration-does-exist :deflispmigration :defmigration :migrate))
-
(in-package :murja.migrations)
(defparameter *migrations* nil)
diff --git a/src/main.lisp b/src/main.lisp
index d0a5847..7e1af8a 100644
--- a/src/main.lisp
+++ b/src/main.lisp
@@ -1,10 +1,3 @@
-(defpackage murja
- (:use :cl)
- (:import-from :murja.posts.post-db)
- (:import-from :murja.middleware.db :with-db)
- (:import-from :murja.migrations :migrate)
- (:export :main :start-server))
-
(in-package :murja)
(defvar *server* nil)
diff --git a/src/media/media-db.lisp b/src/media/media-db.lisp
index 746097f..d12af02 100644
--- a/src/media/media-db.lisp
+++ b/src/media/media-db.lisp
@@ -1,10 +1,3 @@
-(defpackage :murja.media.media-db
- (:use :cl :postmodern)
- (:import-from :com.inuoe.jzon :parse)
- (:import-from :halisql :defqueries)
- (:import-from :lisp-fixup :fix-timestamp)
- (:export :get-media :insert-media :select-referencing-posts*))
-
(in-package :murja.media.media-db)
(defqueries "media-fns")
diff --git a/src/middleware-db.lisp b/src/middleware-db.lisp
index e22299c..31a37f1 100644
--- a/src/middleware-db.lisp
+++ b/src/middleware-db.lisp
@@ -1,11 +1,3 @@
-(defpackage murja.middleware.db
- (:use :cl :postmodern)
- (:export :connect-murjadb-toplevel
- :@db
- :@transaction
- :with-db
- :*automatic-tests-on?*))
-
(in-package :murja.middleware.db)
(defvar *automatic-tests-on?* nil)
diff --git a/src/middleware/auth.lisp b/src/middleware/auth.lisp
index ea9172e..526b7c0 100644
--- a/src/middleware/auth.lisp
+++ b/src/middleware/auth.lisp
@@ -1,9 +1,3 @@
-(defpackage murja.middleware.auth
- (:use :cl :postmodern)
- (:import-from :murja.model.user :user-username)
- (:local-nicknames (:users :murja.model.user))
- (:export :@ssr-authenticated :*now* :*session-key* :*user* :@can?))
-
(in-package :murja.middleware.auth)
(defvar *user* nil
diff --git a/src/middleware/json.lisp b/src/middleware/json.lisp
index 61e5cbe..e57512c 100644
--- a/src/middleware/json.lisp
+++ b/src/middleware/json.lisp
@@ -1,7 +1,3 @@
-(defpackage murja.middleware.json
- (:use :cl)
- (:import-from :com.inuoe.jzon :stringify))
-
(in-package :murja.middleware.json)
(defun @json (next)
diff --git a/src/model/log.lisp b/src/model/log.lisp
index a98e27c..2f82b14 100644
--- a/src/model/log.lisp
+++ b/src/model/log.lisp
@@ -1,9 +1,3 @@
-(defpackage murja.model.log
- (:use :cl :binding-arrows)
- (:import-from :halisql :defqueries)
- (:import-from :lisp-fixup :partial)
- (:export :get-alarmy-groups :get-groups :get-logs))
-
(in-package :murja.model.log)
(defun get-logs ()
diff --git a/src/model/post.lisp b/src/model/post.lisp
index 8f3a7c0..24bad73 100644
--- a/src/model/post.lisp
+++ b/src/model/post.lisp
@@ -1,10 +1,3 @@
-(defpackage murja.model.post
- (:use :cl)
- (:export :RSS-Post :rss-link :Post :get-page :get-post :post-id :post-title :article :creator :tags :created-at :post-hidden? :post-unlisted? :next-post-id :previous-post-id :previouslies
- :id :title :creator :created-at :content :admin-get-all-titles
- :title :month :year :id :tags :hidden :unlisted :get-tagged)
- (:import-from :com.inuoe.jzon :parse))
-
(in-package :murja.model.post)
;; fuck it we're moving from hashmaps to clos now
diff --git a/src/model/settings.lisp b/src/model/settings.lisp
index aedc917..b925d88 100644
--- a/src/model/settings.lisp
+++ b/src/model/settings.lisp
@@ -1,20 +1,3 @@
-(defpackage murja.model.settings
- (:use :cl)
- (:export :setting-getter :all-setting-names :update-setting :defsetting :define-settings :create-settings)
- (:import-from :com.inuoe.jzon :stringify :parse)
- (:documentation "This package specifies macros define-settings and defsetting, which are used thus:
-
-```
-(define-settings
- (site-name \"default-site\")
- (test-setting 12345))
-```
-
-After running that form, one can get setting's current value by funcalling its symbol (for example: `(site-name) => \"default site\")`. If you wish to change
-the value of this setting, you call its symbol with a parameter (`(site-name \"a new site\")`, after which calling it with 0-arity begins returning \"a new site\").
-
-These changes are saved in murja's table `blog.Settings`."))
-
(in-package :murja.model.settings)
(named-readtables:in-readtable :murja.ps)
diff --git a/src/model/user.lisp b/src/model/user.lisp
index be68806..337d8ba 100644
--- a/src/model/user.lisp
+++ b/src/model/user.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.model.user
- (:use :cl)
- (:local-nicknames (:json :com.inuoe.jzon))
- (:export :get-user :User :user-id :user-username :register-user :user-password :user-nickname :user-img-location :abilities))
-
(in-package :murja.model.user)
(defclass User ()
diff --git a/src/packages/auth.lisp b/src/packages/auth.lisp
new file mode 100644
index 0000000..bff8555
--- /dev/null
+++ b/src/packages/auth.lisp
@@ -0,0 +1,6 @@
+(defpackage :murja.middleware.auth
+ (:use :cl :postmodern)
+ (:import-from :murja.model.user :user-username)
+ (:local-nicknames (:users :murja.model.user))
+ (:export :@ssr-authenticated :*now* :*session-key* :*user* :@can?))
+
diff --git a/src/packages/blog-root.lisp b/src/packages/blog-root.lisp
new file mode 100644
index 0000000..06dd18f
--- /dev/null
+++ b/src/packages/blog-root.lisp
@@ -0,0 +1,8 @@
+(defpackage :murja.view.blog-root
+ (:use :cl :binding-arrows
+ :murja.view.components.blogpost
+ :easy-routes :cl-hash-util)
+ (:export :root :page-tab)
+ (:import-from :murja.view.components.tabs :deftab)
+ (:import-from :murja.model.post :get-page)
+ (:local-nicknames (:settings :murja.setting-definitions)))
diff --git a/src/packages/blogpost-component.lisp b/src/packages/blogpost-component.lisp
new file mode 100644
index 0000000..fb41d01
--- /dev/null
+++ b/src/packages/blogpost-component.lisp
@@ -0,0 +1,4 @@
+(defpackage murja.view.components.blogpost
+ (:use :cl :binding-arrows :spinneret :murja.model.post :murja.model.user :cl-hash-util)
+ (:import-from :murja.middleware.auth :*user*)
+ (:export :page :blogpost))
diff --git a/src/packages/components-log.lisp b/src/packages/components-log.lisp
new file mode 100644
index 0000000..19c626d
--- /dev/null
+++ b/src/packages/components-log.lisp
@@ -0,0 +1,3 @@
+(defpackage :murja.view.admin.components.log
+ (:use :cl :binding-arrows :spinneret)
+ (:export :log-group))
diff --git a/src/packages/dnd-script.lisp b/src/packages/dnd-script.lisp
new file mode 100644
index 0000000..b233c5a
--- /dev/null
+++ b/src/packages/dnd-script.lisp
@@ -0,0 +1,5 @@
+(defpackage :murja.view.admin.components.dnd-script
+ (:use :cl :binding-arrows :parenscript :paren-async)
+ (:export :editor-dnd-script)
+ (:documentation "Parenscript logic for making picture drag and drop work"))
+
diff --git a/src/packages/editor.lisp b/src/packages/editor.lisp
new file mode 100644
index 0000000..fa0518e
--- /dev/null
+++ b/src/packages/editor.lisp
@@ -0,0 +1,8 @@
+(defpackage murja.view.admin.components.editor
+ (:use :cl :binding-arrows :spinneret :parenscript :murja.view.admin.components.dnd-script)
+ (:export :editor)
+ (:import-from :murja.view.admin.components.tag-script :tags-component-frontend)
+ (:import-from :murja.view.admin.components.previouslies-script :previouslies-component-frontend)
+ (:import-from :murja.model.post :post-id :tags :article :post-title :post-hidden? :post-unlisted?)
+ (:local-nicknames (:posts :murja.model.post)
+ (:json :com.inuoe.jzon)))
\ No newline at end of file
diff --git a/src/packages/genurl.lisp b/src/packages/genurl.lisp
new file mode 100644
index 0000000..b5b2346
--- /dev/null
+++ b/src/packages/genurl.lisp
@@ -0,0 +1,5 @@
+(defpackage :murja.genurl
+ (:use :cl :ps)
+ (:export :route->url-ps-m :route->url :route->url-ps)
+ (:documentation "Provides functions for transforming murja.view.components.tabs:deftab'bed and easy-routes:defroute'd url symbols into correctly prefixed url strings")
+ (:local-nicknames (:settings :murja.setting-definitions)))
diff --git a/src/packages/halisql.lisp b/src/packages/halisql.lisp
new file mode 100644
index 0000000..c398ef8
--- /dev/null
+++ b/src/packages/halisql.lisp
@@ -0,0 +1,4 @@
+(defpackage :halisql
+ (:use :cl :binding-arrows)
+ (:import-from :lisp-fixup :slurp-utf-8 :drop :partial :compose)
+ (:export :slurp-sql :get-sql :*log* :pick-queries :defqueries :*system-name*))
diff --git a/src/packages/json-middleware.lisp b/src/packages/json-middleware.lisp
new file mode 100644
index 0000000..0f29a96
--- /dev/null
+++ b/src/packages/json-middleware.lisp
@@ -0,0 +1,4 @@
+(defpackage :murja.middleware.json
+ (:use :cl)
+ (:import-from :com.inuoe.jzon :stringify))
+
diff --git a/src/packages/json.lisp b/src/packages/json.lisp
new file mode 100644
index 0000000..bdcb4f0
--- /dev/null
+++ b/src/packages/json.lisp
@@ -0,0 +1,6 @@
+(defpackage :murja.json
+ (:use :cl)
+ (:import-from :binding-arrows :->>)
+ (:import-from :com.inuoe.jzon :stringify :parse)
+ (:export :bind-json)
+ (:documentation "Convenience tools for handling json"))
diff --git a/src/packages/lisp-fixup.lisp b/src/packages/lisp-fixup.lisp
new file mode 100644
index 0000000..7181bca
--- /dev/null
+++ b/src/packages/lisp-fixup.lisp
@@ -0,0 +1,13 @@
+(defpackage :lisp-fixup
+ (:use :cl :cl-hash-util)
+ (:export :if-modified-since->simpledate-timestamp :*rfc822*
+ :month->string
+ :group-by
+ :*dev?* :to-secs
+ :fix-timestamp
+ :*now*
+ :sha-512 :partial
+ :compose :drop
+ :slurp-bytes :slurp-utf-8
+ :range :range2
+ :formdata->hashmap))
diff --git a/src/packages/log.lisp b/src/packages/log.lisp
new file mode 100644
index 0000000..333e75b
--- /dev/null
+++ b/src/packages/log.lisp
@@ -0,0 +1,5 @@
+(defpackage :murja.model.log
+ (:use :cl :binding-arrows)
+ (:import-from :halisql :defqueries)
+ (:import-from :lisp-fixup :partial)
+ (:export :get-alarmy-groups :get-groups :get-logs))
diff --git a/src/packages/login-routes.lisp b/src/packages/login-routes.lisp
new file mode 100644
index 0000000..c0f65dd
--- /dev/null
+++ b/src/packages/login-routes.lisp
@@ -0,0 +1,11 @@
+(defpackage murja.routes.login-routes
+ (:use :cl :binding-arrows :murja.setting-definitions)
+ (:export :get-session-key :set-session-cookies :formdata->hashmap :forms-post-login)
+ (:import-from :cl-hash-util :hash)
+ (:import-from :murja.session :set-session-value)
+ (:import-from :lisp-fixup :sha-512)
+ (:import-from :murja.middleware.auth :*user*)
+ (:import-from :murja.middleware.db :@transaction)
+ (:import-from :easy-routes :defroute)
+ (:import-from :com.inuoe.jzon :parse :stringify)
+ (:local-nicknames (:users :murja.model.user)))
diff --git a/src/packages/logs.lisp b/src/packages/logs.lisp
new file mode 100644
index 0000000..164ebe7
--- /dev/null
+++ b/src/packages/logs.lisp
@@ -0,0 +1,3 @@
+(defpackage :murja.view.admin.logs
+ (:use :cl :binding-arrows :spinneret :com.inuoe.jzon :easy-routes :murja.model.log :murja.view.admin.components.log)
+ (:import-from :murja.view.components.tabs :deftab))
diff --git a/src/packages/main.lisp b/src/packages/main.lisp
new file mode 100644
index 0000000..b1590dd
--- /dev/null
+++ b/src/packages/main.lisp
@@ -0,0 +1,6 @@
+(defpackage murja
+ (:use :cl)
+ (:import-from :murja.posts.post-db)
+ (:import-from :murja.middleware.db :with-db)
+ (:import-from :murja.migrations :migrate)
+ (:export :main :start-server))
diff --git a/src/packages/media-admin.lisp b/src/packages/media-admin.lisp
new file mode 100644
index 0000000..a4deb5b
--- /dev/null
+++ b/src/packages/media-admin.lisp
@@ -0,0 +1,4 @@
+(defpackage :murja.view.admin.media-admin
+ (:use :cl :binding-arrows :spinneret :ps :paren-async)
+ (:import-from :murja.media.media-db :select-referencing-posts*)
+ (:import-from :murja.view.components.tabs :deftab))
diff --git a/src/packages/media-db.lisp b/src/packages/media-db.lisp
new file mode 100644
index 0000000..07f846f
--- /dev/null
+++ b/src/packages/media-db.lisp
@@ -0,0 +1,6 @@
+(defpackage :murja.media.media-db
+ (:use :cl :postmodern)
+ (:import-from :com.inuoe.jzon :parse)
+ (:import-from :halisql :defqueries)
+ (:import-from :lisp-fixup :fix-timestamp)
+ (:export :get-media :insert-media :select-referencing-posts*))
diff --git a/src/packages/media-routes.lisp b/src/packages/media-routes.lisp
new file mode 100644
index 0000000..7598cfe
--- /dev/null
+++ b/src/packages/media-routes.lisp
@@ -0,0 +1,12 @@
+(defpackage :murja.routes.media-routes
+ (:use :cl)
+ (:import-from :lisp-fixup :slurp-bytes)
+ (:import-from :com.inuoe.jzon :stringify :parse)
+ (:import-from :murja.middleware.db :@transaction)
+ (:import-from :murja.media.media-db :get-media :insert-media)
+ (:import-from :murja.middleware.auth :@can? :*user*)
+ (:import-from :easy-routes :defroute)
+
+
+ (:export :post-pic :delete-pic))
+
diff --git a/src/packages/middleware-db.lisp b/src/packages/middleware-db.lisp
new file mode 100644
index 0000000..154df51
--- /dev/null
+++ b/src/packages/middleware-db.lisp
@@ -0,0 +1,7 @@
+(defpackage :murja.middleware.db
+ (:use :cl :postmodern)
+ (:export :connect-murjadb-toplevel
+ :@db
+ :@transaction
+ :with-db
+ :*automatic-tests-on?*))
diff --git a/src/packages/migrations.lisp b/src/packages/migrations.lisp
new file mode 100644
index 0000000..b390c87
--- /dev/null
+++ b/src/packages/migrations.lisp
@@ -0,0 +1,4 @@
+(defpackage :murja.migrations
+ (:use :halisql)
+ (:use :cl)
+ (:export :migration-does-exist :deflispmigration :defmigration :migrate))
diff --git a/src/packages/new-post.lisp b/src/packages/new-post.lisp
new file mode 100644
index 0000000..30b5b04
--- /dev/null
+++ b/src/packages/new-post.lisp
@@ -0,0 +1,11 @@
+(defpackage murja.view.admin.new-post
+ (:use :cl :easy-routes :binding-arrows :spinneret :murja.model.post :murja.view.admin.components.editor)
+ ;; (:import-from :murja.model.post :article :post-title)
+ (:import-from :murja.middleware.db :@transaction :@db)
+ (:import-from :murja.middleware.auth :@ssr-authenticated :*user*)
+ (:import-from :murja.model.user :user-id )
+ (:import-from :murja.view.components.tabs :deftab)
+ (:import-from :murja.posts.post-db :insert-post)
+ (:local-nicknames (:json :com.inuoe.jzon))
+
+ (:export :blog/post/editor :blog/new-post))
diff --git a/src/packages/post-db.lisp b/src/packages/post-db.lisp
new file mode 100644
index 0000000..d753269
--- /dev/null
+++ b/src/packages/post-db.lisp
@@ -0,0 +1,6 @@
+(defpackage :murja.posts.post-db
+ (:use :cl :postmodern)
+ (:import-from :com.inuoe.jzon :parse)
+ (:import-from :halisql :defqueries)
+ (:import-from :lisp-fixup :fix-timestamp)
+ (:export :search-posts :last-modified* :link-previously :get-tagged :get-post-version :get-page :get-titles-by-year :insert-post :update-post :get-post))
diff --git a/src/packages/post-list.lisp b/src/packages/post-list.lisp
new file mode 100644
index 0000000..6e0a91e
--- /dev/null
+++ b/src/packages/post-list.lisp
@@ -0,0 +1,7 @@
+(defpackage murja.view.admin.post-list
+ (:use :cl :binding-arrows :spinneret
+ :easy-routes :cl-hash-util
+ :murja.view.components.blogpost)
+ (:import-from :murja.view.components.tabs :deftab)
+ (:import-from :murja.model.post :admin-get-all-titles :title :month :year :id :tags :hidden :unlisted)
+ (:export :blog/postadmin))
diff --git a/src/packages/post-routes.lisp b/src/packages/post-routes.lisp
new file mode 100644
index 0000000..1d05540
--- /dev/null
+++ b/src/packages/post-routes.lisp
@@ -0,0 +1,9 @@
+(defpackage :murja.routes.post-routes
+ (:use :cl)
+ (:import-from :lisp-fixup :partial)
+ (:import-from :com.inuoe.jzon :stringify :parse)
+ (:import-from :murja.middleware.db :@transaction)
+ (:import-from :murja.middleware.auth :*user* :@can?)
+ (:import-from :murja.posts.post-db :get-post-version :get-post :get-page :get-titles-by-year)
+ (:import-from :easy-routes :defroute)
+ (:export :search-prev))
diff --git a/src/packages/post.lisp b/src/packages/post.lisp
new file mode 100644
index 0000000..217c5ef
--- /dev/null
+++ b/src/packages/post.lisp
@@ -0,0 +1,6 @@
+(defpackage :murja.model.post
+ (:use :cl)
+ (:export :RSS-Post :rss-link :Post :get-page :get-post :post-id :post-title :article :creator :tags :created-at :post-hidden? :post-unlisted? :next-post-id :previous-post-id :previouslies
+ :id :title :creator :created-at :content :admin-get-all-titles
+ :title :month :year :id :tags :hidden :unlisted :get-tagged)
+ (:import-from :com.inuoe.jzon :parse))
diff --git a/src/packages/previouslies-script.lisp b/src/packages/previouslies-script.lisp
new file mode 100644
index 0000000..0bdf65c
--- /dev/null
+++ b/src/packages/previouslies-script.lisp
@@ -0,0 +1,4 @@
+(defpackage murja.view.admin.components.previouslies-script
+ (:use :cl :binding-arrows :parenscript :paren-async)
+ (:export :previouslies-component-frontend)
+ (:documentation "All the parenscript logic hidden from making murja.view.admin.components.editor an eyesore"))
diff --git a/src/packages/reader-db.lisp b/src/packages/reader-db.lisp
new file mode 100644
index 0000000..ee516b1
--- /dev/null
+++ b/src/packages/reader-db.lisp
@@ -0,0 +1,7 @@
+(defpackage :murja.rss.reader-db
+ (:use :cl :postmodern :binding-arrows)
+ (:import-from :halisql :defqueries)
+ (:import-from :lisp-fixup :partial :compose)
+ (:import-from :cl-date-time-parser :parse-date-time)
+ (:export :*last-updated* :subscribe-to-feed2 :get-user-feeds2 :get-feed-name-and-url :*updates* :get-user-feeds :subscribe-to-feed :mark-as-read :delete-feed :download))
+
diff --git a/src/packages/root-component.lisp b/src/packages/root-component.lisp
new file mode 100644
index 0000000..b870759
--- /dev/null
+++ b/src/packages/root-component.lisp
@@ -0,0 +1,8 @@
+(defpackage :murja.view.components.root
+ (:use :cl :spinneret :binding-arrows
+ :murja.setting-definitions
+ :murja.middleware.auth
+ :murja.model.user)
+
+ (:export :*inject-to-head* :*inject-to-sidebar* :root-component)
+ (:import-from :murja.posts.post-db :get-titles-by-year))
diff --git a/src/packages/root-routes.lisp b/src/packages/root-routes.lisp
new file mode 100644
index 0000000..daa0e4b
--- /dev/null
+++ b/src/packages/root-routes.lisp
@@ -0,0 +1,8 @@
+(defpackage :murja.routes.root-routes
+ (:use :cl)
+ (:import-from :binding-arrows :->> :->)
+ (:import-from :lisp-fixup :partial)
+ (:import-from :murja.middleware.db :@transaction)
+ (:import-from :easy-routes :defroute)
+
+ (:export :resources))
diff --git a/src/packages/rss-reader-routes.lisp b/src/packages/rss-reader-routes.lisp
new file mode 100644
index 0000000..bfd3ba4
--- /dev/null
+++ b/src/packages/rss-reader-routes.lisp
@@ -0,0 +1,5 @@
+(defpackage :murja.routes.rss-reader-routes
+ (:use :cl)
+ (:import-from :easy-routes :defroute)
+ (:import-from :murja.middleware.db :@transaction)
+ (:import-from :murja.rss.reader-db))
diff --git a/src/packages/rss-routes.lisp b/src/packages/rss-routes.lisp
new file mode 100644
index 0000000..8be5cc7
--- /dev/null
+++ b/src/packages/rss-routes.lisp
@@ -0,0 +1,7 @@
+(defpackage :murja.routes.rss-routes
+ (:use :cl :murja.setting-definitions)
+ (:import-from :easy-routes :defroute)
+ (:import-from :murja.posts.post-db :get-page)
+ (:import-from :murja.middleware.db :@transaction)
+ (:import-from :murja.middleware.auth :*user*))
+
diff --git a/src/packages/rss.lisp b/src/packages/rss.lisp
new file mode 100644
index 0000000..8422ccb
--- /dev/null
+++ b/src/packages/rss.lisp
@@ -0,0 +1,7 @@
+(defpackage murja.view.rss
+ (:use :cl :binding-arrows :spinneret :murja.rss.reader-db :easy-routes :ps :paren-async)
+ (:local-nicknames (:genurl :murja.genurl))
+ (:import-from :murja.view.components.tabs :deftab)
+ (:import-from :murja.middleware.auth :*user* :@ssr-authenticated)
+ (:import-from :murja.middleware.db :@db)
+ (:import-from :murja.model.user :user-id))
diff --git a/src/packages/session-db.lisp b/src/packages/session-db.lisp
new file mode 100644
index 0000000..29d7953
--- /dev/null
+++ b/src/packages/session-db.lisp
@@ -0,0 +1,9 @@
+(defpackage :murja.session.db
+ (:use :cl)
+ (:import-from :halisql :defqueries)
+ (:export :ensure-username-session* :assert-ownership
+ :assert-ownership-username :all-session-vals
+ :login-query-session*
+ :now
+ :set-session-val* :ensure-session*
+ :insert-session* :get-session-val*))
diff --git a/src/packages/session.lisp b/src/packages/session.lisp
new file mode 100644
index 0000000..96e1213
--- /dev/null
+++ b/src/packages/session.lisp
@@ -0,0 +1,6 @@
+(defpackage :murja.session
+ (:use :cl)
+ (:export :set-session-value :get-session-value)
+ (:import-from :murja.session.db :assert-ownership :set-session-val* :get-session-val*)
+ (:local-nicknames (:users :murja.model.user))
+ (:import-from :murja.middleware.auth :*user* :*session-key*))
diff --git a/src/packages/setting-definitions.lisp b/src/packages/setting-definitions.lisp
new file mode 100644
index 0000000..0a86747
--- /dev/null
+++ b/src/packages/setting-definitions.lisp
@@ -0,0 +1,4 @@
+(defpackage :murja.setting-definitions
+ (:use :cl :murja.model.settings)
+ (:export :page-size :rss-email :rss-lang :rss-description :rss-link :rss-title :prefix
+ :blog-title :domain :previously_label :recent-post-count :time-format))
diff --git a/src/packages/settings-view.lisp b/src/packages/settings-view.lisp
new file mode 100644
index 0000000..9749c51
--- /dev/null
+++ b/src/packages/settings-view.lisp
@@ -0,0 +1,5 @@
+(defpackage :murja.view.settings
+ (:use :cl :binding-arrows :spinneret :easy-routes :murja.model.settings)
+ (:import-from :murja.middleware.db :@transaction :@db)
+ (:import-from :murja.middleware.auth :@ssr-authenticated :*user*)
+ (:import-from :murja.view.components.tabs :deftab))
diff --git a/src/packages/settings.lisp b/src/packages/settings.lisp
new file mode 100644
index 0000000..a230d02
--- /dev/null
+++ b/src/packages/settings.lisp
@@ -0,0 +1,16 @@
+(defpackage :murja.model.settings
+ (:use :cl)
+ (:export :setting-getter :all-setting-names :update-setting :defsetting :define-settings :create-settings)
+ (:import-from :com.inuoe.jzon :stringify :parse)
+ (:documentation "This package specifies macros define-settings and defsetting, which are used thus:
+
+```
+(define-settings
+ (site-name \"default-site\")
+ (test-setting 12345))
+```
+
+After running that form, one can get setting's current value by funcalling its symbol (for example: `(site-name) => \"default site\")`. If you wish to change
+the value of this setting, you call its symbol with a parameter (`(site-name \"a new site\")`, after which calling it with 0-arity begins returning \"a new site\").
+
+These changes are saved in murja's table `blog.Settings`."))
diff --git a/src/packages/single-post.lisp b/src/packages/single-post.lisp
new file mode 100644
index 0000000..a8cf1ae
--- /dev/null
+++ b/src/packages/single-post.lisp
@@ -0,0 +1,7 @@
+(defpackage murja.view.single-post
+ (:use :cl :binding-arrows
+ :easy-routes :cl-hash-util
+ :murja.view.components.blogpost)
+ (:import-from :murja.view.components.tabs :deftab)
+ (:export :blog/post/id)
+ (:import-from :murja.model.post :get-post))
diff --git a/src/packages/tabs-component.lisp b/src/packages/tabs-component.lisp
new file mode 100644
index 0000000..70b7d86
--- /dev/null
+++ b/src/packages/tabs-component.lisp
@@ -0,0 +1,5 @@
+(defpackage :murja.view.components.tabs
+ (:use :cl :easy-routes :murja.middleware.auth :murja.view.components.root :spinneret)
+ (:import-from :murja.middleware.db :@transaction)
+ (:export :*inject-to-head* :deftab))
+
diff --git a/src/packages/tag-script.lisp b/src/packages/tag-script.lisp
new file mode 100644
index 0000000..b55c042
--- /dev/null
+++ b/src/packages/tag-script.lisp
@@ -0,0 +1,4 @@
+(defpackage murja.view.admin.components.tag-script
+ (:use :cl :binding-arrows :parenscript)
+ (:export :tags-component-frontend)
+ (:documentation "All the parenscript logic hidden from making murja.view.admin.components.editor an eyesore"))
diff --git a/src/packages/user-editor.lisp b/src/packages/user-editor.lisp
new file mode 100644
index 0000000..765c5df
--- /dev/null
+++ b/src/packages/user-editor.lisp
@@ -0,0 +1,13 @@
+(defpackage murja.routes.user-editor
+ (:use :cl)
+ (:import-from :murja.json :bind-json)
+ (:import-from :cl-hash-util :with-keys :hash)
+ (:import-from :lisp-fixup :sha-512)
+ (:import-from :murja.middleware.db :@transaction)
+ (:import-from :murja.middleware.auth :*user*)
+ (:import-from :murja.media.media-db :insert-media)
+ (:import-from :com.inuoe.jzon :stringify :parse)
+ (:import-from :easy-routes :defroute)
+
+ (:local-nicknames (:login :murja.routes.login-routes)
+ (:users :murja.model.user)))
diff --git a/src/packages/user.lisp b/src/packages/user.lisp
new file mode 100644
index 0000000..fab2d06
--- /dev/null
+++ b/src/packages/user.lisp
@@ -0,0 +1,4 @@
+(defpackage :murja.model.user
+ (:use :cl)
+ (:local-nicknames (:json :com.inuoe.jzon))
+ (:export :get-user :User :user-id :user-username :register-user :user-password :user-nickname :user-img-location :abilities))
diff --git a/src/posts/post-db.lisp b/src/posts/post-db.lisp
index 4ac8d8b..1261a90 100644
--- a/src/posts/post-db.lisp
+++ b/src/posts/post-db.lisp
@@ -1,10 +1,3 @@
-(defpackage :murja.posts.post-db
- (:use :cl :postmodern)
- (:import-from :com.inuoe.jzon :parse)
- (:import-from :halisql :defqueries)
- (:import-from :lisp-fixup :fix-timestamp)
- (:export :search-posts :last-modified* :link-previously :get-tagged :get-post-version :get-page :get-titles-by-year :insert-post :update-post :get-post))
-
(in-package :murja.posts.post-db)
(defqueries "post-fns")
diff --git a/src/routes/login-routes.lisp b/src/routes/login-routes.lisp
index 6943f77..c91416c 100644
--- a/src/routes/login-routes.lisp
+++ b/src/routes/login-routes.lisp
@@ -1,17 +1,3 @@
-(defpackage murja.routes.login-routes
- (:use :cl :binding-arrows :murja.setting-definitions)
- (:export :get-session-key :set-session-cookies :formdata->hashmap)
- (:import-from :cl-hash-util :hash)
- (:import-from :murja.session :set-session-value)
- (:import-from :lisp-fixup :sha-512)
- (:import-from :murja.middleware.auth :@test-now :@authenticated :*user*)
- (:import-from :murja.middleware.db :@transaction)
-
- (:import-from :murja.middleware.json :@json)
- (:import-from :easy-routes :defroute)
- (:import-from :com.inuoe.jzon :parse :stringify)
- (:local-nicknames (:users :murja.model.user)))
-
(in-package :murja.routes.login-routes)
;; obviously called in forms-post-login
diff --git a/src/routes/media-routes.lisp b/src/routes/media-routes.lisp
index 55f42da..b3e3173 100644
--- a/src/routes/media-routes.lisp
+++ b/src/routes/media-routes.lisp
@@ -1,14 +1,3 @@
-(defpackage murja.routes.media-routes
- (:use :cl)
- (:import-from :lisp-fixup :slurp-bytes)
- (:import-from :com.inuoe.jzon :stringify :parse)
- (:import-from :murja.middleware.db :@transaction)
- (:import-from :murja.media.media-db :get-media :insert-media :delete-picture*)
-
- (:import-from :murja.middleware.json :@json)
- (:import-from :murja.middleware.auth :@authenticated :@can? :*user*)
- (:import-from :easy-routes :defroute))
-
(in-package :murja.routes.media-routes)
;; called from murja.view.admin.components.dnd-script
diff --git a/src/routes/post-routes.lisp b/src/routes/post-routes.lisp
index 307ebca..c46e00c 100644
--- a/src/routes/post-routes.lisp
+++ b/src/routes/post-routes.lisp
@@ -1,14 +1,3 @@
-(defpackage murja.routes.post-routes
- (:use :cl)
- (:import-from :lisp-fixup :partial)
- (:import-from :com.inuoe.jzon :stringify :parse)
- (:import-from :murja.middleware.db :@transaction)
- (:import-from :murja.middleware.auth :@authenticated :*user* :@can?)
- (:import-from :murja.posts.post-db :get-post-version :get-post :get-page :get-titles-by-year)
-
- (:import-from :murja.middleware.json :@json)
- (:import-from :easy-routes :defroute))
-
(in-package :murja.routes.post-routes)
;; TODO redo excerpts in feed reader?
diff --git a/src/routes/root-routes.lisp b/src/routes/root-routes.lisp
index 221effe..ecaddf8 100644
--- a/src/routes/root-routes.lisp
+++ b/src/routes/root-routes.lisp
@@ -1,12 +1,3 @@
-(defpackage murja.routes.root-routes
- (:use :cl)
- (:import-from :binding-arrows :->> :->)
- (:import-from :lisp-fixup :partial)
- (:import-from :murja.middleware.db :@transaction)
-
- (:import-from :murja.middleware.json :@json)
- (:import-from :easy-routes :defroute))
-
(in-package :murja.routes.root-routes)
;; thsi whole package becomes unnecessary once murja.css has been embedded inside lisp image
diff --git a/src/routes/rss-reader-routes.lisp b/src/routes/rss-reader-routes.lisp
index c2800f9..36503ed 100644
--- a/src/routes/rss-reader-routes.lisp
+++ b/src/routes/rss-reader-routes.lisp
@@ -1,9 +1,3 @@
-(defpackage murja.routes.rss-reader-routes
- (:use :cl)
- (:import-from :easy-routes :defroute)
- (:import-from :murja.middleware.db :@transaction)
- (:import-from :murja.rss.reader-db :update-feeds))
-
(in-package :murja.routes.rss-reader-routes)
;; This will be called by cron/curl
diff --git a/src/routes/rss-routes.lisp b/src/routes/rss-routes.lisp
index dc57161..9148d14 100644
--- a/src/routes/rss-routes.lisp
+++ b/src/routes/rss-routes.lisp
@@ -1,10 +1,3 @@
-(defpackage murja.routes.rss-routes
- (:use :cl :murja.setting-definitions)
- (:import-from :easy-routes :defroute)
- (:import-from :murja.posts.post-db :get-page)
- (:import-from :murja.middleware.db :@transaction)
- (:import-from :murja.middleware.auth :@authenticated :*user*))
-
(in-package :murja.routes.rss-routes)
(defun posts->rss (posts)
diff --git a/src/routes/user-editor.lisp b/src/routes/user-editor.lisp
index 594cda6..209724d 100644
--- a/src/routes/user-editor.lisp
+++ b/src/routes/user-editor.lisp
@@ -1,18 +1,3 @@
-(defpackage murja.routes.user-editor
- (:use :cl)
- (:import-from :murja.json :bind-json)
- (:import-from :cl-hash-util :with-keys :hash)
- (:import-from :lisp-fixup :sha-512)
- (:import-from :murja.middleware.db :@transaction)
- (:import-from :murja.middleware.json :@json)
- (:import-from :murja.middleware.auth :@authenticated :*user*)
- (:import-from :murja.media.media-db :insert-media)
- (:import-from :com.inuoe.jzon :stringify :parse)
- (:import-from :easy-routes :defroute)
-
- (:local-nicknames (:login :murja.routes.login-routes)
- (:users :murja.model.user)))
-
(in-package :murja.routes.user-editor)
;; TODO redo with spinneret
diff --git a/src/rss/reader-db.lisp b/src/rss/reader-db.lisp
index 70a985b..aa60656 100644
--- a/src/rss/reader-db.lisp
+++ b/src/rss/reader-db.lisp
@@ -1,10 +1,3 @@
-(defpackage murja.rss.reader-db
- (:use :cl :postmodern :binding-arrows)
- (:import-from :halisql :defqueries)
- (:import-from :lisp-fixup :partial :compose)
- (:import-from :cl-date-time-parser :parse-date-time)
- (:export :*last-updated* :subscribe-to-feed2 :get-user-feeds2 :get-feed-name-and-url :*updates* :get-user-feeds :subscribe-to-feed :mark-as-read :delete-feed :download))
-
(in-package :murja.rss.reader-db)
(defparameter unix-epoch
diff --git a/src/session-db.lisp b/src/session-db.lisp
index ce88694..c4659ed 100644
--- a/src/session-db.lisp
+++ b/src/session-db.lisp
@@ -1,13 +1,3 @@
-(defpackage murja.session.db
- (:use :cl)
- (:import-from :halisql :defqueries)
- (:export :ensure-username-session* :assert-ownership
- :assert-ownership-username :all-session-vals
- :login-query-session*
- :now
- :set-session-val* :ensure-session*
- :insert-session* :get-session-val*))
-
(in-package :murja.session.db)
(defqueries "session-fns")
diff --git a/src/session.lisp b/src/session.lisp
index 682b011..81c44e1 100644
--- a/src/session.lisp
+++ b/src/session.lisp
@@ -1,10 +1,3 @@
-(defpackage murja.session
- (:use :cl)
- (:export :set-session-value :get-session-value)
- (:import-from :murja.session.db :assert-ownership :set-session-val* :get-session-val*)
- (:local-nicknames (:users :murja.model.user))
- (:import-from :murja.middleware.auth :*user* :*session-key*))
-
(in-package :murja.session)
(defun set-session-value (key val)
diff --git a/src/setting-definitions.lisp b/src/setting-definitions.lisp
index 42cf805..36c57fb 100644
--- a/src/setting-definitions.lisp
+++ b/src/setting-definitions.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.setting-definitions
- (:use :cl :murja.model.settings)
- (:export :page-size :rss-email :rss-lang :rss-description :rss-link :rss-title :prefix
- :blog-title :domain :previously_label :recent-post-count :time-format))
-
(in-package :murja.setting-definitions)
(named-readtables:in-readtable :murja.ps)
@@ -22,4 +17,3 @@
;; for example, "/blog" on feuerx.net
(prefix ""))
-
diff --git a/src/view/admin/components/dnd-script.lisp b/src/view/admin/components/dnd-script.lisp
index f0e1602..2b3c3da 100644
--- a/src/view/admin/components/dnd-script.lisp
+++ b/src/view/admin/components/dnd-script.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.view.admin.components.dnd-script
- (:use :cl :binding-arrows :parenscript :paren-async)
- (:export :editor-dnd-script)
- (:documentation "Parenscript logic for making picture drag and drop work"))
-
(in-package :murja.view.admin.components.dnd-script)
(eval-when (:compile-toplevel :load-toplevel :execute)
@@ -28,7 +23,7 @@
(chain form-data
(append "file" (chain item (get-as-file)))))
- (let ((response (await (fetch "/api/pictures"
+ (let ((response (await (fetch (murja.genurl:route->url-ps 'murja.routes.media-routes:post-pic)
(create
method "POST"
body form-data)))))
diff --git a/src/view/admin/components/editor.lisp b/src/view/admin/components/editor.lisp
index ed448e0..f20aa56 100644
--- a/src/view/admin/components/editor.lisp
+++ b/src/view/admin/components/editor.lisp
@@ -1,12 +1,3 @@
-(defpackage murja.view.admin.components.editor
- (:use :cl :binding-arrows :spinneret :parenscript :murja.view.admin.components.dnd-script)
- (:export :editor)
- (:import-from :murja.view.admin.components.tag-script :tags-component-frontend)
- (:import-from :murja.view.admin.components.previouslies-script :previouslies-component-frontend)
- (:import-from :murja.model.post :post-id :tags :article :post-title :post-hidden? :post-unlisted?)
- (:local-nicknames (:posts :murja.model.post)
- (:json :com.inuoe.jzon)))
-
(in-package :murja.view.admin.components.editor)
(defun add-previously-dialog ()
diff --git a/src/view/admin/components/log.lisp b/src/view/admin/components/log.lisp
index c050f47..da5fb1a 100644
--- a/src/view/admin/components/log.lisp
+++ b/src/view/admin/components/log.lisp
@@ -1,7 +1,3 @@
-(defpackage murja.view.admin.components.log
- (:use :cl :binding-arrows :spinneret)
- (:export :log-group))
-
(in-package :murja.view.admin.components.log)
(defun log-group (group-log)
diff --git a/src/view/admin/components/previouslies-script.lisp b/src/view/admin/components/previouslies-script.lisp
index 9191794..f88fe61 100644
--- a/src/view/admin/components/previouslies-script.lisp
+++ b/src/view/admin/components/previouslies-script.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.view.admin.components.previouslies-script
- (:use :cl :binding-arrows :parenscript :paren-async)
- (:export :previouslies-component-frontend)
- (:documentation "All the parenscript logic hidden from making murja.view.admin.components.editor an eyesore"))
-
(in-package :murja.view.admin.components.previouslies-script)
(eval-when (:compile-toplevel :load-toplevel :execute)
@@ -74,7 +69,7 @@
nil))
(defun-async previously-searched (e)
- (let ((result (await (fetch "/api/posts/search-previously"
+ (let ((result (await (fetch (murja.genurl:route->url-ps 'murja.routes.post-routes:search-prev)
(create
method "POST"
body (@ e target value)
diff --git a/src/view/admin/components/tag-script.lisp b/src/view/admin/components/tag-script.lisp
index 744669a..c1315d8 100644
--- a/src/view/admin/components/tag-script.lisp
+++ b/src/view/admin/components/tag-script.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.view.admin.components.tag-script
- (:use :cl :binding-arrows :parenscript)
- (:export :tags-component-frontend)
- (:documentation "All the parenscript logic hidden from making murja.view.admin.components.editor an eyesore"))
-
(in-package :murja.view.admin.components.tag-script)
(eval-when (:compile-toplevel :load-toplevel :execute)
diff --git a/src/view/admin/logs.lisp b/src/view/admin/logs.lisp
index 98235f6..4c30f5c 100644
--- a/src/view/admin/logs.lisp
+++ b/src/view/admin/logs.lisp
@@ -1,7 +1,3 @@
-(defpackage murja.view.admin.logs
- (:use :cl :binding-arrows :spinneret :com.inuoe.jzon :easy-routes :murja.model.log :murja.view.admin.components.log)
- (:import-from :murja.view.components.tabs :deftab))
-
(in-package :murja.view.admin.logs)
@@ -52,7 +48,8 @@
(groups-with-logs (cons untitled-group groups-with-logs)))
(:a :href (str:replace-all "?ungroup=NIL" ""
- (format nil "/blog/logs?ungroup=~a" (not ungroup)))
+ (murja.genurl:route->url
+ 'blog/logs :ungroup (not ungroup)))
(if ungroup
"Show grouped logs"
diff --git a/src/view/admin/media-admin.lisp b/src/view/admin/media-admin.lisp
index 88246f5..ace3ff6 100644
--- a/src/view/admin/media-admin.lisp
+++ b/src/view/admin/media-admin.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.view.admin.media-admin
- (:use :cl :binding-arrows :spinneret :ps :paren-async)
- (:import-from :murja.media.media-db :select-referencing-posts*)
- (:import-from :murja.view.components.tabs :deftab))
-
(in-package :murja.view.admin.media-admin)
(eval-when (:compile-toplevel :load-toplevel :execute)
@@ -19,7 +14,7 @@
(map (lambda (node)
(@ node dataset picid))))))
(result (await
- (fetch "/api/pictures"
+ (fetch (murja.genurl:route->url-ps 'murja.routes.media-routes:delete-pic)
(create
method "DELETE"
body (chain JSON (stringify delete-payload))
@@ -70,5 +65,6 @@
(:ul
(dolist (referencer referencing-posts)
(destructuring-bind (post-id post-title) referencer
- (:li (:a :href (format nil "/blog/post/~a" post-id) post-title)))))
+ (:li (:a :href
+ (murja.genurl:route->url 'murja.view.single-post:blog/post/id :id post-id) post-title)))))
(:div "No referencing posts"))))))))))
diff --git a/src/view/admin/new-post.lisp b/src/view/admin/new-post.lisp
index b532a1a..3833386 100644
--- a/src/view/admin/new-post.lisp
+++ b/src/view/admin/new-post.lisp
@@ -1,13 +1,3 @@
-(defpackage murja.view.admin.new-post
- (:use :cl :easy-routes :binding-arrows :spinneret :murja.model.post :murja.view.admin.components.editor)
- ;; (:import-from :murja.model.post :article :post-title)
- (:import-from :murja.middleware.db :@transaction :@db)
- (:import-from :murja.middleware.auth :@authenticated :@ssr-authenticated :*user*)
- (:import-from :murja.model.user :user-id )
- (:import-from :murja.view.components.tabs :deftab)
- (:import-from :murja.posts.post-db :insert-post)
- (:local-nicknames (:json :com.inuoe.jzon)))
-
(in-package :murja.view.admin.new-post)
(defun head-script ()
@@ -29,7 +19,9 @@
;; TODO wrap these stupid sql-wrappers with something that unbinds values automatically
(caar (insert-post "New post" "New title" (user-id *user*) "[]" t t))))
(log:info "A new post with id ~d should now exist~%" post-id)
- (hunchentoot:redirect (format nil "/blog/post/editor/~d" post-id)))
+ (hunchentoot:redirect (murja.genurl:route->url
+ 'murja.view.admin.new-post:blog/post/editor
+ :id post-id)))
"no can do")))
(deftab blog/post/editor (:url "/post/editor/:id"
@@ -70,5 +62,8 @@
(murja.posts.post-db:link-previously (post-id post) id)))
(if (post-hidden? post)
- (hunchentoot:redirect "/blog")
- (hunchentoot:redirect (format nil "/blog/post/~d" (post-id post))))))))
+ (hunchentoot:redirect (murja.genurl:route->url
+ 'murja.view.blog-root:root))
+ (hunchentoot:redirect (murja.genurl:route->url
+ 'murja.view.single-post:blog/post/id
+ :id (post-id post))))))))
diff --git a/src/view/admin/post-list.lisp b/src/view/admin/post-list.lisp
index 9c99df5..ac1b4a1 100644
--- a/src/view/admin/post-list.lisp
+++ b/src/view/admin/post-list.lisp
@@ -1,11 +1,3 @@
-(defpackage murja.view.admin.post-list
- (:use :cl :binding-arrows :spinneret
- :easy-routes :cl-hash-util
- :murja.view.components.blogpost)
- (:import-from :murja.view.components.tabs :deftab)
- (:import-from :murja.model.post :admin-get-all-titles :title :month :year :id :tags :hidden :unlisted)
- (:export :blog/postadmin))
-
(in-package :murja.view.admin.post-list)
(defun admin-post-row (title-to-print)
@@ -13,12 +5,15 @@
(with-html
(:div.title-flex-container
(:span.post-admin-title (format nil "~a - ~a ~d" title month year))
- (:a :href (format nil "/blog/post/editor/~d" id) "Edit")
+ (:a :href
+ (murja.genurl:route->url 'murja.view.admin.new-post:blog/post/editor :id id)
+ "Edit")
(:div.post-admin-title
(:h* "Tags")
(:ul
(dolist (tag tags)
(:li
+ ;; TODO NOT IMPLEMENTED
(:a :href (format nil "/blog/tags/~a" tag) tag)))))))))
(defun tagcloud ()
@@ -41,6 +36,7 @@ from blog.post as orig_post,
(:ul
(dolist (c counted)
(destructuring-bind (tag . count) c
+ ;; TODO NOT IMPLEMENTED
(:li (:a :href (format nil "/blog/tags/~a" tag)
(format nil "~a (~d)" tag count))))))))))
diff --git a/src/view/blog-root.lisp b/src/view/blog-root.lisp
index d601d01..eb9d4be 100644
--- a/src/view/blog-root.lisp
+++ b/src/view/blog-root.lisp
@@ -1,12 +1,3 @@
-(defpackage murja.view.blog-root
- (:use :cl :binding-arrows
- :murja.view.components.blogpost
- :easy-routes :cl-hash-util)
- (:export :root)
- (:import-from :murja.view.components.tabs :deftab)
- (:import-from :murja.model.post :get-page)
- (:local-nicknames (:settings :murja.setting-definitions)))
-
(in-package :murja.view.blog-root)
(deftab root (:url "/"
diff --git a/src/view/components/blogpost.lisp b/src/view/components/blogpost.lisp
index 31f2a4d..24dc98a 100644
--- a/src/view/components/blogpost.lisp
+++ b/src/view/components/blogpost.lisp
@@ -1,20 +1,16 @@
-(defpackage murja.view.components.blogpost
- (:use :cl :binding-arrows :spinneret :murja.model.post :murja.model.user :cl-hash-util)
- (:import-from :murja.middleware.auth :*user*)
- (:export :page :blogpost))
-
-
(in-package :murja.view.components.blogpost)
(defun previously (prev)
(with-keys ("id" "title") prev
(with-html
(:li
- (:a :title title :href (format nil "/blog/post/~d" id) "Previously")))))
+ (:a :title title :href
+ (murja.genurl:route->url 'murja.view.single-post:blog/post/id :id id) "Previously")))))
(defun tag (tag)
(with-html
(:li
+ ;; TODO not implemented so I can't link to a defined route here
(:a :href (format nil "/blog/tags/~a" tag) tag))))
(defun blogpost (post)
@@ -27,7 +23,7 @@
(:div.post
(:a :href (if (rss-link post)
(rss-link post)
- (format nil "/blog/post/~d" id))
+ (murja.genurl:route->url 'murja.view.single-post:blog/post/id :id id))
title)
(:div.meta
(:img.user_avatar :src img-location)
@@ -38,7 +34,10 @@
(when (and *user*
(not (rss-link post)))
;; the old editor is in "/blog/post/edit/~d"
- (:a :href (format nil "/blog/post/editor/~d" id) "Edit this post"))
+ (:a :href (murja.genurl:route->url
+ 'murja.view.admin.new-post:blog/post/editor
+ :id id)
+ "Edit this post"))
(:article.content
(:raw
content))
@@ -62,7 +61,12 @@
page)))
(:nav.page-nav (if (> id 1)
- (:a :href (format nil "/blog/page/~d" (1- id)) "Newer posts")
+ (:a :href
+ (murja.genurl:route->url
+ 'murja.view.blog-root:page-tab :id (1- id))
+ "Newer posts")
(:span ""))
- (:a :href (format nil "/blog/page/~d" (1+ id)) "Older posts"))))
+ (:a :href (murja.genurl:route->url
+ 'murja.view.blog-root:page-tab :id (1+ id))
+ "Older posts"))))
diff --git a/src/view/components/root.lisp b/src/view/components/root.lisp
index 469c4e8..fb027e3 100644
--- a/src/view/components/root.lisp
+++ b/src/view/components/root.lisp
@@ -1,12 +1,3 @@
-(defpackage murja.view.components.root
- (:use :cl :spinneret :binding-arrows
- :murja.setting-definitions
- :murja.middleware.auth
- :murja.model.user)
-
- (:export :*inject-to-head* :*inject-to-sidebar* :root-component)
- (:import-from :murja.posts.post-db :get-titles-by-year))
-
(in-package :murja.view.components.root)
(defun sidebar-tree ()
@@ -31,7 +22,9 @@
(let ((Id (gethash "Id" title))
(Title (gethash "Title" title)))
(:li
- (:a :href (format nil "/blog/post/~d" Id)
+ (:a :href (murja.genurl:route->url
+ 'murja.view.single-post:blog/post/id
+ :id Id)
Title))))
(gethash month by-month)))))))))))))))
@@ -43,7 +36,7 @@
(not (member (cl-ppcre:regex-replace "/\\d+$" (hunchentoot:request-uri*) "")
disabled-routes
:test 'equal)))
- (:form :action "/blog/new-post" :method "post"
+ (:form :action (murja.genurl:route->url 'murja.view.admin.new-post:blog/new-post) :method "post"
(:input :type :submit :value "NEW POST"))))))
@@ -51,8 +44,10 @@
(with-html
(if *user*
(:p :data-testid "welcome-user-label"
+ ;; FIXME usersettings doesn't exist
"Welcome, " (:a :href "/blog/usersettings" (user-nickname *user*)))
- (:form :method "post" :action "/api/login"
+ (:form :method "post"
+ :action (murja.genurl:route->url 'murja.routes.login-routes:forms-post-login)
(:label "Username "
(:input :id "username" :name "username" :data-testid "username-input-field"))
(:label "Password "
@@ -72,7 +67,8 @@
(with-html-string
(:html
(:head
- (:link :href "/resources/murja.css" :rel "stylesheet" :type "text/css")
+ ;; TODO move css into lisp
+ (:link :href (murja.genurl:route->url 'murja.routes.root-routes:resources :file "murja.css") :rel "stylesheet" :type "text/css")
(:meta :charset "UTF-8")
(:meta :name "viewport" :content "width=device-width,initial-scale=1.0")
(dolist (head-element *inject-to-head*)
diff --git a/src/view/components/tabs.lisp b/src/view/components/tabs.lisp
index e511b15..d879ae3 100644
--- a/src/view/components/tabs.lisp
+++ b/src/view/components/tabs.lisp
@@ -1,8 +1,3 @@
-(defpackage murja.view.components.tabs
- (:use :cl :easy-routes :murja.middleware.auth :murja.view.components.root :spinneret)
- (:import-from :murja.middleware.db :@transaction)
- (:export :*inject-to-head* :deftab))
-
(in-package :murja.view.components.tabs)
(defclass tab ()
diff --git a/src/view/rss.lisp b/src/view/rss.lisp
index f19a02e..cd7e4dd 100644
--- a/src/view/rss.lisp
+++ b/src/view/rss.lisp
@@ -1,10 +1,3 @@
-(defpackage murja.view.rss
- (: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* :@ssr-authenticated)
- (:import-from :murja.middleware.db :@db)
- (:import-from :murja.model.user :user-id))
-
(in-package :murja.view.rss)
(deftab rss-single-item (:url "/feeds/:feed-id/item/:item-id"
@@ -43,7 +36,7 @@ ORDER BY pubdate DESC" feed-id (not (not archived))))
(:div
(:a :href (str:replace-all "?archived=NIL" ""
- (format nil "/blog/feeds/~a?archived=~a" feed-id (not archived)))
+ (genurl:route->url 'rss-single-feed :feed-id feed-id :archived (not archived)))
(if archived
"Show only unread"
"Show all")))
@@ -52,7 +45,7 @@ ORDER BY pubdate DESC" feed-id (not (not archived))))
(dolist (item items)
(destructuring-bind (id fetched title link author pubdate) item
(declare (ignore fetched link author))
- (:li (:a :href (format nil "/blog/feeds/~a/item/~a" feed-id id)title)
+ (:li (:a :href (genurl:route->url 'rss-single-item :feed-id feed-id :item-id id) title)
(:section ("Published ~a" (lisp-fixup:fix-timestamp pubdate)))))))))
@@ -66,9 +59,8 @@ ORDER BY pubdate DESC" feed-id (not (not archived))))
(defun delete-script ()
(ps
-
(defun-async delete-feed (feed-id)
- (let ((result (await (fetch (+ "/feed/" feed-id)
+ (let ((result (await (fetch (lisp (genurl:route->url-ps 'delete-feed-route :id 'feed-id))
(create method "DELETE")))))
(if (equal 204 (await (@ result status)))
(chain location (reload))
@@ -94,7 +86,7 @@ ORDER BY pubdate DESC" feed-id (not (not archived))))
(&post feed_name feed_url)
(murja.rss.reader-db:subscribe-to-feed2 feed_name feed_url *user*)
(let ((referer (hunchentoot:header-in* "referer")))
- (hunchentoot:redirect referer)))
+ (hunchentoot:redirect referer)))
(deftab rss (:url "/feeds/"
:title "RSS Feeds"
@@ -107,14 +99,15 @@ ORDER BY pubdate DESC" feed-id (not (not archived))))
(destructuring-bind (id name url count last-modified) feed
(:li.flowy-list-item
(:h*
- (:a :href (format nil "/blog/feeds/~a" id) (format nil "~a (~d)" name count)))
+ (:a :href (genurl:route->url '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))))
(:button.remove-feed :data-feedid id :data-feedname name "DELETE THIS FEED")))))
- (:form :method "POST" :action "/feed"
+ (:form :method "POST" :action (genurl:route->url 'new-feed)
(:h* "Subscribe into a new feed?")
(:label "Feed name: " (:input :type :text :name "feed_name"))
(:label "Feed url: " (:input :type :text :name "feed_url"))
diff --git a/src/view/settings.lisp b/src/view/settings.lisp
index d0fa314..8982e6c 100644
--- a/src/view/settings.lisp
+++ b/src/view/settings.lisp
@@ -1,9 +1,3 @@
-(defpackage murja.view.settings
- (:use :cl :binding-arrows :spinneret :easy-routes :murja.model.settings)
- (:import-from :murja.middleware.db :@transaction :@db)
- (:import-from :murja.middleware.auth :@authenticated :@ssr-authenticated :*user*)
- (:import-from :murja.view.components.tabs :deftab))
-
(in-package :murja.view.settings)
(named-readtables:in-readtable :murja.ps)
diff --git a/src/view/single-post.lisp b/src/view/single-post.lisp
index 93396b2..d522bc7 100644
--- a/src/view/single-post.lisp
+++ b/src/view/single-post.lisp
@@ -1,11 +1,3 @@
-(defpackage murja.view.single-post
- (:use :cl :binding-arrows
- :easy-routes :cl-hash-util
- :murja.view.components.blogpost)
- (:import-from :murja.view.components.tabs :deftab)
- (:export :blog/post/id)
- (:import-from :murja.model.post :get-post))
-
(in-package :murja.view.single-post)
(deftab blog/post/id (:url "/post/:id"
diff --git a/test/genurl-tests.lisp b/test/genurl-tests.lisp
index bb64426..e68e516 100644
--- a/test/genurl-tests.lisp
+++ b/test/genurl-tests.lisp
@@ -1,5 +1,5 @@
(defpackage murja.tests.genurl
- (:use :cl :fiveam :murja.genurl)
+ (:use :cl :fiveam :murja.genurl :ps :paren-async)
(:import-from :murja.tests :prepare-db-and-server :drakma->string :url :main-suite :prepare-db-and-server)
(:local-nicknames (:settings :murja.setting-definitions)
(:tabs :murja.view.components.tabs)
@@ -7,6 +7,7 @@
(in-package :murja.tests.genurl)
+(named-readtables:in-readtable :murja.ps)
(in-suite main-suite)
(def-test genurl-test (:fixture prepare-db-and-server)
@@ -28,5 +29,48 @@
;; instances of tab class keep their inner url prefix-less
(is (string= "/"
(tabs::tab-url
- (gethash 'murja.view.blog-root:root murja.view.components.tabs::*tabs*)))))
+ (gethash 'murja.view.blog-root:root murja.view.components.tabs::*tabs*))))
+
+ ;; test the parenscript side
+ (is (string=
+ "async function deleteFeed(feedId) {
+ var result = await fetch('/a-random-test-murja-instance' + '/' + 'feed/' + feedId, { method : 'DELETE' });
+ __PS_MV_REG = [];
+ return 204 == await result.status ? location.reload() : alert('FAIL ' + await result.text());
+};"
+ (ps
+
+ (defun-async delete-feed (feed-id)
+ (let ((result (await (fetch (lisp (route->url-ps
+ 'feed::delete-feed-route :id 'feed-id))
+ (create method "DELETE")))))
+ (if (equal 204 (await (@ result status)))
+ (chain location (reload))
+ (alert (+ "FAIL " (await (chain result (text)))))))))))
+
+
+ ;; random interesting facts tested when rewriting every url in the frontend
+ (settings:prefix old-prefix)
+ (is (string=
+ "/feeds/feed-me?archived=NIL"
+ (route->url 'feed::rss-single-feed :feed-id "feed-me" :archived (not t))))
+
+ ;;make sure resetting prefix changes whatever (lisp (route->url-ps ...)) returns
+ (is (string=
+ "async function deleteFeed(feedId) {
+ var result = await fetch('' + '/' + 'feed/' + feedId, { method : 'DELETE' });
+ __PS_MV_REG = [];
+ return 204 == await result.status ? location.reload() : alert('FAIL ' + await result.text());
+};"
+ (ps
+
+ (defun-async delete-feed (feed-id)
+ (let ((result (await (fetch (lisp (route->url-ps
+ 'feed::delete-feed-route :id 'feed-id))
+ (create method "DELETE")))))
+ (if (equal 204 (await (@ result status)))
+ (chain location (reload))
+ (alert (+ "FAIL " (await (chain result (text))))))))))))
(settings:prefix old-prefix))))
+
+