codex 1.5.7rc1__py3-none-any.whl → 1.5.9__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-DXUwafcN.5d4577e0b16d.js → VCheckbox-RPeBWFgy.c0e3c4c4deaa.js} +1 -1
- codex/static_root/assets/VCheckbox-RPeBWFgy.c0e3c4c4deaa.js.br +0 -0
- codex/static_root/assets/VCheckbox-RPeBWFgy.c0e3c4c4deaa.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-DXUwafcN.js → VCheckbox-RPeBWFgy.js} +1 -1
- codex/static_root/assets/VCheckbox-RPeBWFgy.js.br +0 -0
- codex/static_root/assets/VCheckbox-RPeBWFgy.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-DtrZ6IUL.4f8f7be34af8.js → VCheckboxBtn-CwKlKk7z.8d7caa36a3ac.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-CwKlKk7z.8d7caa36a3ac.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-CwKlKk7z.8d7caa36a3ac.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-DtrZ6IUL.js → VCheckboxBtn-CwKlKk7z.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-CwKlKk7z.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-CwKlKk7z.js.gz +0 -0
- codex/static_root/assets/{VCombobox-p6JaNJiS.08de72bf3f1d.js → VCombobox-DgVMswtt.5685f334102a.js} +1 -1
- codex/static_root/assets/VCombobox-DgVMswtt.5685f334102a.js.br +0 -0
- codex/static_root/assets/VCombobox-DgVMswtt.5685f334102a.js.gz +0 -0
- codex/static_root/assets/{VCombobox-p6JaNJiS.js → VCombobox-DgVMswtt.js} +1 -1
- codex/static_root/assets/VCombobox-DgVMswtt.js.br +0 -0
- codex/static_root/assets/VCombobox-DgVMswtt.js.gz +0 -0
- codex/static_root/assets/{VDataTableVirtual-Bak8sUxr.0f131a181de8.js → VDataTableVirtual-CYU6VHSb.fa1b727f4ceb.js} +1 -1
- codex/static_root/assets/VDataTableVirtual-CYU6VHSb.fa1b727f4ceb.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-CYU6VHSb.fa1b727f4ceb.js.gz +0 -0
- codex/static_root/assets/{VDataTableVirtual-Bak8sUxr.js → VDataTableVirtual-CYU6VHSb.js} +1 -1
- codex/static_root/assets/VDataTableVirtual-CYU6VHSb.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-CYU6VHSb.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanel-BrGvn58l.4330794fe673.js → VExpansionPanel-B2jVSe6n.709be0bfd8a9.js} +1 -1
- codex/static_root/assets/VExpansionPanel-B2jVSe6n.709be0bfd8a9.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-B2jVSe6n.709be0bfd8a9.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanel-BrGvn58l.js → VExpansionPanel-B2jVSe6n.js} +1 -1
- codex/static_root/assets/VExpansionPanel-B2jVSe6n.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-B2jVSe6n.js.gz +0 -0
- codex/static_root/assets/VExpansionPanel-DsEXVcCv.20b475255e66.css +1 -0
- codex/static_root/assets/VExpansionPanel-DsEXVcCv.20b475255e66.css.br +0 -0
- codex/static_root/assets/VExpansionPanel-DsEXVcCv.20b475255e66.css.gz +0 -0
- codex/static_root/assets/VExpansionPanel-DsEXVcCv.css +1 -0
- codex/static_root/assets/VExpansionPanel-DsEXVcCv.css.br +0 -0
- codex/static_root/assets/VExpansionPanel-DsEXVcCv.css.gz +0 -0
- codex/static_root/assets/{VMain-CuWbokFS.25c97b3ec973.js → VMain-DUot655v.58737665d0c0.js} +1 -1
- codex/static_root/assets/VMain-DUot655v.58737665d0c0.js.br +0 -0
- codex/static_root/assets/VMain-DUot655v.58737665d0c0.js.gz +0 -0
- codex/static_root/assets/{VMain-CuWbokFS.js → VMain-DUot655v.js} +1 -1
- codex/static_root/assets/VMain-DUot655v.js.br +0 -0
- codex/static_root/assets/VMain-DUot655v.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-DYMjLsVk.c4d81d70bec4.js → VRadioGroup-e5ZzndXH.545e89fea1a2.js} +1 -1
- codex/static_root/assets/VRadioGroup-e5ZzndXH.545e89fea1a2.js.br +0 -0
- codex/static_root/assets/VRadioGroup-e5ZzndXH.545e89fea1a2.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-DYMjLsVk.js → VRadioGroup-e5ZzndXH.js} +1 -1
- codex/static_root/assets/VRadioGroup-e5ZzndXH.js.br +0 -0
- codex/static_root/assets/VRadioGroup-e5ZzndXH.js.gz +0 -0
- codex/static_root/assets/VSelect-BdGop3V2.604c1785fbff.css +1 -0
- codex/static_root/assets/VSelect-BdGop3V2.604c1785fbff.css.br +0 -0
- codex/static_root/assets/VSelect-BdGop3V2.604c1785fbff.css.gz +0 -0
- codex/static_root/assets/VSelect-BdGop3V2.css +1 -0
- codex/static_root/assets/VSelect-BdGop3V2.css.br +0 -0
- codex/static_root/assets/VSelect-BdGop3V2.css.gz +0 -0
- codex/static_root/assets/{VSelect-CgOC_YIA.js → VSelect-CxY8UVRq.dc3019941096.js} +1 -1
- codex/static_root/assets/VSelect-CxY8UVRq.dc3019941096.js.br +0 -0
- codex/static_root/assets/VSelect-CxY8UVRq.dc3019941096.js.gz +0 -0
- codex/static_root/assets/{VSelect-CgOC_YIA.3d63f40c8ea4.js → VSelect-CxY8UVRq.js} +1 -1
- codex/static_root/assets/VSelect-CxY8UVRq.js.br +0 -0
- codex/static_root/assets/VSelect-CxY8UVRq.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-DsJeRYlc.ebee94ea88d0.js +1 -0
- codex/static_root/assets/VSelectionControl-DsJeRYlc.ebee94ea88d0.js.br +0 -0
- codex/static_root/assets/VSelectionControl-DsJeRYlc.ebee94ea88d0.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-DsJeRYlc.js +1 -0
- codex/static_root/assets/VSelectionControl-DsJeRYlc.js.br +0 -0
- codex/static_root/assets/VSelectionControl-DsJeRYlc.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-C3lY91uv.css +1 -0
- codex/static_root/assets/VSlideGroup-C3lY91uv.css.br +0 -0
- codex/static_root/assets/VSlideGroup-C3lY91uv.css.gz +0 -0
- codex/static_root/assets/VSlideGroup-C3lY91uv.d268067bd078.css +1 -0
- codex/static_root/assets/VSlideGroup-C3lY91uv.d268067bd078.css.br +0 -0
- codex/static_root/assets/VSlideGroup-C3lY91uv.d268067bd078.css.gz +0 -0
- codex/static_root/assets/{VSlideGroup-Bssf4EBT.fc0918385f7e.js → VSlideGroup-VeMEwEff.3d72e1175a80.js} +1 -1
- codex/static_root/assets/VSlideGroup-VeMEwEff.3d72e1175a80.js.br +0 -0
- codex/static_root/assets/VSlideGroup-VeMEwEff.3d72e1175a80.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-Bssf4EBT.js → VSlideGroup-VeMEwEff.js} +1 -1
- codex/static_root/assets/VSlideGroup-VeMEwEff.js.br +0 -0
- codex/static_root/assets/VSlideGroup-VeMEwEff.js.gz +0 -0
- codex/static_root/assets/{VTable-DqraBe83.1f53f4e0e79f.js → VTable-CAK_p0Il.c1781e76e150.js} +1 -1
- codex/static_root/assets/VTable-CAK_p0Il.c1781e76e150.js.br +0 -0
- codex/static_root/assets/VTable-CAK_p0Il.c1781e76e150.js.gz +0 -0
- codex/static_root/assets/{VTable-DqraBe83.js → VTable-CAK_p0Il.js} +1 -1
- codex/static_root/assets/VTable-CAK_p0Il.js.br +0 -0
- codex/static_root/assets/VTable-CAK_p0Il.js.gz +0 -0
- codex/static_root/assets/{VToolbar-kI3X77C7.54fc7a9541e0.js → VToolbar-Dyufo4_P.24ef4946e516.js} +2 -2
- codex/static_root/assets/VToolbar-Dyufo4_P.24ef4946e516.js.br +0 -0
- codex/static_root/assets/{VToolbar-kI3X77C7.js.gz → VToolbar-Dyufo4_P.24ef4946e516.js.gz} +0 -0
- codex/static_root/assets/{VToolbar-kI3X77C7.js → VToolbar-Dyufo4_P.js} +2 -2
- codex/static_root/assets/VToolbar-Dyufo4_P.js.br +0 -0
- codex/static_root/assets/{VToolbar-kI3X77C7.54fc7a9541e0.js.gz → VToolbar-Dyufo4_P.js.gz} +0 -0
- codex/static_root/assets/{VWindowItem-DiY3uz1L.569d029cc939.js → VWindowItem-BNlHE64F.3d075bae3388.js} +1 -1
- codex/static_root/assets/VWindowItem-BNlHE64F.3d075bae3388.js.br +0 -0
- codex/static_root/assets/VWindowItem-BNlHE64F.3d075bae3388.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-DiY3uz1L.js → VWindowItem-BNlHE64F.js} +1 -1
- codex/static_root/assets/VWindowItem-BNlHE64F.js.br +0 -0
- codex/static_root/assets/VWindowItem-BNlHE64F.js.gz +0 -0
- codex/static_root/assets/{admin-BW3Yp8Zu.bdbca238dcd4.js → admin-DjnFySLh.3a08126dc39c.js} +1 -1
- codex/static_root/assets/admin-DjnFySLh.3a08126dc39c.js.br +0 -0
- codex/static_root/assets/admin-DjnFySLh.3a08126dc39c.js.gz +0 -0
- codex/static_root/assets/{admin-BW3Yp8Zu.js → admin-DjnFySLh.js} +1 -1
- codex/static_root/assets/admin-DjnFySLh.js.br +0 -0
- codex/static_root/assets/admin-DjnFySLh.js.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-CJ7EZ2DP.b6a369b30b07.js → admin-drawer-panel-DY_fALho.4d912224504e.js} +8 -8
- codex/static_root/assets/admin-drawer-panel-DY_fALho.4d912224504e.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DY_fALho.4d912224504e.js.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-CJ7EZ2DP.js → admin-drawer-panel-DY_fALho.js} +8 -8
- codex/static_root/assets/admin-drawer-panel-DY_fALho.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DY_fALho.js.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-DEYM8FWr.512d367edaca.css → admin-drawer-panel-s72VfDNy.css} +1 -1
- codex/static_root/assets/admin-drawer-panel-s72VfDNy.css.br +0 -0
- codex/static_root/assets/{admin-drawer-panel-DEYM8FWr.512d367edaca.css.gz → admin-drawer-panel-s72VfDNy.css.gz} +0 -0
- codex/static_root/assets/{admin-drawer-panel-DEYM8FWr.css → admin-drawer-panel-s72VfDNy.ef6cb7221a44.css} +1 -1
- codex/static_root/assets/admin-drawer-panel-s72VfDNy.ef6cb7221a44.css.br +0 -0
- codex/static_root/assets/{admin-drawer-panel-DEYM8FWr.css.gz → admin-drawer-panel-s72VfDNy.ef6cb7221a44.css.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-B8cDJ5-w.150cd5de25bc.js +1 -0
- codex/static_root/assets/browser-B8cDJ5-w.150cd5de25bc.js.br +0 -0
- codex/static_root/assets/browser-B8cDJ5-w.150cd5de25bc.js.gz +0 -0
- codex/static_root/assets/browser-B8cDJ5-w.js +1 -0
- codex/static_root/assets/browser-B8cDJ5-w.js.br +0 -0
- codex/static_root/assets/browser-B8cDJ5-w.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DvdVuJbx.ea31df1541a2.js → change-password-dialog-DgDGjI2a.d9af24abb0b9.js} +1 -1
- codex/static_root/assets/change-password-dialog-DgDGjI2a.d9af24abb0b9.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DgDGjI2a.d9af24abb0b9.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DvdVuJbx.js → change-password-dialog-DgDGjI2a.js} +1 -1
- codex/static_root/assets/change-password-dialog-DgDGjI2a.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DgDGjI2a.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-oqU_wtjV.38d99c746057.js → confirm-dialog-GVok5hYU.0df954b875de.js} +1 -1
- codex/static_root/assets/confirm-dialog-GVok5hYU.0df954b875de.js.br +2 -0
- codex/static_root/assets/confirm-dialog-GVok5hYU.0df954b875de.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-oqU_wtjV.js → confirm-dialog-GVok5hYU.js} +1 -1
- codex/static_root/assets/confirm-dialog-GVok5hYU.js.br +2 -0
- codex/static_root/assets/confirm-dialog-GVok5hYU.js.gz +0 -0
- codex/static_root/assets/{confirm-footer-R7VhDN1M.js → confirm-footer-CWKcBA7p.fe0ccb86962b.js} +1 -1
- codex/static_root/assets/confirm-footer-CWKcBA7p.fe0ccb86962b.js.br +0 -0
- codex/static_root/assets/confirm-footer-CWKcBA7p.fe0ccb86962b.js.gz +0 -0
- codex/static_root/assets/{confirm-footer-R7VhDN1M.67adfe281d35.js → confirm-footer-CWKcBA7p.js} +1 -1
- codex/static_root/assets/confirm-footer-CWKcBA7p.js.br +0 -0
- codex/static_root/assets/confirm-footer-CWKcBA7p.js.gz +0 -0
- codex/static_root/assets/{datetime-column-CN_zeeDb.1cf9fd3f22d2.js → datetime-column-BRV63LgW.f23352488b87.js} +1 -1
- codex/static_root/assets/datetime-column-BRV63LgW.f23352488b87.js.br +0 -0
- codex/static_root/assets/datetime-column-BRV63LgW.f23352488b87.js.gz +0 -0
- codex/static_root/assets/{datetime-column-CN_zeeDb.js → datetime-column-BRV63LgW.js} +1 -1
- codex/static_root/assets/datetime-column-BRV63LgW.js.br +0 -0
- codex/static_root/assets/datetime-column-BRV63LgW.js.gz +0 -0
- codex/static_root/assets/{filter-DhorJRK4.f9bf91b3928c.js → filter-Cq-w9FH_.c04d9050f1a2.js} +1 -1
- codex/static_root/assets/filter-Cq-w9FH_.c04d9050f1a2.js.br +0 -0
- codex/static_root/assets/filter-Cq-w9FH_.c04d9050f1a2.js.gz +0 -0
- codex/static_root/assets/{filter-DhorJRK4.js → filter-Cq-w9FH_.js} +1 -1
- codex/static_root/assets/filter-Cq-w9FH_.js.br +0 -0
- codex/static_root/assets/filter-Cq-w9FH_.js.gz +0 -0
- codex/static_root/assets/flag-tab-D4WJek8g.c59cde03b73d.js +1 -0
- codex/static_root/assets/flag-tab-D4WJek8g.c59cde03b73d.js.br +0 -0
- codex/static_root/assets/flag-tab-D4WJek8g.c59cde03b73d.js.gz +0 -0
- codex/static_root/assets/flag-tab-D4WJek8g.js +1 -0
- codex/static_root/assets/flag-tab-D4WJek8g.js.br +0 -0
- codex/static_root/assets/flag-tab-D4WJek8g.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-_H9JlSpl.6c9b686b8f94.js → group-tab-CHIOVL3t.43f1b2e737d0.js} +1 -1
- codex/static_root/assets/group-tab-CHIOVL3t.43f1b2e737d0.js.br +0 -0
- codex/static_root/assets/group-tab-CHIOVL3t.43f1b2e737d0.js.gz +0 -0
- codex/static_root/assets/{group-tab-_H9JlSpl.js → group-tab-CHIOVL3t.js} +1 -1
- codex/static_root/assets/group-tab-CHIOVL3t.js.br +0 -0
- codex/static_root/assets/group-tab-CHIOVL3t.js.gz +0 -0
- codex/static_root/assets/{http-error-CV1CbTnY.fed9281e2348.js → http-error-Mg4IhB2h.19679151549b.js} +1 -1
- codex/static_root/assets/http-error-Mg4IhB2h.19679151549b.js.br +3 -0
- codex/static_root/assets/http-error-Mg4IhB2h.19679151549b.js.gz +0 -0
- codex/static_root/assets/{http-error-CV1CbTnY.js → http-error-Mg4IhB2h.js} +1 -1
- codex/static_root/assets/http-error-Mg4IhB2h.js.br +3 -0
- codex/static_root/assets/http-error-Mg4IhB2h.js.gz +0 -0
- codex/static_root/assets/{library-tab-D6k-bjIz.cbd8944c48f1.js → library-tab-CiF2Hc5t.a6628c68d738.js} +1 -1
- codex/static_root/assets/library-tab-CiF2Hc5t.a6628c68d738.js.br +0 -0
- codex/static_root/assets/library-tab-CiF2Hc5t.a6628c68d738.js.gz +0 -0
- codex/static_root/assets/{library-tab-D6k-bjIz.js → library-tab-CiF2Hc5t.js} +1 -1
- codex/static_root/assets/library-tab-CiF2Hc5t.js.br +0 -0
- codex/static_root/assets/library-tab-CiF2Hc5t.js.gz +0 -0
- codex/static_root/assets/{main-C8c_Yy_E.js → main-Dz9u71DQ.2f4e5662224c.js} +4 -4
- codex/static_root/assets/main-Dz9u71DQ.2f4e5662224c.js.br +0 -0
- codex/static_root/assets/main-Dz9u71DQ.2f4e5662224c.js.gz +0 -0
- codex/static_root/assets/{main-C8c_Yy_E.16ff3f5c3880.js → main-Dz9u71DQ.js} +4 -4
- codex/static_root/assets/main-Dz9u71DQ.js.br +0 -0
- codex/static_root/assets/main-Dz9u71DQ.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/metadata-dialog-D-XX9wAf.cd5465341ca1.js +1 -0
- codex/static_root/assets/metadata-dialog-D-XX9wAf.cd5465341ca1.js.br +0 -0
- codex/static_root/assets/metadata-dialog-D-XX9wAf.cd5465341ca1.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-D-XX9wAf.js +1 -0
- codex/static_root/assets/metadata-dialog-D-XX9wAf.js.br +0 -0
- codex/static_root/assets/metadata-dialog-D-XX9wAf.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-DOq4qvUr.89d991424d2f.js → pdf-doc-a-oCC_tG.f8ec02f0e84b.js} +1 -1
- codex/static_root/assets/pdf-doc-a-oCC_tG.f8ec02f0e84b.js.br +0 -0
- codex/static_root/assets/pdf-doc-a-oCC_tG.f8ec02f0e84b.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-DOq4qvUr.js → pdf-doc-a-oCC_tG.js} +1 -1
- codex/static_root/assets/pdf-doc-a-oCC_tG.js.br +0 -0
- codex/static_root/assets/pdf-doc-a-oCC_tG.js.gz +0 -0
- codex/static_root/assets/reader-D205EQd-.f7b10abbf5ca.js +7 -0
- codex/static_root/assets/reader-D205EQd-.f7b10abbf5ca.js.br +0 -0
- codex/static_root/assets/reader-D205EQd-.f7b10abbf5ca.js.gz +0 -0
- codex/static_root/assets/reader-D205EQd-.js +7 -0
- codex/static_root/assets/reader-D205EQd-.js.br +0 -0
- codex/static_root/assets/reader-D205EQd-.js.gz +0 -0
- codex/static_root/assets/{stats-tab-VaVi9-_s.186447352c39.js → stats-tab-ZJVUN0Bb.46124f9c673f.js} +1 -1
- codex/static_root/assets/stats-tab-ZJVUN0Bb.46124f9c673f.js.br +0 -0
- codex/static_root/assets/stats-tab-ZJVUN0Bb.46124f9c673f.js.gz +0 -0
- codex/static_root/assets/{stats-tab-VaVi9-_s.js → stats-tab-ZJVUN0Bb.js} +1 -1
- codex/static_root/assets/stats-tab-ZJVUN0Bb.js.br +0 -0
- codex/static_root/assets/stats-tab-ZJVUN0Bb.js.gz +0 -0
- codex/static_root/assets/{task-tab-C0L1rPrr.249d29a1eb6b.js → task-tab-48ysPp-X.d48d8675190c.js} +1 -1
- codex/static_root/assets/task-tab-48ysPp-X.d48d8675190c.js.br +0 -0
- codex/static_root/assets/task-tab-48ysPp-X.d48d8675190c.js.gz +0 -0
- codex/static_root/assets/{task-tab-C0L1rPrr.js → task-tab-48ysPp-X.js} +1 -1
- codex/static_root/assets/task-tab-48ysPp-X.js.br +0 -0
- codex/static_root/assets/task-tab-48ysPp-X.js.gz +0 -0
- codex/static_root/assets/{user-tab-Cj-rHVvF.cbb1700e110d.js → user-tab-rG7-IzRY.d3e8fa81914d.js} +1 -1
- codex/static_root/assets/user-tab-rG7-IzRY.d3e8fa81914d.js.br +0 -0
- codex/static_root/assets/user-tab-rG7-IzRY.d3e8fa81914d.js.gz +0 -0
- codex/static_root/assets/{user-tab-Cj-rHVvF.js → user-tab-rG7-IzRY.js} +1 -1
- codex/static_root/assets/user-tab-rG7-IzRY.js.br +0 -0
- codex/static_root/assets/user-tab-rG7-IzRY.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.4609de9a4d51.json → manifest.d1d6846d318a.json} +217 -217
- codex/static_root/manifest.d1d6846d318a.json.br +0 -0
- codex/static_root/manifest.d1d6846d318a.json.gz +0 -0
- codex/static_root/manifest.json +217 -217
- 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 +26 -21
- codex/views/browser/browser_annotations.py +0 -1
- 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.7rc1.dist-info → codex-1.5.9.dist-info}/METADATA +1 -1
- {codex-1.5.7rc1.dist-info → codex-1.5.9.dist-info}/RECORD +267 -267
- codex/static_root/assets/VCheckbox-DXUwafcN.5d4577e0b16d.js.br +0 -0
- codex/static_root/assets/VCheckbox-DXUwafcN.5d4577e0b16d.js.gz +0 -0
- codex/static_root/assets/VCheckbox-DXUwafcN.js.br +0 -0
- codex/static_root/assets/VCheckbox-DXUwafcN.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.4f8f7be34af8.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.4f8f7be34af8.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.js.gz +0 -0
- codex/static_root/assets/VCombobox-p6JaNJiS.08de72bf3f1d.js.br +0 -0
- codex/static_root/assets/VCombobox-p6JaNJiS.08de72bf3f1d.js.gz +0 -0
- codex/static_root/assets/VCombobox-p6JaNJiS.js.br +0 -0
- codex/static_root/assets/VCombobox-p6JaNJiS.js.gz +0 -0
- codex/static_root/assets/VDataTableVirtual-Bak8sUxr.0f131a181de8.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-Bak8sUxr.0f131a181de8.js.gz +0 -0
- codex/static_root/assets/VDataTableVirtual-Bak8sUxr.js.br +0 -0
- codex/static_root/assets/VDataTableVirtual-Bak8sUxr.js.gz +0 -0
- codex/static_root/assets/VExpansionPanel-BgvW2DKJ.cd604d70ceee.css +0 -1
- codex/static_root/assets/VExpansionPanel-BgvW2DKJ.cd604d70ceee.css.br +0 -0
- codex/static_root/assets/VExpansionPanel-BgvW2DKJ.cd604d70ceee.css.gz +0 -0
- codex/static_root/assets/VExpansionPanel-BgvW2DKJ.css +0 -1
- codex/static_root/assets/VExpansionPanel-BgvW2DKJ.css.br +0 -0
- codex/static_root/assets/VExpansionPanel-BgvW2DKJ.css.gz +0 -0
- codex/static_root/assets/VExpansionPanel-BrGvn58l.4330794fe673.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-BrGvn58l.4330794fe673.js.gz +0 -0
- codex/static_root/assets/VExpansionPanel-BrGvn58l.js.br +0 -0
- codex/static_root/assets/VExpansionPanel-BrGvn58l.js.gz +0 -0
- codex/static_root/assets/VMain-CuWbokFS.25c97b3ec973.js.br +0 -0
- codex/static_root/assets/VMain-CuWbokFS.25c97b3ec973.js.gz +0 -0
- codex/static_root/assets/VMain-CuWbokFS.js.br +0 -0
- codex/static_root/assets/VMain-CuWbokFS.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-DYMjLsVk.c4d81d70bec4.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DYMjLsVk.c4d81d70bec4.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-DYMjLsVk.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DYMjLsVk.js.gz +0 -0
- codex/static_root/assets/VSelect-CgOC_YIA.3d63f40c8ea4.js.br +0 -0
- codex/static_root/assets/VSelect-CgOC_YIA.3d63f40c8ea4.js.gz +0 -0
- codex/static_root/assets/VSelect-CgOC_YIA.js.br +0 -0
- codex/static_root/assets/VSelect-CgOC_YIA.js.gz +0 -0
- codex/static_root/assets/VSelect-udkSZJsa.1873bae92d9d.css +0 -1
- codex/static_root/assets/VSelect-udkSZJsa.1873bae92d9d.css.br +0 -0
- codex/static_root/assets/VSelect-udkSZJsa.1873bae92d9d.css.gz +0 -0
- codex/static_root/assets/VSelect-udkSZJsa.css +0 -1
- codex/static_root/assets/VSelect-udkSZJsa.css.br +0 -0
- codex/static_root/assets/VSelect-udkSZJsa.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-CD7bn0s_.0aa74aad8b61.js +0 -1
- codex/static_root/assets/VSelectionControl-CD7bn0s_.0aa74aad8b61.js.br +0 -0
- codex/static_root/assets/VSelectionControl-CD7bn0s_.0aa74aad8b61.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-CD7bn0s_.js +0 -1
- codex/static_root/assets/VSelectionControl-CD7bn0s_.js.br +0 -0
- codex/static_root/assets/VSelectionControl-CD7bn0s_.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-Bssf4EBT.fc0918385f7e.js.br +0 -0
- codex/static_root/assets/VSlideGroup-Bssf4EBT.fc0918385f7e.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-Bssf4EBT.js.br +0 -0
- codex/static_root/assets/VSlideGroup-Bssf4EBT.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-rAVUcz72.31b1eb6202e4.css +0 -1
- codex/static_root/assets/VSlideGroup-rAVUcz72.31b1eb6202e4.css.br +0 -0
- codex/static_root/assets/VSlideGroup-rAVUcz72.31b1eb6202e4.css.gz +0 -0
- codex/static_root/assets/VSlideGroup-rAVUcz72.css +0 -1
- codex/static_root/assets/VSlideGroup-rAVUcz72.css.br +0 -0
- codex/static_root/assets/VSlideGroup-rAVUcz72.css.gz +0 -0
- codex/static_root/assets/VTable-DqraBe83.1f53f4e0e79f.js.br +0 -0
- codex/static_root/assets/VTable-DqraBe83.1f53f4e0e79f.js.gz +0 -0
- codex/static_root/assets/VTable-DqraBe83.js.br +0 -0
- codex/static_root/assets/VTable-DqraBe83.js.gz +0 -0
- codex/static_root/assets/VToolbar-kI3X77C7.54fc7a9541e0.js.br +0 -0
- codex/static_root/assets/VToolbar-kI3X77C7.js.br +0 -0
- codex/static_root/assets/VWindowItem-DiY3uz1L.569d029cc939.js.br +0 -0
- codex/static_root/assets/VWindowItem-DiY3uz1L.569d029cc939.js.gz +0 -0
- codex/static_root/assets/VWindowItem-DiY3uz1L.js.br +0 -0
- codex/static_root/assets/VWindowItem-DiY3uz1L.js.gz +0 -0
- codex/static_root/assets/admin-BW3Yp8Zu.bdbca238dcd4.js.br +0 -0
- codex/static_root/assets/admin-BW3Yp8Zu.bdbca238dcd4.js.gz +0 -0
- codex/static_root/assets/admin-BW3Yp8Zu.js.br +0 -0
- codex/static_root/assets/admin-BW3Yp8Zu.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.b6a369b30b07.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.b6a369b30b07.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-DEYM8FWr.512d367edaca.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DEYM8FWr.css.br +0 -0
- codex/static_root/assets/browser-BQuqhnNc.df377a24a88a.js +0 -1
- codex/static_root/assets/browser-BQuqhnNc.df377a24a88a.js.br +0 -0
- codex/static_root/assets/browser-BQuqhnNc.df377a24a88a.js.gz +0 -0
- codex/static_root/assets/browser-BQuqhnNc.js +0 -1
- codex/static_root/assets/browser-BQuqhnNc.js.br +0 -0
- codex/static_root/assets/browser-BQuqhnNc.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/change-password-dialog-DvdVuJbx.ea31df1541a2.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DvdVuJbx.ea31df1541a2.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-DvdVuJbx.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DvdVuJbx.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-oqU_wtjV.38d99c746057.js.br +0 -0
- codex/static_root/assets/confirm-dialog-oqU_wtjV.38d99c746057.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-oqU_wtjV.js.br +0 -0
- codex/static_root/assets/confirm-dialog-oqU_wtjV.js.gz +0 -0
- codex/static_root/assets/confirm-footer-R7VhDN1M.67adfe281d35.js.br +0 -0
- codex/static_root/assets/confirm-footer-R7VhDN1M.67adfe281d35.js.gz +0 -0
- codex/static_root/assets/confirm-footer-R7VhDN1M.js.br +0 -0
- codex/static_root/assets/confirm-footer-R7VhDN1M.js.gz +0 -0
- codex/static_root/assets/datetime-column-CN_zeeDb.1cf9fd3f22d2.js.br +0 -0
- codex/static_root/assets/datetime-column-CN_zeeDb.1cf9fd3f22d2.js.gz +0 -0
- codex/static_root/assets/datetime-column-CN_zeeDb.js.br +0 -0
- codex/static_root/assets/datetime-column-CN_zeeDb.js.gz +0 -0
- codex/static_root/assets/filter-DhorJRK4.f9bf91b3928c.js.br +0 -0
- codex/static_root/assets/filter-DhorJRK4.f9bf91b3928c.js.gz +0 -0
- codex/static_root/assets/filter-DhorJRK4.js.br +0 -0
- codex/static_root/assets/filter-DhorJRK4.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-C-ZU-QYU.c190eb30e5d5.js +0 -1
- codex/static_root/assets/flag-tab-C-ZU-QYU.c190eb30e5d5.js.br +0 -0
- codex/static_root/assets/flag-tab-C-ZU-QYU.c190eb30e5d5.js.gz +0 -0
- codex/static_root/assets/flag-tab-C-ZU-QYU.js +0 -1
- codex/static_root/assets/flag-tab-C-ZU-QYU.js.br +0 -0
- codex/static_root/assets/flag-tab-C-ZU-QYU.js.gz +0 -0
- codex/static_root/assets/group-tab-_H9JlSpl.6c9b686b8f94.js.br +0 -0
- codex/static_root/assets/group-tab-_H9JlSpl.6c9b686b8f94.js.gz +0 -0
- codex/static_root/assets/group-tab-_H9JlSpl.js.br +0 -0
- codex/static_root/assets/group-tab-_H9JlSpl.js.gz +0 -0
- codex/static_root/assets/http-error-CV1CbTnY.fed9281e2348.js.br +0 -0
- codex/static_root/assets/http-error-CV1CbTnY.fed9281e2348.js.gz +0 -0
- codex/static_root/assets/http-error-CV1CbTnY.js.br +0 -0
- codex/static_root/assets/http-error-CV1CbTnY.js.gz +0 -0
- codex/static_root/assets/library-tab-D6k-bjIz.cbd8944c48f1.js.br +0 -0
- codex/static_root/assets/library-tab-D6k-bjIz.cbd8944c48f1.js.gz +0 -0
- codex/static_root/assets/library-tab-D6k-bjIz.js.br +0 -0
- codex/static_root/assets/library-tab-D6k-bjIz.js.gz +0 -0
- codex/static_root/assets/main-C8c_Yy_E.16ff3f5c3880.js.br +0 -0
- codex/static_root/assets/main-C8c_Yy_E.16ff3f5c3880.js.gz +0 -0
- codex/static_root/assets/main-C8c_Yy_E.js.br +0 -0
- codex/static_root/assets/main-C8c_Yy_E.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-B9q6Xpe7.103141664cd0.js +0 -1
- codex/static_root/assets/metadata-dialog-B9q6Xpe7.103141664cd0.js.br +0 -0
- codex/static_root/assets/metadata-dialog-B9q6Xpe7.103141664cd0.js.gz +0 -0
- codex/static_root/assets/metadata-dialog-B9q6Xpe7.js +0 -1
- codex/static_root/assets/metadata-dialog-B9q6Xpe7.js.br +0 -0
- codex/static_root/assets/metadata-dialog-B9q6Xpe7.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-DOq4qvUr.89d991424d2f.js.br +0 -0
- codex/static_root/assets/pdf-doc-DOq4qvUr.89d991424d2f.js.gz +0 -0
- codex/static_root/assets/pdf-doc-DOq4qvUr.js.br +0 -0
- codex/static_root/assets/pdf-doc-DOq4qvUr.js.gz +0 -0
- codex/static_root/assets/reader-BWdhR39E.8f8a692077dc.js +0 -7
- codex/static_root/assets/reader-BWdhR39E.8f8a692077dc.js.br +0 -0
- codex/static_root/assets/reader-BWdhR39E.8f8a692077dc.js.gz +0 -0
- codex/static_root/assets/reader-BWdhR39E.js +0 -7
- codex/static_root/assets/reader-BWdhR39E.js.br +0 -0
- codex/static_root/assets/reader-BWdhR39E.js.gz +0 -0
- codex/static_root/assets/stats-tab-VaVi9-_s.186447352c39.js.br +0 -0
- codex/static_root/assets/stats-tab-VaVi9-_s.186447352c39.js.gz +0 -0
- codex/static_root/assets/stats-tab-VaVi9-_s.js.br +0 -0
- codex/static_root/assets/stats-tab-VaVi9-_s.js.gz +0 -0
- codex/static_root/assets/task-tab-C0L1rPrr.249d29a1eb6b.js.br +0 -0
- codex/static_root/assets/task-tab-C0L1rPrr.249d29a1eb6b.js.gz +0 -0
- codex/static_root/assets/task-tab-C0L1rPrr.js.br +0 -0
- codex/static_root/assets/task-tab-C0L1rPrr.js.gz +0 -0
- codex/static_root/assets/user-tab-Cj-rHVvF.cbb1700e110d.js.br +0 -0
- codex/static_root/assets/user-tab-Cj-rHVvF.cbb1700e110d.js.gz +0 -0
- codex/static_root/assets/user-tab-Cj-rHVvF.js.br +0 -0
- codex/static_root/assets/user-tab-Cj-rHVvF.js.gz +0 -0
- codex/static_root/js/choices-admin.3a2cdebdbfba.json.br +0 -0
- codex/static_root/manifest.4609de9a4d51.json.br +0 -0
- codex/static_root/manifest.4609de9a4d51.json.gz +0 -0
- {codex-1.5.7rc1.dist-info → codex-1.5.9.dist-info}/LICENSE +0 -0
- {codex-1.5.7rc1.dist-info → codex-1.5.9.dist-info}/WHEEL +0 -0
- {codex-1.5.7rc1.dist-info → codex-1.5.9.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-DXUwafcN.5d4577e0b16d.js → VCheckbox-RPeBWFgy.c0e3c4c4deaa.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as A,V as t}from"./VCheckboxBtn-
|
|
1
|
+
import{m as A,V as t}from"./VCheckboxBtn-CwKlKk7z.js";import{a as F,u as I,V as l}from"./VSelectionControl-DsJeRYlc.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-DY_fALho.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-CwKlKk7z.js";import{a as F,u as I,V as l}from"./VSelectionControl-DsJeRYlc.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-DY_fALho.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-DsJeRYlc.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-DY_fALho.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-DsJeRYlc.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-DY_fALho.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-p6JaNJiS.08de72bf3f1d.js → VCombobox-DgVMswtt.5685f334102a.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-CxY8UVRq.js";import{c as Fe,a as X}from"./VSlideGroup-VeMEwEff.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-DY_fALho.js";import{m as He,u as $e}from"./filter-Cq-w9FH_.js";import{g as qe}from"./VSelectionControl-DsJeRYlc.js";import{f as Ge}from"./confirm-footer-CWKcBA7p.js";import{V as We}from"./VCheckboxBtn-CwKlKk7z.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-CxY8UVRq.js";import{c as Fe,a as X}from"./VSlideGroup-VeMEwEff.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-DY_fALho.js";import{m as He,u as $e}from"./filter-Cq-w9FH_.js";import{g as qe}from"./VSelectionControl-DsJeRYlc.js";import{f as Ge}from"./confirm-footer-CWKcBA7p.js";import{V as We}from"./VCheckboxBtn-CwKlKk7z.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
|