codex 1.4.1__py3-none-any.whl → 1.4.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of codex might be problematic. Click here for more details.

Files changed (237) hide show
  1. codex/applications/websocket.py +1 -1
  2. codex/librarian/importer/aggregate_metadata.py +38 -25
  3. codex/librarian/importer/clean_metadata.py +26 -13
  4. codex/librarian/importer/create_fks.py +1 -1
  5. codex/librarian/librariand.py +7 -4
  6. codex/librarian/watchdog/db_snapshot.py +1 -1
  7. codex/librarian/watchdog/event_batcherd.py +14 -11
  8. codex/librarian/watchdog/events.py +1 -1
  9. codex/logger/loggerd.py +14 -11
  10. codex/migrations/0001_init.py +3 -2
  11. codex/migrations/0002_auto_20200826_0622.py +4 -2
  12. codex/migrations/0003_auto_20200831_2033.py +4 -2
  13. codex/migrations/0004_failedimport.py +4 -2
  14. codex/migrations/0005_auto_20200918_0146.py +4 -2
  15. codex/migrations/0006_update_default_names_and_remove_duplicate_comics.py +12 -7
  16. codex/migrations/0007_auto_20211210_1710.py +3 -2
  17. codex/migrations/0008_alter_comic_created_at_alter_comic_format_and_more.py +4 -2
  18. codex/migrations/0009_alter_comic_parent_folder.py +4 -2
  19. codex/migrations/0010_haystack.py +4 -2
  20. codex/migrations/0011_library_groups_and_metadata_changes.py +3 -2
  21. codex/migrations/0012_rename_description_comic_comments.py +4 -2
  22. codex/migrations/0013_int_issue_count_longer_charfields.py +3 -3
  23. codex/migrations/0014_pdf_issue_suffix_remove_cover_image_sort_name.py +3 -2
  24. codex/migrations/0015_link_comics_to_top_level_folders.py +5 -2
  25. codex/migrations/0016_remove_comic_cover_path_librarianstatus.py +3 -3
  26. codex/migrations/0017_alter_timestamp_options_alter_adminflag_name_and_more.py +3 -3
  27. codex/migrations/0018_rename_userbookmark_bookmark.py +3 -2
  28. codex/migrations/0019_delete_queuejob.py +3 -2
  29. codex/migrations/0020_remove_search_tables.py +3 -2
  30. codex/migrations/0021_bookmark_fit_to_choices_read_in_reverse.py +3 -2
  31. codex/migrations/0022_bookmark_vertical_useractive_null_statuses.py +3 -2
  32. codex/migrations/0023_rename_credit_creator_and_more.py +3 -2
  33. codex/migrations/0024_comic_gtin_comic_story_arc_number.py +4 -2
  34. codex/migrations/0025_add_story_arc_number.py +4 -2
  35. codex/models.py +3 -4
  36. codex/search/backend.py +34 -31
  37. codex/serializers/auth.py +2 -1
  38. codex/serializers/choices.py +1 -0
  39. codex/static_root/assets/admin-b2b56cd6.f68d07d2bf93.js +41 -0
  40. codex/static_root/assets/admin-b2b56cd6.f68d07d2bf93.js.br +0 -0
  41. codex/static_root/assets/admin-b2b56cd6.f68d07d2bf93.js.gz +0 -0
  42. codex/static_root/assets/admin-b2b56cd6.js +41 -0
  43. codex/static_root/assets/admin-b2b56cd6.js.br +0 -0
  44. codex/static_root/assets/admin-b2b56cd6.js.gz +0 -0
  45. codex/static_root/assets/{admin-drawer-panel-522f1e6c.089d70878270.js → admin-drawer-panel-efc525ec.ddab36a24e08.js} +1 -1
  46. codex/static_root/assets/admin-drawer-panel-efc525ec.ddab36a24e08.js.br +0 -0
  47. codex/static_root/assets/admin-drawer-panel-efc525ec.ddab36a24e08.js.gz +0 -0
  48. codex/static_root/assets/{admin-drawer-panel-522f1e6c.js → admin-drawer-panel-efc525ec.js} +1 -1
  49. codex/static_root/assets/admin-drawer-panel-efc525ec.js.br +0 -0
  50. codex/static_root/assets/admin-drawer-panel-efc525ec.js.gz +0 -0
  51. codex/static_root/assets/admin-f2bb1dc8.css +1 -0
  52. codex/static_root/assets/admin-f2bb1dc8.css.br +0 -0
  53. codex/static_root/assets/admin-f2bb1dc8.css.gz +0 -0
  54. codex/static_root/assets/admin-f2bb1dc8.ecec18791c01.css +1 -0
  55. codex/static_root/assets/admin-f2bb1dc8.ecec18791c01.css.br +0 -0
  56. codex/static_root/assets/admin-f2bb1dc8.ecec18791c01.css.gz +0 -0
  57. codex/static_root/assets/{browser-7f7d7134.0fe3749b0f2f.css → browser-198df919.css} +1 -1
  58. codex/static_root/assets/browser-198df919.css.br +0 -0
  59. codex/static_root/assets/browser-198df919.css.gz +0 -0
  60. codex/static_root/assets/{browser-7f7d7134.css → browser-198df919.f06301531790.css} +1 -1
  61. codex/static_root/assets/browser-198df919.f06301531790.css.br +0 -0
  62. codex/static_root/assets/browser-198df919.f06301531790.css.gz +0 -0
  63. codex/static_root/assets/browser-ca158ba5.980d652eb174.js +1 -0
  64. codex/static_root/assets/browser-ca158ba5.980d652eb174.js.br +0 -0
  65. codex/static_root/assets/browser-ca158ba5.980d652eb174.js.gz +0 -0
  66. codex/static_root/assets/browser-ca158ba5.js +1 -0
  67. codex/static_root/assets/browser-ca158ba5.js.br +0 -0
  68. codex/static_root/assets/browser-ca158ba5.js.gz +0 -0
  69. codex/static_root/assets/{http-error-5e17b794.77ceeb2d4641.js → http-error-d31fd3bd.6ab9acf65973.js} +1 -1
  70. codex/static_root/assets/http-error-d31fd3bd.6ab9acf65973.js.br +0 -0
  71. codex/static_root/assets/http-error-d31fd3bd.6ab9acf65973.js.gz +0 -0
  72. codex/static_root/assets/{http-error-5e17b794.js → http-error-d31fd3bd.js} +1 -1
  73. codex/static_root/assets/http-error-d31fd3bd.js.br +0 -0
  74. codex/static_root/assets/http-error-d31fd3bd.js.gz +0 -0
  75. codex/static_root/assets/{main-0898f4bb.181e0145c642.css → main-c11eb0f1.776522baac3b.css} +1 -1
  76. codex/static_root/assets/main-c11eb0f1.776522baac3b.css.br +0 -0
  77. codex/static_root/assets/{main-0898f4bb.181e0145c642.css.gz → main-c11eb0f1.776522baac3b.css.gz} +0 -0
  78. codex/static_root/assets/{main-0898f4bb.css → main-c11eb0f1.css} +1 -1
  79. codex/static_root/assets/main-c11eb0f1.css.br +0 -0
  80. codex/static_root/assets/{main-0898f4bb.css.gz → main-c11eb0f1.css.gz} +0 -0
  81. codex/static_root/assets/main-c5736dea.a4790dbdb569.js +1 -0
  82. codex/static_root/assets/main-c5736dea.a4790dbdb569.js.br +0 -0
  83. codex/static_root/assets/main-c5736dea.a4790dbdb569.js.gz +0 -0
  84. codex/static_root/assets/main-c5736dea.js +1 -0
  85. codex/static_root/assets/main-c5736dea.js.br +0 -0
  86. codex/static_root/assets/main-c5736dea.js.gz +0 -0
  87. codex/static_root/assets/metadata-dialog-83c74d48.b5cccc13c737.css +1 -0
  88. codex/static_root/assets/metadata-dialog-83c74d48.b5cccc13c737.css.br +0 -0
  89. codex/static_root/assets/metadata-dialog-83c74d48.b5cccc13c737.css.gz +0 -0
  90. codex/static_root/assets/metadata-dialog-83c74d48.css +1 -0
  91. codex/static_root/assets/metadata-dialog-83c74d48.css.br +0 -0
  92. codex/static_root/assets/metadata-dialog-83c74d48.css.gz +0 -0
  93. codex/static_root/assets/metadata-dialog-8c0a11ff.b281b7635db5.js +1 -0
  94. codex/static_root/assets/metadata-dialog-8c0a11ff.b281b7635db5.js.br +0 -0
  95. codex/static_root/assets/metadata-dialog-8c0a11ff.b281b7635db5.js.gz +0 -0
  96. codex/static_root/assets/metadata-dialog-8c0a11ff.js +1 -0
  97. codex/static_root/assets/metadata-dialog-8c0a11ff.js.br +0 -0
  98. codex/static_root/assets/metadata-dialog-8c0a11ff.js.gz +0 -0
  99. codex/static_root/assets/{page-pdf-157ba97e.613d7c2beb77.js → page-pdf-ed976750.730244f14d16.js} +1 -1
  100. codex/static_root/assets/page-pdf-ed976750.730244f14d16.js.br +0 -0
  101. codex/static_root/assets/page-pdf-ed976750.730244f14d16.js.gz +0 -0
  102. codex/static_root/assets/{page-pdf-157ba97e.js → page-pdf-ed976750.js} +1 -1
  103. codex/static_root/assets/page-pdf-ed976750.js.br +0 -0
  104. codex/static_root/assets/page-pdf-ed976750.js.gz +0 -0
  105. codex/static_root/assets/reader-5540ffcb.8ea3c63a3154.css +1 -0
  106. codex/static_root/assets/reader-5540ffcb.8ea3c63a3154.css.br +0 -0
  107. codex/static_root/assets/reader-5540ffcb.8ea3c63a3154.css.gz +0 -0
  108. codex/static_root/assets/reader-5540ffcb.css +1 -0
  109. codex/static_root/assets/reader-5540ffcb.css.br +0 -0
  110. codex/static_root/assets/reader-5540ffcb.css.gz +0 -0
  111. codex/static_root/assets/reader-c562377d.7f78718f4c63.js +1 -0
  112. codex/static_root/assets/reader-c562377d.7f78718f4c63.js.br +0 -0
  113. codex/static_root/assets/reader-c562377d.7f78718f4c63.js.gz +0 -0
  114. codex/static_root/assets/reader-c562377d.js +1 -0
  115. codex/static_root/assets/reader-c562377d.js.br +0 -0
  116. codex/static_root/assets/reader-c562377d.js.gz +0 -0
  117. codex/static_root/{manifest.d2f93a519ada.json → manifest.55457ccaa01c.json} +32 -32
  118. codex/static_root/manifest.55457ccaa01c.json.br +0 -0
  119. codex/static_root/manifest.55457ccaa01c.json.gz +0 -0
  120. codex/static_root/manifest.json +32 -32
  121. codex/static_root/manifest.json.br +0 -0
  122. codex/static_root/manifest.json.gz +0 -0
  123. codex/static_root/pwa/{offline.37a4206d79f0.html → offline.7bfaf9f94bf9.html} +1 -1
  124. codex/static_root/pwa/offline.7bfaf9f94bf9.html.br +0 -0
  125. codex/static_root/pwa/offline.7bfaf9f94bf9.html.gz +0 -0
  126. codex/static_root/pwa/offline.html +1 -1
  127. codex/static_root/pwa/offline.html.br +0 -0
  128. codex/static_root/pwa/offline.html.gz +0 -0
  129. codex/static_root/staticfiles.json +1 -1
  130. codex/threads.py +1 -1
  131. codex/views/admin/api_key.py +3 -1
  132. codex/views/admin/flag.py +3 -1
  133. codex/views/admin/group.py +3 -1
  134. codex/views/admin/library.py +5 -4
  135. codex/views/admin/stats.py +10 -6
  136. codex/views/admin/tasks.py +35 -30
  137. codex/views/admin/user.py +4 -2
  138. codex/views/bookmark.py +6 -4
  139. codex/views/browser/base.py +30 -28
  140. codex/views/browser/browser.py +78 -80
  141. codex/views/browser/browser_annotations.py +15 -10
  142. codex/views/browser/browser_order_by.py +21 -16
  143. codex/views/browser/choices.py +37 -22
  144. codex/views/browser/filters/search.py +19 -16
  145. codex/views/browser/metadata.py +50 -41
  146. codex/views/cover.py +3 -1
  147. codex/views/download.py +4 -2
  148. codex/views/frontend.py +3 -2
  149. codex/views/mixins.py +13 -9
  150. codex/views/opds/authentication_v1.py +45 -41
  151. codex/views/opds/const.py +20 -13
  152. codex/views/opds/v1/entry/data.py +2 -1
  153. codex/views/opds/v1/facets.py +2 -1
  154. codex/views/opds/v1/feed.py +11 -4
  155. codex/views/opds/v1/links.py +8 -6
  156. codex/views/opds/v1/opensearch_v1.py +1 -1
  157. codex/views/opds/v2/feed.py +2 -1
  158. codex/views/opds/v2/publications.py +15 -12
  159. codex/views/reader/page.py +1 -1
  160. codex/views/session.py +50 -43
  161. codex/views/template.py +2 -2
  162. codex/websockets/listener.py +10 -7
  163. {codex-1.4.1.dist-info → codex-1.4.3.dist-info}/METADATA +24 -28
  164. {codex-1.4.1.dist-info → codex-1.4.3.dist-info}/RECORD +167 -167
  165. {codex-1.4.1.dist-info → codex-1.4.3.dist-info}/WHEEL +1 -1
  166. codex/static_root/assets/admin-12749881.ef0f50bac290.js +0 -41
  167. codex/static_root/assets/admin-12749881.ef0f50bac290.js.br +0 -0
  168. codex/static_root/assets/admin-12749881.ef0f50bac290.js.gz +0 -0
  169. codex/static_root/assets/admin-12749881.js +0 -41
  170. codex/static_root/assets/admin-12749881.js.br +0 -0
  171. codex/static_root/assets/admin-12749881.js.gz +0 -0
  172. codex/static_root/assets/admin-beda768d.a614eee46307.css +0 -1
  173. codex/static_root/assets/admin-beda768d.a614eee46307.css.br +0 -0
  174. codex/static_root/assets/admin-beda768d.a614eee46307.css.gz +0 -0
  175. codex/static_root/assets/admin-beda768d.css +0 -1
  176. codex/static_root/assets/admin-beda768d.css.br +0 -0
  177. codex/static_root/assets/admin-beda768d.css.gz +0 -0
  178. codex/static_root/assets/admin-drawer-panel-522f1e6c.089d70878270.js.br +0 -0
  179. codex/static_root/assets/admin-drawer-panel-522f1e6c.089d70878270.js.gz +0 -0
  180. codex/static_root/assets/admin-drawer-panel-522f1e6c.js.br +0 -0
  181. codex/static_root/assets/admin-drawer-panel-522f1e6c.js.gz +0 -0
  182. codex/static_root/assets/browser-7f7d7134.0fe3749b0f2f.css.br +0 -0
  183. codex/static_root/assets/browser-7f7d7134.0fe3749b0f2f.css.gz +0 -0
  184. codex/static_root/assets/browser-7f7d7134.css.br +0 -0
  185. codex/static_root/assets/browser-7f7d7134.css.gz +0 -0
  186. codex/static_root/assets/browser-af622672.d51aca96d64d.js +0 -1
  187. codex/static_root/assets/browser-af622672.d51aca96d64d.js.br +0 -0
  188. codex/static_root/assets/browser-af622672.d51aca96d64d.js.gz +0 -0
  189. codex/static_root/assets/browser-af622672.js +0 -1
  190. codex/static_root/assets/browser-af622672.js.br +0 -0
  191. codex/static_root/assets/browser-af622672.js.gz +0 -0
  192. codex/static_root/assets/http-error-5e17b794.77ceeb2d4641.js.br +0 -0
  193. codex/static_root/assets/http-error-5e17b794.77ceeb2d4641.js.gz +0 -0
  194. codex/static_root/assets/http-error-5e17b794.js.br +0 -0
  195. codex/static_root/assets/http-error-5e17b794.js.gz +0 -0
  196. codex/static_root/assets/main-0898f4bb.181e0145c642.css.br +0 -0
  197. codex/static_root/assets/main-0898f4bb.css.br +0 -0
  198. codex/static_root/assets/main-9e76a4c3.6844a407d14c.js +0 -1
  199. codex/static_root/assets/main-9e76a4c3.6844a407d14c.js.br +0 -0
  200. codex/static_root/assets/main-9e76a4c3.6844a407d14c.js.gz +0 -0
  201. codex/static_root/assets/main-9e76a4c3.js +0 -1
  202. codex/static_root/assets/main-9e76a4c3.js.br +0 -0
  203. codex/static_root/assets/main-9e76a4c3.js.gz +0 -0
  204. codex/static_root/assets/metadata-dialog-62c29ce0.8418785c0453.js +0 -1
  205. codex/static_root/assets/metadata-dialog-62c29ce0.8418785c0453.js.br +0 -0
  206. codex/static_root/assets/metadata-dialog-62c29ce0.8418785c0453.js.gz +0 -0
  207. codex/static_root/assets/metadata-dialog-62c29ce0.js +0 -1
  208. codex/static_root/assets/metadata-dialog-62c29ce0.js.br +0 -0
  209. codex/static_root/assets/metadata-dialog-62c29ce0.js.gz +0 -0
  210. codex/static_root/assets/metadata-dialog-cb306ffd.cc304996d7bb.css +0 -1
  211. codex/static_root/assets/metadata-dialog-cb306ffd.cc304996d7bb.css.br +0 -0
  212. codex/static_root/assets/metadata-dialog-cb306ffd.cc304996d7bb.css.gz +0 -0
  213. codex/static_root/assets/metadata-dialog-cb306ffd.css +0 -1
  214. codex/static_root/assets/metadata-dialog-cb306ffd.css.br +0 -0
  215. codex/static_root/assets/metadata-dialog-cb306ffd.css.gz +0 -0
  216. codex/static_root/assets/page-pdf-157ba97e.613d7c2beb77.js.br +0 -0
  217. codex/static_root/assets/page-pdf-157ba97e.613d7c2beb77.js.gz +0 -0
  218. codex/static_root/assets/page-pdf-157ba97e.js.br +0 -0
  219. codex/static_root/assets/page-pdf-157ba97e.js.gz +0 -0
  220. codex/static_root/assets/reader-36266549.0b2cf1291f27.js +0 -1
  221. codex/static_root/assets/reader-36266549.0b2cf1291f27.js.br +0 -0
  222. codex/static_root/assets/reader-36266549.0b2cf1291f27.js.gz +0 -0
  223. codex/static_root/assets/reader-36266549.js +0 -1
  224. codex/static_root/assets/reader-36266549.js.br +0 -0
  225. codex/static_root/assets/reader-36266549.js.gz +0 -0
  226. codex/static_root/assets/reader-7f004141.506eecc6954b.css +0 -1
  227. codex/static_root/assets/reader-7f004141.506eecc6954b.css.br +0 -0
  228. codex/static_root/assets/reader-7f004141.506eecc6954b.css.gz +0 -0
  229. codex/static_root/assets/reader-7f004141.css +0 -1
  230. codex/static_root/assets/reader-7f004141.css.br +0 -0
  231. codex/static_root/assets/reader-7f004141.css.gz +0 -0
  232. codex/static_root/manifest.d2f93a519ada.json.br +0 -0
  233. codex/static_root/manifest.d2f93a519ada.json.gz +0 -0
  234. codex/static_root/pwa/offline.37a4206d79f0.html.br +0 -0
  235. codex/static_root/pwa/offline.37a4206d79f0.html.gz +0 -0
  236. {codex-1.4.1.dist-info → codex-1.4.3.dist-info}/LICENSE +0 -0
  237. {codex-1.4.1.dist-info → codex-1.4.3.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1 @@
1
+ import{ar as ee,a as w,L as p,c as y,o as a,e as _,w as d,g as l,j as n,t as h,as as O,D as S,b as C,f as v,A as T,at as Se,au as Be,av as G,B as $,aw as U,d as g,i as s,ax as Ce,ay as te,p as D,q as L,_ as oe,x as se,az as ke,l as P,aA as Te,aB as Ve,n as V,r as F,F as x,aC as Me,aD as $e,aE as Y,V as R,aF as xe,aG as Ie,aH as I,aI as Fe,aJ as Ne,aK as Pe,aL as A,aM as Re,aN as Oe,I as De,aO as Le,aP as He,aQ as Ue,aR as Ge,k as E,aS as Ae,aT as Ee,C as B,aU as qe,aV as je,aW as re,aX as W,aY as ze,aZ as Ye,a_ as We,J as q,a$ as H,b0 as Qe,b1 as Ke,N as Q,b2 as Xe,b3 as ne,b4 as Je,b5 as Ze,b6 as et,b7 as K,b8 as X,b9 as tt,ba as ot,M as st,O as rt,bb as nt,bc as at,bd as it,R as lt,be as ut,bf as dt,bg as ct,W as mt,bh as ae,bi as _t,bj as pt,bk as ht,bl as ft,bm as ie,bn as le,bo as gt}from"./admin-b2b56cd6.js";import{_ as ue,a as de,b as ce,t as bt,p as yt,c as vt,d as me,g as wt,P as _e}from"./metadata-dialog-8c0a11ff.js";const St={name:"BrowserNavButton",components:{PaginationNavButton:ue},props:{back:{type:Boolean,required:!0}},data(){return{mdiChevronLeft:ee}},computed:{...w(p,{numPages:e=>e.page.numPages}),increment(){return this.back?-1:1},toPage(){return+this.$route.params.page+this.increment},title(){return"to page"+this.toPage},toRoute(){return{params:{...this.$route.params,page:this.toPage}}},disabled(){return this.back&&+this.$route.params.page<=1||!this.back&&+this.$route.params.page>=this.numPages}}};function Bt(e,t,r,f,i,o){const u=ue;return a(),_(u,{disabled:o.disabled,title:o.title,to:o.toRoute},{default:d(()=>[l(S,{class:O({flipHoriz:!r.back})},{default:d(()=>[n(h(i.mdiChevronLeft),1)]),_:1},8,["class"])]),_:1},8,["disabled","title","to"])}const pe=y(St,[["render",Bt],["__scopeId","data-v-7b8e4ba4"]]),Ct={name:"BrowserNavToolbar",components:{BrowserNavButton:pe,PaginationSlider:de,PaginationToolbar:ce},computed:{...w(p,{numPages:e=>e.page.numPages})},methods:{...C(p,["routeToPage"]),onUpdate(e){this.routeToPage(e)}}};function kt(e,t,r,f,i,o){const u=pe,c=de,b=ce;return e.numPages>1?(a(),_(b,{key:0},{default:d(()=>[l(u,{back:!0}),l(c,{"model-value":+e.$route.params.page,min:1,max:e.numPages,step:1,"onUpdate:modelValue":t[0]||(t[0]=M=>e.routeToPage(M))},null,8,["model-value","max"]),l(u,{back:!1})]),_:1})):v("",!0)}const he=y(Ct,[["render",kt]]),Tt=new Set(["a","f"]),Vt={name:"BrowserUpButton",props:{top:{type:Boolean,default:!1}},computed:{...T(p,["parentModelGroup"]),...w(p,{upRoute:e=>e.page.routes.up,title(e){const t=this.top?e.settings.topGroup:this.parentModelGroup;return`Up to ${e.choices.static.groupNames[t]||"All"}`}}),show(){return this.upRoute&&"group"in this.upRoute},icon(){return this.top?Se:Be},to(){let e;if(this.top){let t=this.upRoute.group;Tt.has(t)||(t="r"),e={group:t,pk:0,page:1}}else e=this.upRoute;return{params:e}}}};function Mt(e,t,r,f,i,o){return o.show?(a(),_(G,{key:0,icon:"",size:"x-large",title:e.title,to:o.to,variant:"plain"},{default:d(()=>[l(S,null,{default:d(()=>[n(h(o.icon),1)]),_:1})]),_:1},8,["title","to"])):v("",!0)}const fe=y(Vt,[["render",Mt]]);const $t={name:"BrowserHeader",components:{BrowserUpButton:fe},head(){return{meta:[{hid:"description",name:"description",content:["browse comics",this.longBrowserTitlePrefix,this.longBrowseTitleMain,this.longBrowseTitleSuffix].filter(Boolean).join(" ")}]}},computed:{...w(p,{groupNames:e=>e.choices.static.groupNames,browserTitle:e=>e.page.browserTitle,modelGroup:e=>e.page.modelGroup}),...T($,["isCodexViewable","isUserAdmin"]),longBrowserTitlePrefix:function(){return this.$route.params.group==="f"?this.browserTitle.parentName:""},longBrowseTitleMain:function(){let e;if(Number(this.$route.params.pk)===0)e="All";else{let t=[];const{parentName:r,groupName:f,groupCount:i}=this.browserTitle;r&&t.push(r);const o=this.$route.params.group,u=o==="v"?U(f):f;if(u&&t.push(u),i){const b=`of ${i}`;t.push(b)}const c=o==="f"?"/":" ";e=t.join(c)}return e},longBrowseTitleSuffix:function(){return this.$route.params.group==="f"?"":this.groupNames[this.modelGroup]}}},ge=e=>(D("data-v-b5efed9f"),e=e(),L(),e),xt={key:0,id:"titleToolbarPrefix"},It=ge(()=>s("br",null,null,-1)),Ft={id:"titleToolbarMain"},Nt={key:1,id:"titleToolbarSuffix"},Pt=ge(()=>s("br",null,null,-1));function Rt(e,t,r,f,i,o){const u=fe;return e.isCodexViewable?(a(),_(te,{key:0,id:"titleToolbar",elevation:"8"},{default:d(()=>[l(u),l(Ce,{class:"codexToolbarTitle"},{default:d(()=>[o.longBrowserTitlePrefix?(a(),g("span",xt,[n(h(o.longBrowserTitlePrefix)+" ",1),It])):v("",!0),s("span",Ft,h(o.longBrowseTitleMain),1),o.longBrowseTitleSuffix?(a(),g("span",Nt,[Pt,n(" "+h(o.longBrowseTitleSuffix),1)])):v("",!0)]),_:1}),l(u,{top:""})]),_:1})):v("",!0)}const be=y($t,[["render",Rt],["__scopeId","data-v-b5efed9f"]]);const Ot=[["characters","CSV","category"],["community_rating","Decimal","communityrating"],["country","String",""],["created_at","DateTime","created"],["creators","CSV","authors, contributors"],["critical_rating","Decimal","criticalrating"],["day","Integer",""],["date","Date",""],["decade","Integer",""],["description","String",""],["file_type","String","format"],["genres","CSV","genre"],["imprint","String",""],["issue","Decimal",""],["language","String",""],["location[s]","CSV","location"],["maturity_rating","String",""],["month","Integer",""],["read_ltr","Boolean","ltr"],["name","String","title"],["notes","String",""],["original_format","String","format"],["page_count","Integer","pages"],["publisher","String",""],["scan_info","String","scan"],["series","String",""],["series_group[s]","CSV","seriesgroups"],["size","Integer",""],["story_arcs","CSV","storyarcs"],["summary","String",""],["tags","CSV","tag"],["teams","CSV","team"],["updated_at","Date","updated"],["volume","String",""],["web","String",""],["year","Integer",""]],Dt={name:"SearchHelp",components:{CloseButton:oe},data(){return{mdiOpenInNew:se,mdiArchiveSearchOutline:ke,dialog:!1,FIELD_ROWS:Ot}}},m=e=>(D("data-v-08501668"),e=e(),L(),e),Lt={id:"searchHelp"},Ht=m(()=>s("h1",null,"Search Syntax Help",-1)),Ut={id:"fieldTableContainer"},Gt=m(()=>s("h2",null,"Search Fields",-1)),At=m(()=>s("thead",null,[s("tr",null,[s("th",null,"Field"),s("th",null,"Type"),s("th",null,"Aliases")])],-1)),Et={id:"textContainer"},qt=m(()=>s("h2",null,"Whoosh Query Parser",-1)),jt={href:"https://whoosh.readthedocs.io/en/latest/querylang.html",target:"_blank"},zt=m(()=>s("h2",null,"Operators",-1)),Yt=m(()=>s("code",null,"and",-1)),Wt=m(()=>s("code",null,"or",-1)),Qt=m(()=>s("code",null,"not",-1)),Kt=m(()=>s("code",null,"andnot",-1)),Xt=m(()=>s("code",null,"andmaybe",-1)),Jt=m(()=>s("code",null,"require",-1)),Zt=m(()=>s("h2",null,"Searching Fields",-1)),eo=m(()=>s("p",null,[n(" Like Codex's filter selector menu, but more powerful. You may search on individual comic metadata fields. using a search token like "),s("code",null,"field:value"),n(". ")],-1)),to=m(()=>s("h3",null,"Dates and DateTimes",-1)),oo={href:"https://whoosh.readthedocs.io/en/latest/dates.html#parsing-date-queries",target:"_blank"},so=m(()=>s("code",null,"YYYYMMDD",-1)),ro=m(()=>s("code",null,"YYYMMDDHHmmSS",-1)),no=m(()=>s("h3",null,"Single Quote complex field Queries",-1)),ao=m(()=>s("p",null,[n(" Use "),s("em",null,"single"),n(" quotes to tell Codex that a complex or natural language phrase should be applied to a specific field ")],-1)),io=m(()=>s("code",null," created:'this year' ",-1)),lo=m(()=>s("h3",null,"Size Byte Multipliers",-1)),uo=m(()=>s("p",null,[n(" The size field can make use of convenient byte multiplier suffixes like "),s("code",null,"kb"),n(" and "),s("code",null,"mb"),n(" as well as binary suffixes like "),s("code",null,"gib"),n(" and "),s("code",null,"tib"),n(". ")],-1)),co=m(()=>s("h3",null,"Ranges of Fields",-1)),mo=m(()=>s("p",null,[n(" Whoosh uses brackets and the "),s("em",null,"uppercase"),n(" "),s("code",null,"TO"),n(" operator to delineate a range search. ")],-1)),_o=m(()=>s("code",null,"updated:[last sunday TO 10am]",-1)),po=m(()=>s("p",null," You may leave out the upper or lower bound or use >, <, >=, <= operators. ",-1)),ho=m(()=>s("code",null,"size:<50mb",-1)),fo=m(()=>s("h3",null,"Multi Value Fields",-1)),go=m(()=>s("p",null,[n(" Fields marked type "),s("code",null,"CSV"),n(" in the table to the left may contain comma separated values. This filters by all the supplied values. Multi Value tokens look like: "),s("code",null,"field:term1,term2,term3")],-1)),bo=m(()=>s("h2",null,"Grouped Queries",-1)),yo=m(()=>s("p",null,"Whoosh allows grouping of queries with parenthesis.",-1)),vo=m(()=>s("h2",null,"Example Search",-1)),wo=m(()=>s("p",null," This example search is more convoluted than most searches but uses many features for demonstration: ",-1)),So=m(()=>s("code",null,' (Holmes and Tesla date:>=1999-1-2 size:[10mib TO 1gb] Gadzooks) or "Captain Nemo" -Quartermain ',-1)),Bo=m(()=>s("p",{style:{"margin-top":"1em"}},' Search for comics that contain Holmes and Tesla published after the second day of 1999 that are between 10 Mebibytes and 10 Gigabytes that also contain the word "Gadzooks" but also all comics with the the phrase "Captain Nemo" but no comics will contain the word "Quartermain". ',-1)),Co=m(()=>s("h2",null,"Group and Sorting Behavior",-1)),ko=m(()=>s("p",null," If the search field is empty and then you supply a search query for the first time, Codex navigates you to the to All Issues view and your sets your Sorted By selection to Search Score. If you prefer a different view you may change the group and sort selections after your you make your first search. ",-1)),To=m(()=>s("h2",null,"Filter Behavior",-1)),Vo=m(()=>s("p",null,[n(" Codex applies "),s("em",null,"both"),n(" the Filter selection menu filters "),s("em",null,"and"),n(" the search query field filters to the search. Be sure to clear the filter selector or the search field if you prefer to apply only one of them. ")],-1));function Mo(e,t,r,f,i,o){const u=oe;return a(),_($e,{modelValue:i.dialog,"onUpdate:modelValue":t[2]||(t[2]=c=>i.dialog=c),"content-class":"browserSearchHelp",fullscreen:"",scrim:!1,transition:"dialog-bottom-transition"},{activator:d(({props:c})=>[l(V,Te(Ve(c)),{default:d(()=>[l(P,null,{default:d(()=>[l(S,null,{default:d(()=>[n(h(i.mdiArchiveSearchOutline),1)]),_:1}),n("Search Syntax Help ")]),_:1})]),_:2},1040)]),default:d(()=>[s("div",Lt,[l(u,{class:"closeButton",title:"Close Help (esc)",size:"x-large",onClick:t[0]||(t[0]=c=>i.dialog=!1)}),Ht,s("div",Ut,[Gt,l(Me,{id:"fieldTable",class:"highlight-table"},{default:d(()=>[At,s("tbody",null,[(a(!0),g(x,null,F(i.FIELD_ROWS,c=>(a(),g("tr",{key:c[0]},[s("td",null,h(c[0]),1),s("td",null,h(c[1]),1),s("td",null,h(c[2]),1)]))),128))])]),_:1})]),s("div",Et,[qt,s("p",null,[n(" Codex uses the Whoosh search engine to execute your text search queries. Whoosh operates much like other familiar search engines. As such, only some special features are documented on this page. To understand its full power, users are encouraged to read the "),s("a",jt,[n("Whoosh Query Language "),l(S,{size:"small"},{default:d(()=>[n(h(i.mdiOpenInNew),1)]),_:1})]),n(" documentation. ")]),zt,n(" Whoosh has the "),Yt,n(", "),Wt,n(", "),Qt,n(", "),Kt,n(", "),Xt,n(", and "),Jt,n(" operators. "),Zt,eo,to,s("p",null,[n(" Whoosh parses Dates and DateTime values liberally. Read "),s("a",oo,[n("Whoosh Parsing Date Queries "),l(S,{size:"small"},{default:d(()=>[n(h(i.mdiOpenInNew),1)]),_:1})]),n(" documentation for what formats and natural language phrases are accepted. If the format you try fails, the "),so,n(" and "),ro,n(" formats are reliable. ")]),no,ao,io,lo,uo,co,mo,_o,n(". "),po,ho,n(". "),fo,go,bo,yo,vo,wo,So,Bo,Co,ko,To,Vo]),l(u,{class:"closeButton",title:"Close Help (esc)",size:"x-large",onClick:t[1]||(t[1]=c=>i.dialog=!1)})])]),_:1},8,["modelValue"])}const ye=y(Dt,[["render",Mo],["__scopeId","data-v-08501668"]]);const $o={name:"BrowserSettingsPanel",components:{SearchHelp:ye},computed:{...T($,["isCodexViewable"]),...w(p,{groupChoices:e=>e.choices.static.settingsGroup,twentyFourHourTimeTitle:e=>e.choices.static.twentyFourHourTime.title,showSettings:e=>e.settings.show,twentyFourHourTime:e=>e.settings.twentyFourHourTime})},methods:{...C(p,["setSettings"]),setShow(e,t){const r={show:{[e]:t===!0}};this.setSettings(r)},set24HourTime(e){const t={twentyFourHourTime:e===!0};this.setSettings(t)}}},xo=e=>(D("data-v-9312ed19"),e=e(),L(),e),Io=xo(()=>s("div",{id:"groupCaption",class:"text-caption"}," Show these groups when navigating the browse tree. ",-1));function Fo(e,t,r,f,i,o){const u=ye;return a(),g(x,null,[Io,(a(!0),g(x,null,F(e.groupChoices,c=>(a(),_(Y,{key:c.title,class:"browserGroupCheckbox",density:"compact","hide-details":"auto","model-value":e.showSettings[c.value],"true-value":!0,label:`Show ${c.title}`,"onUpdate:modelValue":b=>o.setShow(c.value,b)},null,8,["model-value","label","onUpdate:modelValue"]))),128)),l(R),l(Y,{class:"browserGroupCheckbox",density:"compact","hide-details":"auto","model-value":e.twentyFourHourTime,"true-value":!0,indeterminate:"",label:"Force 24 Hour Time","onUpdate:modelValue":t[0]||(t[0]=c=>o.set24HourTime(c))},null,8,["model-value"]),l(R),l(u)],64)}const No=y($o,[["render",Fo],["__scopeId","data-v-9312ed19"]]);const Po={name:"ToolbarSelect",props:{selectLabel:{type:String,default:""},maxSelectLen:{type:Number,default:0},mobileLenAdj:{type:Number,default:0},variant:{type:String,default:"plain"}},computed:{style(){const e=this.$vuetify.display.smAndDown?this.mobileLenAdj:0,r=this.maxSelectLen+e+"em";return`width: ${r}; min-width: ${r}; max-width: ${r}`}}};function Ro(e,t,r,f,i,o){return a(),_(Fe,I(e.$attrs,{label:r.selectLabel,"aria-label":r.selectLabel,class:"toolbarSelect",density:"compact","full-width":"","menu-props":{maxHeight:void 0},"hide-details":"auto",style:o.style,variant:r.variant}),xe({_:2},[F(e.$slots,(u,c)=>({name:c,fn:d(b=>[Ie(e.$slots,c,I({props:u},b),void 0,!0)])}))]),1040,["label","aria-label","style","variant"])}const k=y(Po,[["render",Ro],["__scopeId","data-v-3a4c9e75"]]);const Oo=De.browser.vuetifyNullCode,Do={name:"BrowserFilterSubMenu",props:{name:{type:String,required:!0}},emits:["selected"],data(){return{mdiChevronLeft:ee,mdiChevronRight:Ne,mdiChevronRightCircle:Pe,query:"",nullCode:Oo}},computed:{...w(p,{choices:function(e){return e.choices.dynamic[this.name]},filter:function(e){return e.settings.filters[this.name]}}),...A(p,["filterMode"]),vuetifyItems(){return bt(this.choices,this.query,Oe.includes(this.name),Re.includes(this.name))},title:function(){let e=this.name.replaceAll(/[A-Z]/g,t=>` ${t}`);return e=e.replace("Ltr","LTR"),e=e[0].toUpperCase()+e.slice(1),e},lowerTitle:function(){return this.title.toLowerCase()}},methods:{...C(p,["loadFilterChoices"]),setUIFilterMode(e){this.filterMode=e,this.query="",e!=="base"&&typeof this.choices!="object"&&this.loadFilterChoices(e)},selected(e){const t={filters:{[this.name]:e}};this.$emit("selected",t)}}},Lo={key:0},Ho={class:"filterHeader"};function Uo(e,t,r,f,i,o){return a(),g("div",null,[l(Le,{"hide-on-leave":""},{default:d(()=>[e.filterMode==="base"?(a(),_(V,{key:0,onClick:t[0]||(t[0]=u=>o.setUIFilterMode(r.name))},{default:d(()=>[l(P,{class:"filterMenu"},{default:d(()=>[n(h(o.title)+" ",1),e.filter&&e.filter.length>0?(a(),_(S,{key:0,class:"nameChevron"},{default:d(()=>[n(h(i.mdiChevronRightCircle),1)]),_:1})):(a(),_(S,{key:1,class:"nameChevron"},{default:d(()=>[n(h(i.mdiChevronRight),1)]),_:1}))]),_:1})]),_:1})):v("",!0)]),_:1}),l(Ge,{"hide-on-leave":""},{default:d(()=>[e.filterMode===r.name?(a(),g("div",Lo,[s("header",Ho,[l(V,{onClick:t[1]||(t[1]=u=>o.setUIFilterMode("base"))},{default:d(()=>[l(P,{class:"filterTitle"},{default:d(()=>[l(S,null,{default:d(()=>[n(h(i.mdiChevronLeft),1)]),_:1}),n(h(o.lowerTitle),1)]),_:1})]),_:1}),typeof e.choices=="object"?(a(),_(He,{key:0,modelValue:i.query,"onUpdate:modelValue":t[2]||(t[2]=u=>i.query=u),placeholder:"Filter","full-width":"",density:"compact",filled:"",rounded:"","hide-details":"auto",onFocus:t[3]||(t[3]=u=>e.filterMode=r.name)},null,8,["modelValue"])):(a(),_(E,{key:1,class:"filterValuesProgress",rounded:"",indeterminate:""}))]),typeof e.choices=="object"?(a(),_(Ue,{key:0,"model-value":e.filter,class:"filterGroup overflow-y-auto",density:"compact",multiple:"",items:o.vuetifyItems,"onUpdate:selected":o.selected},{default:d(()=>[(a(!0),g(x,null,F(o.vuetifyItems,u=>(a(),_(V,{key:u.pk,title:u.title,value:u.value,class:O({noneItem:+u.value==i.nullCode})},null,8,["title","value","class"]))),128))]),_:1},8,["model-value","items","onUpdate:selected"])):v("",!0)])):v("",!0)]),_:1})])}const Go=y(Do,[["render",Uo],["__scopeId","data-v-959dcb5f"]]);const Ao={name:"BrowserFilterBySelect",components:{BrowserFilterSubMenu:Go,ToolbarSelect:k},extends:k,data(){return{mdiFilterMultipleOutline:Ae,menu:!1}},computed:{...T(p,["filterByChoicesMaxLen","isDefaultBookmarkValueSelected"]),...w(p,{bookmarkChoices:e=>e.choices.static.bookmark,bookmarkFilter:e=>e.settings.filters.bookmark||e.choices.static.bookmark[0],filters:e=>e.settings.filters,isDynamicFiltersSelected:function(e){for(const[t,r]of Object.entries(e.settings.filters))if(t!=="bookmark"&&r&&r.length>0)return!0;return!1},isFiltersClearable:function(){return!this.isDefaultBookmarkValueSelected||this.isDynamicFiltersSelected},filterMenuClass:function(e){let t="filterMenu";return e.filterMode!=="base"&&(t+="Hidden"),t},dynamicChoiceNames:function(e){if(e.choices.dynamic===void 0)return;const t=[];for(const[r,f]of Object.entries(e.choices.dynamic))f&&t.push(r);return t}}),...A(p,["filterMode"]),filterInnerIcon:function(){return this.isFiltersClearable?Ee:""}},methods:{...C(p,["clearFilters","loadAvailableFilterChoices","setSettings"]),onUpdateModelValue(e){const t={filters:{bookmark:e}};this.onSubMenuSelected(t)},onSubMenuSelected(e){this.menu=!1,this.setSettings(e),this.filterMode="base"},onClear(){this.clearFilters()},onMenu(e){e&&this.dynamicChoiceNames===void 0&&this.loadAvailableFilterChoices()}}},Eo={key:1};function qo(e,t,r,f,i,o){const u=B("BrowserFilterSubMenu"),c=k;return a(),_(c,{menu:i.menu,"onUpdate:menu":[t[0]||(t[0]=b=>i.menu=b),o.onMenu],class:"filterBySelect","select-label":"filter by",clearable:e.isFiltersClearable,items:e.bookmarkChoices,"menu-props":{contentClass:e.filterMenuClass,maxHeight:void 0},"model-value":e.bookmarkFilter,"max-select-len":e.filterByChoicesMaxLen+1.5,"mobile-len-adj":-1.5,variant:"solo","onClick:clear":o.onClear,"onUpdate:modelValue":o.onUpdateModelValue},{selection:d(({item:b})=>[n(h(b.title)+" ",1),e.isDynamicFiltersSelected?(a(),_(S,{key:0,class:"filterSuffix"},{default:d(()=>[n(h(i.mdiFilterMultipleOutline),1)]),_:1})):v("",!0)]),"append-item":d(()=>[l(R),e.dynamicChoiceNames===void 0?(a(),_(V,{key:0},{default:d(()=>[l(E,{indeterminate:"",rounded:""})]),_:1})):e.dynamicChoiceNames.length>0?(a(),g("div",Eo,[(a(!0),g(x,null,F(e.dynamicChoiceNames,b=>(a(),_(u,{key:b,name:b,onSelected:o.onSubMenuSelected},null,8,["name","onSelected"]))),128))])):(a(),_(V,{key:2,class:"noChoices"},{default:d(()=>[n(" No filters available ")]),_:1}))]),_:1},8,["menu","clearable","items","menu-props","model-value","max-select-len","onClick:clear","onUpdate:modelValue","onUpdate:menu"])}const jo=y(Ao,[["render",qo],["__scopeId","data-v-404ecbd3"]]),zo={name:"BrowseOrderBySelect",components:{ToolbarSelect:k},extends:k,computed:{...T(p,["orderByChoices","orderByChoicesMaxLen"]),...w(p,{orderBySetting:e=>e.settings.orderBy}),reverseValues(){const e=new Set;for(const t of this.orderByChoices)t.reverse&&e.add(t.value);return e},orderBy:{get(){return this.orderBySetting},set(e){const t={orderBy:e,orderReverse:this.reverseValues.has(e)};this.setSettings(t)}}},methods:{...C(p,["setSettings"])}};function Yo(e,t,r,f,i,o){const u=k;return a(),_(u,I({modelValue:o.orderBy,"onUpdate:modelValue":t[0]||(t[0]=c=>o.orderBy=c),class:"orderBySelect","select-label":"order by",items:e.orderByChoices,"max-select-len":e.orderByChoicesMaxLen-3.5,"mobile-len-adj":-2},e.$attrs),null,16,["modelValue","items","max-select-len"])}const Wo=y(zo,[["render",Yo]]);const Qo={name:"BrowseOrderReverseButton",computed:{...w(p,{orderReverseSetting:e=>e.settings.orderReverse,orderIcon:e=>e.settings.orderReverse?qe:je}),density(){return this.$vuetify.display.smAndDown?"compact":"default"},title(){return this.orderReverseSetting?"order descending":"order ascending"}},methods:{...C(p,["setSettings"]),toggleOrderReverse(){const e={orderReverse:!this.orderReverseSetting};this.setSettings(e)}}};function Ko(e,t,r,f,i,o){return a(),_(G,I({class:"orderReverseButton",density:o.density,height:"46",icon:"",variant:"text"},e.$attrs,{title:o.title,onClick:o.toggleOrderReverse}),{default:d(()=>[l(S,null,{default:d(()=>[n(h(e.orderIcon),1)]),_:1})]),_:1},16,["density","title","onClick"])}const Xo=y(Qo,[["render",Ko],["__scopeId","data-v-44032796"]]),Jo=10,Zo={name:"BrowserSearchCombobox",data(){return{mdiMagnify:re,menu:!1,query:"",items:[""]}},computed:{...w(p,{stateQ:e=>e.settings.q})},watch:{stateQ(e){this.query=e,this.addToMenu(e)}},methods:{...C(p,["setSettings"]),addToMenu(e){if(!e||this.items.includes(e))return;const t=this.items[0]===""?[]:this.items;t.unshift(e),this.items=t.slice(0,Jo)},doSearch(){this.menu=!1;const e=this.query?this.query.trim():"";this.setSettings({q:e}),this.addToMenu(e)}}};function es(e,t,r,f,i,o){return a(),_(ze,{ref:"searchbox",modelValue:i.query,"onUpdate:modelValue":t[0]||(t[0]=u=>i.query=u),menu:i.menu,"onUpdate:menu":t[1]||(t[1]=u=>i.menu=u),items:i.items,autofocus:"","aria-label":"search",clearable:"",density:"compact","full-width":"","hide-details":"auto","hide-selected":"","menu-props":{maxHeight:void 0},"no-filter":"","prepend-inner-icon":i.mdiMagnify,variant:"solo","onClick:clear":o.doSearch,"onClick:prependInner":o.doSearch,onKeydown:[W(o.doSearch,["enter"]),t[2]||(t[2]=W(u=>i.menu=!1,["esc"]))]},null,8,["modelValue","menu","items","prepend-inner-icon","onClick:clear","onClick:prependInner","onKeydown"])}const ts=y(Zo,[["render",es]]);const os={params:{group:"f",pk:0,page:1}},J=new Set(["a","f"]),ss={name:"BrowserTopGroupSelect",components:{ToolbarSelect:k},extends:k,data(){return{FOLDER_ROUTE:os,DIVIDED_VALUES:J}},computed:{...w(p,{topGroupSetting:e=>e.settings.topGroup}),...T(p,["topGroupChoices","topGroupChoicesMaxLen"]),topGroup:{get(){return this.topGroupSetting},set(e){const r={params:{group:J.has(e)?e:"r",pk:0,page:1}},f={topGroup:e};this.$router.push(r).then(()=>this.setSettings(f)).catch(console.error)}}},methods:{...C(p,["setSettings"])}};function rs(e,t,r,f,i,o){const u=k;return a(),_(u,I(e.$attrs,{modelValue:o.topGroup,"onUpdate:modelValue":t[0]||(t[0]=c=>o.topGroup=c),class:"topGroupSelect","select-label":"top group",items:e.topGroupChoices,"max-select-len":e.topGroupChoicesMaxLen-1,"mobile-len-adj":-2.5}),{item:d(({item:c,props:b})=>[i.DIVIDED_VALUES.has(c.value)?(a(),_(R,{key:0})):v("",!0),l(V,I(b,{title:c.title,value:c.value}),null,16,["title","value"])]),_:1},16,["modelValue","items","max-select-len"])}const ns=y(ss,[["render",rs],["__scopeId","data-v-62496858"]]);const as={name:"BrowserHeader",components:{BrowserFilterBySelect:jo,BrowserTopGroupSelect:ns,BrowserSearchCombobox:ts,BrowserOrderBySelect:Wo,BrowserOrderReverseButton:Xo,SettingsDrawerButton:Ye},data(){return{mdiMagnify:re,mdiFamilyTree:We,browseMode:"filter"}},computed:{...T($,["isCodexViewable"]),...A(q,["isSettingsDrawerOpen"])}};function is(e,t,r,f,i,o){const u=B("BrowserTopGroupSelect"),c=B("BrowserOrderBySelect"),b=B("BrowserOrderReverseButton"),M=B("SettingsDrawerButton"),N=B("BrowserFilterBySelect"),z=B("BrowserSearchCombobox");return a(),_(te,{id:"browserToolbar",class:O(["toolbar",{emptyToolbar:!e.isCodexViewable}]),density:"compact","extension-height":"48px"},{extension:d(()=>[e.isCodexViewable?(a(),_(H,{key:0,id:"searchToolbarItems"},{default:d(()=>[l(N,{id:"filterSelect"}),l(z,{id:"searchField"})]),_:1})):v("",!0)]),default:d(()=>[e.isCodexViewable?(a(),_(H,{key:0,id:"browserToolbarLeftItems"},{default:d(()=>[l(u,{id:"topGroupSelect"}),l(c,{id:"orderBySelect"}),l(b,{id:"orderReverseButton"})]),_:1})):v("",!0),l(Qe),l(H,null,{default:d(()=>[l(M,{onClick:t[0]||(t[0]=ir=>e.isSettingsDrawerOpen=!0)})]),_:1})]),_:1},8,["class"])}const ls=y(as,[["render",is],["__scopeId","data-v-cdef4956"]]);const us=new Set(["community_rating","critical_rating"]),ds=new Set(["date"]),cs=new Set(["bookmark_updated_at","created_at","updated_at"]),ms={name:"OrderByCaption",props:{item:{type:Object,required:!0}},computed:{...w(p,{orderBy:e=>e.settings.orderBy,twentyFourHourTime:e=>e.settings.twentyFourHourTime,topGroup:e=>e.settings.topGroup}),orderValue(){let e=this.item.orderValue;try{if(this.orderBy===void 0||this.orderBy===null||this.orderBy==="sort_name"&&(this.item.group!=="c"||this.topGroup!=="f")||e===null||e===void 0)e="";else if(ds.has(this.orderBy)){const t=new Date(e);e=Ke.format(t)}else this.orderBy=="search_score"?e=Q.format(Math.round(Number.parseFloat(e)*10)):cs.has(this.orderBy)?e=Xe(e,this.twentyFourHourTime,!0):this.orderBy=="page_count"?e=`${Q.format(e)} pages`:this.orderBy=="size"?e=yt(Number.parseInt(e,10)):us.has(this.orderBy)&&(e=`★ ${e}`)}catch(t){console.debug(t)}return e}}},_s=["innerHTML"];function ps(e,t,r,f,i,o){return o.orderValue?(a(),g("div",{key:0,class:"orderCaption text-caption",innerHTML:o.orderValue},null,8,_s)):v("",!0)}const ve=y(ms,[["render",ps],["__scopeId","data-v-f1907410"]]),hs={name:"BrowserContainerMenu",components:{ConfirmDialog:ne},props:{item:{type:Object,required:!0}},data(){return{mdiDotsVertical:Je,showMenu:!1}},computed:{...w(p,{groupNames:e=>e.choices.static.groupNames}),verb(){return this.item.finished?"Unread":"Read"},confirmText(){return`Mark ${this.verb}`},markReadText(){const e=["Mark"];this.item.group!="c"&&e.push("Entire");let t=this.groupNames[this.item.group];return this.item.group!=="s"&&(t=t.slice(0,-1)),e.push(t,this.verb),e.join(" ")}},methods:{...C(p,["setBookmarkFinished"]),...C(q,["downloadIOSPWAFix"]),toggleRead:function(){this.setBookmarkFinished(this.item,!this.item.finished),this.showMenu=!1}}},fs={class:"background-soft-highlight"};function gs(e,t,r,f,i,o){const u=ne;return a(),_(et,{modelValue:i.showMenu,"onUpdate:modelValue":t[2]||(t[2]=c=>i.showMenu=c),"offset-y":"",top:""},{activator:d(({props:c})=>[l(G,I({"aria-label":"action menu",class:"browserCardMenuIcon cardControlButton",icon:"",title:"Action Menu",variant:"text"},c,{onClick:t[0]||(t[0]=Ze(()=>{},["prevent"]))}),{default:d(()=>[l(S,null,{default:d(()=>[n(h(i.mdiDotsVertical),1)]),_:1})]),_:2},1040)]),default:d(()=>[s("div",fs,[r.item.group==="c"?(a(),_(V,{key:0,onClick:o.toggleRead},{default:d(()=>[l(P,null,{default:d(()=>[n(h(o.markReadText),1)]),_:1})]),_:1},8,["onClick"])):(a(),_(u,{key:1,"button-text":o.markReadText,"title-text":o.markReadText,"confirm-text":o.confirmText,"object-name":r.item.name,onConfirm:o.toggleRead,onCancel:t[1]||(t[1]=c=>i.showMenu=!1)},null,8,["button-text","title-text","confirm-text","object-name","onConfirm"]))])]),_:1},8,["modelValue"])}const we=y(hs,[["render",gs]]);const bs={name:"BrowserCardControls",components:{BrowserCardMenu:we,MetadataButton:vt},props:{item:{type:Object,required:!0},eyeOpen:{type:Boolean,required:!0}},data(){return{mdiEye:K,mdiEyeOff:X}},computed:{eyeIcon:function(){return this.eyeOpen?K:X}}},ys={class:"cardControls"};function vs(e,t,r,f,i,o){const u=B("MetadataButton"),c=we;return a(),g("div",ys,[r.item.group==="c"?(a(),_(S,{key:0,class:"eye"},{default:d(()=>[n(h(o.eyeIcon),1)]),_:1})):v("",!0),l(u,{group:r.item.group,pk:r.item.pk,children:r.item.childCount},null,8,["group","pk","children"]),l(c,{item:r.item},null,8,["item"])])}const ws=y(bs,[["render",vs],["__scopeId","data-v-dc469596"]]);const Ss={name:"BrowserCardSubtitle",props:{item:{type:Object,required:!0}},computed:{...w(p,{orderByName:e=>e.settings.orderBy=="sort_name",topGroup:e=>e.settings.topGroup,showSeries:e=>e.settings.show.s,showVolume:e=>e.settings.show.v,zeroPad:e=>e.page.zeroPad}),seriesName(){return(this.topGroup==="a"||this.orderByName&&!this.showSeries)&&["c","v"].includes(this.item.group)&&this.item.seriesName?this.item.seriesName:!1},volumeName(){return(this.topGroup==="a"||this.orderByname&&!this.showVolume)&&this.item.group==="c"&&this.item.volumeName?U(this.item.volumeName):!1},headerName:function(){let e;switch(this.item.group){case"i":e=this.item.publisherName;break;case"v":e=this.item.seriesName;break;case"c":e=this.$route.params.group==="f"?tt(this.item,this.zeroPad):ot(this.item,this.zeroPad);break;default:e=""}return e},displayName:function(){return this.item.group==="v"?U(this.item.name):this.item.name},linkLabel:function(){let e="";return e+=this.item.group==="c"?"Read":"Browse to",e+=" "+this.headerName,e}}},Bs={class:"browserLink cardSubtitle text-caption"},Cs={key:0,class:"seriesCaption"},ks={key:1,class:"volumeCaption"},Ts={key:2,class:"headerName"},Vs={class:"displayName"};function Ms(e,t,r,f,i,o){return a(),g("div",Bs,[o.seriesName?(a(),g("div",Cs,h(o.seriesName),1)):v("",!0),o.volumeName?(a(),g("div",ks,h(o.volumeName),1)):v("",!0),o.headerName?(a(),g("div",Ts,h(o.headerName),1)):v("",!0),s("div",Vs,h(o.displayName),1)])}const $s=y(Ss,[["render",Ms],["__scopeId","data-v-a52279ab"]]),xs=new Set(["iPad","iPad Simulator","iPhone","iPhone Simulator","iPod","iPod Simulator"]),Is=xs.has(navigator.platform),Fs="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0||window.matchMedia("(any-hover: none)").matches;const Ns=st({modelValue:Boolean,options:{type:Object,default:()=>({root:void 0,rootMargin:void 0,threshold:void 0})},...rt(),...nt(),...at(),...it({transition:"fade-transition"})},"VLazy"),Ps=lt()({name:"VLazy",directives:{intersect:ut},props:Ns(),emits:{"update:modelValue":e=>!0},setup(e,t){let{slots:r}=t;const{dimensionStyles:f}=dt(e),i=ct(e,"modelValue");function o(u){i.value||(i.value=u)}return mt(()=>ae(l(e.tag,{class:["v-lazy",e.class],style:[f.value,e.style]},{default:()=>[i.value&&l(pt,{transition:e.transition,appear:!0},{default:()=>{var u;return[(u=r.default)==null?void 0:u.call(r)]}})]}),[[_t("intersect"),{handler:o,options:e.options},null]])),{}}}),Z=100,Rs=-170,Os={name:"BrowserCard",components:{BookCover:me,BrowserCardControls:ws,BrowserCardSubtitle:$s,OrderByCaption:ve},props:{item:{type:Object,required:!0}},data(){return{doubleTapHovered:!Fs||Is}},computed:{linkLabel:function(){let e="";return e+=this.item.group==="c"?"Read":"Browse to",e+=" "+this.item.headerName,e},toRoute:function(){return this.doubleTapHovered?this.item.group==="c"?wt(this.item):{name:"browser",params:{group:this.item.group,pk:this.item.pk,page:1}}:{}},progressBackgroundColor:function(){return this.item.progress?this.$vuetify.theme.current.colors.row:"inherit"}},mounted(){this.scrollToMe()},methods:{scrollToMe:function(){if(!this.$route.hash||this.$route.hash.split("-")[1]!==String(this.item.pk))return;const e=this.$el;if(!e){console.warn("No element found to scroll to!");return}setTimeout(function(){e.scrollIntoView(),setTimeout(function(){window.scrollBy(0,Rs)},Z)},Z)}}},Ds={class:"browserCardTop"},Ls={key:1,class:"cardCoverOverlay"};function Hs(e,t,r,f,i,o){const u=me,c=B("BrowserCardControls"),b=B("router-link"),M=B("BrowserCardSubtitle"),N=ve;return a(),_(Ps,{id:`card-${r.item.pk}`,transition:"scale-transition"},{default:d(()=>[s("div",{class:"browserCardCoverWrapper",onClick:t[0]||(t[0]=z=>i.doubleTapHovered=!0)},[s("div",Ds,[l(u,{"cover-pk":r.item.coverPk,group:r.item.group,"child-count":r.item.childCount,finished:r.item.finished},null,8,["cover-pk","group","child-count","finished"]),o.toRoute?(a(),_(b,{key:0,class:"cardCoverOverlay",to:o.toRoute,"aria-label":o.linkLabel},{default:d(()=>[l(c,{item:r.item,"eye-open":!0},null,8,["item"])]),_:1},8,["to","aria-label"])):(a(),g("div",Ls,[l(c,{item:r.item,"eye-open":!1},null,8,["item"])])),ae(l(E,{class:"bookCoverProgress","background-color":o.progressBackgroundColor,"model-value":r.item.progress,"aria-label":`${r.item.progress}% read`,rounded:"",height:"2"},null,8,["background-color","model-value","aria-label"]),[[ht,r.item.progress]]),l(M,{item:r.item},null,8,["item"])]),l(N,{item:r.item},null,8,["item"])])]),_:1},8,["id"])}const Us=y(Os,[["render",Hs],["__scopeId","data-v-d9290e78"]]);const Gs={name:"BrowserMain",components:{BrowserCard:Us,PlaceholderLoading:_e},data(){return{mdiMenu:ft,mdiOpenInNew:se}},computed:{...w($,{adminFlags:e=>e.adminFlags}),...T($,["isUserAdmin","isCodexViewable"]),...w(p,{librariesExist:e=>e.page.librariesExist,showPlaceHolder:function(e){return this.adminFlags.nonUsers===void 0||this.isCodexViewable&&(this.librariesExist==null||!e.browserPageLoaded)},cards:e=>[...e.page.groups??[],...e.page.books??[]],padFooter:e=>e.page.numPages>1}),showBrowseItems(){return this.cards&&this.cards.length>0&&this.isCodexViewable&&!this.showPlaceHolder}}},j=e=>(D("data-v-b023c894"),e=e(),L(),e),As={key:0,id:"browsePaneContainer"},Es={key:1,id:"announce"},qs={key:2,id:"announce"},js={key:0},zs={key:0},Ys={key:3,id:"announce"},Ws=j(()=>s("div",{id:"noComicsFound"},"No comics found for these filters",-1)),Qs=[Ws],Ks={key:4,id:"announce"},Xs=j(()=>s("h1",null,"No libraries have been added to Codex yet",-1)),Js={key:0},Zs={key:1},er=j(()=>s("h2",null," An administrator must login to add some libraries that contain comics ",-1)),tr={href:"https://github.com/ajslater/codex#-administration",target:"_blank"};function or(e,t,r,f,i,o){const u=B("BrowserCard"),c=_e;return a(),_(ie,{id:"browsePane",class:O({padFooter:e.padFooter})},{default:d(()=>[o.showBrowseItems?(a(),g("div",As,[(a(!0),g(x,null,F(e.cards,b=>(a(),_(u,{key:`${b.group}${b.pk}`,item:b},null,8,["item"]))),128))])):e.showPlaceHolder?(a(),g("div",Es,[l(c,{class:"placeholder"})])):e.isCodexViewable?e.librariesExist?(a(),g("div",Ys,Qs)):(a(),g("div",Ks,[Xs,e.isUserAdmin?(a(),g("h2",Js,[n(" Use the top right "),l(S,null,{default:d(()=>[n(h(i.mdiMenu),1)]),_:1}),n(" menu to navigate to the admin panel and add a comic library. ")])):(a(),g("div",Zs,[er,s("h3",null,[n(" You may log in or register with the top right "),l(S,null,{default:d(()=>[n(h(i.mdiMenu),1)]),_:1}),n("menu ")])])),s("a",tr,[n("See the README "),l(S,null,{default:d(()=>[n(h(i.mdiOpenInNew),1)]),_:1})]),n(" for detailed instructions. ")])):(a(),g("div",qs,[s("h1",null,[n(" You may log in "),e.adminFlags.register?(a(),g("span",js,"or register")):v("",!0),n(" with the top right "),l(S,null,{default:d(()=>[n(h(i.mdiMenu),1)]),_:1}),n(" menu ")]),e.adminFlags.register?v("",!0):(a(),g("h1",zs,"Registration is disabled"))]))]),_:1},8,["class"])}const sr=y(Gs,[["render",or],["__scopeId","data-v-b023c894"]]);const rr={name:"MainBrowser",components:{BrowserFilterToolbar:ls,BrowserMain:sr,BrowserNavToolbar:he,BrowserTitleToolbar:be,SettingsDrawer:le},data(){return{BrowserSettingsPanel:gt(No)}},computed:{...w($,{user:e=>e.user}),...T($,["isCodexViewable"])},watch:{$route:function(){window.scrollTo(0,0),this.loadBrowserPage()},user:function(){this.loadSettings()},isCodexViewable:function(){this.loadSettings()}},created(){q().isSettingsDrawerOpen=!1,this.loadSettings()},methods:{...C(p,["loadBrowserPage","loadSettings","getVersions"])}},nr={class:"codexToolbar"};function ar(e,t,r,f,i,o){const u=B("BrowserFilterToolbar"),c=be,b=B("BrowserMain"),M=he,N=le;return a(),g(x,null,[l(ie,{id:"browser"},{default:d(()=>[s("header",nr,[l(u),l(c)]),l(b),l(M)]),_:1}),l(N,{title:"Browser Settings",panel:i.BrowserSettingsPanel,temporary:""},null,8,["panel"])],64)}const dr=y(rr,[["render",ar],["__scopeId","data-v-2b4da8f0"]]);export{dr as default};
@@ -1 +1 @@
1
- import{c as s,C as d,o as _,e as i,w as r,bl as p,i as t,t as a,g as u,p as l,q as h}from"./admin-12749881.js";const n={400:"Bad Request",403:"Forbidden",404:"Page Not Found",500:"Server Error"};Object.freeze(n);const f={name:"HttpError",data(){return{}},computed:{code:function(){return+this.$route.params.code},title:function(){let e=n[this.code];return e||(e="Unknown Error"),e}}},m=e=>(l("data-v-e215aa2c"),e=e(),h(),e),k={id:"httpCode"},v={id:"title"},x=m(()=>t("h2",null,"Codex Home",-1));function E(e,S,C,I,g,o){const c=d("router-link");return _(),i(p,{id:"main"},{default:r(()=>[t("h1",k,a(o.code),1),t("h1",v,a(o.title),1),u(c,{id:"link",to:{name:"home"}},{default:r(()=>[x]),_:1})]),_:1})}const B=s(f,[["render",E],["__scopeId","data-v-e215aa2c"]]);export{B as default};
1
+ import{c as s,C as d,o as _,e as i,w as r,bm as p,i as t,t as a,g as u,p as l,q as h}from"./admin-b2b56cd6.js";const n={400:"Bad Request",403:"Forbidden",404:"Page Not Found",500:"Server Error"};Object.freeze(n);const m={name:"HttpError",data(){return{}},computed:{code:function(){return+this.$route.params.code},title:function(){let e=n[this.code];return e||(e="Unknown Error"),e}}},f=e=>(l("data-v-e215aa2c"),e=e(),h(),e),k={id:"httpCode"},v={id:"title"},x=f(()=>t("h2",null,"Codex Home",-1));function E(e,S,C,I,g,o){const c=d("router-link");return _(),i(p,{id:"main"},{default:r(()=>[t("h1",k,a(o.code),1),t("h1",v,a(o.title),1),u(c,{id:"link",to:{name:"home"}},{default:r(()=>[x]),_:1})]),_:1})}const B=s(m,[["render",E],["__scopeId","data-v-e215aa2c"]]);export{B as default};
@@ -1 +1 @@
1
- import{c as s,C as d,o as _,e as i,w as r,bl as p,i as t,t as a,g as u,p as l,q as h}from"./admin-12749881.js";const n={400:"Bad Request",403:"Forbidden",404:"Page Not Found",500:"Server Error"};Object.freeze(n);const f={name:"HttpError",data(){return{}},computed:{code:function(){return+this.$route.params.code},title:function(){let e=n[this.code];return e||(e="Unknown Error"),e}}},m=e=>(l("data-v-e215aa2c"),e=e(),h(),e),k={id:"httpCode"},v={id:"title"},x=m(()=>t("h2",null,"Codex Home",-1));function E(e,S,C,I,g,o){const c=d("router-link");return _(),i(p,{id:"main"},{default:r(()=>[t("h1",k,a(o.code),1),t("h1",v,a(o.title),1),u(c,{id:"link",to:{name:"home"}},{default:r(()=>[x]),_:1})]),_:1})}const B=s(f,[["render",E],["__scopeId","data-v-e215aa2c"]]);export{B as default};
1
+ import{c as s,C as d,o as _,e as i,w as r,bm as p,i as t,t as a,g as u,p as l,q as h}from"./admin-b2b56cd6.js";const n={400:"Bad Request",403:"Forbidden",404:"Page Not Found",500:"Server Error"};Object.freeze(n);const m={name:"HttpError",data(){return{}},computed:{code:function(){return+this.$route.params.code},title:function(){let e=n[this.code];return e||(e="Unknown Error"),e}}},f=e=>(l("data-v-e215aa2c"),e=e(),h(),e),k={id:"httpCode"},v={id:"title"},x=f(()=>t("h2",null,"Codex Home",-1));function E(e,S,C,I,g,o){const c=d("router-link");return _(),i(p,{id:"main"},{default:r(()=>[t("h1",k,a(o.code),1),t("h1",v,a(o.title),1),u(c,{id:"link",to:{name:"home"}},{default:r(()=>[x]),_:1})]),_:1})}const B=s(m,[["render",E],["__scopeId","data-v-e215aa2c"]]);export{B as default};