codex 1.5.13a2__py3-none-any.whl → 1.5.15__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/importer/create_fks.py +13 -9
- codex/librarian/importer/importerd.py +2 -2
- codex/models/comic.py +24 -13
- codex/search/backend.py +9 -1
- codex/search/indexes.py +2 -0
- codex/settings/settings.py +34 -22
- codex/settings/whitenoise.py +1 -1
- codex/static_root/assets/{VCheckbox-BR-5qiW4.d4e12b9a3549.js → VCheckbox-BV0qJgRM.8a1f1b5bcc2e.js} +1 -1
- codex/static_root/assets/VCheckbox-BV0qJgRM.8a1f1b5bcc2e.js.br +0 -0
- codex/static_root/assets/VCheckbox-BV0qJgRM.8a1f1b5bcc2e.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-BR-5qiW4.js → VCheckbox-BV0qJgRM.js} +1 -1
- codex/static_root/assets/VCheckbox-BV0qJgRM.js.br +0 -0
- codex/static_root/assets/VCheckbox-BV0qJgRM.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-C7T6Tf80.597cfcc88998.js → VCheckboxBtn-BdndkrO2.956f0290476e.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BdndkrO2.956f0290476e.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BdndkrO2.956f0290476e.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-C7T6Tf80.js → VCheckboxBtn-BdndkrO2.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BdndkrO2.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BdndkrO2.js.gz +0 -0
- codex/static_root/assets/{VCombobox-CA6L757N.c9c01cbc12eb.js → VCombobox-CLS5SQ-7.2fa6db80509a.js} +1 -1
- codex/static_root/assets/VCombobox-CLS5SQ-7.2fa6db80509a.js.br +0 -0
- codex/static_root/assets/VCombobox-CLS5SQ-7.2fa6db80509a.js.gz +0 -0
- codex/static_root/assets/{VCombobox-CA6L757N.js → VCombobox-CLS5SQ-7.js} +1 -1
- codex/static_root/assets/VCombobox-CLS5SQ-7.js.br +0 -0
- codex/static_root/assets/VCombobox-CLS5SQ-7.js.gz +0 -0
- codex/static_root/assets/{VDataTableVirtual-DgdQqVhC.118522d90dfd.js → VDataTableVirtual-m8mHl6dt.b13a9468bcc5.js} +1 -1
- codex/static_root/assets/VDataTableVirtual-m8mHl6dt.b13a9468bcc5.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-m8mHl6dt.b13a9468bcc5.js.gz +0 -0
- codex/static_root/assets/{VDataTableVirtual-DgdQqVhC.js → VDataTableVirtual-m8mHl6dt.js} +1 -1
- codex/static_root/assets/VDataTableVirtual-m8mHl6dt.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-m8mHl6dt.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanel-DSgyCbMu.ce806293d8ad.js → VExpansionPanel-RN8wJUzD.0d5ce5a6da7a.js} +1 -1
- codex/static_root/assets/VExpansionPanel-RN8wJUzD.0d5ce5a6da7a.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-RN8wJUzD.0d5ce5a6da7a.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanel-DSgyCbMu.js → VExpansionPanel-RN8wJUzD.js} +1 -1
- codex/static_root/assets/VExpansionPanel-RN8wJUzD.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-RN8wJUzD.js.gz +0 -0
- codex/static_root/assets/{VMain-CDWaq_uU.9350720f2523.js → VMain-BNpmVWfH.3a9306ab9ee0.js} +1 -1
- codex/static_root/assets/VMain-BNpmVWfH.3a9306ab9ee0.js.br +0 -0
- codex/static_root/assets/VMain-BNpmVWfH.3a9306ab9ee0.js.gz +0 -0
- codex/static_root/assets/{VMain-CDWaq_uU.js → VMain-BNpmVWfH.js} +1 -1
- codex/static_root/assets/VMain-BNpmVWfH.js.br +0 -0
- codex/static_root/assets/VMain-BNpmVWfH.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-1KnJv1YV.c78bc794333b.js → VRadioGroup-Chl8BuhK.e3f030585009.js} +1 -1
- codex/static_root/assets/VRadioGroup-Chl8BuhK.e3f030585009.js.br +0 -0
- codex/static_root/assets/VRadioGroup-Chl8BuhK.e3f030585009.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-1KnJv1YV.js → VRadioGroup-Chl8BuhK.js} +1 -1
- codex/static_root/assets/VRadioGroup-Chl8BuhK.js.br +0 -0
- codex/static_root/assets/VRadioGroup-Chl8BuhK.js.gz +0 -0
- codex/static_root/assets/VSelect-DAi26YRs.49259744181a.js +1 -0
- codex/static_root/assets/VSelect-DAi26YRs.49259744181a.js.br +0 -0
- codex/static_root/assets/VSelect-DAi26YRs.49259744181a.js.gz +0 -0
- codex/static_root/assets/VSelect-DAi26YRs.js +1 -0
- codex/static_root/assets/VSelect-DAi26YRs.js.br +0 -0
- codex/static_root/assets/VSelect-DAi26YRs.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-CEOyDLZC.60a1d02bebde.js → VSelectionControl-K1Fk4HTO.2dcaf33858a5.js} +1 -1
- codex/static_root/assets/VSelectionControl-K1Fk4HTO.2dcaf33858a5.js.br +0 -0
- codex/static_root/assets/VSelectionControl-K1Fk4HTO.2dcaf33858a5.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-CEOyDLZC.js → VSelectionControl-K1Fk4HTO.js} +1 -1
- codex/static_root/assets/VSelectionControl-K1Fk4HTO.js.br +0 -0
- codex/static_root/assets/VSelectionControl-K1Fk4HTO.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-r8lyA6_4.d51fe70b8cfa.js → VSlideGroup-BpKJ2pWX.7aa41334ab13.js} +1 -1
- codex/static_root/assets/VSlideGroup-BpKJ2pWX.7aa41334ab13.js.br +0 -0
- codex/static_root/assets/VSlideGroup-BpKJ2pWX.7aa41334ab13.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-r8lyA6_4.js → VSlideGroup-BpKJ2pWX.js} +1 -1
- codex/static_root/assets/VSlideGroup-BpKJ2pWX.js.br +0 -0
- codex/static_root/assets/VSlideGroup-BpKJ2pWX.js.gz +0 -0
- codex/static_root/assets/{VTable-CyZmujCR.5d4fdcc0324d.js → VTable-w7IruQG5.31c9fbb69c7a.js} +1 -1
- codex/static_root/assets/VTable-w7IruQG5.31c9fbb69c7a.js.br +0 -0
- codex/static_root/assets/VTable-w7IruQG5.31c9fbb69c7a.js.gz +0 -0
- codex/static_root/assets/{VTable-CyZmujCR.js → VTable-w7IruQG5.js} +1 -1
- codex/static_root/assets/VTable-w7IruQG5.js.br +0 -0
- codex/static_root/assets/VTable-w7IruQG5.js.gz +0 -0
- codex/static_root/assets/{VToolbar-qYCVOLXR.07eda01fd108.js → VToolbar-BgYY-L1O.a03387cf1d9c.js} +2 -2
- codex/static_root/assets/VToolbar-BgYY-L1O.a03387cf1d9c.js.br +0 -0
- codex/static_root/assets/VToolbar-BgYY-L1O.a03387cf1d9c.js.gz +0 -0
- codex/static_root/assets/{VToolbar-qYCVOLXR.js → VToolbar-BgYY-L1O.js} +2 -2
- codex/static_root/assets/VToolbar-BgYY-L1O.js.br +0 -0
- codex/static_root/assets/VToolbar-BgYY-L1O.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-DAPhfogt.d9e874ecf5be.js → VWindowItem-30SgsTJ6.84daf41a1f2e.js} +1 -1
- codex/static_root/assets/VWindowItem-30SgsTJ6.84daf41a1f2e.js.br +0 -0
- codex/static_root/assets/VWindowItem-30SgsTJ6.84daf41a1f2e.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-DAPhfogt.js → VWindowItem-30SgsTJ6.js} +1 -1
- codex/static_root/assets/VWindowItem-30SgsTJ6.js.br +0 -0
- codex/static_root/assets/VWindowItem-30SgsTJ6.js.gz +0 -0
- codex/static_root/assets/{admin-CfqyTXqy.b073b6fa7ebd.js → admin-C3zxbREC.47850e1531e6.js} +1 -1
- codex/static_root/assets/admin-C3zxbREC.47850e1531e6.js.br +0 -0
- codex/static_root/assets/admin-C3zxbREC.47850e1531e6.js.gz +0 -0
- codex/static_root/assets/{admin-CfqyTXqy.js → admin-C3zxbREC.js} +1 -1
- codex/static_root/assets/admin-C3zxbREC.js.br +0 -0
- codex/static_root/assets/admin-C3zxbREC.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Cr-0BCQv.b519336cb005.css +1 -0
- codex/static_root/assets/admin-drawer-panel-Cr-0BCQv.b519336cb005.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Cr-0BCQv.b519336cb005.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Cr-0BCQv.css +1 -0
- codex/static_root/assets/admin-drawer-panel-Cr-0BCQv.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Cr-0BCQv.css.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-UQNBz5Mr.4f87b323dcdc.js → admin-drawer-panel-CzxhSiRn.05e55ef69fc4.js} +2 -2
- codex/static_root/assets/admin-drawer-panel-CzxhSiRn.05e55ef69fc4.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-CzxhSiRn.05e55ef69fc4.js.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-UQNBz5Mr.js → admin-drawer-panel-CzxhSiRn.js} +2 -2
- codex/static_root/assets/admin-drawer-panel-CzxhSiRn.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-CzxhSiRn.js.gz +0 -0
- codex/static_root/assets/{browser-CTxEKlCx.211d729d9165.css → browser-Bnfe7deQ.ca3f3bb6c77c.css} +1 -1
- codex/static_root/assets/browser-Bnfe7deQ.ca3f3bb6c77c.css.br +0 -0
- codex/static_root/assets/browser-Bnfe7deQ.ca3f3bb6c77c.css.gz +0 -0
- codex/static_root/assets/{browser-CTxEKlCx.css → browser-Bnfe7deQ.css} +1 -1
- codex/static_root/assets/browser-Bnfe7deQ.css.br +0 -0
- codex/static_root/assets/browser-Bnfe7deQ.css.gz +0 -0
- codex/static_root/assets/browser-D2qE3hmd.ab2969442cdb.js +1 -0
- codex/static_root/assets/browser-D2qE3hmd.ab2969442cdb.js.br +0 -0
- codex/static_root/assets/browser-D2qE3hmd.ab2969442cdb.js.gz +0 -0
- codex/static_root/assets/browser-D2qE3hmd.js +1 -0
- codex/static_root/assets/browser-D2qE3hmd.js.br +0 -0
- codex/static_root/assets/browser-D2qE3hmd.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-D80TfT-n.284c707d3d79.js → change-password-dialog-DxrgqKSG.c08c136c116f.js} +1 -1
- codex/static_root/assets/change-password-dialog-DxrgqKSG.c08c136c116f.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DxrgqKSG.c08c136c116f.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-D80TfT-n.js → change-password-dialog-DxrgqKSG.js} +1 -1
- codex/static_root/assets/change-password-dialog-DxrgqKSG.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DxrgqKSG.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-CTwvsrD2.8de12739f859.js → confirm-dialog-WTc9Btcl.3e03fa1aa90f.js} +1 -1
- codex/static_root/assets/confirm-dialog-WTc9Btcl.3e03fa1aa90f.js.br +0 -0
- codex/static_root/assets/confirm-dialog-WTc9Btcl.3e03fa1aa90f.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-CTwvsrD2.js → confirm-dialog-WTc9Btcl.js} +1 -1
- codex/static_root/assets/confirm-dialog-WTc9Btcl.js.br +0 -0
- codex/static_root/assets/confirm-dialog-WTc9Btcl.js.gz +0 -0
- codex/static_root/assets/{confirm-footer-CLcqjnLg.ebed69027134.js → confirm-footer-4RE1GmaG.55e3e96c37c2.js} +1 -1
- codex/static_root/assets/confirm-footer-4RE1GmaG.55e3e96c37c2.js.br +0 -0
- codex/static_root/assets/confirm-footer-4RE1GmaG.55e3e96c37c2.js.gz +0 -0
- codex/static_root/assets/{confirm-footer-CLcqjnLg.js → confirm-footer-4RE1GmaG.js} +1 -1
- codex/static_root/assets/confirm-footer-4RE1GmaG.js.br +0 -0
- codex/static_root/assets/confirm-footer-4RE1GmaG.js.gz +0 -0
- codex/static_root/assets/{datetime-column-DPVO98E2.27e26fb391ca.js → datetime-column-Tyqoi3Em.b5153e192f06.js} +1 -1
- codex/static_root/assets/datetime-column-Tyqoi3Em.b5153e192f06.js.br +0 -0
- codex/static_root/assets/datetime-column-Tyqoi3Em.b5153e192f06.js.gz +0 -0
- codex/static_root/assets/{datetime-column-DPVO98E2.js → datetime-column-Tyqoi3Em.js} +1 -1
- codex/static_root/assets/datetime-column-Tyqoi3Em.js.br +0 -0
- codex/static_root/assets/datetime-column-Tyqoi3Em.js.gz +0 -0
- codex/static_root/assets/{filter-Cqjy01SO.71710ea1c7f8.js → filter-kmJ9r_lC.3f91e167b7c7.js} +1 -1
- codex/static_root/assets/filter-kmJ9r_lC.3f91e167b7c7.js.br +0 -0
- codex/static_root/assets/filter-kmJ9r_lC.3f91e167b7c7.js.gz +0 -0
- codex/static_root/assets/{filter-Cqjy01SO.js → filter-kmJ9r_lC.js} +1 -1
- codex/static_root/assets/filter-kmJ9r_lC.js.br +0 -0
- codex/static_root/assets/filter-kmJ9r_lC.js.gz +0 -0
- codex/static_root/assets/flag-tab-D_HjkAta.203bedf35ce7.css +1 -0
- codex/static_root/assets/flag-tab-D_HjkAta.203bedf35ce7.css.br +0 -0
- codex/static_root/assets/flag-tab-D_HjkAta.203bedf35ce7.css.gz +0 -0
- codex/static_root/assets/flag-tab-D_HjkAta.css +1 -0
- codex/static_root/assets/flag-tab-D_HjkAta.css.br +0 -0
- codex/static_root/assets/flag-tab-D_HjkAta.css.gz +0 -0
- codex/static_root/assets/flag-tab-DgjppJj7.b299cc00da4c.js +1 -0
- codex/static_root/assets/flag-tab-DgjppJj7.b299cc00da4c.js.br +0 -0
- codex/static_root/assets/flag-tab-DgjppJj7.b299cc00da4c.js.gz +0 -0
- codex/static_root/assets/flag-tab-DgjppJj7.js +1 -0
- codex/static_root/assets/flag-tab-DgjppJj7.js.br +0 -0
- codex/static_root/assets/flag-tab-DgjppJj7.js.gz +0 -0
- codex/static_root/assets/{group-tab-DknI2YL3.7b2e5d32ee7e.js → group-tab-VLyH34rF.2a462ffea2e0.js} +1 -1
- codex/static_root/assets/group-tab-VLyH34rF.2a462ffea2e0.js.br +0 -0
- codex/static_root/assets/group-tab-VLyH34rF.2a462ffea2e0.js.gz +0 -0
- codex/static_root/assets/{group-tab-DknI2YL3.js → group-tab-VLyH34rF.js} +1 -1
- codex/static_root/assets/group-tab-VLyH34rF.js.br +0 -0
- codex/static_root/assets/group-tab-VLyH34rF.js.gz +0 -0
- codex/static_root/assets/{http-error-DxxoT0wf.8f26afe5c1dd.js → http-error-og3kcZk_.b3743f5ed8c7.js} +1 -1
- codex/static_root/assets/http-error-og3kcZk_.b3743f5ed8c7.js.br +0 -0
- codex/static_root/assets/http-error-og3kcZk_.b3743f5ed8c7.js.gz +0 -0
- codex/static_root/assets/{http-error-DxxoT0wf.js → http-error-og3kcZk_.js} +1 -1
- codex/static_root/assets/http-error-og3kcZk_.js.br +0 -0
- codex/static_root/assets/http-error-og3kcZk_.js.gz +0 -0
- codex/static_root/assets/{library-tab-DXCuu0zS.6a7b7e48a6f5.js → library-tab-CdnqJ6nG.6896ffa0dd5b.js} +1 -1
- codex/static_root/assets/library-tab-CdnqJ6nG.6896ffa0dd5b.js.br +0 -0
- codex/static_root/assets/library-tab-CdnqJ6nG.6896ffa0dd5b.js.gz +0 -0
- codex/static_root/assets/{library-tab-DXCuu0zS.js → library-tab-CdnqJ6nG.js} +1 -1
- codex/static_root/assets/library-tab-CdnqJ6nG.js.br +0 -0
- codex/static_root/assets/library-tab-CdnqJ6nG.js.gz +0 -0
- codex/static_root/assets/{main-CacfwsKA.4f849ef1c5db.css → main-ClKzvaJK.04ea1888c6b4.css} +1 -1
- codex/static_root/assets/main-ClKzvaJK.04ea1888c6b4.css.br +0 -0
- codex/static_root/assets/{main-CacfwsKA.4f849ef1c5db.css.gz → main-ClKzvaJK.04ea1888c6b4.css.gz} +0 -0
- codex/static_root/assets/{main-CacfwsKA.css → main-ClKzvaJK.css} +1 -1
- codex/static_root/assets/main-ClKzvaJK.css.br +0 -0
- codex/static_root/assets/{main-CacfwsKA.css.gz → main-ClKzvaJK.css.gz} +0 -0
- codex/static_root/assets/main-JHk9CBom.515cee8fb4da.js +37 -0
- codex/static_root/assets/main-JHk9CBom.515cee8fb4da.js.br +0 -0
- codex/static_root/assets/main-JHk9CBom.515cee8fb4da.js.gz +0 -0
- codex/static_root/assets/main-JHk9CBom.js +37 -0
- codex/static_root/assets/main-JHk9CBom.js.br +0 -0
- codex/static_root/assets/main-JHk9CBom.js.gz +0 -0
- codex/static_root/assets/{metadata-dialog-CZDWNVCD.js → metadata-dialog-aQwrbJeb.b2630b04e454.js} +1 -1
- codex/static_root/assets/metadata-dialog-aQwrbJeb.b2630b04e454.js.br +0 -0
- codex/static_root/assets/metadata-dialog-aQwrbJeb.b2630b04e454.js.gz +0 -0
- codex/static_root/assets/{metadata-dialog-CZDWNVCD.b78ed72bc090.js → metadata-dialog-aQwrbJeb.js} +1 -1
- codex/static_root/assets/metadata-dialog-aQwrbJeb.js.br +0 -0
- codex/static_root/assets/metadata-dialog-aQwrbJeb.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-C_LEA8HV.6bd1dba60a0b.js → pdf-doc-ChcRJKun.a4178fd5d85b.js} +1 -1
- codex/static_root/assets/pdf-doc-ChcRJKun.a4178fd5d85b.js.br +0 -0
- codex/static_root/assets/pdf-doc-ChcRJKun.a4178fd5d85b.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-C_LEA8HV.js → pdf-doc-ChcRJKun.js} +1 -1
- codex/static_root/assets/pdf-doc-ChcRJKun.js.br +0 -0
- codex/static_root/assets/pdf-doc-ChcRJKun.js.gz +0 -0
- codex/static_root/assets/{reader-DXk46jdF.0a2b0809bd02.js → reader-D3pWjpiY.df6e64f34984.js} +2 -2
- codex/static_root/assets/reader-D3pWjpiY.df6e64f34984.js.br +0 -0
- codex/static_root/assets/reader-D3pWjpiY.df6e64f34984.js.gz +0 -0
- codex/static_root/assets/{reader-DXk46jdF.js → reader-D3pWjpiY.js} +2 -2
- codex/static_root/assets/reader-D3pWjpiY.js.br +0 -0
- codex/static_root/assets/reader-D3pWjpiY.js.gz +0 -0
- codex/static_root/assets/{stats-tab-Dy0YEoJ4.f24c8ddba0d3.js → stats-tab-BN1iwTRV.68d515c72c0f.js} +1 -1
- codex/static_root/assets/stats-tab-BN1iwTRV.68d515c72c0f.js.br +0 -0
- codex/static_root/assets/stats-tab-BN1iwTRV.68d515c72c0f.js.gz +0 -0
- codex/static_root/assets/{stats-tab-Dy0YEoJ4.js → stats-tab-BN1iwTRV.js} +1 -1
- codex/static_root/assets/stats-tab-BN1iwTRV.js.br +0 -0
- codex/static_root/assets/stats-tab-BN1iwTRV.js.gz +0 -0
- codex/static_root/assets/{task-tab-Bv3B4rCC.1546850899dc.js → task-tab-DmjPFgr7.224c9932e72d.js} +1 -1
- codex/static_root/assets/task-tab-DmjPFgr7.224c9932e72d.js.br +0 -0
- codex/static_root/assets/task-tab-DmjPFgr7.224c9932e72d.js.gz +0 -0
- codex/static_root/assets/{task-tab-Bv3B4rCC.js → task-tab-DmjPFgr7.js} +1 -1
- codex/static_root/assets/task-tab-DmjPFgr7.js.br +0 -0
- codex/static_root/assets/task-tab-DmjPFgr7.js.gz +0 -0
- codex/static_root/assets/{user-tab-CSF2DZe5.8e65aaed43b2.js → user-tab-G70WK0kT.e76a0bfc1b66.js} +1 -1
- codex/static_root/assets/user-tab-G70WK0kT.e76a0bfc1b66.js.br +0 -0
- codex/static_root/assets/user-tab-G70WK0kT.e76a0bfc1b66.js.gz +0 -0
- codex/static_root/assets/{user-tab-CSF2DZe5.js → user-tab-G70WK0kT.js} +1 -1
- codex/static_root/assets/user-tab-G70WK0kT.js.br +0 -0
- codex/static_root/assets/user-tab-G70WK0kT.js.gz +0 -0
- codex/static_root/{manifest.24ec466b9bcf.json → manifest.de2177b31d14.json} +210 -210
- codex/static_root/manifest.de2177b31d14.json.br +0 -0
- codex/static_root/manifest.de2177b31d14.json.gz +0 -0
- codex/static_root/manifest.json +210 -210
- codex/static_root/manifest.json.br +0 -0
- codex/static_root/manifest.json.gz +0 -0
- codex/static_root/staticfiles.json +1 -1
- codex/status.py +7 -3
- codex/templates/search/indexes/codex/comic_text.txt +1 -0
- codex/views/browser/browser.py +3 -4
- codex/views/browser/browser_annotations.py +44 -34
- codex/views/browser/metadata.py +7 -5
- codex/views/error.py +2 -2
- codex/views/opds/v1/entry/entry.py +3 -1
- codex/views/opds/v1/entry/links.py +6 -2
- codex/views/opds/v1/facets.py +1 -0
- codex/views/opds/v1/feed.py +44 -8
- codex/views/opds/v1/links.py +6 -1
- codex/views/opds/v2/feed.py +3 -1
- codex/views/opds/v2/publications.py +6 -1
- {codex-1.5.13a2.dist-info → codex-1.5.15.dist-info}/METADATA +2 -1
- {codex-1.5.13a2.dist-info → codex-1.5.15.dist-info}/RECORD +248 -248
- codex/static_root/assets/VCheckbox-BR-5qiW4.d4e12b9a3549.js.br +0 -0
- codex/static_root/assets/VCheckbox-BR-5qiW4.d4e12b9a3549.js.gz +0 -0
- codex/static_root/assets/VCheckbox-BR-5qiW4.js.br +0 -0
- codex/static_root/assets/VCheckbox-BR-5qiW4.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-C7T6Tf80.597cfcc88998.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-C7T6Tf80.597cfcc88998.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-C7T6Tf80.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-C7T6Tf80.js.gz +0 -0
- codex/static_root/assets/VCombobox-CA6L757N.c9c01cbc12eb.js.br +0 -0
- codex/static_root/assets/VCombobox-CA6L757N.c9c01cbc12eb.js.gz +0 -0
- codex/static_root/assets/VCombobox-CA6L757N.js.br +0 -0
- codex/static_root/assets/VCombobox-CA6L757N.js.gz +0 -0
- codex/static_root/assets/VDataTableVirtual-DgdQqVhC.118522d90dfd.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-DgdQqVhC.118522d90dfd.js.gz +0 -0
- codex/static_root/assets/VDataTableVirtual-DgdQqVhC.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-DgdQqVhC.js.gz +0 -0
- codex/static_root/assets/VExpansionPanel-DSgyCbMu.ce806293d8ad.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-DSgyCbMu.ce806293d8ad.js.gz +0 -0
- codex/static_root/assets/VExpansionPanel-DSgyCbMu.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-DSgyCbMu.js.gz +0 -0
- codex/static_root/assets/VMain-CDWaq_uU.9350720f2523.js.br +0 -0
- codex/static_root/assets/VMain-CDWaq_uU.9350720f2523.js.gz +0 -0
- codex/static_root/assets/VMain-CDWaq_uU.js.br +0 -0
- codex/static_root/assets/VMain-CDWaq_uU.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-1KnJv1YV.c78bc794333b.js.br +0 -0
- codex/static_root/assets/VRadioGroup-1KnJv1YV.c78bc794333b.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-1KnJv1YV.js.br +0 -0
- codex/static_root/assets/VRadioGroup-1KnJv1YV.js.gz +0 -0
- codex/static_root/assets/VSelect-CLw1oGQg.37122543e75e.js +0 -1
- codex/static_root/assets/VSelect-CLw1oGQg.37122543e75e.js.br +0 -0
- codex/static_root/assets/VSelect-CLw1oGQg.37122543e75e.js.gz +0 -0
- codex/static_root/assets/VSelect-CLw1oGQg.js +0 -1
- codex/static_root/assets/VSelect-CLw1oGQg.js.br +0 -0
- codex/static_root/assets/VSelect-CLw1oGQg.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-CEOyDLZC.60a1d02bebde.js.br +0 -0
- codex/static_root/assets/VSelectionControl-CEOyDLZC.60a1d02bebde.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-CEOyDLZC.js.br +0 -0
- codex/static_root/assets/VSelectionControl-CEOyDLZC.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-r8lyA6_4.d51fe70b8cfa.js.br +0 -0
- codex/static_root/assets/VSlideGroup-r8lyA6_4.d51fe70b8cfa.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-r8lyA6_4.js.br +0 -0
- codex/static_root/assets/VSlideGroup-r8lyA6_4.js.gz +0 -0
- codex/static_root/assets/VTable-CyZmujCR.5d4fdcc0324d.js.br +0 -0
- codex/static_root/assets/VTable-CyZmujCR.5d4fdcc0324d.js.gz +0 -0
- codex/static_root/assets/VTable-CyZmujCR.js.br +0 -0
- codex/static_root/assets/VTable-CyZmujCR.js.gz +0 -0
- codex/static_root/assets/VToolbar-qYCVOLXR.07eda01fd108.js.br +0 -0
- codex/static_root/assets/VToolbar-qYCVOLXR.07eda01fd108.js.gz +0 -0
- codex/static_root/assets/VToolbar-qYCVOLXR.js.br +0 -0
- codex/static_root/assets/VToolbar-qYCVOLXR.js.gz +0 -0
- codex/static_root/assets/VWindowItem-DAPhfogt.d9e874ecf5be.js.br +0 -0
- codex/static_root/assets/VWindowItem-DAPhfogt.d9e874ecf5be.js.gz +0 -0
- codex/static_root/assets/VWindowItem-DAPhfogt.js.br +0 -0
- codex/static_root/assets/VWindowItem-DAPhfogt.js.gz +0 -0
- codex/static_root/assets/admin-CfqyTXqy.b073b6fa7ebd.js.br +0 -0
- codex/static_root/assets/admin-CfqyTXqy.b073b6fa7ebd.js.gz +0 -0
- codex/static_root/assets/admin-CfqyTXqy.js.br +0 -0
- codex/static_root/assets/admin-CfqyTXqy.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Bk7z8uTR.1531b747003f.css +0 -1
- codex/static_root/assets/admin-drawer-panel-Bk7z8uTR.1531b747003f.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Bk7z8uTR.1531b747003f.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Bk7z8uTR.css +0 -1
- codex/static_root/assets/admin-drawer-panel-Bk7z8uTR.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Bk7z8uTR.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-UQNBz5Mr.4f87b323dcdc.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-UQNBz5Mr.4f87b323dcdc.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-UQNBz5Mr.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-UQNBz5Mr.js.gz +0 -0
- codex/static_root/assets/browser-CTxEKlCx.211d729d9165.css.br +0 -0
- codex/static_root/assets/browser-CTxEKlCx.211d729d9165.css.gz +0 -0
- codex/static_root/assets/browser-CTxEKlCx.css.br +0 -0
- codex/static_root/assets/browser-CTxEKlCx.css.gz +0 -0
- codex/static_root/assets/browser-CWqU3TI5.4583f12be6b9.js +0 -1
- codex/static_root/assets/browser-CWqU3TI5.4583f12be6b9.js.br +0 -0
- codex/static_root/assets/browser-CWqU3TI5.4583f12be6b9.js.gz +0 -0
- codex/static_root/assets/browser-CWqU3TI5.js +0 -1
- codex/static_root/assets/browser-CWqU3TI5.js.br +0 -0
- codex/static_root/assets/browser-CWqU3TI5.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-D80TfT-n.284c707d3d79.js.br +0 -0
- codex/static_root/assets/change-password-dialog-D80TfT-n.284c707d3d79.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-D80TfT-n.js.br +0 -0
- codex/static_root/assets/change-password-dialog-D80TfT-n.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-CTwvsrD2.8de12739f859.js.br +0 -0
- codex/static_root/assets/confirm-dialog-CTwvsrD2.8de12739f859.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-CTwvsrD2.js.br +0 -0
- codex/static_root/assets/confirm-dialog-CTwvsrD2.js.gz +0 -0
- codex/static_root/assets/confirm-footer-CLcqjnLg.ebed69027134.js.br +0 -0
- codex/static_root/assets/confirm-footer-CLcqjnLg.ebed69027134.js.gz +0 -0
- codex/static_root/assets/confirm-footer-CLcqjnLg.js.br +0 -0
- codex/static_root/assets/confirm-footer-CLcqjnLg.js.gz +0 -0
- codex/static_root/assets/datetime-column-DPVO98E2.27e26fb391ca.js.br +0 -0
- codex/static_root/assets/datetime-column-DPVO98E2.27e26fb391ca.js.gz +0 -0
- codex/static_root/assets/datetime-column-DPVO98E2.js.br +0 -0
- codex/static_root/assets/datetime-column-DPVO98E2.js.gz +0 -0
- codex/static_root/assets/filter-Cqjy01SO.71710ea1c7f8.js.br +0 -0
- codex/static_root/assets/filter-Cqjy01SO.71710ea1c7f8.js.gz +0 -0
- codex/static_root/assets/filter-Cqjy01SO.js.br +0 -0
- codex/static_root/assets/filter-Cqjy01SO.js.gz +0 -0
- codex/static_root/assets/flag-tab-BERamYWo.52c4bc9b4243.js +0 -1
- codex/static_root/assets/flag-tab-BERamYWo.52c4bc9b4243.js.br +0 -0
- codex/static_root/assets/flag-tab-BERamYWo.52c4bc9b4243.js.gz +0 -0
- codex/static_root/assets/flag-tab-BERamYWo.js +0 -1
- codex/static_root/assets/flag-tab-BERamYWo.js.br +0 -0
- codex/static_root/assets/flag-tab-BERamYWo.js.gz +0 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css +0 -1
- codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css.br +0 -1
- codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css.gz +0 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.css +0 -1
- codex/static_root/assets/flag-tab-DUXtbpA2.css.br +0 -1
- codex/static_root/assets/flag-tab-DUXtbpA2.css.gz +0 -0
- codex/static_root/assets/group-tab-DknI2YL3.7b2e5d32ee7e.js.br +0 -0
- codex/static_root/assets/group-tab-DknI2YL3.7b2e5d32ee7e.js.gz +0 -0
- codex/static_root/assets/group-tab-DknI2YL3.js.br +0 -0
- codex/static_root/assets/group-tab-DknI2YL3.js.gz +0 -0
- codex/static_root/assets/http-error-DxxoT0wf.8f26afe5c1dd.js.br +0 -0
- codex/static_root/assets/http-error-DxxoT0wf.8f26afe5c1dd.js.gz +0 -0
- codex/static_root/assets/http-error-DxxoT0wf.js.br +0 -0
- codex/static_root/assets/http-error-DxxoT0wf.js.gz +0 -0
- codex/static_root/assets/library-tab-DXCuu0zS.6a7b7e48a6f5.js.br +0 -0
- codex/static_root/assets/library-tab-DXCuu0zS.6a7b7e48a6f5.js.gz +0 -0
- codex/static_root/assets/library-tab-DXCuu0zS.js.br +0 -0
- codex/static_root/assets/library-tab-DXCuu0zS.js.gz +0 -0
- codex/static_root/assets/main-CTJQvqMb.1d5f619166b3.js +0 -37
- codex/static_root/assets/main-CTJQvqMb.1d5f619166b3.js.br +0 -0
- codex/static_root/assets/main-CTJQvqMb.1d5f619166b3.js.gz +0 -0
- codex/static_root/assets/main-CTJQvqMb.js +0 -37
- codex/static_root/assets/main-CTJQvqMb.js.br +0 -0
- codex/static_root/assets/main-CTJQvqMb.js.gz +0 -0
- codex/static_root/assets/main-CacfwsKA.4f849ef1c5db.css.br +0 -0
- codex/static_root/assets/main-CacfwsKA.css.br +0 -0
- codex/static_root/assets/metadata-dialog-CZDWNVCD.b78ed72bc090.js.br +0 -0
- codex/static_root/assets/metadata-dialog-CZDWNVCD.b78ed72bc090.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-CZDWNVCD.js.br +0 -0
- codex/static_root/assets/metadata-dialog-CZDWNVCD.js.gz +0 -0
- codex/static_root/assets/pdf-doc-C_LEA8HV.6bd1dba60a0b.js.br +0 -0
- codex/static_root/assets/pdf-doc-C_LEA8HV.6bd1dba60a0b.js.gz +0 -0
- codex/static_root/assets/pdf-doc-C_LEA8HV.js.br +0 -0
- codex/static_root/assets/pdf-doc-C_LEA8HV.js.gz +0 -0
- codex/static_root/assets/reader-DXk46jdF.0a2b0809bd02.js.br +0 -0
- codex/static_root/assets/reader-DXk46jdF.0a2b0809bd02.js.gz +0 -0
- codex/static_root/assets/reader-DXk46jdF.js.br +0 -0
- codex/static_root/assets/reader-DXk46jdF.js.gz +0 -0
- codex/static_root/assets/stats-tab-Dy0YEoJ4.f24c8ddba0d3.js.br +0 -0
- codex/static_root/assets/stats-tab-Dy0YEoJ4.f24c8ddba0d3.js.gz +0 -0
- codex/static_root/assets/stats-tab-Dy0YEoJ4.js.br +0 -0
- codex/static_root/assets/stats-tab-Dy0YEoJ4.js.gz +0 -0
- codex/static_root/assets/task-tab-Bv3B4rCC.1546850899dc.js.br +0 -0
- codex/static_root/assets/task-tab-Bv3B4rCC.1546850899dc.js.gz +0 -0
- codex/static_root/assets/task-tab-Bv3B4rCC.js.br +0 -0
- codex/static_root/assets/task-tab-Bv3B4rCC.js.gz +0 -0
- codex/static_root/assets/user-tab-CSF2DZe5.8e65aaed43b2.js.br +0 -0
- codex/static_root/assets/user-tab-CSF2DZe5.8e65aaed43b2.js.gz +0 -0
- codex/static_root/assets/user-tab-CSF2DZe5.js.br +0 -0
- codex/static_root/assets/user-tab-CSF2DZe5.js.gz +0 -0
- codex/static_root/manifest.24ec466b9bcf.json.br +0 -0
- codex/static_root/manifest.24ec466b9bcf.json.gz +0 -0
- {codex-1.5.13a2.dist-info → codex-1.5.15.dist-info}/LICENSE +0 -0
- {codex-1.5.13a2.dist-info → codex-1.5.15.dist-info}/WHEEL +0 -0
- {codex-1.5.13a2.dist-info → codex-1.5.15.dist-info}/entry_points.txt +0 -0
|
@@ -86,7 +86,7 @@ class CreateForeignKeysMixin(QueuedThread):
|
|
|
86
86
|
return obj
|
|
87
87
|
|
|
88
88
|
@status_notify()
|
|
89
|
-
def _bulk_group_create(self, group_tree_counts, group_class, status=None):
|
|
89
|
+
def _bulk_group_create(self, group_tree_counts, group_class, status=None) -> int:
|
|
90
90
|
"""Bulk creates groups."""
|
|
91
91
|
count = 0
|
|
92
92
|
if not group_tree_counts:
|
|
@@ -292,11 +292,10 @@ class CreateForeignKeysMixin(QueuedThread):
|
|
|
292
292
|
)
|
|
293
293
|
return total_fks
|
|
294
294
|
|
|
295
|
-
def create_all_fks(self, library, create_data):
|
|
295
|
+
def create_all_fks(self, library, create_data) -> int:
|
|
296
296
|
"""Bulk create all foreign keys."""
|
|
297
297
|
total_fks = self._get_create_fks_totals(create_data)
|
|
298
298
|
status = Status(ImportStatusTypes.CREATE_FKS, 0, total_fks)
|
|
299
|
-
status.complete = 0 # Helps the type checker.
|
|
300
299
|
try:
|
|
301
300
|
self.status_controller.start(status)
|
|
302
301
|
(
|
|
@@ -310,31 +309,35 @@ class CreateForeignKeysMixin(QueuedThread):
|
|
|
310
309
|
) = create_data
|
|
311
310
|
|
|
312
311
|
for group_class, group_tree_counts in create_groups.items():
|
|
313
|
-
|
|
312
|
+
count = self._bulk_group_create(
|
|
314
313
|
group_tree_counts,
|
|
315
314
|
group_class,
|
|
316
315
|
status=status,
|
|
317
316
|
)
|
|
317
|
+
status.add_complete(count)
|
|
318
318
|
|
|
319
319
|
for group_class, group_tree_counts in update_groups.items():
|
|
320
|
-
|
|
320
|
+
count = self._bulk_group_updater(
|
|
321
321
|
group_tree_counts,
|
|
322
322
|
group_class,
|
|
323
323
|
status=status,
|
|
324
324
|
)
|
|
325
|
+
status.add_complete(count)
|
|
325
326
|
|
|
326
|
-
|
|
327
|
+
count = self.bulk_folders_create(
|
|
327
328
|
sorted(create_folder_paths),
|
|
328
329
|
library,
|
|
329
330
|
status=status,
|
|
330
331
|
)
|
|
332
|
+
status.add_complete(count)
|
|
331
333
|
|
|
332
334
|
for named_class, names in create_fks.items():
|
|
333
|
-
|
|
335
|
+
count = self._bulk_create_named_models(
|
|
334
336
|
names,
|
|
335
337
|
named_class,
|
|
336
338
|
status=status,
|
|
337
339
|
)
|
|
340
|
+
status.add_complete(count)
|
|
338
341
|
|
|
339
342
|
# These all depend on bulk_create_named_models running first
|
|
340
343
|
create_dict_data = (
|
|
@@ -347,13 +350,14 @@ class CreateForeignKeysMixin(QueuedThread):
|
|
|
347
350
|
(Identifier, create_identifiers, self._create_identifier),
|
|
348
351
|
)
|
|
349
352
|
for model, create_objs, func in create_dict_data:
|
|
350
|
-
|
|
353
|
+
count = self._bulk_create_dict_models(
|
|
351
354
|
create_objs,
|
|
352
355
|
func,
|
|
353
356
|
model,
|
|
354
357
|
status=status,
|
|
355
358
|
)
|
|
359
|
+
status.add_complete(count)
|
|
356
360
|
|
|
357
361
|
finally:
|
|
358
362
|
self.status_controller.finish(status)
|
|
359
|
-
return status.complete
|
|
363
|
+
return status.complete if status.complete else 0
|
|
@@ -193,7 +193,7 @@ class ComicImporterThread(
|
|
|
193
193
|
self._log_task(library.path, task)
|
|
194
194
|
self._init_librarian_status(task, library.path)
|
|
195
195
|
|
|
196
|
-
def _create_comic_relations(self, library, fks):
|
|
196
|
+
def _create_comic_relations(self, library, fks) -> int:
|
|
197
197
|
"""Query all foreign keys to determine what needs creating, then create them."""
|
|
198
198
|
if not fks:
|
|
199
199
|
return 0
|
|
@@ -240,7 +240,7 @@ class ComicImporterThread(
|
|
|
240
240
|
try:
|
|
241
241
|
self._init_apply(library, task)
|
|
242
242
|
|
|
243
|
-
changed = 0
|
|
243
|
+
changed: int = 0
|
|
244
244
|
changed += self.move_and_modify_dirs(library, task)
|
|
245
245
|
|
|
246
246
|
modified_paths = task.files_modified
|
codex/models/comic.py
CHANGED
|
@@ -4,7 +4,6 @@ import calendar
|
|
|
4
4
|
import math
|
|
5
5
|
import re
|
|
6
6
|
from datetime import MAXYEAR, MINYEAR, date
|
|
7
|
-
from decimal import Decimal
|
|
8
7
|
from pathlib import Path
|
|
9
8
|
|
|
10
9
|
from comicbox.fields.enum import ReadingDirectionEnum
|
|
@@ -224,7 +223,9 @@ class Comic(WatchedPath):
|
|
|
224
223
|
return math.floor(math.log10(issue_number_max)) + 1
|
|
225
224
|
|
|
226
225
|
@classmethod
|
|
227
|
-
def get_title(
|
|
226
|
+
def get_title( # noqa: PLR0913
|
|
227
|
+
cls, obj, volume=True, issue_number_max=None, name=True, filename_fallback=False
|
|
228
|
+
):
|
|
228
229
|
"""Create the comic title for display."""
|
|
229
230
|
names = []
|
|
230
231
|
|
|
@@ -238,24 +239,30 @@ class Comic(WatchedPath):
|
|
|
238
239
|
names.append(vn)
|
|
239
240
|
|
|
240
241
|
# Issue
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
242
|
+
issue_str = ""
|
|
243
|
+
if obj.issue_number is not None:
|
|
244
|
+
issue_number = obj.issue_number.normalize()
|
|
245
|
+
zero_pad = cls._compute_zero_pad(issue_number_max)
|
|
246
|
+
if issue_number % 1 == 0:
|
|
247
|
+
precision = 0
|
|
248
|
+
else:
|
|
249
|
+
precision = 1
|
|
250
|
+
zero_pad += 2
|
|
251
|
+
issue_str = f"#{issue_number:0{zero_pad}.{precision}f}"
|
|
249
252
|
if issue_suffix := obj.issue_suffix:
|
|
250
253
|
issue_str += issue_suffix
|
|
251
|
-
|
|
254
|
+
if issue_str:
|
|
255
|
+
names.append(issue_str)
|
|
252
256
|
|
|
253
257
|
# Title
|
|
254
258
|
if name and obj.name:
|
|
255
259
|
names.append(obj.name)
|
|
256
260
|
|
|
257
261
|
title = " ".join(filter(None, names)).strip(" .")
|
|
258
|
-
|
|
262
|
+
title = cls._RE_COMBINE_WHITESPACE.sub(" ", title).strip()
|
|
263
|
+
if filename_fallback and not title:
|
|
264
|
+
title = cls.get_filename(obj)
|
|
265
|
+
return title
|
|
259
266
|
|
|
260
267
|
@classmethod
|
|
261
268
|
def get_filename(cls, obj):
|
|
@@ -269,7 +276,7 @@ class Comic(WatchedPath):
|
|
|
269
276
|
|
|
270
277
|
def __str__(self):
|
|
271
278
|
"""Most common text representation for logging."""
|
|
272
|
-
return self.get_title(self)
|
|
279
|
+
return self.get_title(self, filename_fallback=True)
|
|
273
280
|
|
|
274
281
|
def issue(self) -> str:
|
|
275
282
|
"""Combine issue parts for search."""
|
|
@@ -279,3 +286,7 @@ class Comic(WatchedPath):
|
|
|
279
286
|
if self.issue_suffix:
|
|
280
287
|
res += self.issue_suffix
|
|
281
288
|
return res
|
|
289
|
+
|
|
290
|
+
def search_path(self) -> str:
|
|
291
|
+
"""Relative path for search index."""
|
|
292
|
+
return self.path.removeprefix(self.library.path)
|
codex/search/backend.py
CHANGED
|
@@ -35,7 +35,7 @@ from codex._vendor.haystack.exceptions import SearchBackendError, SkipDocument
|
|
|
35
35
|
from codex.librarian.search.status import SearchIndexStatusTypes
|
|
36
36
|
from codex.logger.logging import get_logger
|
|
37
37
|
from codex.memory import get_mem_limit
|
|
38
|
-
from codex.models import Comic
|
|
38
|
+
from codex.models import AdminFlag, Comic
|
|
39
39
|
from codex.search.indexes import ComicIndex
|
|
40
40
|
from codex.search.writing import CodexWriter
|
|
41
41
|
from codex.settings.settings import (
|
|
@@ -131,6 +131,7 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
131
131
|
"original_format": ("format",),
|
|
132
132
|
"page_count": ("pages",),
|
|
133
133
|
"reading_direction": ("direction",),
|
|
134
|
+
"search_path": ("path", *gen_multipart_field_aliases("folders")),
|
|
134
135
|
"series_groups": gen_multipart_field_aliases("series_groups"),
|
|
135
136
|
"scan_info": ("scan",),
|
|
136
137
|
"stories": ("story",),
|
|
@@ -460,12 +461,19 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
460
461
|
)
|
|
461
462
|
return count
|
|
462
463
|
|
|
464
|
+
folder_view_enabled = AdminFlag.objects.get(
|
|
465
|
+
key=AdminFlag.FlagChoices.FOLDER_VIEW.value
|
|
466
|
+
).on
|
|
463
467
|
for obj in iterable:
|
|
464
468
|
if abort_event and abort_event.is_set():
|
|
465
469
|
self.log.debug(
|
|
466
470
|
f"Stopped search index update batch {batch_num} at {count} updates."
|
|
467
471
|
)
|
|
468
472
|
break
|
|
473
|
+
if not folder_view_enabled:
|
|
474
|
+
# Hide path if folder view is disabled.
|
|
475
|
+
# This also affects field search.
|
|
476
|
+
obj.search_path = "" # type: ignore
|
|
469
477
|
count += self._update_obj(index, writer, batch_num, obj)
|
|
470
478
|
return self._update_finish(count, batch_num, writer)
|
|
471
479
|
|
codex/search/indexes.py
CHANGED
|
@@ -48,6 +48,8 @@ class ComicIndex(ModelSearchIndex, Indexable):
|
|
|
48
48
|
community_rating = FloatField(model_attr="community_rating", null=True)
|
|
49
49
|
critical_rating = FloatField(model_attr="critical_rating", null=True)
|
|
50
50
|
|
|
51
|
+
search_path = CharField(model_attr="search_path", null=True)
|
|
52
|
+
|
|
51
53
|
class Meta:
|
|
52
54
|
"""Model & field include list."""
|
|
53
55
|
|
codex/settings/settings.py
CHANGED
|
@@ -41,6 +41,24 @@ LOGLEVEL = get_loglevel(DEBUG)
|
|
|
41
41
|
LOG_DIR = Path(environ.get("CODEX_LOG_DIR", CONFIG_PATH / "logs"))
|
|
42
42
|
LOG_TO_CONSOLE = environ.get("CODEX_LOG_TO_CONSOLE") != "0"
|
|
43
43
|
LOG_TO_FILE = environ.get("CODEX_LOG_TO_FILE") != "0"
|
|
44
|
+
BUILD = environ.get("BUILD", False)
|
|
45
|
+
# Slow query middleware
|
|
46
|
+
# limit in seconds
|
|
47
|
+
SLOW_QUERY_LIMIT = float(environ.get("CODEX_SLOW_QUERY_LIMIT", 0.5))
|
|
48
|
+
LOG_RESPONSE_TIME = bool(environ.get("CODEX_LOG_RESPONSE_TIME", False))
|
|
49
|
+
TZ = environ.get("TIMEZONE", environ.get("TZ"))
|
|
50
|
+
# Search indexing memory controls
|
|
51
|
+
MMAP_RATIO = int(environ.get("CODEX_MMAP_RATIO", 240))
|
|
52
|
+
WRITER_MEMORY_PERCENT = float(environ.get("CODEX_WRITER_MEMORY_PERCENT", 0.6))
|
|
53
|
+
CPU_MULTIPLIER = float(environ.get("CODEX_CPU_MULTIPLIER", 1.25))
|
|
54
|
+
CHUNK_PER_GB = int(environ.get("CODEX_CHUNK_PER_GB", 250))
|
|
55
|
+
MAX_CHUNK_SIZE = int(environ.get("CODEX_MAX_CHUNK_SIZE", 1000))
|
|
56
|
+
# sqlite parser breaks with more than 1000 variables in a query and django only
|
|
57
|
+
# fixes this in the bulk_create & bulk_update functions. So for complicated
|
|
58
|
+
# queries I gotta batch them myself. Filter arg count is a proxy, but it works.
|
|
59
|
+
FILTER_BATCH_SIZE = int(environ.get("CODEX_FILTER_BATCH_SIZE", 990))
|
|
60
|
+
VITE_HOST = environ.get("VITE_HOST", socket.gethostname())
|
|
61
|
+
|
|
44
62
|
if not DEBUG:
|
|
45
63
|
LOGGING = {
|
|
46
64
|
"version": 1,
|
|
@@ -80,8 +98,14 @@ INSTALLED_APPS += [
|
|
|
80
98
|
"rest_framework",
|
|
81
99
|
"rest_registration",
|
|
82
100
|
"corsheaders",
|
|
83
|
-
|
|
101
|
+
]
|
|
102
|
+
if not BUILD:
|
|
103
|
+
INSTALLED_APPS += [
|
|
104
|
+
"django_vite",
|
|
105
|
+
]
|
|
106
|
+
INSTALLED_APPS += [
|
|
84
107
|
"codex",
|
|
108
|
+
"cachalot",
|
|
85
109
|
"drf_spectacular",
|
|
86
110
|
]
|
|
87
111
|
|
|
@@ -100,11 +124,14 @@ MIDDLEWARE = [
|
|
|
100
124
|
if DEBUG:
|
|
101
125
|
MIDDLEWARE += [
|
|
102
126
|
"nplusone.ext.django.NPlusOneMiddleware",
|
|
103
|
-
"codex.middleware.LogResponseTimeMiddleware",
|
|
104
127
|
]
|
|
105
128
|
NPLUSONE_LOGGER = getLogger("nplusone")
|
|
106
129
|
NPLUSONE_LOG_LEVEL = WARN
|
|
107
130
|
|
|
131
|
+
if LOG_RESPONSE_TIME:
|
|
132
|
+
MIDDLEWARE += [
|
|
133
|
+
"codex.middleware.LogResponseTimeMiddleware",
|
|
134
|
+
]
|
|
108
135
|
|
|
109
136
|
ROOT_URLCONF = "codex.urls.root"
|
|
110
137
|
|
|
@@ -176,7 +203,6 @@ AUTH_PASSWORD_VALIDATORS = [
|
|
|
176
203
|
# https://docs.djangoproject.com/en/dev/topics/i18n/
|
|
177
204
|
LANGUAGE_CODE = "en-us"
|
|
178
205
|
USE_I18N = True
|
|
179
|
-
TZ = environ.get("TIMEZONE", environ.get("TZ"))
|
|
180
206
|
TIME_ZONE = get_time_zone(TZ)
|
|
181
207
|
|
|
182
208
|
# Hypercorn
|
|
@@ -205,7 +231,6 @@ STORAGES = {
|
|
|
205
231
|
}
|
|
206
232
|
}
|
|
207
233
|
STATICFILES_DIRS = []
|
|
208
|
-
BUILD = environ.get("BUILD", False)
|
|
209
234
|
if DEBUG or BUILD:
|
|
210
235
|
STATIC_SRC = CODEX_PATH / "static_src"
|
|
211
236
|
STATIC_SRC.mkdir(exist_ok=True, parents=True)
|
|
@@ -295,31 +320,18 @@ HAYSTACK_CONNECTIONS = {
|
|
|
295
320
|
},
|
|
296
321
|
}
|
|
297
322
|
HAYSTACK_LOGGING = False
|
|
298
|
-
# Search indexing memory controls
|
|
299
|
-
MMAP_RATIO = int(environ.get("CODEX_MMAP_RATIO", 240))
|
|
300
|
-
WRITER_MEMORY_PERCENT = float(environ.get("CODEX_WRITER_MEMORY_PERCENT", 0.6))
|
|
301
|
-
CPU_MULTIPLIER = float(environ.get("CODEX_CPU_MULTIPLIER", 1.25))
|
|
302
|
-
CHUNK_PER_GB = int(environ.get("CODEX_CHUNK_PER_GB", 250))
|
|
303
|
-
MAX_CHUNK_SIZE = int(environ.get("CODEX_MAX_CHUNK_SIZE", 1000))
|
|
304
|
-
|
|
305
323
|
CHANNEL_LAYERS = {
|
|
306
324
|
"default": {"BACKEND": "channels.layers.InMemoryChannelLayer"},
|
|
307
325
|
}
|
|
308
326
|
|
|
309
|
-
if DEBUG:
|
|
327
|
+
if DEBUG and not BUILD:
|
|
310
328
|
DJANGO_VITE = {
|
|
311
329
|
"default": {
|
|
312
330
|
"dev_mode": DEBUG,
|
|
313
|
-
"dev_server_host":
|
|
331
|
+
"dev_server_host": VITE_HOST,
|
|
314
332
|
}
|
|
315
333
|
}
|
|
316
334
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
FILTER_BATCH_SIZE = int(environ.get("CODEX_FILTER_BATCH_SIZE", 990))
|
|
321
|
-
|
|
322
|
-
# Slow query middleware
|
|
323
|
-
# limit in seconds
|
|
324
|
-
SLOW_QUERY_LIMIT = float(environ.get("CODEX_SLOW_QUERY_LIMIT", 0.5))
|
|
325
|
-
LOG_RESPONSE_TIME = bool(environ.get("CODEX_LOG_RESPONSE_TIME", False))
|
|
335
|
+
CACHALOT_UNCACHABLE_TABLES = frozenset(
|
|
336
|
+
{"django_migrations", "django_session", "codex_useractive"}
|
|
337
|
+
)
|
codex/settings/whitenoise.py
CHANGED
codex/static_root/assets/{VCheckbox-BR-5qiW4.d4e12b9a3549.js → VCheckbox-BV0qJgRM.8a1f1b5bcc2e.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as A,V as t}from"./VCheckboxBtn-
|
|
1
|
+
import{m as A,V as t}from"./VCheckboxBtn-BdndkrO2.js";import{a as F,u as I,V as l}from"./VSelectionControl-K1Fk4HTO.js";import{x as B,ah as U,G as R,ar as D,C as G,h as K,K as L,c5 as M,L as u,am as r}from"./admin-drawer-panel-CzxhSiRn.js";const N=B({...F(),...U(A(),["inline"])},"VCheckbox"),w=R()({name:"VCheckbox",inheritAttrs:!1,props:N(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=G(),p=K(()=>e.id||`checkbox-${V}`);return L(()=>{const[b,f]=M(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{w as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as A,V as t}from"./VCheckboxBtn-
|
|
1
|
+
import{m as A,V as t}from"./VCheckboxBtn-BdndkrO2.js";import{a as F,u as I,V as l}from"./VSelectionControl-K1Fk4HTO.js";import{x as B,ah as U,G as R,ar as D,C as G,h as K,K as L,c5 as M,L as u,am as r}from"./admin-drawer-panel-CzxhSiRn.js";const N=B({...F(),...U(A(),["inline"])},"VCheckbox"),w=R()({name:"VCheckbox",inheritAttrs:!1,props:N(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=G(),p=K(()=>e.id||`checkbox-${V}`);return L(()=>{const[b,f]=M(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{w as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as f,d as o}from"./VSelectionControl-
|
|
1
|
+
import{c as f,d as o}from"./VSelectionControl-K1Fk4HTO.js";import{x as V,co as h,G as v,ar as c,h as l,K as x,ah as I,L as k,am as b}from"./admin-drawer-panel-CzxhSiRn.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=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 x(()=>{const a=I(o.filterProps(e),["modelValue"]);return k(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{B as V,C as m};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as f,d as o}from"./VSelectionControl-
|
|
1
|
+
import{c as f,d as o}from"./VSelectionControl-K1Fk4HTO.js";import{x as V,co as h,G as v,ar as c,h as l,K as x,ah as I,L as k,am as b}from"./admin-drawer-panel-CzxhSiRn.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=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 x(()=>{const a=I(o.filterProps(e),["modelValue"]);return k(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{B as V,C as m};
|
|
Binary file
|
|
Binary file
|
codex/static_root/assets/{VCombobox-CA6L757N.c9c01cbc12eb.js → VCombobox-CLS5SQ-7.2fa6db80509a.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as pe,u as Ce,a as ke,b as we,c as Se}from"./VSelect-
|
|
1
|
+
import{m as pe,u as Ce,a as ke,b as we,c as Se}from"./VSelect-DAi26YRs.js";import{c as Fe,a as X}from"./VSlideGroup-BpKJ2pWX.js";import{x as Ie,ah as Pe,bb as De,G as Ae,bE as Re,r as O,s as P,ar as Y,h as b,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Ee,K as Me,L as s,al as K,am as I,aO as Le,ag as ee,cu as Ne,ad as le,cv as Oe,c6 as Ke,aa as Be,cw as Ue,cx as je,cy as ze}from"./admin-drawer-panel-CzxhSiRn.js";import{m as He,u as $e}from"./filter-kmJ9r_lC.js";import{g as qe}from"./VSelectionControl-K1Fk4HTO.js";import{f as Ge}from"./confirm-footer-4RE1GmaG.js";import{V as We}from"./VCheckboxBtn-BdndkrO2.js";function Je(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?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),s("span",{class:"v-combobox__mask"},[e.substr(g,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Qe=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),ul=Ae()({name:"VCombobox",props:Qe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var W;let{emit:R,slots:n}=g;const{t:B}=Re(),V=O(),x=P(!1),p=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=$.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),r=P(-1);let j=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),G=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ue,transformOut:ne}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),u=Y(e,"modelValue",[],l=>ue(ze(l)),l=>{const t=ne(l);return e.multiple?t:t[0]??null}),F=qe(),T=b(()=>!!(e.chips||n.chip)),C=b(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=b({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!C.value&&(u.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const i=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));i.length>1&&(i.forEach(a=>{a=a.trim(),a&&m(D(e,a))}),k.value="")}l||(r.value=-1),p.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:v.value.length);A(k,l=>{j?Z(()=>j=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),A(u,l=>{var t;!e.multiple&&!C.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:E,getMatches:re}=$e(e,te,()=>p.value?"":v.value),y=b(()=>e.hideSelected?E.value.filter(l=>!u.value.some(t=>t.value===l.value)):E.value),ce=b(()=>u.value.map(l=>l.value)),M=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=y.value[0])==null?void 0:t.title))&&y.value.length>0&&!p.value&&!_.value}),z=b(()=>e.hideNoData&&!y.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=Ce(H,V);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(je(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=V.value.selectionStart,i=u.value.length;if((r.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)&&(M.value&&["Enter","Tab"].includes(l.key)&&m(E.value[0]),p.value=!0),l.key==="ArrowDown"&&M.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(m(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return m(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;m(u.value[r.value],!1),r.value=o>=i-1?i-2:o}if(e.multiple){if(l.key==="ArrowLeft"){if(r.value<0&&t>0)return;const o=r.value>-1?r.value-1:i-1;u.value[o]?r.value=o:(r.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(r.value<0)return;const o=r.value+1;u.value[o]?r.value=o:(r.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(p.value=!0,(l=V.value)==null||l.focus())}function m(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(o=>e.valueComparator(o.value,l.value)),a=t??!~i;if(~i){const o=a?[...u.value,l]:[...u.value];o.splice(i,1),u.value=o}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(v.value="")}else{const i=t!==!1;u.value=i?[l]:[],k.value=i&&!C.value?l.title:"",Z(()=>{c.value=!1,p.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(x,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,M.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===y.value[0].value})){m(y.value[0]);return}if(v.value){if(e.multiple){m(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":m(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=y.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Ee&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Me(()=>{const l=!!(!e.hideNoData||y.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),t=u.value.length>0,i=X.filterProps(e);return s(X,I({ref:V},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:u.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!C.value,"v-combobox--selecting-index":r.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...n,default:()=>s(K,null,[s(ke,I({ref:$,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&s(Le,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:ye,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,o,h;return[(a=n["prepend-item"])==null?void 0:a.call(n),!y.value.length&&!e.hideNoData&&(((o=n["no-data"])==null?void 0:o.call(n))??s(ee,{title:B(e.noDataText)},null)),s(we,{ref:q,renderless:!0,items:y.value},{default:w=>{var Q;let{item:d,index:S,itemRef:f}=w;const J=I(d.props,{ref:f,key:S,active:M.value&&S===0?!0:void 0,onClick:()=>m(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:S,props:J}))??s(ee,I(J,{role:"option"}),{prepend:L=>{let{isSelected:N}=L;return s(K,null,[e.multiple&&!e.hideSelected?s(We,{key:d.value,modelValue:N,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&s(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&s(le,{icon:d.props.prependIcon},null)])},title:()=>{var L,N;return p.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(h=n["append-item"])==null?void 0:h.call(n)]}})]}),u.value.map((a,o)=>{function h(f){f.stopPropagation(),f.preventDefault(),m(a,!1)}const w={"onClick:close":h,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),h(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,S=d?Oe(T.value?n.chip({item:a,index:o,props:w}):n.selection({item:a,index:o})):void 0;if(!(d&&!S))return s("div",{key:a.value,class:["v-combobox__selection",o===r.value&&["v-combobox__selection--selected",oe.value]],style:o===r.value?ie.value:{}},[T.value?n.chip?s(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??s("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&o<u.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[Be(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,o=new Array(a),h=0;h<a;h++)o[h]=arguments[h];return s(K,null,[(w=n["append-inner"])==null?void 0:w.call(n,...o),(!e.hideNoData||e.items.length)&&e.menuIcon?s(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Ue,"aria-label":B(G.value),title:B(G.value)},null):void 0])}})}),Ge({isFocused:x,isPristine:p,menu:c,search:v,selectionIndex:r,filteredItems:E,select:m},V)}});export{ul as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as pe,u as Ce,a as ke,b as we,c as Se}from"./VSelect-
|
|
1
|
+
import{m as pe,u as Ce,a as ke,b as we,c as Se}from"./VSelect-DAi26YRs.js";import{c as Fe,a as X}from"./VSlideGroup-BpKJ2pWX.js";import{x as Ie,ah as Pe,bb as De,G as Ae,bE as Re,r as O,s as P,ar as Y,h as b,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Ee,K as Me,L as s,al as K,am as I,aO as Le,ag as ee,cu as Ne,ad as le,cv as Oe,c6 as Ke,aa as Be,cw as Ue,cx as je,cy as ze}from"./admin-drawer-panel-CzxhSiRn.js";import{m as He,u as $e}from"./filter-kmJ9r_lC.js";import{g as qe}from"./VSelectionControl-K1Fk4HTO.js";import{f as Ge}from"./confirm-footer-4RE1GmaG.js";import{V as We}from"./VCheckboxBtn-BdndkrO2.js";function Je(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?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),s("span",{class:"v-combobox__mask"},[e.substr(g,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Qe=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),ul=Ae()({name:"VCombobox",props:Qe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var W;let{emit:R,slots:n}=g;const{t:B}=Re(),V=O(),x=P(!1),p=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=$.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),r=P(-1);let j=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),G=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ue,transformOut:ne}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),u=Y(e,"modelValue",[],l=>ue(ze(l)),l=>{const t=ne(l);return e.multiple?t:t[0]??null}),F=qe(),T=b(()=>!!(e.chips||n.chip)),C=b(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=b({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!C.value&&(u.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const i=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));i.length>1&&(i.forEach(a=>{a=a.trim(),a&&m(D(e,a))}),k.value="")}l||(r.value=-1),p.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:v.value.length);A(k,l=>{j?Z(()=>j=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),A(u,l=>{var t;!e.multiple&&!C.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:E,getMatches:re}=$e(e,te,()=>p.value?"":v.value),y=b(()=>e.hideSelected?E.value.filter(l=>!u.value.some(t=>t.value===l.value)):E.value),ce=b(()=>u.value.map(l=>l.value)),M=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=y.value[0])==null?void 0:t.title))&&y.value.length>0&&!p.value&&!_.value}),z=b(()=>e.hideNoData&&!y.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=Ce(H,V);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(je(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=V.value.selectionStart,i=u.value.length;if((r.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)&&(M.value&&["Enter","Tab"].includes(l.key)&&m(E.value[0]),p.value=!0),l.key==="ArrowDown"&&M.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(m(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return m(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;m(u.value[r.value],!1),r.value=o>=i-1?i-2:o}if(e.multiple){if(l.key==="ArrowLeft"){if(r.value<0&&t>0)return;const o=r.value>-1?r.value-1:i-1;u.value[o]?r.value=o:(r.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(r.value<0)return;const o=r.value+1;u.value[o]?r.value=o:(r.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(p.value=!0,(l=V.value)==null||l.focus())}function m(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(o=>e.valueComparator(o.value,l.value)),a=t??!~i;if(~i){const o=a?[...u.value,l]:[...u.value];o.splice(i,1),u.value=o}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(v.value="")}else{const i=t!==!1;u.value=i?[l]:[],k.value=i&&!C.value?l.title:"",Z(()=>{c.value=!1,p.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(x,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,M.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===y.value[0].value})){m(y.value[0]);return}if(v.value){if(e.multiple){m(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":m(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=y.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Ee&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Me(()=>{const l=!!(!e.hideNoData||y.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),t=u.value.length>0,i=X.filterProps(e);return s(X,I({ref:V},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:u.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!C.value,"v-combobox--selecting-index":r.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...n,default:()=>s(K,null,[s(ke,I({ref:$,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&s(Le,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:ye,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,o,h;return[(a=n["prepend-item"])==null?void 0:a.call(n),!y.value.length&&!e.hideNoData&&(((o=n["no-data"])==null?void 0:o.call(n))??s(ee,{title:B(e.noDataText)},null)),s(we,{ref:q,renderless:!0,items:y.value},{default:w=>{var Q;let{item:d,index:S,itemRef:f}=w;const J=I(d.props,{ref:f,key:S,active:M.value&&S===0?!0:void 0,onClick:()=>m(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:S,props:J}))??s(ee,I(J,{role:"option"}),{prepend:L=>{let{isSelected:N}=L;return s(K,null,[e.multiple&&!e.hideSelected?s(We,{key:d.value,modelValue:N,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&s(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&s(le,{icon:d.props.prependIcon},null)])},title:()=>{var L,N;return p.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(h=n["append-item"])==null?void 0:h.call(n)]}})]}),u.value.map((a,o)=>{function h(f){f.stopPropagation(),f.preventDefault(),m(a,!1)}const w={"onClick:close":h,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),h(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,S=d?Oe(T.value?n.chip({item:a,index:o,props:w}):n.selection({item:a,index:o})):void 0;if(!(d&&!S))return s("div",{key:a.value,class:["v-combobox__selection",o===r.value&&["v-combobox__selection--selected",oe.value]],style:o===r.value?ie.value:{}},[T.value?n.chip?s(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??s("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&o<u.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[Be(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,o=new Array(a),h=0;h<a;h++)o[h]=arguments[h];return s(K,null,[(w=n["append-inner"])==null?void 0:w.call(n,...o),(!e.hideNoData||e.items.length)&&e.menuIcon?s(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Ue,"aria-label":B(G.value),title:B(G.value)},null):void 0])}})}),Ge({isFocused:x,isPristine:p,menu:c,search:v,selectionIndex:r,filteredItems:E,select:m},V)}});export{ul as V};
|
|
Binary file
|
|
Binary file
|