codex 1.6.9__py3-none-any.whl → 1.6.9a0__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.
- codex/librarian/covers/create.py +1 -1
- codex/librarian/cron/crond.py +13 -10
- codex/librarian/importer/importerd.py +24 -19
- codex/librarian/importer/moved.py +176 -73
- codex/librarian/importer/query_fks.py +18 -12
- codex/librarian/janitor/janitor.py +12 -4
- codex/librarian/janitor/latest_version.py +54 -0
- codex/librarian/janitor/status.py +1 -0
- codex/librarian/janitor/tasks.py +14 -7
- codex/librarian/janitor/update.py +21 -2
- codex/librarian/janitor/vacuum.py +1 -2
- codex/librarian/telemeter/stats.py +20 -16
- codex/librarian/telemeter/telemeter.py +10 -7
- codex/librarian/telemeter/time.py +24 -11
- codex/librarian/watchdog/db_snapshot.py +1 -1
- codex/librarian/watchdog/dir_snapshot_diff.py +19 -17
- codex/librarian/watchdog/emitter.py +12 -14
- codex/librarian/watchdog/events.py +1 -1
- codex/librarian/watchdog/observers.py +4 -4
- codex/models/comic.py +1 -1
- codex/search/backend.py +10 -3
- codex/serializers/browser/mixins.py +1 -2
- codex/settings/settings.py +5 -1
- codex/signals/django_signals.py +0 -9
- codex/startup.py +1 -3
- codex/static_root/assets/VCheckbox-BkQ2enlR.c750c7d8cecc.js +1 -0
- codex/static_root/assets/VCheckbox-BkQ2enlR.c750c7d8cecc.js.br +0 -0
- codex/static_root/assets/VCheckbox-BkQ2enlR.c750c7d8cecc.js.gz +0 -0
- codex/static_root/assets/VCheckbox-BkQ2enlR.js +1 -0
- codex/static_root/assets/VCheckbox-BkQ2enlR.js.br +0 -0
- codex/static_root/assets/VCheckbox-BkQ2enlR.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-C4qxJC_o.ff4628662392.js +1 -0
- codex/static_root/assets/VCheckboxBtn-C4qxJC_o.ff4628662392.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-C4qxJC_o.ff4628662392.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-C4qxJC_o.js +1 -0
- codex/static_root/assets/VCheckboxBtn-C4qxJC_o.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-C4qxJC_o.js.gz +0 -0
- codex/static_root/assets/VCombobox-CJYErhVj.5ae39362d05a.js +1 -0
- codex/static_root/assets/VCombobox-CJYErhVj.5ae39362d05a.js.br +0 -0
- codex/static_root/assets/VCombobox-CJYErhVj.5ae39362d05a.js.gz +0 -0
- codex/static_root/assets/VCombobox-CJYErhVj.js +1 -0
- codex/static_root/assets/VCombobox-CJYErhVj.js.br +0 -0
- codex/static_root/assets/VCombobox-CJYErhVj.js.gz +0 -0
- codex/static_root/assets/VCombobox-bwEYrXCg.9f25a34994e2.css +1 -0
- codex/static_root/assets/VCombobox-bwEYrXCg.9f25a34994e2.css.br +0 -0
- codex/static_root/assets/VCombobox-bwEYrXCg.9f25a34994e2.css.gz +0 -0
- codex/static_root/assets/VCombobox-bwEYrXCg.css +1 -0
- codex/static_root/assets/VCombobox-bwEYrXCg.css.br +0 -0
- codex/static_root/assets/VCombobox-bwEYrXCg.css.gz +0 -0
- codex/static_root/assets/VDialog-38np3TSA.5a0cb7a9e56d.css +1 -0
- codex/static_root/assets/VDialog-38np3TSA.5a0cb7a9e56d.css.br +0 -0
- codex/static_root/assets/VDialog-38np3TSA.5a0cb7a9e56d.css.gz +0 -0
- codex/static_root/assets/VDialog-38np3TSA.css +1 -0
- codex/static_root/assets/VDialog-38np3TSA.css.br +0 -0
- codex/static_root/assets/VDialog-38np3TSA.css.gz +0 -0
- codex/static_root/assets/VDialog-U73OI2x0.a74b15bb2eb4.js +1 -0
- codex/static_root/assets/VDialog-U73OI2x0.a74b15bb2eb4.js.br +0 -0
- codex/static_root/assets/VDialog-U73OI2x0.a74b15bb2eb4.js.gz +0 -0
- codex/static_root/assets/VDialog-U73OI2x0.js +1 -0
- codex/static_root/assets/VDialog-U73OI2x0.js.br +0 -0
- codex/static_root/assets/VDialog-U73OI2x0.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-6G1AUajL.5b17872981df.css +1 -0
- codex/static_root/assets/VExpansionPanels-6G1AUajL.5b17872981df.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-6G1AUajL.5b17872981df.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-6G1AUajL.css +1 -0
- codex/static_root/assets/VExpansionPanels-6G1AUajL.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-6G1AUajL.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-CfbnFRnp.11d5ca74c514.js +1 -0
- codex/static_root/assets/VExpansionPanels-CfbnFRnp.11d5ca74c514.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-CfbnFRnp.11d5ca74c514.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-CfbnFRnp.js +1 -0
- codex/static_root/assets/VExpansionPanels-CfbnFRnp.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-CfbnFRnp.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-Dk6ucuGh.b364223f1e2b.js +1 -0
- codex/static_root/assets/VRadioGroup-Dk6ucuGh.b364223f1e2b.js.br +3 -0
- codex/static_root/assets/VRadioGroup-Dk6ucuGh.b364223f1e2b.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-Dk6ucuGh.js +1 -0
- codex/static_root/assets/VRadioGroup-Dk6ucuGh.js.br +3 -0
- codex/static_root/assets/VRadioGroup-Dk6ucuGh.js.gz +0 -0
- codex/static_root/assets/VSelect-Ca2bIOso.6613989e4c45.css +1 -0
- codex/static_root/assets/VSelect-Ca2bIOso.6613989e4c45.css.br +0 -0
- codex/static_root/assets/VSelect-Ca2bIOso.6613989e4c45.css.gz +0 -0
- codex/static_root/assets/VSelect-Ca2bIOso.css +1 -0
- codex/static_root/assets/VSelect-Ca2bIOso.css.br +0 -0
- codex/static_root/assets/VSelect-Ca2bIOso.css.gz +0 -0
- codex/static_root/assets/VSelect-gqsRzrIv.f022ea270144.js +1 -0
- codex/static_root/assets/VSelect-gqsRzrIv.f022ea270144.js.br +0 -0
- codex/static_root/assets/VSelect-gqsRzrIv.f022ea270144.js.gz +0 -0
- codex/static_root/assets/VSelect-gqsRzrIv.js +1 -0
- codex/static_root/assets/VSelect-gqsRzrIv.js.br +0 -0
- codex/static_root/assets/VSelect-gqsRzrIv.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BVJLEOcO.5d398b4b3b1c.js +1 -0
- codex/static_root/assets/VSelectionControl-BVJLEOcO.5d398b4b3b1c.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BVJLEOcO.5d398b4b3b1c.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BVJLEOcO.js +1 -0
- codex/static_root/assets/VSelectionControl-BVJLEOcO.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BVJLEOcO.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-BFq--28I.9687c77461fc.css → VSelectionControl-CiViEYoC.c77bb19a4a06.css} +1 -1
- codex/static_root/assets/VSelectionControl-CiViEYoC.c77bb19a4a06.css.br +0 -0
- codex/static_root/assets/VSelectionControl-CiViEYoC.c77bb19a4a06.css.gz +0 -0
- codex/static_root/assets/{VSelectionControl-BFq--28I.css → VSelectionControl-CiViEYoC.css} +1 -1
- codex/static_root/assets/VSelectionControl-CiViEYoC.css.br +0 -0
- codex/static_root/assets/VSelectionControl-CiViEYoC.css.gz +0 -0
- codex/static_root/assets/{VSlideGroup-D4BlVRr8.10a79fd58813.js → VSlideGroup-P_U-rmf2.ca3efe698702.js} +1 -1
- codex/static_root/assets/VSlideGroup-P_U-rmf2.ca3efe698702.js.br +0 -0
- codex/static_root/assets/VSlideGroup-P_U-rmf2.ca3efe698702.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-D4BlVRr8.js → VSlideGroup-P_U-rmf2.js} +1 -1
- codex/static_root/assets/VSlideGroup-P_U-rmf2.js.br +0 -0
- codex/static_root/assets/VSlideGroup-P_U-rmf2.js.gz +0 -0
- codex/static_root/assets/{VTable-IQf8Xj4J.2e69b517b235.js → VTable-Coq-QwtQ.2b04104cbf05.js} +1 -1
- codex/static_root/assets/VTable-Coq-QwtQ.2b04104cbf05.js.br +0 -0
- codex/static_root/assets/VTable-Coq-QwtQ.2b04104cbf05.js.gz +0 -0
- codex/static_root/assets/{VTable-IQf8Xj4J.js → VTable-Coq-QwtQ.js} +1 -1
- codex/static_root/assets/VTable-Coq-QwtQ.js.br +0 -0
- codex/static_root/assets/VTable-Coq-QwtQ.js.gz +0 -0
- codex/static_root/assets/VTable-Y5Sc3hJd.c36f0a6a30cf.css +1 -0
- codex/static_root/assets/VTable-Y5Sc3hJd.c36f0a6a30cf.css.br +0 -0
- codex/static_root/assets/VTable-Y5Sc3hJd.c36f0a6a30cf.css.gz +0 -0
- codex/static_root/assets/VTable-Y5Sc3hJd.css +1 -0
- codex/static_root/assets/VTable-Y5Sc3hJd.css.br +0 -0
- codex/static_root/assets/VTable-Y5Sc3hJd.css.gz +0 -0
- codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css +1 -0
- codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css.br +0 -0
- codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css.gz +0 -0
- codex/static_root/assets/VTextField-Crc3gdNh.css +1 -0
- codex/static_root/assets/VTextField-Crc3gdNh.css.br +0 -0
- codex/static_root/assets/VTextField-Crc3gdNh.css.gz +0 -0
- codex/static_root/assets/VTextField-D8612eNs.bff65c141149.js +1 -0
- codex/static_root/assets/VTextField-D8612eNs.bff65c141149.js.br +0 -0
- codex/static_root/assets/VTextField-D8612eNs.bff65c141149.js.gz +0 -0
- codex/static_root/assets/VTextField-D8612eNs.js +1 -0
- codex/static_root/assets/VTextField-D8612eNs.js.br +0 -0
- codex/static_root/assets/VTextField-D8612eNs.js.gz +0 -0
- codex/static_root/assets/VWindowItem-BViiLFXH.70619152a4a5.js +1 -0
- codex/static_root/assets/VWindowItem-BViiLFXH.70619152a4a5.js.br +0 -0
- codex/static_root/assets/VWindowItem-BViiLFXH.70619152a4a5.js.gz +0 -0
- codex/static_root/assets/VWindowItem-BViiLFXH.js +1 -0
- codex/static_root/assets/VWindowItem-BViiLFXH.js.br +0 -0
- codex/static_root/assets/VWindowItem-BViiLFXH.js.gz +0 -0
- codex/static_root/assets/{admin-D4sw3N4T.b590f88a62cf.css → admin-CWEjaFr5.7d4523387384.css} +1 -1
- codex/static_root/assets/admin-CWEjaFr5.7d4523387384.css.br +0 -0
- codex/static_root/assets/admin-CWEjaFr5.7d4523387384.css.gz +0 -0
- codex/static_root/assets/{admin-D4sw3N4T.css → admin-CWEjaFr5.css} +1 -1
- codex/static_root/assets/admin-CWEjaFr5.css.br +0 -0
- codex/static_root/assets/admin-CWEjaFr5.css.gz +0 -0
- codex/static_root/assets/admin-RVemMSzT.fcbdca9f6b46.js +1 -0
- codex/static_root/assets/admin-RVemMSzT.fcbdca9f6b46.js.br +0 -0
- codex/static_root/assets/admin-RVemMSzT.fcbdca9f6b46.js.gz +0 -0
- codex/static_root/assets/admin-RVemMSzT.js +1 -0
- codex/static_root/assets/admin-RVemMSzT.js.br +0 -0
- codex/static_root/assets/admin-RVemMSzT.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.3cb33056e994.css +1 -0
- codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.3cb33056e994.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.3cb33056e994.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.css +1 -0
- codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Ul8BRcOp.0acaf708f24a.js +30 -0
- codex/static_root/assets/admin-drawer-panel-Ul8BRcOp.0acaf708f24a.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Ul8BRcOp.0acaf708f24a.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Ul8BRcOp.js +30 -0
- codex/static_root/assets/admin-drawer-panel-Ul8BRcOp.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Ul8BRcOp.js.gz +0 -0
- codex/static_root/assets/{browser-Cy0OgQJC.css → browser-Binc3n9H.313722d27ca3.css} +1 -1
- codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css.br +0 -0
- codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css.gz +0 -0
- codex/static_root/assets/{browser-Cy0OgQJC.fabbd1aaffcf.css → browser-Binc3n9H.css} +1 -1
- codex/static_root/assets/browser-Binc3n9H.css.br +0 -0
- codex/static_root/assets/browser-Binc3n9H.css.gz +0 -0
- codex/static_root/assets/browser-C9pnPT8U.bc239343d007.js +1 -0
- codex/static_root/assets/browser-C9pnPT8U.bc239343d007.js.br +0 -0
- codex/static_root/assets/browser-C9pnPT8U.bc239343d007.js.gz +0 -0
- codex/static_root/assets/browser-C9pnPT8U.js +1 -0
- codex/static_root/assets/browser-C9pnPT8U.js.br +0 -0
- codex/static_root/assets/browser-C9pnPT8U.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css +1 -0
- codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css.br +0 -0
- codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css.gz +0 -0
- codex/static_root/assets/change-password-dialog-Cebek1-c.css +1 -0
- codex/static_root/assets/change-password-dialog-Cebek1-c.css.br +0 -0
- codex/static_root/assets/change-password-dialog-Cebek1-c.css.gz +0 -0
- codex/static_root/assets/change-password-dialog-DjxFqIRX.1a5ac7100192.js +1 -0
- codex/static_root/assets/change-password-dialog-DjxFqIRX.1a5ac7100192.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DjxFqIRX.1a5ac7100192.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-DjxFqIRX.js +1 -0
- codex/static_root/assets/change-password-dialog-DjxFqIRX.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DjxFqIRX.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-B-dLb_50.62d3ea64b93a.js +1 -0
- codex/static_root/assets/confirm-dialog-B-dLb_50.62d3ea64b93a.js.br +0 -0
- codex/static_root/assets/confirm-dialog-B-dLb_50.62d3ea64b93a.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-B-dLb_50.js +1 -0
- codex/static_root/assets/confirm-dialog-B-dLb_50.js.br +0 -0
- codex/static_root/assets/confirm-dialog-B-dLb_50.js.gz +0 -0
- codex/static_root/assets/{datetime-column-D93BsvcX.5caf2255bdc3.js → datetime-column-BRZDPl2k.f6ae3ce94da7.js} +1 -1
- codex/static_root/assets/datetime-column-BRZDPl2k.f6ae3ce94da7.js.br +0 -0
- codex/static_root/assets/datetime-column-BRZDPl2k.f6ae3ce94da7.js.gz +0 -0
- codex/static_root/assets/{datetime-column-D93BsvcX.js → datetime-column-BRZDPl2k.js} +1 -1
- codex/static_root/assets/datetime-column-BRZDPl2k.js.br +0 -0
- codex/static_root/assets/datetime-column-BRZDPl2k.js.gz +0 -0
- codex/static_root/assets/{filter-ji46VTOR.f7b9ed6fec13.js → filter-Tk2N9xgO.02f23827434b.js} +1 -1
- codex/static_root/assets/filter-Tk2N9xgO.02f23827434b.js.br +0 -0
- codex/static_root/assets/filter-Tk2N9xgO.02f23827434b.js.gz +0 -0
- codex/static_root/assets/{filter-ji46VTOR.js → filter-Tk2N9xgO.js} +1 -1
- codex/static_root/assets/filter-Tk2N9xgO.js.br +0 -0
- codex/static_root/assets/filter-Tk2N9xgO.js.gz +0 -0
- codex/static_root/assets/flag-tab-C_v4CugS.928c1035d6ce.js +1 -0
- codex/static_root/assets/flag-tab-C_v4CugS.928c1035d6ce.js.br +0 -0
- codex/static_root/assets/flag-tab-C_v4CugS.928c1035d6ce.js.gz +0 -0
- codex/static_root/assets/flag-tab-C_v4CugS.js +1 -0
- codex/static_root/assets/flag-tab-C_v4CugS.js.br +0 -0
- codex/static_root/assets/flag-tab-C_v4CugS.js.gz +0 -0
- codex/static_root/assets/group-tab-Dn5N4Ebx.d2cf9c300427.js +1 -0
- codex/static_root/assets/group-tab-Dn5N4Ebx.d2cf9c300427.js.br +0 -0
- codex/static_root/assets/group-tab-Dn5N4Ebx.d2cf9c300427.js.gz +0 -0
- codex/static_root/assets/group-tab-Dn5N4Ebx.js +1 -0
- codex/static_root/assets/group-tab-Dn5N4Ebx.js.br +0 -0
- codex/static_root/assets/group-tab-Dn5N4Ebx.js.gz +0 -0
- codex/static_root/assets/http-error-DbRCRWKA.c31ec2f67f3b.js +1 -0
- codex/static_root/assets/http-error-DbRCRWKA.c31ec2f67f3b.js.br +0 -0
- codex/static_root/assets/http-error-DbRCRWKA.c31ec2f67f3b.js.gz +0 -0
- codex/static_root/assets/http-error-DbRCRWKA.js +1 -0
- codex/static_root/assets/http-error-DbRCRWKA.js.br +0 -0
- codex/static_root/assets/http-error-DbRCRWKA.js.gz +0 -0
- codex/static_root/assets/library-tab-Bh7ErAk7.7c44200ee727.css +1 -0
- codex/static_root/assets/library-tab-Bh7ErAk7.7c44200ee727.css.br +2 -0
- codex/static_root/assets/library-tab-Bh7ErAk7.7c44200ee727.css.gz +0 -0
- codex/static_root/assets/library-tab-Bh7ErAk7.css +1 -0
- codex/static_root/assets/library-tab-Bh7ErAk7.css.br +2 -0
- codex/static_root/assets/library-tab-Bh7ErAk7.css.gz +0 -0
- codex/static_root/assets/library-tab-CnvofvVA.419ab4e21896.js +1 -0
- codex/static_root/assets/library-tab-CnvofvVA.419ab4e21896.js.br +0 -0
- codex/static_root/assets/library-tab-CnvofvVA.419ab4e21896.js.gz +0 -0
- codex/static_root/assets/library-tab-CnvofvVA.js +1 -0
- codex/static_root/assets/library-tab-CnvofvVA.js.br +0 -0
- codex/static_root/assets/library-tab-CnvofvVA.js.gz +0 -0
- codex/static_root/assets/main-BHIo0ep5.6ec78d1380f0.js +6 -0
- codex/static_root/assets/main-BHIo0ep5.6ec78d1380f0.js.br +0 -0
- codex/static_root/assets/main-BHIo0ep5.6ec78d1380f0.js.gz +0 -0
- codex/static_root/assets/main-BHIo0ep5.js +6 -0
- codex/static_root/assets/main-BHIo0ep5.js.br +0 -0
- codex/static_root/assets/main-BHIo0ep5.js.gz +0 -0
- codex/static_root/assets/{main-Ztp855PW.css → main-BZ73p_WW.css} +1 -1
- codex/static_root/assets/main-BZ73p_WW.css.br +0 -0
- codex/static_root/assets/{main-Ztp855PW.css.gz → main-BZ73p_WW.css.gz} +0 -0
- codex/static_root/assets/{main-Ztp855PW.d46d718fac45.css → main-BZ73p_WW.d529e8b3f52a.css} +1 -1
- codex/static_root/assets/main-BZ73p_WW.d529e8b3f52a.css.br +0 -0
- codex/static_root/assets/{main-Ztp855PW.d46d718fac45.css.gz → main-BZ73p_WW.d529e8b3f52a.css.gz} +0 -0
- codex/static_root/assets/pager-full-pdf-DuOmJXkZ.5eaa11c55b1d.js +1 -0
- codex/static_root/assets/pager-full-pdf-DuOmJXkZ.5eaa11c55b1d.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-DuOmJXkZ.5eaa11c55b1d.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-DuOmJXkZ.js +1 -0
- codex/static_root/assets/pager-full-pdf-DuOmJXkZ.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-DuOmJXkZ.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-C45-onwe.4722195bb60b.css +1 -0
- codex/static_root/assets/pagination-toolbar-C45-onwe.4722195bb60b.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-C45-onwe.4722195bb60b.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-C45-onwe.css +1 -0
- codex/static_root/assets/pagination-toolbar-C45-onwe.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-C45-onwe.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-CzvikaTz.a025f20590fa.js +1 -0
- codex/static_root/assets/pagination-toolbar-CzvikaTz.a025f20590fa.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-CzvikaTz.a025f20590fa.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-CzvikaTz.js +1 -0
- codex/static_root/assets/pagination-toolbar-CzvikaTz.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-CzvikaTz.js.gz +0 -0
- codex/static_root/assets/pdf-doc-B5yncCrs.97ba5cf21b63.js +305 -0
- codex/static_root/assets/pdf-doc-B5yncCrs.97ba5cf21b63.js.br +0 -0
- codex/static_root/assets/pdf-doc-B5yncCrs.97ba5cf21b63.js.gz +0 -0
- codex/static_root/assets/pdf-doc-B5yncCrs.js +305 -0
- codex/static_root/assets/pdf-doc-B5yncCrs.js.br +0 -0
- codex/static_root/assets/pdf-doc-B5yncCrs.js.gz +0 -0
- codex/static_root/assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css +1 -0
- codex/static_root/assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css.br +1 -0
- codex/static_root/assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css.gz +0 -0
- codex/static_root/assets/pdf-doc-CG5-AZ2M.css +1 -0
- codex/static_root/assets/pdf-doc-CG5-AZ2M.css.br +1 -0
- codex/static_root/assets/pdf-doc-CG5-AZ2M.css.gz +0 -0
- codex/static_root/assets/reader-BR3TSv3h.b00087748514.js +2 -0
- codex/static_root/assets/reader-BR3TSv3h.b00087748514.js.br +0 -0
- codex/static_root/assets/reader-BR3TSv3h.b00087748514.js.gz +0 -0
- codex/static_root/assets/reader-BR3TSv3h.js +2 -0
- codex/static_root/assets/reader-BR3TSv3h.js.br +0 -0
- codex/static_root/assets/reader-BR3TSv3h.js.gz +0 -0
- codex/static_root/assets/reader-_stAWL-4.5089e9144795.css +1 -0
- codex/static_root/assets/reader-_stAWL-4.5089e9144795.css.br +0 -0
- codex/static_root/assets/reader-_stAWL-4.5089e9144795.css.gz +0 -0
- codex/static_root/assets/reader-_stAWL-4.css +1 -0
- codex/static_root/assets/reader-_stAWL-4.css.br +0 -0
- codex/static_root/assets/reader-_stAWL-4.css.gz +0 -0
- codex/static_root/assets/{relation-chips-BGitp3yx.b3e7d178a615.css → relation-chips-ByfWwuQc.01269a188e01.css} +1 -1
- codex/static_root/assets/relation-chips-ByfWwuQc.01269a188e01.css.br +0 -0
- codex/static_root/assets/relation-chips-ByfWwuQc.01269a188e01.css.gz +0 -0
- codex/static_root/assets/{relation-chips-BGitp3yx.css → relation-chips-ByfWwuQc.css} +1 -1
- codex/static_root/assets/relation-chips-ByfWwuQc.css.br +0 -0
- codex/static_root/assets/relation-chips-ByfWwuQc.css.gz +0 -0
- codex/static_root/assets/relation-chips-C-62eg7F.d234f5d05881.js +1 -0
- codex/static_root/assets/relation-chips-C-62eg7F.d234f5d05881.js.br +0 -0
- codex/static_root/assets/relation-chips-C-62eg7F.d234f5d05881.js.gz +0 -0
- codex/static_root/assets/relation-chips-C-62eg7F.js +1 -0
- codex/static_root/assets/relation-chips-C-62eg7F.js.br +0 -0
- codex/static_root/assets/relation-chips-C-62eg7F.js.gz +0 -0
- codex/static_root/assets/settings-drawer-CpNFdMBP.e5b1af37e0a0.js +2 -0
- codex/static_root/assets/settings-drawer-CpNFdMBP.e5b1af37e0a0.js.br +0 -0
- codex/static_root/assets/settings-drawer-CpNFdMBP.e5b1af37e0a0.js.gz +0 -0
- codex/static_root/assets/settings-drawer-CpNFdMBP.js +2 -0
- codex/static_root/assets/settings-drawer-CpNFdMBP.js.br +0 -0
- codex/static_root/assets/settings-drawer-CpNFdMBP.js.gz +0 -0
- codex/static_root/assets/settings-drawer-DKncO_vX.0a2cd24cd904.css +1 -0
- codex/static_root/assets/settings-drawer-DKncO_vX.0a2cd24cd904.css.br +0 -0
- codex/static_root/assets/settings-drawer-DKncO_vX.0a2cd24cd904.css.gz +0 -0
- codex/static_root/assets/settings-drawer-DKncO_vX.css +1 -0
- codex/static_root/assets/settings-drawer-DKncO_vX.css.br +0 -0
- codex/static_root/assets/settings-drawer-DKncO_vX.css.gz +0 -0
- codex/static_root/assets/stats-tab-B0-L7btW.8f7914d5c8ac.js +1 -0
- codex/static_root/assets/stats-tab-B0-L7btW.8f7914d5c8ac.js.br +0 -0
- codex/static_root/assets/stats-tab-B0-L7btW.8f7914d5c8ac.js.gz +0 -0
- codex/static_root/assets/stats-tab-B0-L7btW.js +1 -0
- codex/static_root/assets/stats-tab-B0-L7btW.js.br +0 -0
- codex/static_root/assets/stats-tab-B0-L7btW.js.gz +0 -0
- codex/static_root/assets/{stats-tab-BVZzfwi1.28f07f038e88.css → stats-tab-BXGisn5N.9b7a71e7fe28.css} +1 -1
- codex/static_root/assets/stats-tab-BXGisn5N.9b7a71e7fe28.css.br +0 -0
- codex/static_root/assets/stats-tab-BXGisn5N.9b7a71e7fe28.css.gz +0 -0
- codex/static_root/assets/{stats-tab-BVZzfwi1.css → stats-tab-BXGisn5N.css} +1 -1
- codex/static_root/assets/stats-tab-BXGisn5N.css.br +0 -0
- codex/static_root/assets/stats-tab-BXGisn5N.css.gz +0 -0
- codex/static_root/assets/task-tab-CJEMX4mU.31d0755cc8f7.js +1 -0
- codex/static_root/assets/task-tab-CJEMX4mU.31d0755cc8f7.js.br +0 -0
- codex/static_root/assets/task-tab-CJEMX4mU.31d0755cc8f7.js.gz +0 -0
- codex/static_root/assets/task-tab-CJEMX4mU.js +1 -0
- codex/static_root/assets/task-tab-CJEMX4mU.js.br +0 -0
- codex/static_root/assets/task-tab-CJEMX4mU.js.gz +0 -0
- codex/static_root/assets/unauthorized-U1yum5qV.4a44970b19c7.js +1 -0
- codex/static_root/assets/unauthorized-U1yum5qV.4a44970b19c7.js.br +0 -0
- codex/static_root/assets/unauthorized-U1yum5qV.4a44970b19c7.js.gz +0 -0
- codex/static_root/assets/unauthorized-U1yum5qV.js +1 -0
- codex/static_root/assets/unauthorized-U1yum5qV.js.br +0 -0
- codex/static_root/assets/unauthorized-U1yum5qV.js.gz +0 -0
- codex/static_root/assets/{unauthorized-DGIM1VFy.c93d0b3ea5a4.css → unauthorized-muDsv-rC.2166ec8b3a32.css} +1 -1
- codex/static_root/assets/unauthorized-muDsv-rC.2166ec8b3a32.css.br +0 -0
- codex/static_root/assets/unauthorized-muDsv-rC.2166ec8b3a32.css.gz +0 -0
- codex/static_root/assets/{unauthorized-DGIM1VFy.css → unauthorized-muDsv-rC.css} +1 -1
- codex/static_root/assets/unauthorized-muDsv-rC.css.br +0 -0
- codex/static_root/assets/unauthorized-muDsv-rC.css.gz +0 -0
- codex/static_root/assets/user-tab-8DHYNhT5.3160ac8849a9.js +1 -0
- codex/static_root/assets/user-tab-8DHYNhT5.3160ac8849a9.js.br +0 -0
- codex/static_root/assets/user-tab-8DHYNhT5.3160ac8849a9.js.gz +0 -0
- codex/static_root/assets/user-tab-8DHYNhT5.js +1 -0
- codex/static_root/assets/user-tab-8DHYNhT5.js.br +0 -0
- codex/static_root/assets/user-tab-8DHYNhT5.js.gz +0 -0
- codex/static_root/js/choices-admin.1a20a5648f20.json +1 -0
- codex/static_root/js/choices-admin.1a20a5648f20.json.br +0 -0
- codex/static_root/js/choices-admin.1a20a5648f20.json.gz +0 -0
- codex/static_root/js/choices-admin.json +1 -1
- codex/static_root/js/choices-admin.json.br +0 -0
- codex/static_root/js/choices-admin.json.gz +0 -0
- codex/static_root/manifest.c82a23abe985.json +635 -0
- codex/static_root/manifest.c82a23abe985.json.br +0 -0
- codex/static_root/manifest.c82a23abe985.json.gz +0 -0
- codex/static_root/manifest.json +295 -270
- codex/static_root/manifest.json.br +0 -0
- codex/static_root/manifest.json.gz +0 -0
- codex/static_root/staticfiles.json +1 -1
- codex/templates/pwa/serviceworker.js +4 -4
- codex/urls/root.py +2 -6
- codex/version.py +0 -53
- codex/views/admin/tasks.py +2 -0
- codex/views/admin/user.py +4 -2
- codex/views/bookmark.py +16 -23
- codex/views/browser/filters/annotations.py +5 -4
- codex/views/browser/filters/search.py +1 -1
- codex/views/browser/order_by.py +1 -1
- codex/views/browser/validate.py +4 -7
- codex/views/const.py +1 -2
- codex/views/mixins.py +1 -1
- codex/views/reader/arcs.py +1 -1
- codex/views/reader/books.py +3 -3
- codex/views/reader/init.py +3 -2
- codex/views/version.py +10 -2
- {codex-1.6.9.dist-info → codex-1.6.9a0.dist-info}/METADATA +9 -8
- {codex-1.6.9.dist-info → codex-1.6.9a0.dist-info}/RECORD +383 -376
- codex/static_root/assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js +0 -1
- codex/static_root/assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js.br +0 -0
- codex/static_root/assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js.gz +0 -0
- codex/static_root/assets/VCheckbox-dIScsEcb.js +0 -1
- codex/static_root/assets/VCheckbox-dIScsEcb.js.br +0 -0
- codex/static_root/assets/VCheckbox-dIScsEcb.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js +0 -1
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.js +0 -1
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.js.gz +0 -0
- codex/static_root/assets/VCombobox-BiTvNSAL.d1884eaf76e6.js +0 -1
- codex/static_root/assets/VCombobox-BiTvNSAL.d1884eaf76e6.js.br +0 -0
- codex/static_root/assets/VCombobox-BiTvNSAL.d1884eaf76e6.js.gz +0 -0
- codex/static_root/assets/VCombobox-BiTvNSAL.js +0 -1
- codex/static_root/assets/VCombobox-BiTvNSAL.js.br +0 -0
- codex/static_root/assets/VCombobox-BiTvNSAL.js.gz +0 -0
- codex/static_root/assets/VCombobox-BksEr4D_.73429bb75f42.css +0 -1
- codex/static_root/assets/VCombobox-BksEr4D_.73429bb75f42.css.br +0 -0
- codex/static_root/assets/VCombobox-BksEr4D_.73429bb75f42.css.gz +0 -0
- codex/static_root/assets/VCombobox-BksEr4D_.css +0 -1
- codex/static_root/assets/VCombobox-BksEr4D_.css.br +0 -0
- codex/static_root/assets/VCombobox-BksEr4D_.css.gz +0 -0
- codex/static_root/assets/VDialog-DO_IeNl2.1e644515ee26.js +0 -1
- codex/static_root/assets/VDialog-DO_IeNl2.1e644515ee26.js.br +0 -0
- codex/static_root/assets/VDialog-DO_IeNl2.1e644515ee26.js.gz +0 -0
- codex/static_root/assets/VDialog-DO_IeNl2.js +0 -1
- codex/static_root/assets/VDialog-DO_IeNl2.js.br +0 -0
- codex/static_root/assets/VDialog-DO_IeNl2.js.gz +0 -0
- codex/static_root/assets/VDialog-lQ13FnRR.1c801ad756b2.css +0 -1
- codex/static_root/assets/VDialog-lQ13FnRR.1c801ad756b2.css.br +0 -0
- codex/static_root/assets/VDialog-lQ13FnRR.1c801ad756b2.css.gz +0 -0
- codex/static_root/assets/VDialog-lQ13FnRR.css +0 -1
- codex/static_root/assets/VDialog-lQ13FnRR.css.br +0 -0
- codex/static_root/assets/VDialog-lQ13FnRR.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-DsEXVcCv.20b475255e66.css +0 -1
- codex/static_root/assets/VExpansionPanels-DsEXVcCv.20b475255e66.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-DsEXVcCv.20b475255e66.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-DsEXVcCv.css +0 -1
- codex/static_root/assets/VExpansionPanels-DsEXVcCv.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-DsEXVcCv.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js +0 -1
- codex/static_root/assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-paVX7c3D.js +0 -1
- codex/static_root/assets/VExpansionPanels-paVX7c3D.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-paVX7c3D.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js +0 -1
- codex/static_root/assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-CLZGmBdz.js +0 -1
- codex/static_root/assets/VRadioGroup-CLZGmBdz.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CLZGmBdz.js.gz +0 -0
- codex/static_root/assets/VSelect-ARDhJiQK.372c098fb475.css +0 -1
- codex/static_root/assets/VSelect-ARDhJiQK.372c098fb475.css.br +0 -0
- codex/static_root/assets/VSelect-ARDhJiQK.372c098fb475.css.gz +0 -0
- codex/static_root/assets/VSelect-ARDhJiQK.css +0 -1
- codex/static_root/assets/VSelect-ARDhJiQK.css.br +0 -0
- codex/static_root/assets/VSelect-ARDhJiQK.css.gz +0 -0
- codex/static_root/assets/VSelect-Cwd7Ke2J.fd98b8f830af.js +0 -1
- codex/static_root/assets/VSelect-Cwd7Ke2J.fd98b8f830af.js.br +0 -0
- codex/static_root/assets/VSelect-Cwd7Ke2J.fd98b8f830af.js.gz +0 -0
- codex/static_root/assets/VSelect-Cwd7Ke2J.js +0 -1
- codex/static_root/assets/VSelect-Cwd7Ke2J.js.br +0 -0
- codex/static_root/assets/VSelect-Cwd7Ke2J.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css.br +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.css.br +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js +0 -1
- codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.js +0 -1
- codex/static_root/assets/VSelectionControl-BTjn8uTI.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-D4BlVRr8.10a79fd58813.js.br +0 -0
- codex/static_root/assets/VSlideGroup-D4BlVRr8.10a79fd58813.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-D4BlVRr8.js.br +0 -0
- codex/static_root/assets/VSlideGroup-D4BlVRr8.js.gz +0 -0
- codex/static_root/assets/VTable-DflzroDq.160504d82195.css +0 -1
- codex/static_root/assets/VTable-DflzroDq.160504d82195.css.br +0 -0
- codex/static_root/assets/VTable-DflzroDq.160504d82195.css.gz +0 -0
- codex/static_root/assets/VTable-DflzroDq.css +0 -1
- codex/static_root/assets/VTable-DflzroDq.css.br +0 -0
- codex/static_root/assets/VTable-DflzroDq.css.gz +0 -0
- codex/static_root/assets/VTable-IQf8Xj4J.2e69b517b235.js.br +0 -0
- codex/static_root/assets/VTable-IQf8Xj4J.2e69b517b235.js.gz +0 -0
- codex/static_root/assets/VTable-IQf8Xj4J.js.br +0 -0
- codex/static_root/assets/VTable-IQf8Xj4J.js.gz +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css +0 -1
- codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css.br +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css.gz +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.css +0 -1
- codex/static_root/assets/VTextField-BssVoDhB.css.br +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.css.gz +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js +0 -1
- codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js.br +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js.gz +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.js +0 -1
- codex/static_root/assets/VTextField-DKXmWQyx.js.br +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.js.gz +0 -0
- codex/static_root/assets/VWindowItem-clwRzf0Z.01620e37f020.js +0 -1
- codex/static_root/assets/VWindowItem-clwRzf0Z.01620e37f020.js.br +0 -0
- codex/static_root/assets/VWindowItem-clwRzf0Z.01620e37f020.js.gz +0 -0
- codex/static_root/assets/VWindowItem-clwRzf0Z.js +0 -1
- codex/static_root/assets/VWindowItem-clwRzf0Z.js.br +0 -0
- codex/static_root/assets/VWindowItem-clwRzf0Z.js.gz +0 -0
- codex/static_root/assets/admin-BMM4khnn.eeb686da7f67.js +0 -1
- codex/static_root/assets/admin-BMM4khnn.eeb686da7f67.js.br +0 -0
- codex/static_root/assets/admin-BMM4khnn.eeb686da7f67.js.gz +0 -0
- codex/static_root/assets/admin-BMM4khnn.js +0 -1
- codex/static_root/assets/admin-BMM4khnn.js.br +0 -0
- codex/static_root/assets/admin-BMM4khnn.js.gz +0 -0
- codex/static_root/assets/admin-D4sw3N4T.b590f88a62cf.css.br +0 -0
- codex/static_root/assets/admin-D4sw3N4T.b590f88a62cf.css.gz +0 -0
- codex/static_root/assets/admin-D4sw3N4T.css.br +0 -0
- codex/static_root/assets/admin-D4sw3N4T.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css +0 -1
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css +0 -1
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js +0 -56
- codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.js +0 -56
- codex/static_root/assets/admin-drawer-panel-SQytza6T.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.js.gz +0 -0
- codex/static_root/assets/browser-Cy0OgQJC.css.br +0 -0
- codex/static_root/assets/browser-Cy0OgQJC.css.gz +0 -0
- codex/static_root/assets/browser-Cy0OgQJC.fabbd1aaffcf.css.br +0 -0
- codex/static_root/assets/browser-Cy0OgQJC.fabbd1aaffcf.css.gz +0 -0
- codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js +0 -1
- codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js.br +0 -0
- codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js.gz +0 -0
- codex/static_root/assets/browser-D6WDXwID.js +0 -1
- codex/static_root/assets/browser-D6WDXwID.js.br +0 -0
- codex/static_root/assets/browser-D6WDXwID.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-0u6IJA87.5f9a9aa573b7.css +0 -1
- codex/static_root/assets/change-password-dialog-0u6IJA87.5f9a9aa573b7.css.br +0 -0
- codex/static_root/assets/change-password-dialog-0u6IJA87.5f9a9aa573b7.css.gz +0 -0
- codex/static_root/assets/change-password-dialog-0u6IJA87.css +0 -1
- codex/static_root/assets/change-password-dialog-0u6IJA87.css.br +0 -0
- codex/static_root/assets/change-password-dialog-0u6IJA87.css.gz +0 -0
- codex/static_root/assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js +0 -1
- codex/static_root/assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js.br +0 -0
- codex/static_root/assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-CD1pdXK9.js +0 -1
- codex/static_root/assets/change-password-dialog-CD1pdXK9.js.br +0 -0
- codex/static_root/assets/change-password-dialog-CD1pdXK9.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js +0 -1
- codex/static_root/assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js.br +0 -0
- codex/static_root/assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-_HotKBZZ.js +0 -1
- codex/static_root/assets/confirm-dialog-_HotKBZZ.js.br +0 -0
- codex/static_root/assets/confirm-dialog-_HotKBZZ.js.gz +0 -0
- codex/static_root/assets/datetime-column-D93BsvcX.5caf2255bdc3.js.br +0 -0
- codex/static_root/assets/datetime-column-D93BsvcX.5caf2255bdc3.js.gz +0 -0
- codex/static_root/assets/datetime-column-D93BsvcX.js.br +0 -0
- codex/static_root/assets/datetime-column-D93BsvcX.js.gz +0 -0
- codex/static_root/assets/filter-ji46VTOR.f7b9ed6fec13.js.br +0 -0
- codex/static_root/assets/filter-ji46VTOR.f7b9ed6fec13.js.gz +0 -0
- codex/static_root/assets/filter-ji46VTOR.js.br +0 -0
- codex/static_root/assets/filter-ji46VTOR.js.gz +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js +0 -1
- codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js.br +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js.gz +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.js +0 -1
- codex/static_root/assets/flag-tab-CRfBTBsz.js.br +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.js.gz +0 -0
- codex/static_root/assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js +0 -1
- codex/static_root/assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js.br +0 -0
- codex/static_root/assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js.gz +0 -0
- codex/static_root/assets/group-tab-CMX07Y1c.js +0 -1
- codex/static_root/assets/group-tab-CMX07Y1c.js.br +0 -0
- codex/static_root/assets/group-tab-CMX07Y1c.js.gz +0 -0
- codex/static_root/assets/http-error-CzJHczxG.6ee3173d40a5.js +0 -1
- codex/static_root/assets/http-error-CzJHczxG.6ee3173d40a5.js.br +0 -0
- codex/static_root/assets/http-error-CzJHczxG.6ee3173d40a5.js.gz +0 -0
- codex/static_root/assets/http-error-CzJHczxG.js +0 -1
- codex/static_root/assets/http-error-CzJHczxG.js.br +0 -0
- codex/static_root/assets/http-error-CzJHczxG.js.gz +0 -0
- codex/static_root/assets/library-tab-BygwYPnO.94e92aa60bf2.css +0 -1
- codex/static_root/assets/library-tab-BygwYPnO.94e92aa60bf2.css.br +0 -0
- codex/static_root/assets/library-tab-BygwYPnO.94e92aa60bf2.css.gz +0 -0
- codex/static_root/assets/library-tab-BygwYPnO.css +0 -1
- codex/static_root/assets/library-tab-BygwYPnO.css.br +0 -0
- codex/static_root/assets/library-tab-BygwYPnO.css.gz +0 -0
- codex/static_root/assets/library-tab-DfZENbbA.1117ad225bde.js +0 -1
- codex/static_root/assets/library-tab-DfZENbbA.1117ad225bde.js.br +0 -0
- codex/static_root/assets/library-tab-DfZENbbA.1117ad225bde.js.gz +0 -0
- codex/static_root/assets/library-tab-DfZENbbA.js +0 -1
- codex/static_root/assets/library-tab-DfZENbbA.js.br +0 -0
- codex/static_root/assets/library-tab-DfZENbbA.js.gz +0 -0
- codex/static_root/assets/main-EAqCu0p6.e749a8bc2923.js +0 -6
- codex/static_root/assets/main-EAqCu0p6.e749a8bc2923.js.br +0 -0
- codex/static_root/assets/main-EAqCu0p6.e749a8bc2923.js.gz +0 -0
- codex/static_root/assets/main-EAqCu0p6.js +0 -6
- codex/static_root/assets/main-EAqCu0p6.js.br +0 -0
- codex/static_root/assets/main-EAqCu0p6.js.gz +0 -0
- codex/static_root/assets/main-Ztp855PW.css.br +0 -0
- codex/static_root/assets/main-Ztp855PW.d46d718fac45.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-BA9ifTed.b4865334ee08.css +0 -1
- codex/static_root/assets/pagination-toolbar-BA9ifTed.b4865334ee08.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-BA9ifTed.b4865334ee08.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-BA9ifTed.css +0 -1
- codex/static_root/assets/pagination-toolbar-BA9ifTed.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-BA9ifTed.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js +0 -1
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.js +0 -1
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.js.gz +0 -0
- codex/static_root/assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css +0 -1
- codex/static_root/assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css.br +0 -0
- codex/static_root/assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css.gz +0 -0
- codex/static_root/assets/pdf-doc-CMzaSV_K.css +0 -1
- codex/static_root/assets/pdf-doc-CMzaSV_K.css.br +0 -0
- codex/static_root/assets/pdf-doc-CMzaSV_K.css.gz +0 -0
- codex/static_root/assets/pdf-doc-RJuKdcoH.4be4a68338de.js +0 -305
- codex/static_root/assets/pdf-doc-RJuKdcoH.4be4a68338de.js.br +0 -0
- codex/static_root/assets/pdf-doc-RJuKdcoH.4be4a68338de.js.gz +0 -0
- codex/static_root/assets/pdf-doc-RJuKdcoH.js +0 -305
- codex/static_root/assets/pdf-doc-RJuKdcoH.js.br +0 -0
- codex/static_root/assets/pdf-doc-RJuKdcoH.js.gz +0 -0
- codex/static_root/assets/reader-BYz5uPEm.e2db8893aa10.js +0 -2
- codex/static_root/assets/reader-BYz5uPEm.e2db8893aa10.js.br +0 -0
- codex/static_root/assets/reader-BYz5uPEm.e2db8893aa10.js.gz +0 -0
- codex/static_root/assets/reader-BYz5uPEm.js +0 -2
- codex/static_root/assets/reader-BYz5uPEm.js.br +0 -0
- codex/static_root/assets/reader-BYz5uPEm.js.gz +0 -0
- codex/static_root/assets/reader-YbzUiD0T.css +0 -1
- codex/static_root/assets/reader-YbzUiD0T.css.br +0 -0
- codex/static_root/assets/reader-YbzUiD0T.css.gz +0 -0
- codex/static_root/assets/reader-YbzUiD0T.efb15835b39d.css +0 -1
- codex/static_root/assets/reader-YbzUiD0T.efb15835b39d.css.br +0 -0
- codex/static_root/assets/reader-YbzUiD0T.efb15835b39d.css.gz +0 -0
- codex/static_root/assets/relation-chips-BGitp3yx.b3e7d178a615.css.br +0 -0
- codex/static_root/assets/relation-chips-BGitp3yx.b3e7d178a615.css.gz +0 -0
- codex/static_root/assets/relation-chips-BGitp3yx.css.br +0 -0
- codex/static_root/assets/relation-chips-BGitp3yx.css.gz +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js +0 -1
- codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js.br +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js.gz +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.js +0 -1
- codex/static_root/assets/relation-chips-BQX3oeiS.js.br +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.js.gz +0 -0
- codex/static_root/assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js +0 -2
- codex/static_root/assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js.br +0 -0
- codex/static_root/assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js.gz +0 -0
- codex/static_root/assets/settings-drawer-C5t3OYPS.js +0 -2
- codex/static_root/assets/settings-drawer-C5t3OYPS.js.br +0 -0
- codex/static_root/assets/settings-drawer-C5t3OYPS.js.gz +0 -0
- codex/static_root/assets/settings-drawer-nZ9HvKSZ.01744e131806.css +0 -1
- codex/static_root/assets/settings-drawer-nZ9HvKSZ.01744e131806.css.br +0 -0
- codex/static_root/assets/settings-drawer-nZ9HvKSZ.01744e131806.css.gz +0 -0
- codex/static_root/assets/settings-drawer-nZ9HvKSZ.css +0 -1
- codex/static_root/assets/settings-drawer-nZ9HvKSZ.css.br +0 -0
- codex/static_root/assets/settings-drawer-nZ9HvKSZ.css.gz +0 -0
- codex/static_root/assets/stats-tab-BVZzfwi1.28f07f038e88.css.br +0 -0
- codex/static_root/assets/stats-tab-BVZzfwi1.28f07f038e88.css.gz +0 -0
- codex/static_root/assets/stats-tab-BVZzfwi1.css.br +0 -0
- codex/static_root/assets/stats-tab-BVZzfwi1.css.gz +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js +0 -1
- codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js.br +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js.gz +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.js +0 -1
- codex/static_root/assets/stats-tab-BZrcMjtP.js.br +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.js.gz +0 -0
- codex/static_root/assets/task-tab-aLrGKXQT.f8498ed38d40.js +0 -1
- codex/static_root/assets/task-tab-aLrGKXQT.f8498ed38d40.js.br +0 -0
- codex/static_root/assets/task-tab-aLrGKXQT.f8498ed38d40.js.gz +0 -0
- codex/static_root/assets/task-tab-aLrGKXQT.js +0 -1
- codex/static_root/assets/task-tab-aLrGKXQT.js.br +0 -0
- codex/static_root/assets/task-tab-aLrGKXQT.js.gz +0 -0
- codex/static_root/assets/unauthorized-DGIM1VFy.c93d0b3ea5a4.css.br +0 -0
- codex/static_root/assets/unauthorized-DGIM1VFy.c93d0b3ea5a4.css.gz +0 -0
- codex/static_root/assets/unauthorized-DGIM1VFy.css.br +0 -0
- codex/static_root/assets/unauthorized-DGIM1VFy.css.gz +0 -0
- codex/static_root/assets/unauthorized-DpTUrdQV.0c1bfe81f457.js +0 -1
- codex/static_root/assets/unauthorized-DpTUrdQV.0c1bfe81f457.js.br +0 -0
- codex/static_root/assets/unauthorized-DpTUrdQV.0c1bfe81f457.js.gz +0 -0
- codex/static_root/assets/unauthorized-DpTUrdQV.js +0 -1
- codex/static_root/assets/unauthorized-DpTUrdQV.js.br +0 -0
- codex/static_root/assets/unauthorized-DpTUrdQV.js.gz +0 -0
- codex/static_root/assets/user-tab-B_CPCP10.d1a264b97a0f.js +0 -1
- codex/static_root/assets/user-tab-B_CPCP10.d1a264b97a0f.js.br +0 -0
- codex/static_root/assets/user-tab-B_CPCP10.d1a264b97a0f.js.gz +0 -0
- codex/static_root/assets/user-tab-B_CPCP10.js +0 -1
- codex/static_root/assets/user-tab-B_CPCP10.js.br +0 -0
- codex/static_root/assets/user-tab-B_CPCP10.js.gz +0 -0
- codex/static_root/js/choices-admin.1eca6d2c22cf.json +0 -1
- codex/static_root/js/choices-admin.1eca6d2c22cf.json.br +0 -0
- codex/static_root/js/choices-admin.1eca6d2c22cf.json.gz +0 -0
- codex/static_root/manifest.3d6dd67354d1.json +0 -610
- codex/static_root/manifest.3d6dd67354d1.json.br +0 -0
- codex/static_root/manifest.3d6dd67354d1.json.gz +0 -0
- {codex-1.6.9.dist-info → codex-1.6.9a0.dist-info}/LICENSE +0 -0
- {codex-1.6.9.dist-info → codex-1.6.9a0.dist-info}/WHEEL +0 -0
- {codex-1.6.9.dist-info → codex-1.6.9a0.dist-info}/entry_points.txt +0 -0
|
@@ -5,17 +5,36 @@ import signal
|
|
|
5
5
|
import subprocess
|
|
6
6
|
import sys
|
|
7
7
|
|
|
8
|
+
from versio.version import Version
|
|
9
|
+
|
|
8
10
|
from codex.librarian.janitor.status import JanitorStatusTypes
|
|
9
11
|
from codex.librarian.tasks import LibrarianShutdownTask
|
|
10
12
|
from codex.models import AdminFlag
|
|
13
|
+
from codex.models.admin import Timestamp
|
|
11
14
|
from codex.status import Status
|
|
12
|
-
from codex.version import
|
|
15
|
+
from codex.version import VERSION, get_version
|
|
13
16
|
from codex.worker_base import WorkerBaseMixin
|
|
14
17
|
|
|
15
18
|
|
|
16
19
|
class UpdateMixin(WorkerBaseMixin):
|
|
17
20
|
"""Update codex methods for janitor."""
|
|
18
21
|
|
|
22
|
+
def _is_outdated(self):
|
|
23
|
+
"""Is codex outdated."""
|
|
24
|
+
result = False
|
|
25
|
+
ts = Timestamp.objects.get(key=Timestamp.TimestampChoices.CODEX_VERSION.value)
|
|
26
|
+
latest_version = ts.version
|
|
27
|
+
versio_latest_version = Version(latest_version)
|
|
28
|
+
|
|
29
|
+
installed_versio_version = Version(VERSION)
|
|
30
|
+
if versio_latest_version.parts[1] and not installed_versio_version.parts[1]: # type: ignore
|
|
31
|
+
pre_blurb = "latest version is a prerelease. But installed version is not."
|
|
32
|
+
else:
|
|
33
|
+
result = versio_latest_version > installed_versio_version
|
|
34
|
+
pre_blurb = ""
|
|
35
|
+
self.log.info(f"{latest_version=} > {VERSION=} = {result}{pre_blurb}")
|
|
36
|
+
return result
|
|
37
|
+
|
|
19
38
|
def update_codex(self, force=False):
|
|
20
39
|
"""Update the package and restart everything if the version changed."""
|
|
21
40
|
status = Status(JanitorStatusTypes.CODEX_UPDATE)
|
|
@@ -27,7 +46,7 @@ class UpdateMixin(WorkerBaseMixin):
|
|
|
27
46
|
eau = AdminFlag.objects.only("on").get(
|
|
28
47
|
key=AdminFlag.FlagChoices.AUTO_UPDATE.value
|
|
29
48
|
)
|
|
30
|
-
if not eau.on or not
|
|
49
|
+
if not eau.on or not self._is_outdated():
|
|
31
50
|
self.log.info("Codex is up to date.")
|
|
32
51
|
return
|
|
33
52
|
|
|
@@ -21,8 +21,7 @@ class VacuumMixin(WorkerBaseMixin):
|
|
|
21
21
|
self.status_controller.start(status)
|
|
22
22
|
old_size = DB_PATH.stat().st_size
|
|
23
23
|
with connection.cursor() as cursor:
|
|
24
|
-
cursor.execute("PRAGMA
|
|
25
|
-
cursor.execute("PRAGMA optimize;")
|
|
24
|
+
cursor.execute("PRAGMA optimize")
|
|
26
25
|
cursor.execute("VACUUM")
|
|
27
26
|
cursor.execute("PRAGMA wal_checkpoint(TRUNCATE)")
|
|
28
27
|
new_size = DB_PATH.stat().st_size
|
|
@@ -111,8 +111,10 @@ class CodexStats:
|
|
|
111
111
|
|
|
112
112
|
return user_stats, anon_session_count
|
|
113
113
|
|
|
114
|
-
def
|
|
114
|
+
def _add_platform(self, obj):
|
|
115
115
|
"""Add dict of platform information to object."""
|
|
116
|
+
if self.params and "platform" not in self.params:
|
|
117
|
+
return
|
|
116
118
|
platform = {
|
|
117
119
|
"docker": self._is_docker(),
|
|
118
120
|
"machine": machine(),
|
|
@@ -126,8 +128,10 @@ class CodexStats:
|
|
|
126
128
|
}
|
|
127
129
|
obj["platform"] = platform
|
|
128
130
|
|
|
129
|
-
def
|
|
131
|
+
def _add_config(self, obj):
|
|
130
132
|
"""Add dict of config informaation to object."""
|
|
133
|
+
if self.params and "config" not in self.params:
|
|
134
|
+
return
|
|
131
135
|
config = self._get_model_counts("config")
|
|
132
136
|
sessions, config["user_anonymous_count"] = self._get_session_stats()
|
|
133
137
|
config["user_registered_count"] = config.pop("users_count", 0)
|
|
@@ -135,15 +139,18 @@ class CodexStats:
|
|
|
135
139
|
obj["config"] = config
|
|
136
140
|
obj["sessions"] = sessions
|
|
137
141
|
|
|
138
|
-
def
|
|
142
|
+
def _add_groups(self, obj):
|
|
139
143
|
"""Add dict of groups information to object."""
|
|
144
|
+
if self.params and "groups" not in self.params:
|
|
145
|
+
return
|
|
140
146
|
groups = self._get_model_counts("groups")
|
|
141
147
|
groups["issue_count"] = groups.pop("comic_count", 0)
|
|
142
148
|
obj["groups"] = groups
|
|
143
149
|
|
|
144
|
-
|
|
145
|
-
def _get_file_types(obj):
|
|
150
|
+
def _add_file_types(self, obj):
|
|
146
151
|
"""Query for file types."""
|
|
152
|
+
if self.params and "fileTypes" not in self.params:
|
|
153
|
+
return
|
|
147
154
|
file_types = {}
|
|
148
155
|
qs = (
|
|
149
156
|
Comic.objects.values("file_type")
|
|
@@ -157,22 +164,19 @@ class CodexStats:
|
|
|
157
164
|
sorted_fts = dict(sorted(file_types.items()))
|
|
158
165
|
obj["file_types"] = sorted_fts
|
|
159
166
|
|
|
160
|
-
def
|
|
167
|
+
def _add_metadata(self, obj):
|
|
161
168
|
"""Add dict of metadata counts to object."""
|
|
169
|
+
if self.params and "metadata" not in self.params:
|
|
170
|
+
return
|
|
162
171
|
metadata = self._get_model_counts("metadata")
|
|
163
172
|
obj["metadata"] = metadata
|
|
164
173
|
|
|
165
174
|
def get(self):
|
|
166
175
|
"""Construct the stats object."""
|
|
167
176
|
obj = {}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
self._get_groups(obj)
|
|
174
|
-
if not self.params or "fileTypes" in self.params:
|
|
175
|
-
self._get_file_types(obj)
|
|
176
|
-
if not self.params or "metadata" in self.params:
|
|
177
|
-
self._get_metadata(obj)
|
|
177
|
+
self._add_platform(obj)
|
|
178
|
+
self._add_config(obj)
|
|
179
|
+
self._add_groups(obj)
|
|
180
|
+
self._add_file_types(obj)
|
|
181
|
+
self._add_metadata(obj)
|
|
178
182
|
return obj
|
|
@@ -6,7 +6,7 @@ from logging import getLogger
|
|
|
6
6
|
from lzma import compress
|
|
7
7
|
from uuid import uuid4
|
|
8
8
|
|
|
9
|
-
from requests import
|
|
9
|
+
from requests import Session
|
|
10
10
|
|
|
11
11
|
from codex.librarian.telemeter.stats import CodexStats
|
|
12
12
|
from codex.models.admin import AdminFlag, Timestamp
|
|
@@ -14,7 +14,7 @@ from codex.settings.settings import DEBUG
|
|
|
14
14
|
|
|
15
15
|
# Version
|
|
16
16
|
_APP_NAME = "codex"
|
|
17
|
-
_VERSION = "
|
|
17
|
+
_VERSION = "1"
|
|
18
18
|
|
|
19
19
|
# Sending
|
|
20
20
|
# this isn't meant to fool you. it's meant to discourage lazy scraper bots.
|
|
@@ -52,20 +52,23 @@ def _post_stats(log, data):
|
|
|
52
52
|
msg = f"{_POST} {len(compressed_data)}, {_HEADERS}, {_TIMEOUT}"
|
|
53
53
|
log.debug(msg)
|
|
54
54
|
else:
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
with Session() as session:
|
|
56
|
+
response = session.post(
|
|
57
|
+
_POST, data=compressed_data, headers=_HEADERS, timeout=_TIMEOUT
|
|
58
|
+
)
|
|
59
|
+
response.raise_for_status()
|
|
57
60
|
|
|
58
61
|
|
|
59
62
|
def _send_telemetry(log):
|
|
60
63
|
"""Send telemetry to server."""
|
|
61
64
|
if not AdminFlag.objects.get(key=AdminFlag.FlagChoices.SEND_TELEMETRY.value).on:
|
|
62
|
-
reason = "Send Telemetry flag
|
|
65
|
+
reason = "Send Telemetry flag is off."
|
|
63
66
|
raise ValueError(reason)
|
|
64
67
|
ts = get_telemeter_timestamp()
|
|
65
68
|
stats = CodexStats().get()
|
|
66
69
|
data = {"stats": stats, "uuid": ts.version}
|
|
67
70
|
_post_stats(log, data)
|
|
68
|
-
log.debug("Sent anonymous
|
|
71
|
+
# log.debug("Sent anonymous stats")
|
|
69
72
|
ts.save() # update updated_at
|
|
70
73
|
|
|
71
74
|
|
|
@@ -74,4 +77,4 @@ def send_telemetry(log):
|
|
|
74
77
|
try:
|
|
75
78
|
_send_telemetry(log)
|
|
76
79
|
except Exception as exc:
|
|
77
|
-
log.debug(f"Failed to send anonyomous
|
|
80
|
+
log.debug(f"Failed to send anonyomous stats: {exc}")
|
|
@@ -24,6 +24,27 @@ def _get_utc_start_of_week():
|
|
|
24
24
|
)
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
def _is_created_recently(ts):
|
|
28
|
+
"""Don't send if created recently."""
|
|
29
|
+
now = datetime.now(tz=timezone.utc)
|
|
30
|
+
since = ts.created_at - now
|
|
31
|
+
return abs(since.total_seconds()) < _ONE_DAY
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _get_scheduled_time(ts):
|
|
35
|
+
"""Compute the time of week to send from the uuid."""
|
|
36
|
+
start_of_week = _get_utc_start_of_week()
|
|
37
|
+
uuid = UUID(ts.version)
|
|
38
|
+
seconds_after_week_start = uuid.int / _UUID_DIVISOR
|
|
39
|
+
time_of_week = timedelta(seconds=seconds_after_week_start)
|
|
40
|
+
telemeter_time = start_of_week + time_of_week
|
|
41
|
+
telemeter_time = telemeter_time.astimezone(tz=timezone.utc)
|
|
42
|
+
if telemeter_time < ts.updated_at:
|
|
43
|
+
# Already ran this week, or created this week after run time.
|
|
44
|
+
telemeter_time = 0
|
|
45
|
+
return telemeter_time
|
|
46
|
+
|
|
47
|
+
|
|
27
48
|
def get_telemeter_time(log):
|
|
28
49
|
"""Get the time to send telemetry."""
|
|
29
50
|
# Should we schedule telemeter at all?
|
|
@@ -32,17 +53,9 @@ def get_telemeter_time(log):
|
|
|
32
53
|
return 0
|
|
33
54
|
|
|
34
55
|
ts = get_telemeter_timestamp()
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if abs(since.total_seconds()) < _ONE_DAY:
|
|
38
|
-
# if created within a day it's not time again.
|
|
56
|
+
|
|
57
|
+
if _is_created_recently(ts):
|
|
39
58
|
log.debug("Telemeter created recently. Not scheduled.")
|
|
40
59
|
return 0
|
|
41
60
|
|
|
42
|
-
|
|
43
|
-
start_of_week = _get_utc_start_of_week()
|
|
44
|
-
uuid = UUID(ts.version)
|
|
45
|
-
seconds_after_week_start = uuid.int / _UUID_DIVISOR
|
|
46
|
-
time_of_week = timedelta(seconds=seconds_after_week_start)
|
|
47
|
-
telemeter_time = start_of_week + time_of_week
|
|
48
|
-
return telemeter_time.astimezone(tz=timezone.utc)
|
|
61
|
+
return _get_scheduled_time(ts)
|
|
@@ -21,9 +21,9 @@ class SnapshotDiffData:
|
|
|
21
21
|
class CodexDirectorySnapshotDiff(DirectorySnapshotDiff):
|
|
22
22
|
"""Custom Diff allows inode only changes to be 'modified'."""
|
|
23
23
|
|
|
24
|
-
def _get_inode(self,
|
|
24
|
+
def _get_inode(self, snapshot, full_path):
|
|
25
25
|
"""Get inode optionally ignoring device stats."""
|
|
26
|
-
result =
|
|
26
|
+
result = snapshot.inode(full_path)
|
|
27
27
|
if self._ignore_device:
|
|
28
28
|
result = result[0]
|
|
29
29
|
return result
|
|
@@ -33,7 +33,7 @@ class CodexDirectorySnapshotDiff(DirectorySnapshotDiff):
|
|
|
33
33
|
return self._get_inode(data.ref, path) == self._get_inode(data.snapshot, path)
|
|
34
34
|
|
|
35
35
|
def _is_stats_equal(self, data, old_path, new_path):
|
|
36
|
-
"""Return if the
|
|
36
|
+
"""Return if the mtime and size are equal.
|
|
37
37
|
|
|
38
38
|
For old paths in the ref and new paths in the snapshot.
|
|
39
39
|
"""
|
|
@@ -48,25 +48,27 @@ class CodexDirectorySnapshotDiff(DirectorySnapshotDiff):
|
|
|
48
48
|
if self._inode_only_modified:
|
|
49
49
|
data.modified.add(path)
|
|
50
50
|
else:
|
|
51
|
+
# Add these to created and deleted. But...
|
|
52
|
+
# The _find_moved_paths() inode tracker should
|
|
53
|
+
# sort them out.
|
|
54
|
+
# This is the same as in upstream dirsnapshot.py
|
|
51
55
|
data.created.add(path)
|
|
52
56
|
data.deleted.add(path)
|
|
53
57
|
|
|
54
58
|
def _find_moved_paths(self, data):
|
|
55
|
-
"""Find moved paths."""
|
|
56
|
-
for
|
|
57
|
-
inode = data.ref
|
|
58
|
-
new_path
|
|
59
|
-
if new_path:
|
|
59
|
+
"""Find moved paths in deleted and created."""
|
|
60
|
+
for old_path in tuple(data.deleted):
|
|
61
|
+
inode = self._get_inode(data.ref, old_path)
|
|
62
|
+
if new_path := data.snapshot.path(inode):
|
|
60
63
|
# file is not deleted but moved
|
|
61
|
-
data.deleted.remove(
|
|
62
|
-
data.moved.add((
|
|
64
|
+
data.deleted.remove(old_path)
|
|
65
|
+
data.moved.add((old_path, new_path))
|
|
63
66
|
|
|
64
|
-
for
|
|
65
|
-
inode = data.snapshot
|
|
66
|
-
old_path
|
|
67
|
-
|
|
68
|
-
data.
|
|
69
|
-
data.moved.add((old_path, path))
|
|
67
|
+
for new_path in tuple(data.created):
|
|
68
|
+
inode = self._get_inode(data.snapshot, new_path)
|
|
69
|
+
if old_path := data.ref.path(inode):
|
|
70
|
+
data.created.remove(new_path)
|
|
71
|
+
data.moved.add((old_path, new_path))
|
|
70
72
|
|
|
71
73
|
def _find_modified_paths(self, data):
|
|
72
74
|
"""Find modified paths."""
|
|
@@ -80,7 +82,7 @@ class CodexDirectorySnapshotDiff(DirectorySnapshotDiff):
|
|
|
80
82
|
# Check moved paths for modificiations.
|
|
81
83
|
for old_path, new_path in data.moved:
|
|
82
84
|
if not self._is_stats_equal(data, old_path, new_path):
|
|
83
|
-
data.modified.add(
|
|
85
|
+
data.modified.add(new_path)
|
|
84
86
|
|
|
85
87
|
def __init__( # C901, PLR0912
|
|
86
88
|
self, ref, snapshot, ignore_device=False, inode_only_modified=False
|
|
@@ -25,20 +25,18 @@ from codex.models import Library
|
|
|
25
25
|
from codex.status import Status
|
|
26
26
|
from codex.worker_base import WorkerBaseMixin
|
|
27
27
|
|
|
28
|
-
_CODEX_EVENT_FILTER =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
)
|
|
28
|
+
_CODEX_EVENT_FILTER = [
|
|
29
|
+
FileMovedEvent,
|
|
30
|
+
FileModifiedEvent,
|
|
31
|
+
FileCreatedEvent,
|
|
32
|
+
FileDeletedEvent,
|
|
33
|
+
# FileClosedEvent,
|
|
34
|
+
# FileOpenedEvent,
|
|
35
|
+
DirMovedEvent,
|
|
36
|
+
DirModifiedEvent,
|
|
37
|
+
DirDeletedEvent,
|
|
38
|
+
# DirCreatedEvent,
|
|
39
|
+
]
|
|
42
40
|
_DOCKER_UNMOUNTED_FN = "DOCKER_UNMOUNTED_VOLUME"
|
|
43
41
|
|
|
44
42
|
|
|
@@ -234,7 +234,7 @@ class CodexCustomCoverEventHandler(CodexEventHandlerBase):
|
|
|
234
234
|
try:
|
|
235
235
|
if event.is_directory or event.event_type in self.IGNORED_EVENTS:
|
|
236
236
|
return
|
|
237
|
-
src_cover_match = self._match_group_cover_image(event.src_path)
|
|
237
|
+
src_cover_match = self._match_group_cover_image(str(event.src_path))
|
|
238
238
|
if event.event_type == EVENT_TYPE_MOVED:
|
|
239
239
|
send_event = self._transform_event_moved(event, src_cover_match)
|
|
240
240
|
elif src_cover_match:
|
|
@@ -110,15 +110,15 @@ class UatuMixin(BaseObserver, WorkerBaseMixin):
|
|
|
110
110
|
https://pythonhosted.org/watchdog/_modules/watchdog/observers/api.html#BaseObserver
|
|
111
111
|
"""
|
|
112
112
|
if self._emitter_class != DatabasePollingEmitter:
|
|
113
|
-
return super().schedule(event_handler, path, recursive)
|
|
113
|
+
return super().schedule(event_handler, path, recursive=recursive)
|
|
114
114
|
with self._lock:
|
|
115
|
-
watch = ObservedWatch(path, recursive)
|
|
115
|
+
watch = ObservedWatch(path, recursive=recursive)
|
|
116
116
|
self._add_handler_for_watch(event_handler, watch)
|
|
117
117
|
|
|
118
118
|
# If we don't have an emitter for this watch already, create it.
|
|
119
119
|
if self._emitter_for_watch.get(watch) is None:
|
|
120
120
|
covers_only = isinstance(event_handler, CodexCustomCoverEventHandler)
|
|
121
|
-
emitter =
|
|
121
|
+
emitter = DatabasePollingEmitter(
|
|
122
122
|
event_queue=self.event_queue,
|
|
123
123
|
watch=watch,
|
|
124
124
|
timeout=self.timeout,
|
|
@@ -166,7 +166,7 @@ class LibraryPollingObserver(UatuMixin):
|
|
|
166
166
|
|
|
167
167
|
for emitter in self.emitters:
|
|
168
168
|
if emitter.watch.path in paths:
|
|
169
|
-
emitter.poll(force)
|
|
169
|
+
emitter.poll(force) # type: ignore
|
|
170
170
|
except Exception:
|
|
171
171
|
self.log.exception(
|
|
172
172
|
f"{self.__class__.__name__}.poll({library_pks}, {force})"
|
codex/models/comic.py
CHANGED
|
@@ -246,7 +246,7 @@ class Comic(WatchedPathBrowserGroup):
|
|
|
246
246
|
return issue_str
|
|
247
247
|
|
|
248
248
|
@classmethod
|
|
249
|
-
def get_title(
|
|
249
|
+
def get_title(
|
|
250
250
|
cls, obj, volume=True, zero_pad=None, name=True, filename_fallback=False
|
|
251
251
|
):
|
|
252
252
|
"""Create the comic title for display."""
|
codex/search/backend.py
CHANGED
|
@@ -122,7 +122,10 @@ class CodexSearchBackend(CodexBackendSearchMixin, WhooshSearchBackend, WorkerBas
|
|
|
122
122
|
"created_at": ("created",),
|
|
123
123
|
"critical_rating": gen_multipart_field_aliases("critical_rating"),
|
|
124
124
|
"genres": ("genre",),
|
|
125
|
-
"file_type": (
|
|
125
|
+
"file_type": (
|
|
126
|
+
"filetype",
|
|
127
|
+
"type",
|
|
128
|
+
),
|
|
126
129
|
"identifier": ("id", "nss"),
|
|
127
130
|
"identifier_type": ("idtype", "id_type", "nid"),
|
|
128
131
|
"issue_number": ("number",),
|
|
@@ -132,7 +135,11 @@ class CodexSearchBackend(CodexBackendSearchMixin, WhooshSearchBackend, WorkerBas
|
|
|
132
135
|
"original_format": ("format",),
|
|
133
136
|
"page_count": ("pages",),
|
|
134
137
|
"reading_direction": ("direction",),
|
|
135
|
-
"search_path": (
|
|
138
|
+
"search_path": (
|
|
139
|
+
"path",
|
|
140
|
+
"filename",
|
|
141
|
+
*gen_multipart_field_aliases("folders"),
|
|
142
|
+
),
|
|
136
143
|
"series_groups": gen_multipart_field_aliases("series_groups"),
|
|
137
144
|
"scan_info": ("scan",),
|
|
138
145
|
"stories": ("story",),
|
|
@@ -431,7 +438,7 @@ class CodexSearchBackend(CodexBackendSearchMixin, WhooshSearchBackend, WorkerBas
|
|
|
431
438
|
raise
|
|
432
439
|
return count
|
|
433
440
|
|
|
434
|
-
def update( #
|
|
441
|
+
def update( # type: ignore
|
|
435
442
|
self,
|
|
436
443
|
index,
|
|
437
444
|
iterable,
|
codex/settings/settings.py
CHANGED
|
@@ -81,6 +81,7 @@ if not DEBUG:
|
|
|
81
81
|
"asyncio": {
|
|
82
82
|
"level": "INFO",
|
|
83
83
|
},
|
|
84
|
+
"urllib3.connectionpool": {"level": "INFO"},
|
|
84
85
|
"watchdog": {
|
|
85
86
|
"level": "INFO",
|
|
86
87
|
},
|
|
@@ -188,7 +189,10 @@ DATABASES = {
|
|
|
188
189
|
"ENGINE": "django.db.backends.sqlite3",
|
|
189
190
|
"NAME": DB_PATH,
|
|
190
191
|
"CONN_MAX_AGE": 600,
|
|
191
|
-
"OPTIONS": {
|
|
192
|
+
"OPTIONS": {
|
|
193
|
+
"init_command": "PRAGMA journal_mode=wal;",
|
|
194
|
+
"timeout": 120,
|
|
195
|
+
},
|
|
192
196
|
},
|
|
193
197
|
}
|
|
194
198
|
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
|
codex/signals/django_signals.py
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
from time import time
|
|
4
4
|
|
|
5
5
|
from django.core.cache import cache
|
|
6
|
-
from django.db.backends.signals import connection_created
|
|
7
6
|
from django.db.models.signals import m2m_changed
|
|
8
7
|
|
|
9
8
|
from codex.librarian.mp_queue import LIBRARIAN_QUEUE
|
|
@@ -21,13 +20,6 @@ GROUP_CHANGE_ACTIONS = frozenset(
|
|
|
21
20
|
)
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
def _activate_wal_journal(**kwargs):
|
|
25
|
-
"""Enable sqlite WAL journal."""
|
|
26
|
-
connection = kwargs["connection"]
|
|
27
|
-
with connection.cursor() as cursor:
|
|
28
|
-
cursor.execute("PRAGMA journal_mode=wal;")
|
|
29
|
-
|
|
30
|
-
|
|
31
23
|
def _user_group_change(**kwargs):
|
|
32
24
|
"""Clear cache and send update signals when groups change."""
|
|
33
25
|
model = kwargs["model"]
|
|
@@ -51,7 +43,6 @@ def _user_group_change(**kwargs):
|
|
|
51
43
|
def connect_signals():
|
|
52
44
|
"""Connect actions to signals."""
|
|
53
45
|
logger = get_logger(__name__)
|
|
54
|
-
connection_created.connect(_activate_wal_journal)
|
|
55
46
|
logger.debug("sqlite journal_mode=wal")
|
|
56
47
|
m2m_changed.connect(_user_group_change)
|
|
57
48
|
# post_invalidation.connect(_cache_invalidated)
|
codex/startup.py
CHANGED
|
@@ -87,9 +87,7 @@ def init_admin_flags():
|
|
|
87
87
|
_delete_orphans(AdminFlag, "key", AdminFlag.FlagChoices.values)
|
|
88
88
|
|
|
89
89
|
for key in AdminFlag.FlagChoices.values:
|
|
90
|
-
defaults = {}
|
|
91
|
-
if key in AdminFlag.FALSE_DEFAULTS:
|
|
92
|
-
defaults["on"] = False
|
|
90
|
+
defaults = {"key": key, "on": key not in AdminFlag.FALSE_DEFAULTS}
|
|
93
91
|
flag, created = AdminFlag.objects.get_or_create(defaults=defaults, key=key)
|
|
94
92
|
if created:
|
|
95
93
|
title = CHOICES["admin"]["adminFlags"][flag.key]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as A,V as t}from"./VCheckboxBtn-C4qxJC_o.js";import{a as B,u as F,V as l}from"./VSelectionControl-BVJLEOcO.js";import{B as I,ah as U,M as D,aq as M,D as R,h as q,P as w,cw as N,Q as u,am as r}from"./admin-drawer-panel-Ul8BRcOp.js";const Q=I({...B(),...U(A(),["inline"])},"VCheckbox"),E=D()({name:"VCheckbox",inheritAttrs:!1,props:Q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=M(e,"modelValue"),{isFocused:n,focus:i,blur:m}=F(e),V=R(),p=q(()=>e.id||`checkbox-${V}`);return w(()=>{const[b,f]=N(d),v=l.filterProps(e),h=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:k,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(h,{id:k.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:i,onBlur:m}),a)}})}),{}}});export{E as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as A,V as t}from"./VCheckboxBtn-C4qxJC_o.js";import{a as B,u as F,V as l}from"./VSelectionControl-BVJLEOcO.js";import{B as I,ah as U,M as D,aq as M,D as R,h as q,P as w,cw as N,Q as u,am as r}from"./admin-drawer-panel-Ul8BRcOp.js";const Q=I({...B(),...U(A(),["inline"])},"VCheckbox"),E=D()({name:"VCheckbox",inheritAttrs:!1,props:Q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=M(e,"modelValue"),{isFocused:n,focus:i,blur:m}=F(e),V=R(),p=q(()=>e.id||`checkbox-${V}`);return w(()=>{const[b,f]=N(d),v=l.filterProps(e),h=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:k,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(h,{id:k.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:i,onBlur:m}),a)}})}),{}}});export{E as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as f,d as o}from"./VSelectionControl-BVJLEOcO.js";import{B as V,b7 as h,M as v,aq as c,h as l,P as I,ah as k,Q as x,am as b}from"./admin-drawer-panel-Ul8BRcOp.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),y=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const a=k(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{y as V,C as m};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as f,d as o}from"./VSelectionControl-BVJLEOcO.js";import{B as V,b7 as h,M as v,aq as c,h as l,P as I,ah as k,Q as x,am as b}from"./admin-drawer-panel-Ul8BRcOp.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),y=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const a=k(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{y as V,C as m};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as Ce,u as pe,V as we,a as Se,b as Ie}from"./VSelect-gqsRzrIv.js";import{m as Fe,V as G}from"./VTextField-D8612eNs.js";import{B as Pe,ah as Ae,aZ as De,M as Re,bV as _e,r as L,s as P,aq as X,h as b,cI as Ee,aj as Me,cJ as A,a as D,n as Y,ac as Te,P as Le,Q as i,al as N,am as F,bq as Ne,aS as ee,cK as Oe,aL as le,cL as Ke,ba as Be,af as Ue,cM as je,an as qe,cN as ze,cO as He,cP as $e}from"./admin-drawer-panel-Ul8BRcOp.js";import{m as Je,u as Qe}from"./filter-Tk2N9xgO.js";import{g as We}from"./VSelectionControl-BVJLEOcO.js";import{V as Ze}from"./VCheckboxBtn-C4qxJC_o.js";function Ge(e,g,R){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,R)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Xe=Pe({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Je({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Ae(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),ul=Re()({name:"VCombobox",props:Xe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var Q;let{emit:R,slots:o}=g;const{t:O}=_e(),V=L(),x=P(!1),k=P(!0),K=P(!1),$=L(),B=L(),U=X(e,"menu"),c=b({get:()=>U.value,set:l=>{var a;U.value&&!l&&((a=$.value)!=null&&a.ΨopenChildren.size)||(U.value=l)}}),s=P(-1);let j=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),J=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=Ee(e),{textColorClasses:oe,textColorStyles:ie}=Me(ae),n=X(e,"modelValue",[],l=>ne($e(l)),l=>{const a=ue(l);return e.multiple?a:a[0]??null}),I=We(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),C=P(!e.multiple&&!y.value?((Q=n.value[0])==null?void 0:Q.title)??"":""),v=b({get:()=>C.value,set:l=>{var a;if(C.value=l??"",!e.multiple&&!y.value&&(n.value=[A(e,l)]),l&&e.multiple&&((a=e.delimiters)!=null&&a.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(t=>{t=t.trim(),t&&h(A(e,t))}),C.value="")}l||(s.value=-1),k.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);D(C,l=>{j?Y(()=>j=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),D(n,l=>{var a;!e.multiple&&!y.value&&(C.value=((a=l[0])==null?void 0:a.title)??"")});const{filteredItems:E,getMatches:re}=Qe(e,te,()=>k.value?"":v.value),p=b(()=>e.hideSelected?E.value.filter(l=>!n.value.some(a=>a.value===l.value)):E.value),ce=b(()=>n.value.map(l=>l.value)),q=b(()=>{var a;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((a=p.value[0])==null?void 0:a.title))&&p.value.length>0&&!k.value&&!K.value}),z=b(()=>e.hideNoData&&!p.value.length||e.readonly||(I==null?void 0:I.isReadonly.value)),H=L(),ve=pe(H,V);function de(l){j=!0,e.openOnClear&&(c.value=!0)}function fe(){z.value||(c.value=!0)}function me(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function be(l){var a;ze(l)&&((a=V.value)==null||a.focus())}function he(l){var t;if(He(l)||e.readonly||I!=null&&I.isReadonly.value)return;const a=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(q.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(E.value[0]),k.value=!0),l.key==="ArrowDown"&&q.value&&((t=H.value)==null||t.focus("next")),l.key==="Enter"&&v.value&&(h(A(e,v.value)),y.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&a>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;e.eager&&((l=B.value)==null||l.calculateVisibleItems())}function Ve(){var l;x.value&&(k.value=!0,(l=V.value)==null||l.focus())}function h(l){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),t=a??!~r;if(~r){const u=t?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else t&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=a!==!1;n.value=r?[l]:[],C.value=r&&!y.value?l.title:"",Y(()=>{c.value=!1,k.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function ye(l){K.value=!1}function ke(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return D(x,(l,a)=>{if(!(l||l===a)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(A(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:t}=r;return t===v.value})?C.value="":h(A(e,v.value))}}),D(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(a=>n.value.some(r=>e.valueComparator(r.value,a.value)));Te&&window.requestAnimationFrame(()=>{var a;l>=0&&((a=B.value)==null||a.scrollToIndex(l))})}}),D(()=>e.items,(l,a)=>{c.value||x.value&&!a.length&&l.length&&(c.value=!0)}),Le(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),a=n.value.length>0,r=G.filterProps(e);return i(G,F({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[t=>v.value=t,ke],focused:x.value,"onUpdate:focused":t=>x.value=t,validationValue:n.externalValue,counterValue:se.value,dirty:a,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:a?void 0:e.placeholder,"onClick:clear":de,"onMousedown:control":fe,onKeydown:he}),{...o,default:()=>i(N,null,[i(we,F({ref:$,modelValue:c.value,"onUpdate:modelValue":t=>c.value=t,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ge,onAfterLeave:Ve},e.menuProps),{default:()=>[l&&i(Ne,F({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:t=>t.preventDefault(),onKeydown:be,onFocusin:xe,onFocusout:ye,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},ve,e.listProps),{default:()=>{var t,u,m;return[(t=o["prepend-item"])==null?void 0:t.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(Se,{ref:B,renderless:!0,items:p.value},{default:w=>{var Z;let{item:d,index:S,itemRef:f}=w;const W=F(d.props,{ref:f,key:S,active:q.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Z=o.item)==null?void 0:Z.call(o,{item:d,index:S,props:W}))??i(ee,F(W,{role:"option"}),{prepend:M=>{let{isSelected:T}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(Ze,{key:d.value,modelValue:T,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Oe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,T;return k.value?d.title:Ge(d.title,(M=re(d))==null?void 0:M.title,((T=v.value)==null?void 0:T.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((t,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(t,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Ke(_.value?o.chip({item:t,index:u,props:w}):o.selection({item:t,index:u})):void 0;if(!(d&&!S))return i("div",{key:t.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Be,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:t.title}}},{default:()=>[S]}):i(Ie,F({key:"chip",closable:e.closableChips,size:"small",text:t.title,disabled:t.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[t.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var t=arguments.length,u=new Array(t),m=0;m<t;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:me,onClick:je,"aria-label":O(J.value),title:O(J.value),tabindex:"-1"},null):void 0])}})}),qe({isFocused:x,isPristine:k,menu:c,search:v,selectionIndex:s,filteredItems:E,select:h},V)}});export{ul as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as Ce,u as pe,V as we,a as Se,b as Ie}from"./VSelect-gqsRzrIv.js";import{m as Fe,V as G}from"./VTextField-D8612eNs.js";import{B as Pe,ah as Ae,aZ as De,M as Re,bV as _e,r as L,s as P,aq as X,h as b,cI as Ee,aj as Me,cJ as A,a as D,n as Y,ac as Te,P as Le,Q as i,al as N,am as F,bq as Ne,aS as ee,cK as Oe,aL as le,cL as Ke,ba as Be,af as Ue,cM as je,an as qe,cN as ze,cO as He,cP as $e}from"./admin-drawer-panel-Ul8BRcOp.js";import{m as Je,u as Qe}from"./filter-Tk2N9xgO.js";import{g as We}from"./VSelectionControl-BVJLEOcO.js";import{V as Ze}from"./VCheckboxBtn-C4qxJC_o.js";function Ge(e,g,R){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,R)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Xe=Pe({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Je({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Ae(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),ul=Re()({name:"VCombobox",props:Xe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var Q;let{emit:R,slots:o}=g;const{t:O}=_e(),V=L(),x=P(!1),k=P(!0),K=P(!1),$=L(),B=L(),U=X(e,"menu"),c=b({get:()=>U.value,set:l=>{var a;U.value&&!l&&((a=$.value)!=null&&a.ΨopenChildren.size)||(U.value=l)}}),s=P(-1);let j=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),J=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=Ee(e),{textColorClasses:oe,textColorStyles:ie}=Me(ae),n=X(e,"modelValue",[],l=>ne($e(l)),l=>{const a=ue(l);return e.multiple?a:a[0]??null}),I=We(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),C=P(!e.multiple&&!y.value?((Q=n.value[0])==null?void 0:Q.title)??"":""),v=b({get:()=>C.value,set:l=>{var a;if(C.value=l??"",!e.multiple&&!y.value&&(n.value=[A(e,l)]),l&&e.multiple&&((a=e.delimiters)!=null&&a.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(t=>{t=t.trim(),t&&h(A(e,t))}),C.value="")}l||(s.value=-1),k.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);D(C,l=>{j?Y(()=>j=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),D(n,l=>{var a;!e.multiple&&!y.value&&(C.value=((a=l[0])==null?void 0:a.title)??"")});const{filteredItems:E,getMatches:re}=Qe(e,te,()=>k.value?"":v.value),p=b(()=>e.hideSelected?E.value.filter(l=>!n.value.some(a=>a.value===l.value)):E.value),ce=b(()=>n.value.map(l=>l.value)),q=b(()=>{var a;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((a=p.value[0])==null?void 0:a.title))&&p.value.length>0&&!k.value&&!K.value}),z=b(()=>e.hideNoData&&!p.value.length||e.readonly||(I==null?void 0:I.isReadonly.value)),H=L(),ve=pe(H,V);function de(l){j=!0,e.openOnClear&&(c.value=!0)}function fe(){z.value||(c.value=!0)}function me(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function be(l){var a;ze(l)&&((a=V.value)==null||a.focus())}function he(l){var t;if(He(l)||e.readonly||I!=null&&I.isReadonly.value)return;const a=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(q.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(E.value[0]),k.value=!0),l.key==="ArrowDown"&&q.value&&((t=H.value)==null||t.focus("next")),l.key==="Enter"&&v.value&&(h(A(e,v.value)),y.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&a>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;e.eager&&((l=B.value)==null||l.calculateVisibleItems())}function Ve(){var l;x.value&&(k.value=!0,(l=V.value)==null||l.focus())}function h(l){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),t=a??!~r;if(~r){const u=t?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else t&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=a!==!1;n.value=r?[l]:[],C.value=r&&!y.value?l.title:"",Y(()=>{c.value=!1,k.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function ye(l){K.value=!1}function ke(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return D(x,(l,a)=>{if(!(l||l===a)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(A(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:t}=r;return t===v.value})?C.value="":h(A(e,v.value))}}),D(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(a=>n.value.some(r=>e.valueComparator(r.value,a.value)));Te&&window.requestAnimationFrame(()=>{var a;l>=0&&((a=B.value)==null||a.scrollToIndex(l))})}}),D(()=>e.items,(l,a)=>{c.value||x.value&&!a.length&&l.length&&(c.value=!0)}),Le(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),a=n.value.length>0,r=G.filterProps(e);return i(G,F({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[t=>v.value=t,ke],focused:x.value,"onUpdate:focused":t=>x.value=t,validationValue:n.externalValue,counterValue:se.value,dirty:a,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:a?void 0:e.placeholder,"onClick:clear":de,"onMousedown:control":fe,onKeydown:he}),{...o,default:()=>i(N,null,[i(we,F({ref:$,modelValue:c.value,"onUpdate:modelValue":t=>c.value=t,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ge,onAfterLeave:Ve},e.menuProps),{default:()=>[l&&i(Ne,F({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:t=>t.preventDefault(),onKeydown:be,onFocusin:xe,onFocusout:ye,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},ve,e.listProps),{default:()=>{var t,u,m;return[(t=o["prepend-item"])==null?void 0:t.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(Se,{ref:B,renderless:!0,items:p.value},{default:w=>{var Z;let{item:d,index:S,itemRef:f}=w;const W=F(d.props,{ref:f,key:S,active:q.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Z=o.item)==null?void 0:Z.call(o,{item:d,index:S,props:W}))??i(ee,F(W,{role:"option"}),{prepend:M=>{let{isSelected:T}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(Ze,{key:d.value,modelValue:T,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Oe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,T;return k.value?d.title:Ge(d.title,(M=re(d))==null?void 0:M.title,((T=v.value)==null?void 0:T.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((t,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(t,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Ke(_.value?o.chip({item:t,index:u,props:w}):o.selection({item:t,index:u})):void 0;if(!(d&&!S))return i("div",{key:t.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Be,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:t.title}}},{default:()=>[S]}):i(Ie,F({key:"chip",closable:e.closableChips,size:"small",text:t.title,disabled:t.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[t.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var t=arguments.length,u=new Array(t),m=0;m<t;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:me,onClick:je,"aria-label":O(J.value),title:O(J.value),tabindex:"-1"},null):void 0])}})}),qe({isFocused:x,isPristine:k,menu:c,search:v,selectionIndex:s,filteredItems:E,select:h},V)}});export{ul as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.v-combobox .v-field .v-text-field__prefix,.v-combobox .v-field .v-text-field__suffix,.v-combobox .v-field .v-field__input,.v-combobox .v-field.v-field{cursor:text}.v-combobox .v-field .v-field__input>input{flex:1 1}.v-combobox .v-field input{min-width:64px}.v-combobox .v-field:not(.v-field--focused) input{min-width:0}.v-combobox .v-field--dirty .v-combobox__selection{margin-inline-end:2px}.v-combobox .v-combobox__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-combobox__content{overflow:hidden}.v-combobox__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-combobox__content{border-radius:4px}.v-combobox__mask{background:rgb(var(--v-theme-surface-light))}.v-combobox__selection{display:inline-flex;align-items:center;height:1.5rem;letter-spacing:inherit;line-height:inherit;max-width:calc(100% - 4px)}.v-combobox__selection:first-child{margin-inline-start:0}.v-combobox--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-combobox--selecting-index .v-combobox__selection{opacity:var(--v-medium-emphasis-opacity)}.v-combobox--selecting-index .v-combobox__selection--selected{opacity:1}.v-combobox--selecting-index .v-field__input>input{caret-color:transparent}.v-combobox--single:not(.v-combobox--selection-slot).v-text-field input{flex:1 1;position:absolute;left:0;right:0;width:100%;padding-inline:inherit}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--active input{transition:none}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--dirty:not(.v-field--focused) input{opacity:0}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--focused .v-combobox__selection{opacity:0}.v-combobox__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-combobox--active-menu .v-combobox__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.v-combobox .v-field .v-text-field__prefix,.v-combobox .v-field .v-text-field__suffix,.v-combobox .v-field .v-field__input,.v-combobox .v-field.v-field{cursor:text}.v-combobox .v-field .v-field__input>input{flex:1 1}.v-combobox .v-field input{min-width:64px}.v-combobox .v-field:not(.v-field--focused) input{min-width:0}.v-combobox .v-field--dirty .v-combobox__selection{margin-inline-end:2px}.v-combobox .v-combobox__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-combobox__content{overflow:hidden}.v-combobox__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-combobox__content{border-radius:4px}.v-combobox__mask{background:rgb(var(--v-theme-surface-light))}.v-combobox__selection{display:inline-flex;align-items:center;height:1.5rem;letter-spacing:inherit;line-height:inherit;max-width:calc(100% - 4px)}.v-combobox__selection:first-child{margin-inline-start:0}.v-combobox--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-combobox--selecting-index .v-combobox__selection{opacity:var(--v-medium-emphasis-opacity)}.v-combobox--selecting-index .v-combobox__selection--selected{opacity:1}.v-combobox--selecting-index .v-field__input>input{caret-color:transparent}.v-combobox--single:not(.v-combobox--selection-slot).v-text-field input{flex:1 1;position:absolute;left:0;right:0;width:100%;padding-inline:inherit}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--active input{transition:none}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--dirty:not(.v-field--focused) input{opacity:0}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--focused .v-combobox__selection{opacity:0}.v-combobox__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-combobox--active-menu .v-combobox__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}
|
|
Binary file
|