codex 1.5.7rc0__py3-none-any.whl → 1.5.8__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/aggregate_metadata.py +12 -7
- codex/librarian/importer/importerd.py +36 -3
- codex/librarian/importer/tasks.py +8 -0
- codex/models/comic.py +9 -0
- codex/search/backend.py +21 -18
- codex/search/indexes.py +9 -4
- codex/serializers/browser/page.py +1 -0
- codex/static_root/assets/{VCheckbox-CSvjBFR1.531e0fc38f24.js → VCheckbox-CAnsONJ8.1d8ba3df8d9f.js} +1 -1
- codex/static_root/assets/VCheckbox-CAnsONJ8.1d8ba3df8d9f.js.br +0 -0
- codex/static_root/assets/VCheckbox-CAnsONJ8.1d8ba3df8d9f.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-CSvjBFR1.js → VCheckbox-CAnsONJ8.js} +1 -1
- codex/static_root/assets/VCheckbox-CAnsONJ8.js.br +0 -0
- codex/static_root/assets/VCheckbox-CAnsONJ8.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-CQ4VhpyA.cb28dccb8bd0.js → VCheckboxBtn-DQTVBkac.93f2be0971d2.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-DQTVBkac.93f2be0971d2.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-DQTVBkac.93f2be0971d2.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-CQ4VhpyA.js → VCheckboxBtn-DQTVBkac.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-DQTVBkac.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-DQTVBkac.js.gz +0 -0
- codex/static_root/assets/{VCombobox-DmqwaLY4.d4e984321966.js → VCombobox-xgzcfu8j.85e27125105c.js} +1 -1
- codex/static_root/assets/VCombobox-xgzcfu8j.85e27125105c.js.br +0 -0
- codex/static_root/assets/VCombobox-xgzcfu8j.85e27125105c.js.gz +0 -0
- codex/static_root/assets/{VCombobox-DmqwaLY4.js → VCombobox-xgzcfu8j.js} +1 -1
- codex/static_root/assets/VCombobox-xgzcfu8j.js.br +0 -0
- codex/static_root/assets/VCombobox-xgzcfu8j.js.gz +0 -0
- codex/static_root/assets/{VDataTableVirtual-6f42V3Lt.7bd15f89e179.js → VDataTableVirtual-ohR-xfIW.54047fbf2e77.js} +1 -1
- codex/static_root/assets/VDataTableVirtual-ohR-xfIW.54047fbf2e77.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-ohR-xfIW.54047fbf2e77.js.gz +0 -0
- codex/static_root/assets/{VDataTableVirtual-6f42V3Lt.js → VDataTableVirtual-ohR-xfIW.js} +1 -1
- codex/static_root/assets/VDataTableVirtual-ohR-xfIW.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-ohR-xfIW.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanel-HxmPRHLI.2f46f7785043.js → VExpansionPanel-D77IHp4B.fe0052639210.js} +1 -1
- codex/static_root/assets/VExpansionPanel-D77IHp4B.fe0052639210.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-D77IHp4B.fe0052639210.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanel-HxmPRHLI.js → VExpansionPanel-D77IHp4B.js} +1 -1
- codex/static_root/assets/VExpansionPanel-D77IHp4B.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-D77IHp4B.js.gz +0 -0
- codex/static_root/assets/{VMain-C67fPCUj.c0f7b7a893b2.js → VMain-BcP4P6kJ.26ba71b71a30.js} +1 -1
- codex/static_root/assets/VMain-BcP4P6kJ.26ba71b71a30.js.br +0 -0
- codex/static_root/assets/VMain-BcP4P6kJ.26ba71b71a30.js.gz +0 -0
- codex/static_root/assets/{VMain-C67fPCUj.js → VMain-BcP4P6kJ.js} +1 -1
- codex/static_root/assets/VMain-BcP4P6kJ.js.br +0 -0
- codex/static_root/assets/VMain-BcP4P6kJ.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-DlFy7v1Z.9e5a0c60e667.js → VRadioGroup-DQQmB99C.8e62ca305d42.js} +1 -1
- codex/static_root/assets/VRadioGroup-DQQmB99C.8e62ca305d42.js.br +5 -0
- codex/static_root/assets/VRadioGroup-DQQmB99C.8e62ca305d42.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-DlFy7v1Z.js → VRadioGroup-DQQmB99C.js} +1 -1
- codex/static_root/assets/VRadioGroup-DQQmB99C.js.br +5 -0
- codex/static_root/assets/VRadioGroup-DQQmB99C.js.gz +0 -0
- codex/static_root/assets/{VSelect-O_Yn2sND.d7879a023bd9.js → VSelect-YSL0tIop.c23c0657cf17.js} +1 -1
- codex/static_root/assets/VSelect-YSL0tIop.c23c0657cf17.js.br +0 -0
- codex/static_root/assets/VSelect-YSL0tIop.c23c0657cf17.js.gz +0 -0
- codex/static_root/assets/{VSelect-O_Yn2sND.js → VSelect-YSL0tIop.js} +1 -1
- codex/static_root/assets/VSelect-YSL0tIop.js.br +0 -0
- codex/static_root/assets/VSelect-YSL0tIop.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-DP64P5MF.ca35648c092a.js → VSelectionControl-D0ha1VYk.60bd3aeb20e1.js} +1 -1
- codex/static_root/assets/VSelectionControl-D0ha1VYk.60bd3aeb20e1.js.br +0 -0
- codex/static_root/assets/VSelectionControl-D0ha1VYk.60bd3aeb20e1.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-DP64P5MF.js → VSelectionControl-D0ha1VYk.js} +1 -1
- codex/static_root/assets/VSelectionControl-D0ha1VYk.js.br +0 -0
- codex/static_root/assets/VSelectionControl-D0ha1VYk.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-DOKbHMCv.23352d03450c.js → VSlideGroup-BW6pFVGY.13cecf1a7794.js} +1 -1
- codex/static_root/assets/VSlideGroup-BW6pFVGY.13cecf1a7794.js.br +0 -0
- codex/static_root/assets/VSlideGroup-BW6pFVGY.13cecf1a7794.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-DOKbHMCv.js → VSlideGroup-BW6pFVGY.js} +1 -1
- codex/static_root/assets/VSlideGroup-BW6pFVGY.js.br +0 -0
- codex/static_root/assets/VSlideGroup-BW6pFVGY.js.gz +0 -0
- codex/static_root/assets/{VTable-CtRSR9wI.ab498162ec9a.js → VTable-CXI0Xaio.06b95b33adaf.js} +1 -1
- codex/static_root/assets/VTable-CXI0Xaio.06b95b33adaf.js.br +0 -0
- codex/static_root/assets/VTable-CXI0Xaio.06b95b33adaf.js.gz +0 -0
- codex/static_root/assets/{VTable-CtRSR9wI.js → VTable-CXI0Xaio.js} +1 -1
- codex/static_root/assets/VTable-CXI0Xaio.js.br +0 -0
- codex/static_root/assets/VTable-CXI0Xaio.js.gz +0 -0
- codex/static_root/assets/{VToolbar-C__BHwZO.js → VToolbar-CnoJq5Ck.5b3dcfbf1c77.js} +2 -2
- codex/static_root/assets/VToolbar-CnoJq5Ck.5b3dcfbf1c77.js.br +0 -0
- codex/static_root/assets/VToolbar-CnoJq5Ck.5b3dcfbf1c77.js.gz +0 -0
- codex/static_root/assets/{VToolbar-C__BHwZO.73f9b9fcc254.js → VToolbar-CnoJq5Ck.js} +2 -2
- codex/static_root/assets/VToolbar-CnoJq5Ck.js.br +0 -0
- codex/static_root/assets/VToolbar-CnoJq5Ck.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-BMdyDd7Q.e61cc304e3bc.js → VWindowItem-Cq-qPd5h.291287bcb566.js} +1 -1
- codex/static_root/assets/VWindowItem-Cq-qPd5h.291287bcb566.js.br +0 -0
- codex/static_root/assets/VWindowItem-Cq-qPd5h.291287bcb566.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-BMdyDd7Q.js → VWindowItem-Cq-qPd5h.js} +1 -1
- codex/static_root/assets/VWindowItem-Cq-qPd5h.js.br +0 -0
- codex/static_root/assets/VWindowItem-Cq-qPd5h.js.gz +0 -0
- codex/static_root/assets/{admin-D-946Bk9.1a17b45a08d8.js → admin-3sFieyVL.7a879e617e60.js} +1 -1
- codex/static_root/assets/admin-3sFieyVL.7a879e617e60.js.br +0 -0
- codex/static_root/assets/admin-3sFieyVL.7a879e617e60.js.gz +0 -0
- codex/static_root/assets/{admin-D-946Bk9.js → admin-3sFieyVL.js} +1 -1
- codex/static_root/assets/admin-3sFieyVL.js.br +0 -0
- codex/static_root/assets/admin-3sFieyVL.js.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-Bd9_K-7V.b774e66b1bc2.js → admin-drawer-panel-C5XtSLXl.f1df22cd1144.js} +2 -2
- codex/static_root/assets/admin-drawer-panel-C5XtSLXl.f1df22cd1144.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-C5XtSLXl.f1df22cd1144.js.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-Bd9_K-7V.js → admin-drawer-panel-C5XtSLXl.js} +2 -2
- codex/static_root/assets/admin-drawer-panel-C5XtSLXl.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-C5XtSLXl.js.gz +0 -0
- codex/static_root/assets/{browser-C8SJwVGz.0f7daf93b064.css → browser-2i0QA4La.587673ac534c.css} +1 -1
- codex/static_root/assets/browser-2i0QA4La.587673ac534c.css.br +0 -0
- codex/static_root/assets/browser-2i0QA4La.587673ac534c.css.gz +0 -0
- codex/static_root/assets/{browser-C8SJwVGz.css → browser-2i0QA4La.css} +1 -1
- codex/static_root/assets/browser-2i0QA4La.css.br +0 -0
- codex/static_root/assets/browser-2i0QA4La.css.gz +0 -0
- codex/static_root/assets/browser-I1ZoWm1m.76347934dab3.js +1 -0
- codex/static_root/assets/browser-I1ZoWm1m.76347934dab3.js.br +0 -0
- codex/static_root/assets/browser-I1ZoWm1m.76347934dab3.js.gz +0 -0
- codex/static_root/assets/browser-I1ZoWm1m.js +1 -0
- codex/static_root/assets/browser-I1ZoWm1m.js.br +0 -0
- codex/static_root/assets/browser-I1ZoWm1m.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-Du93DO_u.3a928f66b2c5.js → change-password-dialog-BkX8NP9F.6eec04396e20.js} +1 -1
- codex/static_root/assets/change-password-dialog-BkX8NP9F.6eec04396e20.js.br +0 -0
- codex/static_root/assets/change-password-dialog-BkX8NP9F.6eec04396e20.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-Du93DO_u.js → change-password-dialog-BkX8NP9F.js} +1 -1
- codex/static_root/assets/change-password-dialog-BkX8NP9F.js.br +0 -0
- codex/static_root/assets/change-password-dialog-BkX8NP9F.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-BSR80Q5F.96ab044bb178.js → confirm-dialog-CKiPNGTr.b80ae71d7170.js} +1 -1
- codex/static_root/assets/confirm-dialog-CKiPNGTr.b80ae71d7170.js.br +0 -0
- codex/static_root/assets/confirm-dialog-CKiPNGTr.b80ae71d7170.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-BSR80Q5F.js → confirm-dialog-CKiPNGTr.js} +1 -1
- codex/static_root/assets/confirm-dialog-CKiPNGTr.js.br +0 -0
- codex/static_root/assets/confirm-dialog-CKiPNGTr.js.gz +0 -0
- codex/static_root/assets/{confirm-footer-nURenNFu.js → confirm-footer-CP02GqhM.8ba00213022b.js} +1 -1
- codex/static_root/assets/confirm-footer-CP02GqhM.8ba00213022b.js.br +0 -0
- codex/static_root/assets/confirm-footer-CP02GqhM.8ba00213022b.js.gz +0 -0
- codex/static_root/assets/{confirm-footer-nURenNFu.4bb822f97114.js → confirm-footer-CP02GqhM.js} +1 -1
- codex/static_root/assets/confirm-footer-CP02GqhM.js.br +0 -0
- codex/static_root/assets/confirm-footer-CP02GqhM.js.gz +0 -0
- codex/static_root/assets/{datetime-column-CPhJtWvK.314a472a0e7f.js → datetime-column-BnilMk5Y.96201e187340.js} +1 -1
- codex/static_root/assets/datetime-column-BnilMk5Y.96201e187340.js.br +0 -0
- codex/static_root/assets/datetime-column-BnilMk5Y.96201e187340.js.gz +0 -0
- codex/static_root/assets/{datetime-column-CPhJtWvK.js → datetime-column-BnilMk5Y.js} +1 -1
- codex/static_root/assets/datetime-column-BnilMk5Y.js.br +0 -0
- codex/static_root/assets/datetime-column-BnilMk5Y.js.gz +0 -0
- codex/static_root/assets/{filter-tAmBa3uw.15b44720e800.js → filter-Dp8VoLoJ.7dcf871c2c5d.js} +1 -1
- codex/static_root/assets/filter-Dp8VoLoJ.7dcf871c2c5d.js.br +0 -0
- codex/static_root/assets/filter-Dp8VoLoJ.7dcf871c2c5d.js.gz +0 -0
- codex/static_root/assets/{filter-tAmBa3uw.js → filter-Dp8VoLoJ.js} +1 -1
- codex/static_root/assets/filter-Dp8VoLoJ.js.br +0 -0
- codex/static_root/assets/filter-Dp8VoLoJ.js.gz +0 -0
- codex/static_root/assets/flag-tab-BpATs2Vh.2ba1294488a2.js +1 -0
- codex/static_root/assets/flag-tab-BpATs2Vh.2ba1294488a2.js.br +0 -0
- codex/static_root/assets/flag-tab-BpATs2Vh.2ba1294488a2.js.gz +0 -0
- codex/static_root/assets/flag-tab-BpATs2Vh.js +1 -0
- codex/static_root/assets/flag-tab-BpATs2Vh.js.br +0 -0
- codex/static_root/assets/flag-tab-BpATs2Vh.js.gz +0 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css +1 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css.br +1 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css.gz +0 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.css +1 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.css.br +1 -0
- codex/static_root/assets/flag-tab-DUXtbpA2.css.gz +0 -0
- codex/static_root/assets/{group-tab-LuURRP5m.c03bbeac9517.js → group-tab-BMv-gfGN.08bf0e591bdd.js} +1 -1
- codex/static_root/assets/group-tab-BMv-gfGN.08bf0e591bdd.js.br +0 -0
- codex/static_root/assets/group-tab-BMv-gfGN.08bf0e591bdd.js.gz +0 -0
- codex/static_root/assets/{group-tab-LuURRP5m.js → group-tab-BMv-gfGN.js} +1 -1
- codex/static_root/assets/group-tab-BMv-gfGN.js.br +0 -0
- codex/static_root/assets/group-tab-BMv-gfGN.js.gz +0 -0
- codex/static_root/assets/{http-error-BmImTNGc.c47768a115e0.js → http-error-Cb6Mqj4J.064dffeb574f.js} +1 -1
- codex/static_root/assets/http-error-Cb6Mqj4J.064dffeb574f.js.br +0 -0
- codex/static_root/assets/http-error-Cb6Mqj4J.064dffeb574f.js.gz +0 -0
- codex/static_root/assets/{http-error-BmImTNGc.js → http-error-Cb6Mqj4J.js} +1 -1
- codex/static_root/assets/http-error-Cb6Mqj4J.js.br +0 -0
- codex/static_root/assets/http-error-Cb6Mqj4J.js.gz +0 -0
- codex/static_root/assets/{library-tab-Df9FgT1K.82069fa06937.js → library-tab-CqPR7agm.db811498ed9a.js} +1 -1
- codex/static_root/assets/library-tab-CqPR7agm.db811498ed9a.js.br +0 -0
- codex/static_root/assets/library-tab-CqPR7agm.db811498ed9a.js.gz +0 -0
- codex/static_root/assets/{library-tab-Df9FgT1K.js → library-tab-CqPR7agm.js} +1 -1
- codex/static_root/assets/library-tab-CqPR7agm.js.br +0 -0
- codex/static_root/assets/library-tab-CqPR7agm.js.gz +0 -0
- codex/static_root/assets/{main-B0Xaei3w.js → main-D1r3hZ0f.d05c749b9988.js} +4 -4
- codex/static_root/assets/main-D1r3hZ0f.d05c749b9988.js.br +0 -0
- codex/static_root/assets/main-D1r3hZ0f.d05c749b9988.js.gz +0 -0
- codex/static_root/assets/{main-B0Xaei3w.311de98197bd.js → main-D1r3hZ0f.js} +4 -4
- codex/static_root/assets/main-D1r3hZ0f.js.br +0 -0
- codex/static_root/assets/main-D1r3hZ0f.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-B8UtDnAu.f3947fec119f.js +1 -0
- codex/static_root/assets/metadata-dialog-B8UtDnAu.f3947fec119f.js.br +0 -0
- codex/static_root/assets/metadata-dialog-B8UtDnAu.f3947fec119f.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-B8UtDnAu.js +1 -0
- codex/static_root/assets/metadata-dialog-B8UtDnAu.js.br +0 -0
- codex/static_root/assets/metadata-dialog-B8UtDnAu.js.gz +0 -0
- codex/static_root/assets/{metadata-dialog-uikP6x2m.84a7b6c4b6b9.css → metadata-dialog-BGJasBRy.0553851658b5.css} +1 -1
- codex/static_root/assets/metadata-dialog-BGJasBRy.0553851658b5.css.br +0 -0
- codex/static_root/assets/metadata-dialog-BGJasBRy.0553851658b5.css.gz +0 -0
- codex/static_root/assets/{metadata-dialog-uikP6x2m.css → metadata-dialog-BGJasBRy.css} +1 -1
- codex/static_root/assets/metadata-dialog-BGJasBRy.css.br +0 -0
- codex/static_root/assets/metadata-dialog-BGJasBRy.css.gz +0 -0
- codex/static_root/assets/{pdf-doc-8cjxNrmX.fb89731e22ec.js → pdf-doc-DWjSqsgP.12c6022d08b7.js} +1 -1
- codex/static_root/assets/pdf-doc-DWjSqsgP.12c6022d08b7.js.br +0 -0
- codex/static_root/assets/pdf-doc-DWjSqsgP.12c6022d08b7.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-8cjxNrmX.js → pdf-doc-DWjSqsgP.js} +1 -1
- codex/static_root/assets/pdf-doc-DWjSqsgP.js.br +0 -0
- codex/static_root/assets/pdf-doc-DWjSqsgP.js.gz +0 -0
- codex/static_root/assets/reader-DsBRqChH.ae8ffff757c7.js +7 -0
- codex/static_root/assets/reader-DsBRqChH.ae8ffff757c7.js.br +0 -0
- codex/static_root/assets/reader-DsBRqChH.ae8ffff757c7.js.gz +0 -0
- codex/static_root/assets/reader-DsBRqChH.js +7 -0
- codex/static_root/assets/reader-DsBRqChH.js.br +0 -0
- codex/static_root/assets/reader-DsBRqChH.js.gz +0 -0
- codex/static_root/assets/{stats-tab-iyf0Qopa.319d016c0042.js → stats-tab-BFuWdQ3i.625b51e3ee5b.js} +1 -1
- codex/static_root/assets/stats-tab-BFuWdQ3i.625b51e3ee5b.js.br +0 -0
- codex/static_root/assets/stats-tab-BFuWdQ3i.625b51e3ee5b.js.gz +0 -0
- codex/static_root/assets/{stats-tab-iyf0Qopa.js → stats-tab-BFuWdQ3i.js} +1 -1
- codex/static_root/assets/stats-tab-BFuWdQ3i.js.br +0 -0
- codex/static_root/assets/stats-tab-BFuWdQ3i.js.gz +0 -0
- codex/static_root/assets/{task-tab-BaQoEc3u.836bc4466809.js → task-tab-DrTBYMCB.ac4473d3a137.js} +1 -1
- codex/static_root/assets/task-tab-DrTBYMCB.ac4473d3a137.js.br +0 -0
- codex/static_root/assets/task-tab-DrTBYMCB.ac4473d3a137.js.gz +0 -0
- codex/static_root/assets/{task-tab-BaQoEc3u.js → task-tab-DrTBYMCB.js} +1 -1
- codex/static_root/assets/task-tab-DrTBYMCB.js.br +0 -0
- codex/static_root/assets/task-tab-DrTBYMCB.js.gz +0 -0
- codex/static_root/assets/{user-tab-DPtaql0P.c5afb006dbe1.js → user-tab-CYzh_eX6.a2470464a951.js} +1 -1
- codex/static_root/assets/user-tab-CYzh_eX6.a2470464a951.js.br +0 -0
- codex/static_root/assets/user-tab-CYzh_eX6.a2470464a951.js.gz +0 -0
- codex/static_root/assets/{user-tab-DPtaql0P.js → user-tab-CYzh_eX6.js} +1 -1
- codex/static_root/assets/user-tab-CYzh_eX6.js.br +0 -0
- codex/static_root/assets/user-tab-CYzh_eX6.js.gz +0 -0
- codex/static_root/js/{choices-admin.3a2cdebdbfba.json → choices-admin.bb730e4f26ac.json} +1 -1
- codex/static_root/js/choices-admin.bb730e4f26ac.json.br +0 -0
- codex/static_root/js/{choices-admin.3a2cdebdbfba.json.gz → choices-admin.bb730e4f26ac.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.59b649b89398.json → manifest.07a0961655a3.json} +209 -209
- codex/static_root/manifest.07a0961655a3.json.br +0 -0
- codex/static_root/manifest.07a0961655a3.json.gz +0 -0
- codex/static_root/manifest.json +209 -209
- 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/search/indexes/codex/comic_text.txt +1 -1
- codex/views/browser/base.py +4 -1
- codex/views/browser/browser.py +19 -14
- codex/views/browser/choices.py +2 -0
- codex/views/browser/filters/search.py +3 -1
- codex/views/browser/metadata.py +12 -6
- codex/views/reader/reader.py +53 -5
- {codex-1.5.7rc0.dist-info → codex-1.5.8.dist-info}/METADATA +1 -1
- {codex-1.5.7rc0.dist-info → codex-1.5.8.dist-info}/RECORD +242 -242
- codex/static_root/assets/VCheckbox-CSvjBFR1.531e0fc38f24.js.br +0 -0
- codex/static_root/assets/VCheckbox-CSvjBFR1.531e0fc38f24.js.gz +0 -0
- codex/static_root/assets/VCheckbox-CSvjBFR1.js.br +0 -0
- codex/static_root/assets/VCheckbox-CSvjBFR1.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-CQ4VhpyA.cb28dccb8bd0.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-CQ4VhpyA.cb28dccb8bd0.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-CQ4VhpyA.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-CQ4VhpyA.js.gz +0 -0
- codex/static_root/assets/VCombobox-DmqwaLY4.d4e984321966.js.br +0 -0
- codex/static_root/assets/VCombobox-DmqwaLY4.d4e984321966.js.gz +0 -0
- codex/static_root/assets/VCombobox-DmqwaLY4.js.br +0 -0
- codex/static_root/assets/VCombobox-DmqwaLY4.js.gz +0 -0
- codex/static_root/assets/VDataTableVirtual-6f42V3Lt.7bd15f89e179.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-6f42V3Lt.7bd15f89e179.js.gz +0 -0
- codex/static_root/assets/VDataTableVirtual-6f42V3Lt.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-6f42V3Lt.js.gz +0 -0
- codex/static_root/assets/VExpansionPanel-HxmPRHLI.2f46f7785043.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-HxmPRHLI.2f46f7785043.js.gz +0 -0
- codex/static_root/assets/VExpansionPanel-HxmPRHLI.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-HxmPRHLI.js.gz +0 -0
- codex/static_root/assets/VMain-C67fPCUj.c0f7b7a893b2.js.br +0 -0
- codex/static_root/assets/VMain-C67fPCUj.c0f7b7a893b2.js.gz +0 -0
- codex/static_root/assets/VMain-C67fPCUj.js.br +0 -0
- codex/static_root/assets/VMain-C67fPCUj.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-DlFy7v1Z.9e5a0c60e667.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DlFy7v1Z.9e5a0c60e667.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-DlFy7v1Z.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DlFy7v1Z.js.gz +0 -0
- codex/static_root/assets/VSelect-O_Yn2sND.d7879a023bd9.js.br +0 -0
- codex/static_root/assets/VSelect-O_Yn2sND.d7879a023bd9.js.gz +0 -0
- codex/static_root/assets/VSelect-O_Yn2sND.js.br +0 -0
- codex/static_root/assets/VSelect-O_Yn2sND.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-DP64P5MF.ca35648c092a.js.br +0 -0
- codex/static_root/assets/VSelectionControl-DP64P5MF.ca35648c092a.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-DP64P5MF.js.br +0 -0
- codex/static_root/assets/VSelectionControl-DP64P5MF.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-DOKbHMCv.23352d03450c.js.br +0 -0
- codex/static_root/assets/VSlideGroup-DOKbHMCv.23352d03450c.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-DOKbHMCv.js.br +0 -0
- codex/static_root/assets/VSlideGroup-DOKbHMCv.js.gz +0 -0
- codex/static_root/assets/VTable-CtRSR9wI.ab498162ec9a.js.br +0 -0
- codex/static_root/assets/VTable-CtRSR9wI.ab498162ec9a.js.gz +0 -0
- codex/static_root/assets/VTable-CtRSR9wI.js.br +0 -0
- codex/static_root/assets/VTable-CtRSR9wI.js.gz +0 -0
- codex/static_root/assets/VToolbar-C__BHwZO.73f9b9fcc254.js.br +0 -0
- codex/static_root/assets/VToolbar-C__BHwZO.73f9b9fcc254.js.gz +0 -0
- codex/static_root/assets/VToolbar-C__BHwZO.js.br +0 -0
- codex/static_root/assets/VToolbar-C__BHwZO.js.gz +0 -0
- codex/static_root/assets/VWindowItem-BMdyDd7Q.e61cc304e3bc.js.br +0 -0
- codex/static_root/assets/VWindowItem-BMdyDd7Q.e61cc304e3bc.js.gz +0 -0
- codex/static_root/assets/VWindowItem-BMdyDd7Q.js.br +0 -0
- codex/static_root/assets/VWindowItem-BMdyDd7Q.js.gz +0 -0
- codex/static_root/assets/admin-D-946Bk9.1a17b45a08d8.js.br +0 -0
- codex/static_root/assets/admin-D-946Bk9.1a17b45a08d8.js.gz +0 -0
- codex/static_root/assets/admin-D-946Bk9.js.br +0 -0
- codex/static_root/assets/admin-D-946Bk9.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Bd9_K-7V.b774e66b1bc2.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Bd9_K-7V.b774e66b1bc2.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Bd9_K-7V.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Bd9_K-7V.js.gz +0 -0
- codex/static_root/assets/browser-C8SJwVGz.0f7daf93b064.css.br +0 -0
- codex/static_root/assets/browser-C8SJwVGz.0f7daf93b064.css.gz +0 -0
- codex/static_root/assets/browser-C8SJwVGz.css.br +0 -0
- codex/static_root/assets/browser-C8SJwVGz.css.gz +0 -0
- codex/static_root/assets/browser-DGl3vPo9.dcab8c37c67b.js +0 -1
- codex/static_root/assets/browser-DGl3vPo9.dcab8c37c67b.js.br +0 -0
- codex/static_root/assets/browser-DGl3vPo9.dcab8c37c67b.js.gz +0 -0
- codex/static_root/assets/browser-DGl3vPo9.js +0 -1
- codex/static_root/assets/browser-DGl3vPo9.js.br +0 -0
- codex/static_root/assets/browser-DGl3vPo9.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-Du93DO_u.3a928f66b2c5.js.br +0 -0
- codex/static_root/assets/change-password-dialog-Du93DO_u.3a928f66b2c5.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-Du93DO_u.js.br +0 -0
- codex/static_root/assets/change-password-dialog-Du93DO_u.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-BSR80Q5F.96ab044bb178.js.br +0 -0
- codex/static_root/assets/confirm-dialog-BSR80Q5F.96ab044bb178.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-BSR80Q5F.js.br +0 -0
- codex/static_root/assets/confirm-dialog-BSR80Q5F.js.gz +0 -0
- codex/static_root/assets/confirm-footer-nURenNFu.4bb822f97114.js.br +0 -0
- codex/static_root/assets/confirm-footer-nURenNFu.4bb822f97114.js.gz +0 -0
- codex/static_root/assets/confirm-footer-nURenNFu.js.br +0 -0
- codex/static_root/assets/confirm-footer-nURenNFu.js.gz +0 -0
- codex/static_root/assets/datetime-column-CPhJtWvK.314a472a0e7f.js.br +0 -0
- codex/static_root/assets/datetime-column-CPhJtWvK.314a472a0e7f.js.gz +0 -0
- codex/static_root/assets/datetime-column-CPhJtWvK.js.br +0 -0
- codex/static_root/assets/datetime-column-CPhJtWvK.js.gz +0 -0
- codex/static_root/assets/filter-tAmBa3uw.15b44720e800.js.br +0 -0
- codex/static_root/assets/filter-tAmBa3uw.15b44720e800.js.gz +0 -0
- codex/static_root/assets/filter-tAmBa3uw.js.br +0 -0
- codex/static_root/assets/filter-tAmBa3uw.js.gz +0 -0
- codex/static_root/assets/flag-tab-BTiZcgOa.81b4fefa02e1.css +0 -1
- codex/static_root/assets/flag-tab-BTiZcgOa.81b4fefa02e1.css.br +0 -1
- codex/static_root/assets/flag-tab-BTiZcgOa.81b4fefa02e1.css.gz +0 -0
- codex/static_root/assets/flag-tab-BTiZcgOa.css +0 -1
- codex/static_root/assets/flag-tab-BTiZcgOa.css.br +0 -1
- codex/static_root/assets/flag-tab-BTiZcgOa.css.gz +0 -0
- codex/static_root/assets/flag-tab-DvygpEAZ.6406b06b01fc.js +0 -1
- codex/static_root/assets/flag-tab-DvygpEAZ.6406b06b01fc.js.br +0 -0
- codex/static_root/assets/flag-tab-DvygpEAZ.6406b06b01fc.js.gz +0 -0
- codex/static_root/assets/flag-tab-DvygpEAZ.js +0 -1
- codex/static_root/assets/flag-tab-DvygpEAZ.js.br +0 -0
- codex/static_root/assets/flag-tab-DvygpEAZ.js.gz +0 -0
- codex/static_root/assets/group-tab-LuURRP5m.c03bbeac9517.js.br +0 -0
- codex/static_root/assets/group-tab-LuURRP5m.c03bbeac9517.js.gz +0 -0
- codex/static_root/assets/group-tab-LuURRP5m.js.br +0 -0
- codex/static_root/assets/group-tab-LuURRP5m.js.gz +0 -0
- codex/static_root/assets/http-error-BmImTNGc.c47768a115e0.js.br +0 -0
- codex/static_root/assets/http-error-BmImTNGc.c47768a115e0.js.gz +0 -0
- codex/static_root/assets/http-error-BmImTNGc.js.br +0 -0
- codex/static_root/assets/http-error-BmImTNGc.js.gz +0 -0
- codex/static_root/assets/library-tab-Df9FgT1K.82069fa06937.js.br +0 -0
- codex/static_root/assets/library-tab-Df9FgT1K.82069fa06937.js.gz +0 -0
- codex/static_root/assets/library-tab-Df9FgT1K.js.br +0 -0
- codex/static_root/assets/library-tab-Df9FgT1K.js.gz +0 -0
- codex/static_root/assets/main-B0Xaei3w.311de98197bd.js.br +0 -0
- codex/static_root/assets/main-B0Xaei3w.311de98197bd.js.gz +0 -0
- codex/static_root/assets/main-B0Xaei3w.js.br +0 -0
- codex/static_root/assets/main-B0Xaei3w.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-MaFloIhA.95f94d1ee1a1.js +0 -1
- codex/static_root/assets/metadata-dialog-MaFloIhA.95f94d1ee1a1.js.br +0 -0
- codex/static_root/assets/metadata-dialog-MaFloIhA.95f94d1ee1a1.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-MaFloIhA.js +0 -1
- codex/static_root/assets/metadata-dialog-MaFloIhA.js.br +0 -0
- codex/static_root/assets/metadata-dialog-MaFloIhA.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-uikP6x2m.84a7b6c4b6b9.css.br +0 -0
- codex/static_root/assets/metadata-dialog-uikP6x2m.84a7b6c4b6b9.css.gz +0 -0
- codex/static_root/assets/metadata-dialog-uikP6x2m.css.br +0 -0
- codex/static_root/assets/metadata-dialog-uikP6x2m.css.gz +0 -0
- codex/static_root/assets/pdf-doc-8cjxNrmX.fb89731e22ec.js.br +0 -0
- codex/static_root/assets/pdf-doc-8cjxNrmX.fb89731e22ec.js.gz +0 -0
- codex/static_root/assets/pdf-doc-8cjxNrmX.js.br +0 -0
- codex/static_root/assets/pdf-doc-8cjxNrmX.js.gz +0 -0
- codex/static_root/assets/reader-T8uF7cx9.e29141aaba35.js +0 -7
- codex/static_root/assets/reader-T8uF7cx9.e29141aaba35.js.br +0 -0
- codex/static_root/assets/reader-T8uF7cx9.e29141aaba35.js.gz +0 -0
- codex/static_root/assets/reader-T8uF7cx9.js +0 -7
- codex/static_root/assets/reader-T8uF7cx9.js.br +0 -0
- codex/static_root/assets/reader-T8uF7cx9.js.gz +0 -0
- codex/static_root/assets/stats-tab-iyf0Qopa.319d016c0042.js.br +0 -0
- codex/static_root/assets/stats-tab-iyf0Qopa.319d016c0042.js.gz +0 -0
- codex/static_root/assets/stats-tab-iyf0Qopa.js.br +0 -0
- codex/static_root/assets/stats-tab-iyf0Qopa.js.gz +0 -0
- codex/static_root/assets/task-tab-BaQoEc3u.836bc4466809.js.br +0 -0
- codex/static_root/assets/task-tab-BaQoEc3u.836bc4466809.js.gz +0 -0
- codex/static_root/assets/task-tab-BaQoEc3u.js.br +0 -0
- codex/static_root/assets/task-tab-BaQoEc3u.js.gz +0 -0
- codex/static_root/assets/user-tab-DPtaql0P.c5afb006dbe1.js.br +0 -0
- codex/static_root/assets/user-tab-DPtaql0P.c5afb006dbe1.js.gz +0 -0
- codex/static_root/assets/user-tab-DPtaql0P.js.br +0 -0
- codex/static_root/assets/user-tab-DPtaql0P.js.gz +0 -0
- codex/static_root/js/choices-admin.3a2cdebdbfba.json.br +0 -0
- codex/static_root/manifest.59b649b89398.json.br +0 -0
- codex/static_root/manifest.59b649b89398.json.gz +0 -0
- {codex-1.5.7rc0.dist-info → codex-1.5.8.dist-info}/LICENSE +0 -0
- {codex-1.5.7rc0.dist-info → codex-1.5.8.dist-info}/WHEEL +0 -0
- {codex-1.5.7rc0.dist-info → codex-1.5.8.dist-info}/entry_points.txt +0 -0
|
@@ -94,13 +94,14 @@ class AggregateMetadataMixin(CleanMetadataMixin):
|
|
|
94
94
|
m2m_md = {}
|
|
95
95
|
failed_import = {}
|
|
96
96
|
try:
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
if import_metadata:
|
|
98
|
+
with Comicbox(path) as cb:
|
|
99
99
|
md = cb.to_dict()
|
|
100
100
|
md = md.get("comicbox", {})
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
if "file_type" not in md:
|
|
102
|
+
md["file_type"] = cb.get_file_type()
|
|
103
|
+
if "page_count" not in md:
|
|
104
|
+
md["page_count"] = cb.get_page_count()
|
|
104
105
|
|
|
105
106
|
md["path"] = path
|
|
106
107
|
md = self.clean_md(md)
|
|
@@ -242,11 +243,12 @@ class AggregateMetadataMixin(CleanMetadataMixin):
|
|
|
242
243
|
self.status_controller.update(status)
|
|
243
244
|
|
|
244
245
|
@status_notify(status_type=ImportStatusTypes.AGGREGATE_TAGS)
|
|
245
|
-
def get_aggregate_metadata(
|
|
246
|
+
def get_aggregate_metadata( # noqa: PLR0913
|
|
246
247
|
self,
|
|
247
248
|
all_paths,
|
|
248
249
|
library_path,
|
|
249
250
|
metadata,
|
|
251
|
+
force_import_metadata,
|
|
250
252
|
status=None,
|
|
251
253
|
):
|
|
252
254
|
"""Get aggregated metatada for the paths given."""
|
|
@@ -263,7 +265,10 @@ class AggregateMetadataMixin(CleanMetadataMixin):
|
|
|
263
265
|
if status and status.complete is None:
|
|
264
266
|
status.complete = 0
|
|
265
267
|
key = AdminFlag.FlagChoices.IMPORT_METADATA.value # type: ignore
|
|
266
|
-
|
|
268
|
+
if force_import_metadata:
|
|
269
|
+
import_metadata = True
|
|
270
|
+
else:
|
|
271
|
+
import_metadata = AdminFlag.objects.get(key=key).on
|
|
267
272
|
if not import_metadata:
|
|
268
273
|
self.log.warn("Admin flag set to NOT import metadata.")
|
|
269
274
|
data = (all_failed_imports, all_mds, all_m2m_mds, all_fks, status)
|
|
@@ -13,13 +13,17 @@ from codex.librarian.importer.deleted import DeletedMixin
|
|
|
13
13
|
from codex.librarian.importer.failed_imports import FailedImportsMixin
|
|
14
14
|
from codex.librarian.importer.moved import MovedMixin
|
|
15
15
|
from codex.librarian.importer.status import ImportStatusTypes
|
|
16
|
-
from codex.librarian.importer.tasks import
|
|
16
|
+
from codex.librarian.importer.tasks import (
|
|
17
|
+
AdoptOrphanFoldersTask,
|
|
18
|
+
ImportDBDiffTask,
|
|
19
|
+
LazyImportComicsTask,
|
|
20
|
+
)
|
|
17
21
|
from codex.librarian.importer.update_comics import UpdateComicsMixin
|
|
18
22
|
from codex.librarian.notifier.tasks import FAILED_IMPORTS_TASK, LIBRARY_CHANGED_TASK
|
|
19
23
|
from codex.librarian.search.status import SearchIndexStatusTypes
|
|
20
24
|
from codex.librarian.search.tasks import SearchIndexAbortTask, SearchIndexUpdateTask
|
|
21
25
|
from codex.librarian.tasks import DelayedTasks
|
|
22
|
-
from codex.models import Library
|
|
26
|
+
from codex.models import Comic, Library
|
|
23
27
|
from codex.status import Status
|
|
24
28
|
|
|
25
29
|
_WRITE_WAIT_EXPIRY = 60
|
|
@@ -253,7 +257,10 @@ class ComicImporterThread(
|
|
|
253
257
|
FIS: fis,
|
|
254
258
|
}
|
|
255
259
|
self.get_aggregate_metadata(
|
|
256
|
-
modified_paths | created_paths,
|
|
260
|
+
modified_paths | created_paths,
|
|
261
|
+
library.path,
|
|
262
|
+
all_metadata,
|
|
263
|
+
task.force_import_metadata,
|
|
257
264
|
)
|
|
258
265
|
all_metadata = None
|
|
259
266
|
modified_paths -= fis.keys()
|
|
@@ -287,11 +294,37 @@ class ComicImporterThread(
|
|
|
287
294
|
changed_args = (library, start_time, imported_count)
|
|
288
295
|
self._finish_apply(changed, new_failed_imports, changed_args)
|
|
289
296
|
|
|
297
|
+
def _lazy_import_metadata(self, task):
|
|
298
|
+
"""Kick off an import task for just these books."""
|
|
299
|
+
import_comics = Comic.objects.filter(pk__in=task.pks).only("path", "library_id")
|
|
300
|
+
library_path_map = {}
|
|
301
|
+
for import_comic in import_comics:
|
|
302
|
+
library_id = import_comic.library_id # type: ignore
|
|
303
|
+
if library_id not in library_path_map:
|
|
304
|
+
library_path_map[library_id] = set()
|
|
305
|
+
library_path_map[library_id].add(import_comic.path)
|
|
306
|
+
|
|
307
|
+
for library_id, paths in library_path_map.items():
|
|
308
|
+
task = ImportDBDiffTask(
|
|
309
|
+
library_id=library_id,
|
|
310
|
+
dirs_moved={},
|
|
311
|
+
files_moved={},
|
|
312
|
+
dirs_modified=frozenset(),
|
|
313
|
+
files_modified=frozenset(paths),
|
|
314
|
+
files_created=frozenset(),
|
|
315
|
+
dirs_deleted=frozenset(),
|
|
316
|
+
files_deleted=frozenset(),
|
|
317
|
+
force_import_metadata=True,
|
|
318
|
+
)
|
|
319
|
+
self._apply(task)
|
|
320
|
+
|
|
290
321
|
def process_item(self, item):
|
|
291
322
|
"""Run the updater."""
|
|
292
323
|
task = item
|
|
293
324
|
if isinstance(task, ImportDBDiffTask):
|
|
294
325
|
self._apply(task)
|
|
326
|
+
elif isinstance(task, LazyImportComicsTask):
|
|
327
|
+
self._lazy_import_metadata(task)
|
|
295
328
|
elif isinstance(task, AdoptOrphanFoldersTask):
|
|
296
329
|
self.adopt_orphan_folders()
|
|
297
330
|
else:
|
|
@@ -21,6 +21,14 @@ class ImportDBDiffTask(ImportTask):
|
|
|
21
21
|
files_created: frozenset[str]
|
|
22
22
|
dirs_deleted: frozenset[str]
|
|
23
23
|
files_deleted: frozenset[str]
|
|
24
|
+
force_import_metadata: bool = False
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass
|
|
28
|
+
class LazyImportComicsTask(ImportTask):
|
|
29
|
+
"""Lazy import of metadaa for existing comics."""
|
|
30
|
+
|
|
31
|
+
pks: frozenset[int]
|
|
24
32
|
|
|
25
33
|
|
|
26
34
|
@dataclass
|
codex/models/comic.py
CHANGED
|
@@ -270,3 +270,12 @@ class Comic(WatchedPath):
|
|
|
270
270
|
def __str__(self):
|
|
271
271
|
"""Most common text representation for logging."""
|
|
272
272
|
return self.get_title(self)
|
|
273
|
+
|
|
274
|
+
def issue(self) -> str:
|
|
275
|
+
"""Combine issue parts for search."""
|
|
276
|
+
res = ""
|
|
277
|
+
if self.issue_number is not None:
|
|
278
|
+
res += str(self.issue_number.normalize())
|
|
279
|
+
if self.issue_suffix:
|
|
280
|
+
res += self.issue_suffix
|
|
281
|
+
return res
|
codex/search/backend.py
CHANGED
|
@@ -7,11 +7,16 @@ from types import MappingProxyType
|
|
|
7
7
|
|
|
8
8
|
from django.utils.timezone import now
|
|
9
9
|
from humanfriendly import InvalidSize, parse_size
|
|
10
|
-
from whoosh.analysis import
|
|
10
|
+
from whoosh.analysis import (
|
|
11
|
+
CharsetFilter,
|
|
12
|
+
StemFilter,
|
|
13
|
+
StemmingAnalyzer,
|
|
14
|
+
)
|
|
11
15
|
from whoosh.fields import BOOLEAN, DATETIME, NUMERIC, TEXT, FieldType, Schema
|
|
12
16
|
from whoosh.filedb.filestore import FileStorage
|
|
13
17
|
from whoosh.index import EmptyIndexError
|
|
14
18
|
from whoosh.qparser import (
|
|
19
|
+
CopyFieldPlugin,
|
|
15
20
|
FieldAliasPlugin,
|
|
16
21
|
GtLtPlugin,
|
|
17
22
|
OperatorsPlugin,
|
|
@@ -93,7 +98,8 @@ class FILESIZE(NUMERIC):
|
|
|
93
98
|
|
|
94
99
|
|
|
95
100
|
TEXT_ANALYZER = (
|
|
96
|
-
StandardAnalyzer() | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
|
|
101
|
+
# StandardAnalyzer() | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
|
|
102
|
+
StemmingAnalyzer(minsize=1) | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
|
|
97
103
|
)
|
|
98
104
|
|
|
99
105
|
|
|
@@ -118,7 +124,7 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
118
124
|
"file_type": ("type",),
|
|
119
125
|
"identifier": ("id", "nss"),
|
|
120
126
|
"identifier_type": ("idtype", "id_type", "nid"),
|
|
121
|
-
"issue_number": ("
|
|
127
|
+
"issue_number": ("number",),
|
|
122
128
|
"locations": ("location",),
|
|
123
129
|
"monochrome": gen_multipart_field_aliases("black_and_white"),
|
|
124
130
|
"name": ("title",),
|
|
@@ -138,6 +144,7 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
138
144
|
RESERVED_CHARACTERS = ()
|
|
139
145
|
RESERVED_WORDS = ()
|
|
140
146
|
FIELD_ALIAS_PLUGIN = FieldAliasPlugin(FIELDMAP)
|
|
147
|
+
COPY_FIELD_PLUGIN = CopyFieldPlugin({"issue_number": "issue_suffix"})
|
|
141
148
|
OPERATORS_PLUGIN = OperatorsPlugin(
|
|
142
149
|
ops=None,
|
|
143
150
|
clean=False,
|
|
@@ -188,6 +195,8 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
188
195
|
_CPU_MULTIPLIER = CPU_MULTIPLIER
|
|
189
196
|
_CHUNK_PER_GB = CHUNK_PER_GB
|
|
190
197
|
_MAX_CHUNK_SIZE = MAX_CHUNK_SIZE
|
|
198
|
+
_DECIMAL_FIELD_NAMES = frozenset({"decimal", "float"})
|
|
199
|
+
_DATETIME_FIELD_NAMES = frozenset({"date", "datetime"})
|
|
191
200
|
|
|
192
201
|
def __init__(self, connection_alias, **connection_options):
|
|
193
202
|
"""Init worker queues."""
|
|
@@ -210,10 +219,6 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
210
219
|
int(mem_limit_gb * self._CHUNK_PER_GB), self._MAX_CHUNK_SIZE
|
|
211
220
|
)
|
|
212
221
|
|
|
213
|
-
@staticmethod
|
|
214
|
-
def _get_text_analyzer():
|
|
215
|
-
return StandardAnalyzer() | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
|
|
216
|
-
|
|
217
222
|
def build_schema(self, fields):
|
|
218
223
|
"""Customize Codex Schema.
|
|
219
224
|
|
|
@@ -242,20 +247,15 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
242
247
|
signed=False,
|
|
243
248
|
stored=field_class.stored,
|
|
244
249
|
)
|
|
245
|
-
elif field_class.field_type
|
|
246
|
-
# my only floats are small decimals.
|
|
250
|
+
elif field_class.field_type in self._DECIMAL_FIELD_NAMES:
|
|
247
251
|
schema_fields[index_fieldname] = NUMERIC(
|
|
248
|
-
numtype=
|
|
249
|
-
bits=64,
|
|
252
|
+
numtype=float, # type: ignore
|
|
250
253
|
field_boost=field_class.boost,
|
|
251
|
-
signed=False,
|
|
252
|
-
decimal_places=2,
|
|
253
254
|
stored=field_class.stored,
|
|
254
255
|
)
|
|
255
|
-
elif field_class.field_type in
|
|
256
|
+
elif field_class.field_type in self._DATETIME_FIELD_NAMES:
|
|
256
257
|
schema_fields[index_fieldname] = DATETIME(
|
|
257
258
|
stored=field_class.stored,
|
|
258
|
-
# sortable=True # index_fieldname == "updated_at"
|
|
259
259
|
)
|
|
260
260
|
elif field_class.field_type == "boolean":
|
|
261
261
|
# Field boost isn't supported on BOOLEAN as of 1.8.2.
|
|
@@ -264,9 +264,7 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
264
264
|
schema_fields[index_fieldname] = TEXT(
|
|
265
265
|
stored=True,
|
|
266
266
|
analyzer=TEXT_ANALYZER,
|
|
267
|
-
# analyzer=field_class.analyzer or StemmingAnalyzer(),
|
|
268
267
|
field_boost=field_class.boost,
|
|
269
|
-
# sortable=True,
|
|
270
268
|
spelling=field_class.document is True,
|
|
271
269
|
)
|
|
272
270
|
if field_class.document:
|
|
@@ -318,7 +316,12 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
|
|
|
318
316
|
# https://github.com/mchaput/whoosh/pull/11
|
|
319
317
|
self.parser.remove_plugin_class(WhitespacePlugin)
|
|
320
318
|
self.parser.replace_plugin(self.OPERATORS_PLUGIN)
|
|
321
|
-
plugins = [
|
|
319
|
+
plugins = [
|
|
320
|
+
WhitespacePlugin,
|
|
321
|
+
self.COPY_FIELD_PLUGIN,
|
|
322
|
+
self.FIELD_ALIAS_PLUGIN,
|
|
323
|
+
GtLtPlugin,
|
|
324
|
+
]
|
|
322
325
|
plugins += [DateParserPlugin(basedate=now())]
|
|
323
326
|
self.parser.add_plugins(plugins)
|
|
324
327
|
|
codex/search/indexes.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Haystack search indexes."""
|
|
2
2
|
|
|
3
|
-
from codex._vendor.haystack.fields import CharField, IntegerField
|
|
3
|
+
from codex._vendor.haystack.fields import CharField, FloatField, IntegerField
|
|
4
4
|
from codex._vendor.haystack.indexes import Indexable, ModelSearchIndex
|
|
5
5
|
from codex.models import Comic
|
|
6
6
|
|
|
@@ -40,18 +40,23 @@ class ComicIndex(ModelSearchIndex, Indexable):
|
|
|
40
40
|
tags = CharField(model_attr="tags__name", null=True)
|
|
41
41
|
teams = CharField(model_attr="teams__name", null=True)
|
|
42
42
|
|
|
43
|
+
# This makes issue field searching exact rather than fuzzy
|
|
44
|
+
issue = CharField(model_attr="issue", null=True)
|
|
45
|
+
|
|
46
|
+
# Floats are a better search experience than fixed decimals
|
|
47
|
+
issue_number = FloatField(model_attr="issue_number", null=True)
|
|
48
|
+
community_rating = FloatField(model_attr="community_rating", null=True)
|
|
49
|
+
critical_rating = FloatField(model_attr="critical_rating", null=True)
|
|
50
|
+
|
|
43
51
|
class Meta:
|
|
44
52
|
"""Model & field include list."""
|
|
45
53
|
|
|
46
54
|
model = Comic
|
|
47
55
|
fields = (
|
|
48
|
-
"community_rating",
|
|
49
56
|
"created_at",
|
|
50
|
-
"critical_rating",
|
|
51
57
|
"day",
|
|
52
58
|
"date",
|
|
53
59
|
"decade",
|
|
54
|
-
"issue_number",
|
|
55
60
|
"issue_suffix",
|
|
56
61
|
"month",
|
|
57
62
|
"monochrome",
|
codex/static_root/assets/{VCheckbox-CSvjBFR1.531e0fc38f24.js → VCheckbox-CAnsONJ8.1d8ba3df8d9f.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as A,V as t}from"./VCheckboxBtn-
|
|
1
|
+
import{m as A,V as t}from"./VCheckboxBtn-DQTVBkac.js";import{a as F,u as I,V as l}from"./VSelectionControl-D0ha1VYk.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-C5XtSLXl.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-DQTVBkac.js";import{a as F,u as I,V as l}from"./VSelectionControl-D0ha1VYk.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-C5XtSLXl.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-D0ha1VYk.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-C5XtSLXl.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-D0ha1VYk.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-C5XtSLXl.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-DmqwaLY4.d4e984321966.js → VCombobox-xgzcfu8j.85e27125105c.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-
|
|
1
|
+
import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-YSL0tIop.js";import{c as Fe,a as X}from"./VSlideGroup-BW6pFVGY.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 m,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Me,K as Ee,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-C5XtSLXl.js";import{m as He,u as $e}from"./filter-Dp8VoLoJ.js";import{g as qe}from"./VSelectionControl-D0ha1VYk.js";import{f as Ge}from"./confirm-footer-CP02GqhM.js";import{V as We}from"./VCheckboxBtn-DQTVBkac.js";function Je(e,b,R){if(b==null)return e;if(Array.isArray(b))throw new Error("Multiple matches is not implemented");return typeof b=="number"&&~b?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,b)]),s("span",{class:"v-combobox__mask"},[e.substr(b,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(b+R)])]):e}const Qe=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...Ce({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,b){var W;let{emit:R,slots:n}=b;const{t:B}=Re(),y=O(),h=P(!1),V=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=m({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=m(()=>{var l;return(l=y.value)==null?void 0:l.color}),G=m(()=>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=m(()=>!!(e.chips||n.chip)),C=m(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=m({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&&f(D(e,a))}),k.value="")}l||(r.value=-1),V.value=!l}}),se=m(()=>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):h.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:M,getMatches:re}=$e(e,te,()=>V.value?"":v.value),g=m(()=>e.hideSelected?M.value.filter(l=>!u.value.some(t=>t.value===l.value)):M.value),ce=m(()=>u.value.map(l=>l.value)),E=m(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=g.value[0])==null?void 0:t.title))&&g.value.length>0&&!V.value&&!_.value}),z=m(()=>e.hideNoData&&!g.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=ke(H,y);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(h.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=y.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)&&(E.value&&["Enter","Tab"].includes(l.key)&&f(M.value[0]),V.value=!0),l.key==="ArrowDown"&&E.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(f(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return f(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;f(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,y.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,y.value.setSelectionRange(0,0))}}}function ge(){var l;h.value&&(V.value=!0,(l=y.value)==null||l.focus())}function f(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,V.value=!0})}}function xe(l){h.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(h,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,E.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===g.value[0].value})){f(g.value[0]);return}if(v.value){if(e.multiple){f(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":f(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=g.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||h.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||g.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:y},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:h.value,"onUpdate:focused":a=>h.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(pe,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,x;return[(a=n["prepend-item"])==null?void 0:a.call(n),!g.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:g.value},{default:p=>{var Q;let{item:d,index:w,itemRef:S}=p;const J=I(d.props,{ref:S,key:w,active:E.value&&w===0?!0:void 0,onClick:()=>f(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:w,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 V.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(x=n["append-item"])==null?void 0:x.call(n)]}})]}),u.value.map((a,o)=>{function x(S){S.stopPropagation(),S.preventDefault(),f(a,!1)}const p={"onClick:close":x,onMousedown(S){S.preventDefault(),S.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,w=d?Oe(T.value?n.chip({item:a,index:o,props:p}):n.selection({item:a,index:o})):void 0;if(!(d&&!w))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:()=>[w]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},p),null):w??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 p;for(var a=arguments.length,o=new Array(a),x=0;x<a;x++)o[x]=arguments[x];return s(K,null,[(p=n["append-inner"])==null?void 0:p.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:h,isPristine:V,menu:c,search:v,selectionIndex:r,filteredItems:M,select:f},y)}});export{ul as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-
|
|
1
|
+
import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-YSL0tIop.js";import{c as Fe,a as X}from"./VSlideGroup-BW6pFVGY.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 m,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Me,K as Ee,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-C5XtSLXl.js";import{m as He,u as $e}from"./filter-Dp8VoLoJ.js";import{g as qe}from"./VSelectionControl-D0ha1VYk.js";import{f as Ge}from"./confirm-footer-CP02GqhM.js";import{V as We}from"./VCheckboxBtn-DQTVBkac.js";function Je(e,b,R){if(b==null)return e;if(Array.isArray(b))throw new Error("Multiple matches is not implemented");return typeof b=="number"&&~b?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,b)]),s("span",{class:"v-combobox__mask"},[e.substr(b,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(b+R)])]):e}const Qe=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...Ce({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,b){var W;let{emit:R,slots:n}=b;const{t:B}=Re(),y=O(),h=P(!1),V=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=m({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=m(()=>{var l;return(l=y.value)==null?void 0:l.color}),G=m(()=>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=m(()=>!!(e.chips||n.chip)),C=m(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=m({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&&f(D(e,a))}),k.value="")}l||(r.value=-1),V.value=!l}}),se=m(()=>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):h.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:M,getMatches:re}=$e(e,te,()=>V.value?"":v.value),g=m(()=>e.hideSelected?M.value.filter(l=>!u.value.some(t=>t.value===l.value)):M.value),ce=m(()=>u.value.map(l=>l.value)),E=m(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=g.value[0])==null?void 0:t.title))&&g.value.length>0&&!V.value&&!_.value}),z=m(()=>e.hideNoData&&!g.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=ke(H,y);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(h.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=y.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)&&(E.value&&["Enter","Tab"].includes(l.key)&&f(M.value[0]),V.value=!0),l.key==="ArrowDown"&&E.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(f(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return f(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;f(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,y.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,y.value.setSelectionRange(0,0))}}}function ge(){var l;h.value&&(V.value=!0,(l=y.value)==null||l.focus())}function f(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,V.value=!0})}}function xe(l){h.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(h,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,E.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===g.value[0].value})){f(g.value[0]);return}if(v.value){if(e.multiple){f(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":f(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=g.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||h.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||g.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:y},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:h.value,"onUpdate:focused":a=>h.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(pe,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,x;return[(a=n["prepend-item"])==null?void 0:a.call(n),!g.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:g.value},{default:p=>{var Q;let{item:d,index:w,itemRef:S}=p;const J=I(d.props,{ref:S,key:w,active:E.value&&w===0?!0:void 0,onClick:()=>f(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:w,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 V.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(x=n["append-item"])==null?void 0:x.call(n)]}})]}),u.value.map((a,o)=>{function x(S){S.stopPropagation(),S.preventDefault(),f(a,!1)}const p={"onClick:close":x,onMousedown(S){S.preventDefault(),S.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,w=d?Oe(T.value?n.chip({item:a,index:o,props:p}):n.selection({item:a,index:o})):void 0;if(!(d&&!w))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:()=>[w]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},p),null):w??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 p;for(var a=arguments.length,o=new Array(a),x=0;x<a;x++)o[x]=arguments[x];return s(K,null,[(p=n["append-inner"])==null?void 0:p.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:h,isPristine:V,menu:c,search:v,selectionIndex:r,filteredItems:M,select:f},y)}});export{ul as V};
|
|
Binary file
|
|
Binary file
|