codex 1.8.14__py3-none-any.whl → 1.8.17__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/__init__.py +1 -1
- codex/librarian/librariand.py +2 -0
- codex/librarian/scribe/importer/link/delete.py +2 -2
- codex/librarian/scribe/importer/query/foreign_keys.py +1 -1
- codex/librarian/scribe/importer/tasks.py +3 -3
- codex/librarian/scribe/search/prepare.py +1 -1
- codex/librarian/telemeter/scheduled_time.py +2 -1
- codex/librarian/threads.py +2 -0
- codex/librarian/watchdog/db_snapshot.py +1 -1
- codex/serializers/browser/choices.py +1 -1
- codex/settings/__init__.py +10 -3
- codex/signals/os_signals.py +10 -5
- codex/startup/__init__.py +2 -2
- codex/startup/db.py +1 -3
- codex/startup/logger_init.py +2 -2
- codex/static_root/assets/{VCheckbox-DSiToISz.36b2c3106f70.js → VCheckbox-C85C3qG-.aaf01232a24e.js} +1 -1
- codex/static_root/assets/VCheckbox-C85C3qG-.aaf01232a24e.js.br +0 -0
- codex/static_root/assets/VCheckbox-C85C3qG-.aaf01232a24e.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-DSiToISz.js → VCheckbox-C85C3qG-.js} +1 -1
- codex/static_root/assets/VCheckbox-C85C3qG-.js.br +0 -0
- codex/static_root/assets/VCheckbox-C85C3qG-.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-CYmOhPsT.064f0ca6833f.js → VCheckboxBtn-BL2_20_y.e3dea72fc366.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BL2_20_y.e3dea72fc366.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BL2_20_y.e3dea72fc366.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-CYmOhPsT.js → VCheckboxBtn-BL2_20_y.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BL2_20_y.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BL2_20_y.js.gz +0 -0
- codex/static_root/assets/VCombobox-D4B1V7pC.ee65a2bb85cd.js +1 -0
- codex/static_root/assets/VCombobox-D4B1V7pC.ee65a2bb85cd.js.br +0 -0
- codex/static_root/assets/VCombobox-D4B1V7pC.ee65a2bb85cd.js.gz +0 -0
- codex/static_root/assets/VCombobox-D4B1V7pC.js +1 -0
- codex/static_root/assets/VCombobox-D4B1V7pC.js.br +0 -0
- codex/static_root/assets/VCombobox-D4B1V7pC.js.gz +0 -0
- codex/static_root/assets/VDialog-CZkKUrky.ac0451670402.js +1 -0
- codex/static_root/assets/VDialog-CZkKUrky.ac0451670402.js.br +0 -0
- codex/static_root/assets/VDialog-CZkKUrky.ac0451670402.js.gz +0 -0
- codex/static_root/assets/VDialog-CZkKUrky.js +1 -0
- codex/static_root/assets/VDialog-CZkKUrky.js.br +0 -0
- codex/static_root/assets/VDialog-CZkKUrky.js.gz +0 -0
- codex/static_root/assets/{VDialog-cfA1435M.css → VDialog-wubh7-W_.css} +1 -1
- codex/static_root/assets/VDialog-wubh7-W_.css.br +0 -0
- codex/static_root/assets/VDialog-wubh7-W_.css.gz +0 -0
- codex/static_root/assets/{VDialog-cfA1435M.9d74582347d0.css → VDialog-wubh7-W_.db3957bfe939.css} +1 -1
- codex/static_root/assets/VDialog-wubh7-W_.db3957bfe939.css.br +0 -0
- codex/static_root/assets/VDialog-wubh7-W_.db3957bfe939.css.gz +0 -0
- codex/static_root/assets/VDivider-BXArtxT-.e522dd8902c8.js +1 -0
- codex/static_root/assets/VDivider-BXArtxT-.e522dd8902c8.js.br +0 -0
- codex/static_root/assets/VDivider-BXArtxT-.e522dd8902c8.js.gz +0 -0
- codex/static_root/assets/VDivider-BXArtxT-.js +1 -0
- codex/static_root/assets/VDivider-BXArtxT-.js.br +0 -0
- codex/static_root/assets/VDivider-BXArtxT-.js.gz +0 -0
- codex/static_root/assets/{VDivider-DU47sRrT.3d2e17799e5c.css → VDivider-CCqJA_fj.b56fac1426ae.css} +1 -1
- codex/static_root/assets/VDivider-CCqJA_fj.b56fac1426ae.css.br +0 -0
- codex/static_root/assets/VDivider-CCqJA_fj.b56fac1426ae.css.gz +0 -0
- codex/static_root/assets/{VDivider-DU47sRrT.css → VDivider-CCqJA_fj.css} +1 -1
- codex/static_root/assets/VDivider-CCqJA_fj.css.br +0 -0
- codex/static_root/assets/VDivider-CCqJA_fj.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-Dyw0hWW-.css +1 -0
- codex/static_root/assets/VExpansionPanels-Dyw0hWW-.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-Dyw0hWW-.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-Dyw0hWW-.e3fa1db9f5b5.css +1 -0
- codex/static_root/assets/VExpansionPanels-Dyw0hWW-.e3fa1db9f5b5.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-Dyw0hWW-.e3fa1db9f5b5.css.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-DFJglYob.df0a5305e017.js → VExpansionPanels-Et85Xw04.1a332e39be39.js} +1 -1
- codex/static_root/assets/VExpansionPanels-Et85Xw04.1a332e39be39.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-Et85Xw04.1a332e39be39.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-DFJglYob.js → VExpansionPanels-Et85Xw04.js} +1 -1
- codex/static_root/assets/VExpansionPanels-Et85Xw04.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-Et85Xw04.js.gz +0 -0
- codex/static_root/assets/{VForm-BNXhV_uk.f87afb6d84da.js → VForm-Bz_gI_Wh.1e32d0faee10.js} +1 -1
- codex/static_root/assets/VForm-Bz_gI_Wh.1e32d0faee10.js.br +0 -0
- codex/static_root/assets/VForm-Bz_gI_Wh.1e32d0faee10.js.gz +0 -0
- codex/static_root/assets/{VForm-BNXhV_uk.js → VForm-Bz_gI_Wh.js} +1 -1
- codex/static_root/assets/VForm-Bz_gI_Wh.js.br +0 -0
- codex/static_root/assets/VForm-Bz_gI_Wh.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-BNlf_ga1.739298534bda.js +1 -0
- codex/static_root/assets/VRadioGroup-BNlf_ga1.739298534bda.js.br +0 -0
- codex/static_root/assets/VRadioGroup-BNlf_ga1.739298534bda.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-BNlf_ga1.js +1 -0
- codex/static_root/assets/VRadioGroup-BNlf_ga1.js.br +0 -0
- codex/static_root/assets/VRadioGroup-BNlf_ga1.js.gz +0 -0
- codex/static_root/assets/{VSelect-BvTTr4RP.be69766e6916.css → VSelect-Bp3PUbea.a69e7f3360ec.css} +1 -1
- codex/static_root/assets/VSelect-Bp3PUbea.a69e7f3360ec.css.br +0 -0
- codex/static_root/assets/{VSelect-BvTTr4RP.be69766e6916.css.gz → VSelect-Bp3PUbea.a69e7f3360ec.css.gz} +0 -0
- codex/static_root/assets/{VSelect-BvTTr4RP.css → VSelect-Bp3PUbea.css} +1 -1
- codex/static_root/assets/VSelect-Bp3PUbea.css.br +0 -0
- codex/static_root/assets/{VSelect-BvTTr4RP.css.gz → VSelect-Bp3PUbea.css.gz} +0 -0
- codex/static_root/assets/VSelect-DcgePQge.89929a190a04.js +1 -0
- codex/static_root/assets/VSelect-DcgePQge.89929a190a04.js.br +0 -0
- codex/static_root/assets/VSelect-DcgePQge.89929a190a04.js.gz +0 -0
- codex/static_root/assets/VSelect-DcgePQge.js +1 -0
- codex/static_root/assets/VSelect-DcgePQge.js.br +0 -0
- codex/static_root/assets/VSelect-DcgePQge.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BOfjazsp.a8fe60521481.js +1 -0
- codex/static_root/assets/VSelectionControl-BOfjazsp.a8fe60521481.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BOfjazsp.a8fe60521481.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BOfjazsp.js +1 -0
- codex/static_root/assets/VSelectionControl-BOfjazsp.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BOfjazsp.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BmYSXANf.61cf72c55175.css +1 -0
- codex/static_root/assets/VSelectionControl-BmYSXANf.61cf72c55175.css.br +0 -0
- codex/static_root/assets/VSelectionControl-BmYSXANf.61cf72c55175.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-BmYSXANf.css +1 -0
- codex/static_root/assets/VSelectionControl-BmYSXANf.css.br +0 -0
- codex/static_root/assets/VSelectionControl-BmYSXANf.css.gz +0 -0
- codex/static_root/assets/VTable-DwP4GgFJ.f64a953b0f46.js +1 -0
- codex/static_root/assets/VTable-DwP4GgFJ.f64a953b0f46.js.br +0 -0
- codex/static_root/assets/VTable-DwP4GgFJ.f64a953b0f46.js.gz +0 -0
- codex/static_root/assets/VTable-DwP4GgFJ.js +1 -0
- codex/static_root/assets/VTable-DwP4GgFJ.js.br +0 -0
- codex/static_root/assets/VTable-DwP4GgFJ.js.gz +0 -0
- codex/static_root/assets/VWindowItem-D0E4VZDp.05007113eed6.js +1 -0
- codex/static_root/assets/VWindowItem-D0E4VZDp.05007113eed6.js.br +0 -0
- codex/static_root/assets/VWindowItem-D0E4VZDp.05007113eed6.js.gz +0 -0
- codex/static_root/assets/VWindowItem-D0E4VZDp.js +1 -0
- codex/static_root/assets/VWindowItem-D0E4VZDp.js.br +0 -0
- codex/static_root/assets/VWindowItem-D0E4VZDp.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-CWv03gfN.css → VWindowItem-DqNaT6b1.css} +1 -1
- codex/static_root/assets/VWindowItem-DqNaT6b1.css.br +0 -0
- codex/static_root/assets/VWindowItem-DqNaT6b1.css.gz +0 -0
- codex/static_root/assets/{VWindowItem-CWv03gfN.ddad20bc51ba.css → VWindowItem-DqNaT6b1.d2f9460fb23b.css} +1 -1
- codex/static_root/assets/VWindowItem-DqNaT6b1.d2f9460fb23b.css.br +0 -0
- codex/static_root/assets/VWindowItem-DqNaT6b1.d2f9460fb23b.css.gz +0 -0
- codex/static_root/assets/{admin-C6VbbEgi.1b7afd86e270.js → admin-0MogMIWh.935f3602f03c.js} +1 -1
- codex/static_root/assets/admin-0MogMIWh.935f3602f03c.js.br +0 -0
- codex/static_root/assets/admin-0MogMIWh.935f3602f03c.js.gz +0 -0
- codex/static_root/assets/{admin-C6VbbEgi.js → admin-0MogMIWh.js} +1 -1
- codex/static_root/assets/admin-0MogMIWh.js.br +0 -0
- codex/static_root/assets/admin-0MogMIWh.js.gz +0 -0
- codex/static_root/assets/{admin-DJCVf2PA.7ba26fd73264.css → admin-DEoSGrPH.644bc371ba3c.css} +1 -1
- codex/static_root/assets/admin-DEoSGrPH.644bc371ba3c.css.br +0 -0
- codex/static_root/assets/{admin-DJCVf2PA.7ba26fd73264.css.gz → admin-DEoSGrPH.644bc371ba3c.css.gz} +0 -0
- codex/static_root/assets/{admin-DJCVf2PA.css → admin-DEoSGrPH.css} +1 -1
- codex/static_root/assets/admin-DEoSGrPH.css.br +0 -0
- codex/static_root/assets/{admin-DJCVf2PA.css.gz → admin-DEoSGrPH.css.gz} +0 -0
- codex/static_root/assets/{admin-menu-CJIeXccy.a8f894508762.js → admin-menu-CxWZ4NVB.1cb05f15fcfe.js} +1 -1
- codex/static_root/assets/admin-menu-CxWZ4NVB.1cb05f15fcfe.js.br +0 -0
- codex/static_root/assets/admin-menu-CxWZ4NVB.1cb05f15fcfe.js.gz +0 -0
- codex/static_root/assets/{admin-menu-CJIeXccy.js → admin-menu-CxWZ4NVB.js} +1 -1
- codex/static_root/assets/admin-menu-CxWZ4NVB.js.br +0 -0
- codex/static_root/assets/admin-menu-CxWZ4NVB.js.gz +0 -0
- codex/static_root/assets/{admin-settings-button-progress-vOeMypwd.5db8039f1f8b.js → admin-settings-button-progress-BWW5U-_2.574a05a140cd.js} +1 -1
- codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.574a05a140cd.js.br +0 -0
- codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.574a05a140cd.js.gz +0 -0
- codex/static_root/assets/{admin-settings-button-progress-vOeMypwd.js → admin-settings-button-progress-BWW5U-_2.js} +1 -1
- codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.js.br +0 -0
- codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.js.gz +0 -0
- codex/static_root/assets/{admin-BSeSK58M.5e0ec404b68a.js → admin-vsdk5Rss.c942515d69e6.js} +1 -1
- codex/static_root/assets/admin-vsdk5Rss.c942515d69e6.js.br +0 -0
- codex/static_root/assets/admin-vsdk5Rss.c942515d69e6.js.gz +0 -0
- codex/static_root/assets/{admin-BSeSK58M.js → admin-vsdk5Rss.js} +1 -1
- codex/static_root/assets/admin-vsdk5Rss.js.br +0 -0
- codex/static_root/assets/admin-vsdk5Rss.js.gz +0 -0
- codex/static_root/assets/browser-CWALWjwb.cf58ec0ffddb.css +1 -0
- codex/static_root/assets/browser-CWALWjwb.cf58ec0ffddb.css.br +0 -0
- codex/static_root/assets/browser-CWALWjwb.cf58ec0ffddb.css.gz +0 -0
- codex/static_root/assets/browser-CWALWjwb.css +1 -0
- codex/static_root/assets/browser-CWALWjwb.css.br +0 -0
- codex/static_root/assets/browser-CWALWjwb.css.gz +0 -0
- codex/static_root/assets/{browser-CKD3rgcs.31efed76525d.js → browser-DL9hPskM.0db706bb532e.js} +1 -1
- codex/static_root/assets/browser-DL9hPskM.0db706bb532e.js.br +0 -0
- codex/static_root/assets/browser-DL9hPskM.0db706bb532e.js.gz +0 -0
- codex/static_root/assets/{browser-CKD3rgcs.js → browser-DL9hPskM.js} +1 -1
- codex/static_root/assets/browser-DL9hPskM.js.br +0 -0
- codex/static_root/assets/browser-DL9hPskM.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DoBLv9WU.2f5b656e6981.js → change-password-dialog-CsA0dV8F.993dc1de7cd9.js} +1 -1
- codex/static_root/assets/change-password-dialog-CsA0dV8F.993dc1de7cd9.js.br +0 -0
- codex/static_root/assets/change-password-dialog-CsA0dV8F.993dc1de7cd9.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DoBLv9WU.js → change-password-dialog-CsA0dV8F.js} +1 -1
- codex/static_root/assets/change-password-dialog-CsA0dV8F.js.br +0 -0
- codex/static_root/assets/change-password-dialog-CsA0dV8F.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-DOcInEYk.8249b3c5e331.js +1 -0
- codex/static_root/assets/confirm-dialog-DOcInEYk.8249b3c5e331.js.br +0 -0
- codex/static_root/assets/confirm-dialog-DOcInEYk.8249b3c5e331.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-DOcInEYk.js +1 -0
- codex/static_root/assets/confirm-dialog-DOcInEYk.js.br +0 -0
- codex/static_root/assets/confirm-dialog-DOcInEYk.js.gz +0 -0
- codex/static_root/assets/{datetime-column-cHNNkd7r.0fa4cabd2ff5.js → datetime-column-BbSapWKr.be1674c183f8.js} +1 -1
- codex/static_root/assets/datetime-column-BbSapWKr.be1674c183f8.js.br +0 -0
- codex/static_root/assets/datetime-column-BbSapWKr.be1674c183f8.js.gz +0 -0
- codex/static_root/assets/{datetime-column-cHNNkd7r.js → datetime-column-BbSapWKr.js} +1 -1
- codex/static_root/assets/datetime-column-BbSapWKr.js.br +0 -0
- codex/static_root/assets/datetime-column-BbSapWKr.js.gz +0 -0
- codex/static_root/assets/{filter-Bu2xCEP4.d632e004db3e.js → filter-BtcXW5zO.75aeec1895a1.js} +1 -1
- codex/static_root/assets/filter-BtcXW5zO.75aeec1895a1.js.br +0 -0
- codex/static_root/assets/filter-BtcXW5zO.75aeec1895a1.js.gz +0 -0
- codex/static_root/assets/{filter-Bu2xCEP4.js → filter-BtcXW5zO.js} +1 -1
- codex/static_root/assets/filter-BtcXW5zO.js.br +0 -0
- codex/static_root/assets/filter-BtcXW5zO.js.gz +0 -0
- codex/static_root/assets/flag-tab-C2myvzRx.5659c0293fe6.js +1 -0
- codex/static_root/assets/flag-tab-C2myvzRx.5659c0293fe6.js.br +0 -0
- codex/static_root/assets/flag-tab-C2myvzRx.5659c0293fe6.js.gz +0 -0
- codex/static_root/assets/flag-tab-C2myvzRx.js +1 -0
- codex/static_root/assets/flag-tab-C2myvzRx.js.br +0 -0
- codex/static_root/assets/flag-tab-C2myvzRx.js.gz +0 -0
- codex/static_root/assets/forwardRefs-8AR4cmsy.28c24ed68c07.js +1 -0
- codex/static_root/assets/forwardRefs-8AR4cmsy.28c24ed68c07.js.br +0 -0
- codex/static_root/assets/forwardRefs-8AR4cmsy.28c24ed68c07.js.gz +0 -0
- codex/static_root/assets/forwardRefs-8AR4cmsy.js +1 -0
- codex/static_root/assets/forwardRefs-8AR4cmsy.js.br +0 -0
- codex/static_root/assets/forwardRefs-8AR4cmsy.js.gz +0 -0
- codex/static_root/assets/forwardRefs-BsADouR7.63a958497048.css +1 -0
- codex/static_root/assets/forwardRefs-BsADouR7.63a958497048.css.br +0 -0
- codex/static_root/assets/{forwardRefs-CecUXkvN.css.gz → forwardRefs-BsADouR7.63a958497048.css.gz} +0 -0
- codex/static_root/assets/forwardRefs-BsADouR7.css +1 -0
- codex/static_root/assets/forwardRefs-BsADouR7.css.br +0 -0
- codex/static_root/assets/{forwardRefs-CecUXkvN.d595d41108e3.css.gz → forwardRefs-BsADouR7.css.gz} +0 -0
- codex/static_root/assets/{group-tab-CqHKA3Rv.bd829d9ff902.js → group-tab-vFOTxxPA.d343b05fb11f.js} +1 -1
- codex/static_root/assets/group-tab-vFOTxxPA.d343b05fb11f.js.br +0 -0
- codex/static_root/assets/group-tab-vFOTxxPA.d343b05fb11f.js.gz +0 -0
- codex/static_root/assets/{group-tab-CqHKA3Rv.js → group-tab-vFOTxxPA.js} +1 -1
- codex/static_root/assets/group-tab-vFOTxxPA.js.br +0 -0
- codex/static_root/assets/group-tab-vFOTxxPA.js.gz +0 -0
- codex/static_root/assets/{http-error-CB3k5P-n.82d886ac81c7.css → http-error-DUBqZFpY.6f8e0c765b4f.css} +1 -1
- codex/static_root/assets/http-error-DUBqZFpY.6f8e0c765b4f.css.br +0 -0
- codex/static_root/assets/http-error-DUBqZFpY.6f8e0c765b4f.css.gz +0 -0
- codex/static_root/assets/{http-error-CB3k5P-n.css → http-error-DUBqZFpY.css} +1 -1
- codex/static_root/assets/http-error-DUBqZFpY.css.br +0 -0
- codex/static_root/assets/http-error-DUBqZFpY.css.gz +0 -0
- codex/static_root/assets/http-error-DycyYGJ1.68755b67ed72.js +1 -0
- codex/static_root/assets/http-error-DycyYGJ1.68755b67ed72.js.br +0 -0
- codex/static_root/assets/http-error-DycyYGJ1.68755b67ed72.js.gz +0 -0
- codex/static_root/assets/http-error-DycyYGJ1.js +1 -0
- codex/static_root/assets/http-error-DycyYGJ1.js.br +0 -0
- codex/static_root/assets/http-error-DycyYGJ1.js.gz +0 -0
- codex/static_root/assets/index-BqvRLlbQ.bbc93c5e1124.js +1 -0
- codex/static_root/assets/index-BqvRLlbQ.bbc93c5e1124.js.br +0 -0
- codex/static_root/assets/index-BqvRLlbQ.bbc93c5e1124.js.gz +0 -0
- codex/static_root/assets/index-BqvRLlbQ.js +1 -0
- codex/static_root/assets/index-BqvRLlbQ.js.br +0 -0
- codex/static_root/assets/index-BqvRLlbQ.js.gz +0 -0
- codex/static_root/assets/{library-tab-DHtd9G39.a6068c595e8f.js → library-tab-DzW9vEih.225e01869860.js} +1 -1
- codex/static_root/assets/library-tab-DzW9vEih.225e01869860.js.br +0 -0
- codex/static_root/assets/library-tab-DzW9vEih.225e01869860.js.gz +0 -0
- codex/static_root/assets/{library-tab-DHtd9G39.js → library-tab-DzW9vEih.js} +1 -1
- codex/static_root/assets/library-tab-DzW9vEih.js.br +0 -0
- codex/static_root/assets/library-tab-DzW9vEih.js.gz +0 -0
- codex/static_root/assets/{main-CZN13qLI.12debfe1e227.css → main-CqGLcuU5.4419befb30af.css} +1 -1
- codex/static_root/assets/main-CqGLcuU5.4419befb30af.css.br +0 -0
- codex/static_root/assets/{main-CZN13qLI.12debfe1e227.css.gz → main-CqGLcuU5.4419befb30af.css.gz} +0 -0
- codex/static_root/assets/{main-CZN13qLI.css → main-CqGLcuU5.css} +1 -1
- codex/static_root/assets/main-CqGLcuU5.css.br +0 -0
- codex/static_root/assets/{main-CZN13qLI.css.gz → main-CqGLcuU5.css.gz} +0 -0
- codex/static_root/assets/main-Df6H3rcv.8ad231e2da5c.js +38 -0
- codex/static_root/assets/main-Df6H3rcv.8ad231e2da5c.js.br +0 -0
- codex/static_root/assets/main-Df6H3rcv.8ad231e2da5c.js.gz +0 -0
- codex/static_root/assets/main-Df6H3rcv.js +38 -0
- codex/static_root/assets/main-Df6H3rcv.js.br +0 -0
- codex/static_root/assets/main-Df6H3rcv.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-BNEwAMUk.38c6e07e1759.js +1 -0
- codex/static_root/assets/pager-full-pdf-BNEwAMUk.38c6e07e1759.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-BNEwAMUk.38c6e07e1759.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-BNEwAMUk.js +1 -0
- codex/static_root/assets/pager-full-pdf-BNEwAMUk.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-BNEwAMUk.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar--v4Pvgn4.19d9227abe73.js +1 -0
- codex/static_root/assets/pagination-toolbar--v4Pvgn4.19d9227abe73.js.br +0 -0
- codex/static_root/assets/pagination-toolbar--v4Pvgn4.19d9227abe73.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar--v4Pvgn4.js +1 -0
- codex/static_root/assets/pagination-toolbar--v4Pvgn4.js.br +0 -0
- codex/static_root/assets/pagination-toolbar--v4Pvgn4.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-CXcyeTVQ.c7e64e3c3af4.css +1 -0
- codex/static_root/assets/pagination-toolbar-CXcyeTVQ.c7e64e3c3af4.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-CXcyeTVQ.c7e64e3c3af4.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-CXcyeTVQ.css +1 -0
- codex/static_root/assets/pagination-toolbar-CXcyeTVQ.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-CXcyeTVQ.css.gz +0 -0
- codex/static_root/assets/{pdf-doc-CAzVDc80.440339054422.js → pdf-doc-BJJ9OK87.11b34dd73a86.js} +1 -1
- codex/static_root/assets/pdf-doc-BJJ9OK87.11b34dd73a86.js.br +0 -0
- codex/static_root/assets/pdf-doc-BJJ9OK87.11b34dd73a86.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-CAzVDc80.js → pdf-doc-BJJ9OK87.js} +1 -1
- codex/static_root/assets/pdf-doc-BJJ9OK87.js.br +0 -0
- codex/static_root/assets/pdf-doc-BJJ9OK87.js.gz +0 -0
- codex/static_root/assets/{reader-BUEw0RYD.css → reader-CD5dUsCb.360b55e6c218.css} +1 -1
- codex/static_root/assets/reader-CD5dUsCb.360b55e6c218.css.br +0 -0
- codex/static_root/assets/{reader-BUEw0RYD.css.gz → reader-CD5dUsCb.360b55e6c218.css.gz} +0 -0
- codex/static_root/assets/{reader-BUEw0RYD.e084c3b621d4.css → reader-CD5dUsCb.css} +1 -1
- codex/static_root/assets/reader-CD5dUsCb.css.br +0 -0
- codex/static_root/assets/{reader-BUEw0RYD.e084c3b621d4.css.gz → reader-CD5dUsCb.css.gz} +0 -0
- codex/static_root/assets/{reader-Bi_CT2rk.2048477e3d9a.js → reader-xFPm8370.f406b46e5e21.js} +2 -2
- codex/static_root/assets/reader-xFPm8370.f406b46e5e21.js.br +0 -0
- codex/static_root/assets/reader-xFPm8370.f406b46e5e21.js.gz +0 -0
- codex/static_root/assets/{reader-Bi_CT2rk.js → reader-xFPm8370.js} +2 -2
- codex/static_root/assets/reader-xFPm8370.js.br +0 -0
- codex/static_root/assets/reader-xFPm8370.js.gz +0 -0
- codex/static_root/assets/relation-chips-CaoqjI00.d4ff4022749b.js +1 -0
- codex/static_root/assets/relation-chips-CaoqjI00.d4ff4022749b.js.br +0 -0
- codex/static_root/assets/relation-chips-CaoqjI00.d4ff4022749b.js.gz +0 -0
- codex/static_root/assets/relation-chips-CaoqjI00.js +1 -0
- codex/static_root/assets/relation-chips-CaoqjI00.js.br +0 -0
- codex/static_root/assets/relation-chips-CaoqjI00.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-CjqFmP5f.a1c27430b554.js → settings-drawer-CfBuea69.013baf97e49e.js} +2 -2
- codex/static_root/assets/settings-drawer-CfBuea69.013baf97e49e.js.br +0 -0
- codex/static_root/assets/settings-drawer-CfBuea69.013baf97e49e.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-CjqFmP5f.js → settings-drawer-CfBuea69.js} +2 -2
- codex/static_root/assets/settings-drawer-CfBuea69.js.br +0 -0
- codex/static_root/assets/settings-drawer-CfBuea69.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-d-7mkVdG.15838d8ecd33.css → settings-drawer-D5PWKw08.4b34133b25a7.css} +1 -1
- codex/static_root/assets/settings-drawer-D5PWKw08.4b34133b25a7.css.br +0 -0
- codex/static_root/assets/settings-drawer-D5PWKw08.4b34133b25a7.css.gz +0 -0
- codex/static_root/assets/{settings-drawer-d-7mkVdG.css → settings-drawer-D5PWKw08.css} +1 -1
- codex/static_root/assets/settings-drawer-D5PWKw08.css.br +0 -0
- codex/static_root/assets/settings-drawer-D5PWKw08.css.gz +0 -0
- codex/static_root/assets/ssrBoot-BDUblGRH.4f2d90f894ec.js +1 -0
- codex/static_root/assets/ssrBoot-BDUblGRH.4f2d90f894ec.js.br +0 -0
- codex/static_root/assets/ssrBoot-BDUblGRH.4f2d90f894ec.js.gz +0 -0
- codex/static_root/assets/ssrBoot-BDUblGRH.js +1 -0
- codex/static_root/assets/ssrBoot-BDUblGRH.js.br +0 -0
- codex/static_root/assets/ssrBoot-BDUblGRH.js.gz +0 -0
- codex/static_root/assets/{stats-tab-CQYF0r5W.3eeaa933ecfd.js → stats-tab-CJ448hBZ.84f50d511624.js} +1 -1
- codex/static_root/assets/stats-tab-CJ448hBZ.84f50d511624.js.br +0 -0
- codex/static_root/assets/stats-tab-CJ448hBZ.84f50d511624.js.gz +0 -0
- codex/static_root/assets/{stats-tab-CQYF0r5W.js → stats-tab-CJ448hBZ.js} +1 -1
- codex/static_root/assets/stats-tab-CJ448hBZ.js.br +0 -0
- codex/static_root/assets/stats-tab-CJ448hBZ.js.gz +0 -0
- codex/static_root/assets/{task-tab-DZ6XCKiv.11d725b52725.js → task-tab-cAwSMU8y.612a5c813dcd.js} +1 -1
- codex/static_root/assets/task-tab-cAwSMU8y.612a5c813dcd.js.br +0 -0
- codex/static_root/assets/task-tab-cAwSMU8y.612a5c813dcd.js.gz +0 -0
- codex/static_root/assets/{task-tab-DZ6XCKiv.js → task-tab-cAwSMU8y.js} +1 -1
- codex/static_root/assets/task-tab-cAwSMU8y.js.br +0 -0
- codex/static_root/assets/task-tab-cAwSMU8y.js.gz +0 -0
- codex/static_root/assets/unauthorized-B2rYLD-2.634a6b5154b7.css +1 -0
- codex/static_root/assets/unauthorized-B2rYLD-2.634a6b5154b7.css.br +0 -0
- codex/static_root/assets/unauthorized-B2rYLD-2.634a6b5154b7.css.gz +0 -0
- codex/static_root/assets/unauthorized-B2rYLD-2.css +1 -0
- codex/static_root/assets/unauthorized-B2rYLD-2.css.br +0 -0
- codex/static_root/assets/unauthorized-B2rYLD-2.css.gz +0 -0
- codex/static_root/assets/{unauthorized-B0KN5ef3.3e4c44632a20.js → unauthorized-MToUu3g6.7c5b4e09d277.js} +1 -1
- codex/static_root/assets/unauthorized-MToUu3g6.7c5b4e09d277.js.br +0 -0
- codex/static_root/assets/unauthorized-MToUu3g6.7c5b4e09d277.js.gz +0 -0
- codex/static_root/assets/{unauthorized-B0KN5ef3.js → unauthorized-MToUu3g6.js} +1 -1
- codex/static_root/assets/unauthorized-MToUu3g6.js.br +0 -0
- codex/static_root/assets/unauthorized-MToUu3g6.js.gz +0 -0
- codex/static_root/assets/{user-tab-WoOwFzFw.2e07ebc79118.js → user-tab-CD2PK4F1.8c34ff50a86c.js} +1 -1
- codex/static_root/assets/user-tab-CD2PK4F1.8c34ff50a86c.js.br +0 -0
- codex/static_root/assets/user-tab-CD2PK4F1.8c34ff50a86c.js.gz +0 -0
- codex/static_root/assets/{user-tab-WoOwFzFw.js → user-tab-CD2PK4F1.js} +1 -1
- codex/static_root/assets/user-tab-CD2PK4F1.js.br +0 -0
- codex/static_root/assets/user-tab-CD2PK4F1.js.gz +0 -0
- codex/static_root/img/missing-cover-165.ef301b6fcf8c.webp +0 -0
- codex/static_root/img/missing-cover-165.webp +0 -0
- codex/static_root/manifest.a56030879046.json +760 -0
- codex/static_root/manifest.a56030879046.json.br +0 -0
- codex/static_root/manifest.a56030879046.json.gz +0 -0
- codex/static_root/manifest.json +343 -343
- 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/headers-icons.html +0 -5
- codex/templates/pwa/headers.html +1 -1
- codex/templates/pwa/serviceworker.js +0 -1
- codex/urls/root.py +1 -1
- codex/util.py +1 -1
- codex/views/browser/annotate/order.py +1 -1
- codex/views/browser/cover.py +9 -7
- codex/views/browser/group_mtime.py +1 -1
- codex/views/reader/page.py +2 -9
- codex/views/util.py +0 -13
- {codex-1.8.14.dist-info → codex-1.8.17.dist-info}/METADATA +5 -5
- codex-1.8.17.dist-info/RECORD +1102 -0
- {codex-1.8.14.dist-info → codex-1.8.17.dist-info}/WHEEL +1 -1
- codex/static_root/assets/VCheckbox-DSiToISz.36b2c3106f70.js.br +0 -0
- codex/static_root/assets/VCheckbox-DSiToISz.36b2c3106f70.js.gz +0 -0
- codex/static_root/assets/VCheckbox-DSiToISz.js.br +0 -0
- codex/static_root/assets/VCheckbox-DSiToISz.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-CYmOhPsT.064f0ca6833f.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-CYmOhPsT.064f0ca6833f.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-CYmOhPsT.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-CYmOhPsT.js.gz +0 -0
- codex/static_root/assets/VCombobox-BPA3Li01.560d65a1fd9e.js +0 -1
- codex/static_root/assets/VCombobox-BPA3Li01.560d65a1fd9e.js.br +0 -0
- codex/static_root/assets/VCombobox-BPA3Li01.560d65a1fd9e.js.gz +0 -0
- codex/static_root/assets/VCombobox-BPA3Li01.js +0 -1
- codex/static_root/assets/VCombobox-BPA3Li01.js.br +0 -0
- codex/static_root/assets/VCombobox-BPA3Li01.js.gz +0 -0
- codex/static_root/assets/VDialog-BFf48e97.3689a9d36779.js +0 -1
- codex/static_root/assets/VDialog-BFf48e97.3689a9d36779.js.br +0 -0
- codex/static_root/assets/VDialog-BFf48e97.3689a9d36779.js.gz +0 -0
- codex/static_root/assets/VDialog-BFf48e97.js +0 -1
- codex/static_root/assets/VDialog-BFf48e97.js.br +0 -0
- codex/static_root/assets/VDialog-BFf48e97.js.gz +0 -0
- codex/static_root/assets/VDialog-cfA1435M.9d74582347d0.css.br +0 -0
- codex/static_root/assets/VDialog-cfA1435M.9d74582347d0.css.gz +0 -0
- codex/static_root/assets/VDialog-cfA1435M.css.br +0 -0
- codex/static_root/assets/VDialog-cfA1435M.css.gz +0 -0
- codex/static_root/assets/VDivider-DU47sRrT.3d2e17799e5c.css.br +0 -0
- codex/static_root/assets/VDivider-DU47sRrT.3d2e17799e5c.css.gz +0 -0
- codex/static_root/assets/VDivider-DU47sRrT.css.br +0 -0
- codex/static_root/assets/VDivider-DU47sRrT.css.gz +0 -0
- codex/static_root/assets/VDivider-Dtis_q2S.9e74f9b00677.js +0 -1
- codex/static_root/assets/VDivider-Dtis_q2S.9e74f9b00677.js.br +0 -0
- codex/static_root/assets/VDivider-Dtis_q2S.9e74f9b00677.js.gz +0 -0
- codex/static_root/assets/VDivider-Dtis_q2S.js +0 -1
- codex/static_root/assets/VDivider-Dtis_q2S.js.br +0 -0
- codex/static_root/assets/VDivider-Dtis_q2S.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-B8KjM0Qi.css +0 -1
- codex/static_root/assets/VExpansionPanels-B8KjM0Qi.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-B8KjM0Qi.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-B8KjM0Qi.e4aca21014f2.css +0 -1
- codex/static_root/assets/VExpansionPanels-B8KjM0Qi.e4aca21014f2.css.br +0 -0
- codex/static_root/assets/VExpansionPanels-B8KjM0Qi.e4aca21014f2.css.gz +0 -0
- codex/static_root/assets/VExpansionPanels-DFJglYob.df0a5305e017.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-DFJglYob.df0a5305e017.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-DFJglYob.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-DFJglYob.js.gz +0 -0
- codex/static_root/assets/VForm-BNXhV_uk.f87afb6d84da.js.br +0 -0
- codex/static_root/assets/VForm-BNXhV_uk.f87afb6d84da.js.gz +0 -0
- codex/static_root/assets/VForm-BNXhV_uk.js.br +0 -0
- codex/static_root/assets/VForm-BNXhV_uk.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-BlGhrl3W.93a79cebc3eb.js +0 -1
- codex/static_root/assets/VRadioGroup-BlGhrl3W.93a79cebc3eb.js.br +0 -0
- codex/static_root/assets/VRadioGroup-BlGhrl3W.93a79cebc3eb.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-BlGhrl3W.js +0 -1
- codex/static_root/assets/VRadioGroup-BlGhrl3W.js.br +0 -0
- codex/static_root/assets/VRadioGroup-BlGhrl3W.js.gz +0 -0
- codex/static_root/assets/VSelect-BvTTr4RP.be69766e6916.css.br +0 -0
- codex/static_root/assets/VSelect-BvTTr4RP.css.br +0 -0
- codex/static_root/assets/VSelect-DIXHkKJm.22846e456715.js +0 -1
- codex/static_root/assets/VSelect-DIXHkKJm.22846e456715.js.br +0 -0
- codex/static_root/assets/VSelect-DIXHkKJm.22846e456715.js.gz +0 -0
- codex/static_root/assets/VSelect-DIXHkKJm.js +0 -1
- codex/static_root/assets/VSelect-DIXHkKJm.js.br +0 -0
- codex/static_root/assets/VSelect-DIXHkKJm.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-R4GtShoa.css +0 -1
- codex/static_root/assets/VSelectionControl-R4GtShoa.css.br +0 -0
- codex/static_root/assets/VSelectionControl-R4GtShoa.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-R4GtShoa.f3ebc2149a3a.css +0 -1
- codex/static_root/assets/VSelectionControl-R4GtShoa.f3ebc2149a3a.css.br +0 -0
- codex/static_root/assets/VSelectionControl-R4GtShoa.f3ebc2149a3a.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-xYnmeS9J.279721e1b13d.js +0 -1
- codex/static_root/assets/VSelectionControl-xYnmeS9J.279721e1b13d.js.br +0 -0
- codex/static_root/assets/VSelectionControl-xYnmeS9J.279721e1b13d.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-xYnmeS9J.js +0 -1
- codex/static_root/assets/VSelectionControl-xYnmeS9J.js.br +0 -0
- codex/static_root/assets/VSelectionControl-xYnmeS9J.js.gz +0 -0
- codex/static_root/assets/VTable-BK7gXlps.d1758b79332d.js +0 -1
- codex/static_root/assets/VTable-BK7gXlps.d1758b79332d.js.br +0 -0
- codex/static_root/assets/VTable-BK7gXlps.d1758b79332d.js.gz +0 -0
- codex/static_root/assets/VTable-BK7gXlps.js +0 -1
- codex/static_root/assets/VTable-BK7gXlps.js.br +0 -0
- codex/static_root/assets/VTable-BK7gXlps.js.gz +0 -0
- codex/static_root/assets/VWindowItem-0tN6eYpd.773c981aa12a.js +0 -1
- codex/static_root/assets/VWindowItem-0tN6eYpd.773c981aa12a.js.br +0 -0
- codex/static_root/assets/VWindowItem-0tN6eYpd.773c981aa12a.js.gz +0 -0
- codex/static_root/assets/VWindowItem-0tN6eYpd.js +0 -1
- codex/static_root/assets/VWindowItem-0tN6eYpd.js.br +0 -0
- codex/static_root/assets/VWindowItem-0tN6eYpd.js.gz +0 -0
- codex/static_root/assets/VWindowItem-CWv03gfN.css.br +0 -0
- codex/static_root/assets/VWindowItem-CWv03gfN.css.gz +0 -0
- codex/static_root/assets/VWindowItem-CWv03gfN.ddad20bc51ba.css.br +0 -0
- codex/static_root/assets/VWindowItem-CWv03gfN.ddad20bc51ba.css.gz +0 -0
- codex/static_root/assets/admin-BSeSK58M.5e0ec404b68a.js.br +0 -0
- codex/static_root/assets/admin-BSeSK58M.5e0ec404b68a.js.gz +0 -0
- codex/static_root/assets/admin-BSeSK58M.js.br +0 -0
- codex/static_root/assets/admin-BSeSK58M.js.gz +0 -0
- codex/static_root/assets/admin-C6VbbEgi.1b7afd86e270.js.br +0 -0
- codex/static_root/assets/admin-C6VbbEgi.1b7afd86e270.js.gz +0 -0
- codex/static_root/assets/admin-C6VbbEgi.js.br +0 -0
- codex/static_root/assets/admin-C6VbbEgi.js.gz +0 -0
- codex/static_root/assets/admin-DJCVf2PA.7ba26fd73264.css.br +0 -0
- codex/static_root/assets/admin-DJCVf2PA.css.br +0 -0
- codex/static_root/assets/admin-menu-CJIeXccy.a8f894508762.js.br +0 -0
- codex/static_root/assets/admin-menu-CJIeXccy.a8f894508762.js.gz +0 -0
- codex/static_root/assets/admin-menu-CJIeXccy.js.br +0 -0
- codex/static_root/assets/admin-menu-CJIeXccy.js.gz +0 -0
- codex/static_root/assets/admin-settings-button-progress-vOeMypwd.5db8039f1f8b.js.br +0 -3
- codex/static_root/assets/admin-settings-button-progress-vOeMypwd.5db8039f1f8b.js.gz +0 -0
- codex/static_root/assets/admin-settings-button-progress-vOeMypwd.js.br +0 -3
- codex/static_root/assets/admin-settings-button-progress-vOeMypwd.js.gz +0 -0
- codex/static_root/assets/browser-CKD3rgcs.31efed76525d.js.br +0 -0
- codex/static_root/assets/browser-CKD3rgcs.31efed76525d.js.gz +0 -0
- codex/static_root/assets/browser-CKD3rgcs.js.br +0 -0
- codex/static_root/assets/browser-CKD3rgcs.js.gz +0 -0
- codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css +0 -1
- codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.br +0 -0
- codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.gz +0 -0
- codex/static_root/assets/browser-CS6VSg0_.css +0 -1
- codex/static_root/assets/browser-CS6VSg0_.css.br +0 -0
- codex/static_root/assets/browser-CS6VSg0_.css.gz +0 -0
- codex/static_root/assets/change-password-dialog-DoBLv9WU.2f5b656e6981.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DoBLv9WU.2f5b656e6981.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-DoBLv9WU.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DoBLv9WU.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-WKjj039l.7945cc0aca6f.js +0 -1
- codex/static_root/assets/confirm-dialog-WKjj039l.7945cc0aca6f.js.br +0 -0
- codex/static_root/assets/confirm-dialog-WKjj039l.7945cc0aca6f.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-WKjj039l.js +0 -1
- codex/static_root/assets/confirm-dialog-WKjj039l.js.br +0 -0
- codex/static_root/assets/confirm-dialog-WKjj039l.js.gz +0 -0
- codex/static_root/assets/datetime-column-cHNNkd7r.0fa4cabd2ff5.js.br +0 -1
- codex/static_root/assets/datetime-column-cHNNkd7r.0fa4cabd2ff5.js.gz +0 -0
- codex/static_root/assets/datetime-column-cHNNkd7r.js.br +0 -1
- codex/static_root/assets/datetime-column-cHNNkd7r.js.gz +0 -0
- codex/static_root/assets/filter-Bu2xCEP4.d632e004db3e.js.br +0 -0
- codex/static_root/assets/filter-Bu2xCEP4.d632e004db3e.js.gz +0 -0
- codex/static_root/assets/filter-Bu2xCEP4.js.br +0 -0
- codex/static_root/assets/filter-Bu2xCEP4.js.gz +0 -0
- codex/static_root/assets/flag-tab-COY8uzS6.05e7ab1f0aef.js +0 -1
- codex/static_root/assets/flag-tab-COY8uzS6.05e7ab1f0aef.js.br +0 -0
- codex/static_root/assets/flag-tab-COY8uzS6.05e7ab1f0aef.js.gz +0 -0
- codex/static_root/assets/flag-tab-COY8uzS6.js +0 -1
- codex/static_root/assets/flag-tab-COY8uzS6.js.br +0 -0
- codex/static_root/assets/flag-tab-COY8uzS6.js.gz +0 -0
- codex/static_root/assets/forwardRefs-BXEe8ItZ.a2cf13851d8e.js +0 -1
- codex/static_root/assets/forwardRefs-BXEe8ItZ.a2cf13851d8e.js.br +0 -0
- codex/static_root/assets/forwardRefs-BXEe8ItZ.a2cf13851d8e.js.gz +0 -0
- codex/static_root/assets/forwardRefs-BXEe8ItZ.js +0 -1
- codex/static_root/assets/forwardRefs-BXEe8ItZ.js.br +0 -0
- codex/static_root/assets/forwardRefs-BXEe8ItZ.js.gz +0 -0
- codex/static_root/assets/forwardRefs-CecUXkvN.css +0 -1
- codex/static_root/assets/forwardRefs-CecUXkvN.css.br +0 -0
- codex/static_root/assets/forwardRefs-CecUXkvN.d595d41108e3.css +0 -1
- codex/static_root/assets/forwardRefs-CecUXkvN.d595d41108e3.css.br +0 -0
- codex/static_root/assets/group-tab-CqHKA3Rv.bd829d9ff902.js.br +0 -0
- codex/static_root/assets/group-tab-CqHKA3Rv.bd829d9ff902.js.gz +0 -0
- codex/static_root/assets/group-tab-CqHKA3Rv.js.br +0 -0
- codex/static_root/assets/group-tab-CqHKA3Rv.js.gz +0 -0
- codex/static_root/assets/http-error-BAYySiBp.392f8e13b8a9.js +0 -1
- codex/static_root/assets/http-error-BAYySiBp.392f8e13b8a9.js.br +0 -0
- codex/static_root/assets/http-error-BAYySiBp.392f8e13b8a9.js.gz +0 -0
- codex/static_root/assets/http-error-BAYySiBp.js +0 -1
- codex/static_root/assets/http-error-BAYySiBp.js.br +0 -0
- codex/static_root/assets/http-error-BAYySiBp.js.gz +0 -0
- codex/static_root/assets/http-error-CB3k5P-n.82d886ac81c7.css.br +0 -0
- codex/static_root/assets/http-error-CB3k5P-n.82d886ac81c7.css.gz +0 -0
- codex/static_root/assets/http-error-CB3k5P-n.css.br +0 -0
- codex/static_root/assets/http-error-CB3k5P-n.css.gz +0 -0
- codex/static_root/assets/index-CuPwxeMJ.096be94db12c.js +0 -1
- codex/static_root/assets/index-CuPwxeMJ.096be94db12c.js.br +0 -0
- codex/static_root/assets/index-CuPwxeMJ.096be94db12c.js.gz +0 -0
- codex/static_root/assets/index-CuPwxeMJ.js +0 -1
- codex/static_root/assets/index-CuPwxeMJ.js.br +0 -0
- codex/static_root/assets/index-CuPwxeMJ.js.gz +0 -0
- codex/static_root/assets/library-tab-DHtd9G39.a6068c595e8f.js.br +0 -0
- codex/static_root/assets/library-tab-DHtd9G39.a6068c595e8f.js.gz +0 -0
- codex/static_root/assets/library-tab-DHtd9G39.js.br +0 -0
- codex/static_root/assets/library-tab-DHtd9G39.js.gz +0 -0
- codex/static_root/assets/main-CZN13qLI.12debfe1e227.css.br +0 -0
- codex/static_root/assets/main-CZN13qLI.css.br +0 -0
- codex/static_root/assets/main-d46UvpG6.9af3aed7efe8.js +0 -39
- codex/static_root/assets/main-d46UvpG6.9af3aed7efe8.js.br +0 -0
- codex/static_root/assets/main-d46UvpG6.9af3aed7efe8.js.gz +0 -0
- codex/static_root/assets/main-d46UvpG6.js +0 -39
- codex/static_root/assets/main-d46UvpG6.js.br +0 -0
- codex/static_root/assets/main-d46UvpG6.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-8uR2kH3x.2618772c88d6.js +0 -1
- codex/static_root/assets/pager-full-pdf-8uR2kH3x.2618772c88d6.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-8uR2kH3x.2618772c88d6.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-8uR2kH3x.js +0 -1
- codex/static_root/assets/pager-full-pdf-8uR2kH3x.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-8uR2kH3x.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-BMm-LmG-.92cfb20daeb9.css +0 -1
- codex/static_root/assets/pagination-toolbar-BMm-LmG-.92cfb20daeb9.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-BMm-LmG-.92cfb20daeb9.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-BMm-LmG-.css +0 -1
- codex/static_root/assets/pagination-toolbar-BMm-LmG-.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-BMm-LmG-.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-Bj2tvIp6.b956898491b1.js +0 -1
- codex/static_root/assets/pagination-toolbar-Bj2tvIp6.b956898491b1.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-Bj2tvIp6.b956898491b1.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-Bj2tvIp6.js +0 -1
- codex/static_root/assets/pagination-toolbar-Bj2tvIp6.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-Bj2tvIp6.js.gz +0 -0
- codex/static_root/assets/pdf-doc-CAzVDc80.440339054422.js.br +0 -0
- codex/static_root/assets/pdf-doc-CAzVDc80.440339054422.js.gz +0 -0
- codex/static_root/assets/pdf-doc-CAzVDc80.js.br +0 -0
- codex/static_root/assets/pdf-doc-CAzVDc80.js.gz +0 -0
- codex/static_root/assets/reader-BUEw0RYD.css.br +0 -0
- codex/static_root/assets/reader-BUEw0RYD.e084c3b621d4.css.br +0 -0
- codex/static_root/assets/reader-Bi_CT2rk.2048477e3d9a.js.br +0 -0
- codex/static_root/assets/reader-Bi_CT2rk.2048477e3d9a.js.gz +0 -0
- codex/static_root/assets/reader-Bi_CT2rk.js.br +0 -0
- codex/static_root/assets/reader-Bi_CT2rk.js.gz +0 -0
- codex/static_root/assets/relation-chips-D2XLYFHm.c0c38d2a39ae.js +0 -1
- codex/static_root/assets/relation-chips-D2XLYFHm.c0c38d2a39ae.js.br +0 -0
- codex/static_root/assets/relation-chips-D2XLYFHm.c0c38d2a39ae.js.gz +0 -0
- codex/static_root/assets/relation-chips-D2XLYFHm.js +0 -1
- codex/static_root/assets/relation-chips-D2XLYFHm.js.br +0 -0
- codex/static_root/assets/relation-chips-D2XLYFHm.js.gz +0 -0
- codex/static_root/assets/settings-drawer-CjqFmP5f.a1c27430b554.js.br +0 -0
- codex/static_root/assets/settings-drawer-CjqFmP5f.a1c27430b554.js.gz +0 -0
- codex/static_root/assets/settings-drawer-CjqFmP5f.js.br +0 -0
- codex/static_root/assets/settings-drawer-CjqFmP5f.js.gz +0 -0
- codex/static_root/assets/settings-drawer-d-7mkVdG.15838d8ecd33.css.br +0 -0
- codex/static_root/assets/settings-drawer-d-7mkVdG.15838d8ecd33.css.gz +0 -0
- codex/static_root/assets/settings-drawer-d-7mkVdG.css.br +0 -0
- codex/static_root/assets/settings-drawer-d-7mkVdG.css.gz +0 -0
- codex/static_root/assets/ssrBoot-Bn2PfqMS.a3d5b2b28349.js +0 -1
- codex/static_root/assets/ssrBoot-Bn2PfqMS.a3d5b2b28349.js.br +0 -0
- codex/static_root/assets/ssrBoot-Bn2PfqMS.a3d5b2b28349.js.gz +0 -0
- codex/static_root/assets/ssrBoot-Bn2PfqMS.js +0 -1
- codex/static_root/assets/ssrBoot-Bn2PfqMS.js.br +0 -0
- codex/static_root/assets/ssrBoot-Bn2PfqMS.js.gz +0 -0
- codex/static_root/assets/stats-tab-CQYF0r5W.3eeaa933ecfd.js.br +0 -0
- codex/static_root/assets/stats-tab-CQYF0r5W.3eeaa933ecfd.js.gz +0 -0
- codex/static_root/assets/stats-tab-CQYF0r5W.js.br +0 -0
- codex/static_root/assets/stats-tab-CQYF0r5W.js.gz +0 -0
- codex/static_root/assets/task-tab-DZ6XCKiv.11d725b52725.js.br +0 -0
- codex/static_root/assets/task-tab-DZ6XCKiv.11d725b52725.js.gz +0 -0
- codex/static_root/assets/task-tab-DZ6XCKiv.js.br +0 -0
- codex/static_root/assets/task-tab-DZ6XCKiv.js.gz +0 -0
- codex/static_root/assets/unauthorized-B0KN5ef3.3e4c44632a20.js.br +0 -0
- codex/static_root/assets/unauthorized-B0KN5ef3.3e4c44632a20.js.gz +0 -0
- codex/static_root/assets/unauthorized-B0KN5ef3.js.br +0 -0
- codex/static_root/assets/unauthorized-B0KN5ef3.js.gz +0 -0
- codex/static_root/assets/unauthorized-ChdZFt-1.8a4ba062faeb.css +0 -1
- codex/static_root/assets/unauthorized-ChdZFt-1.8a4ba062faeb.css.br +0 -0
- codex/static_root/assets/unauthorized-ChdZFt-1.8a4ba062faeb.css.gz +0 -0
- codex/static_root/assets/unauthorized-ChdZFt-1.css +0 -1
- codex/static_root/assets/unauthorized-ChdZFt-1.css.br +0 -0
- codex/static_root/assets/unauthorized-ChdZFt-1.css.gz +0 -0
- codex/static_root/assets/user-tab-WoOwFzFw.2e07ebc79118.js.br +0 -0
- codex/static_root/assets/user-tab-WoOwFzFw.2e07ebc79118.js.gz +0 -0
- codex/static_root/assets/user-tab-WoOwFzFw.js.br +0 -0
- codex/static_root/assets/user-tab-WoOwFzFw.js.gz +0 -0
- codex/static_root/img/missing-cover-165.f4bb7740084c.webp +0 -0
- codex/static_root/manifest.69541e47c159.json +0 -760
- codex/static_root/manifest.69541e47c159.json.br +0 -0
- codex/static_root/manifest.69541e47c159.json.gz +0 -0
- codex-1.8.14.dist-info/RECORD +0 -1102
- {codex-1.8.14.dist-info → codex-1.8.17.dist-info}/entry_points.txt +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as k,D as G,G as b,v as A,
|
|
1
|
+
import{_ as k,D as G,G as b,v as A,y as h,a as o,x as a,w as i,N as f,b as t,A as m,ap as T}from"./main-Df6H3rcv.js";import{G as C,A as v,R as I,a as V,b as D,c as j}from"./relation-chips-CaoqjI00.js";import{useAdminStore as d}from"./admin-0MogMIWh.js";import{c as E}from"./VSelectionControl-BOfjazsp.js";import{a as w,V as N}from"./VRadioGroup-BNlf_ga1.js";import"./forwardRefs-8AR4cmsy.js";import"./VForm-Bz_gI_Wh.js";import"./VDialog-CZkKUrky.js";import"./VSelect-DcgePQge.js";import"./ssrBoot-BDUblGRH.js";import"./VDivider-BXArtxT-.js";import"./VCheckboxBtn-BL2_20_y.js";import"./VTable-DwP4GgFJ.js";import"./filter-BtcXW5zO.js";import"./confirm-dialog-DOcInEYk.js";const S=["name","userSet","librarySet","exclude"];Object.freeze(S);const y={name:"",userSet:[],librarySet:[],exclude:!1};Object.freeze(y);const L={name:"AdminGroupCreateUpdateInputs",components:{AdminRelationPicker:v,GroupChip:C},props:{oldRow:{type:[Object,Boolean],default:!1}},emits:["change"],data(){return{rules:{name:[l=>!!l||"Name is required",l=>!!l&&!this.names.has(l.trim())||"Name already used"]},row:{...y,...f(this.oldRow)}}},computed:{...b(d,["normalLibraries"]),...b(d,{groups:l=>l.groups,users:l=>l.users}),names(){return this.nameSet(this.groups,"name",this.oldRow,!0)}},watch:{row:{handler(l){this.$emit("change",l)},deep:!0},oldRow:{handler(l){this.row=f(l)},deep:!0}},methods:{...G(d,["nameSet"])},UPDATE_KEYS:S,EMPTY_ROW:y};function H(l,e,c,x,s,g){const p=i("GroupChip"),u=i("AdminRelationPicker");return h(),A("div",null,[o(E,{modelValue:s.row.name,"onUpdate:modelValue":e[0]||(e[0]=r=>s.row.name=r),label:"Group Name",rules:s.rules.name,clearable:"",autofocus:""},null,8,["modelValue","rules"]),o(N,{inline:"",label:"Type","model-value":s.row.exclude,"hide-details":"auto","onUpdate:modelValue":e[1]||(e[1]=r=>s.row.exclude=r)},{default:a(()=>[o(w,{value:!1},{label:a(()=>[o(p,{item:{name:"Include",exclude:!1},"title-key":"name","group-type":""})]),_:1}),o(w,{value:!0},{label:a(()=>[o(p,{item:{name:"Exclude",exclude:!0},"title-key":"name","group-type":""})]),_:1})]),_:1},8,["model-value"]),o(u,{"model-value":s.row.userSet,label:"Users",objs:l.users,"title-key":"username","onUpdate:modelValue":e[2]||(e[2]=r=>s.row.userSet=r)},null,8,["model-value","objs"]),o(u,{"model-value":s.row.librarySet,label:"Libraries",objs:l.normalLibraries,"title-key":"path","onUpdate:modelValue":e[3]||(e[3]=r=>s.row.librarySet=r)},null,8,["model-value","objs"])])}const P=k(L,[["render",H]]),O=180,z={name:"AdminGroupsTab",components:{AdminTable:j,AdminDeleteRowDialog:D,AdminCreateUpdateDialog:V,RelationChips:I,GroupChip:C},data(){return{lastUpdate:{pk:0,field:void 0},AdminGroupCreateUpdateInputs:T(P),GROUP_HELP_HEIGHT:O,headers:[{title:"Name",key:"name",align:"start"},{title:"Type",key:"exclude",align:"start"},{title:"Users",key:"userSet"},{title:"Libraries",key:"librarySet"},{title:"Actions",key:"actions",sortable:!1}]}},computed:{...b(d,["normalLibraries"]),...b(d,{groups:l=>l.groups,users:l=>l.users})},mounted(){this.loadTables(["User","Library","Group"])},methods:{...G(d,["loadTables"]),groupType(l){const e=l.exclude;return{name:e?"Exclude ":"Include",exclude:e}}}},B={class:"tabHeader"},_={id:"groupHelp"},Y={id:"groupTable"};function q(l,e,c,x,s,g){const p=i("AdminCreateUpdateDialog"),u=i("GroupChip"),r=i("RelationChips"),U=i("AdminDeleteRowDialog"),R=i("AdminTable");return h(),A("div",null,[t("header",B,[o(p,{table:"Group","max-width":"20em",inputs:s.AdminGroupCreateUpdateInputs},null,8,["inputs"])]),o(R,{"item-title":"name",headers:s.headers,items:l.groups},{"no-data":a(()=>[...e[0]||(e[0]=[t("td",{class:"adminNoData",colspan:"100%"},"No groups",-1)])]),"item.exclude":a(({item:n})=>[o(u,{"group-type":"",item:g.groupType(n),"title-key":"name"},null,8,["item"])]),"item.userSet":a(({item:n})=>[o(r,{pks:n.userSet,objs:l.users,"title-key":"username"},null,8,["pks","objs"])]),"item.librarySet":a(({item:n})=>[o(r,{pks:n.librarySet,objs:l.normalLibraries,"title-key":"path"},null,8,["pks","objs"])]),"item.actions":a(({item:n})=>[o(p,{table:"Group","old-row":n,"max-width":"20em",inputs:s.AdminGroupCreateUpdateInputs,size:"small",density:"compact"},null,8,["old-row","inputs"]),o(U,{table:"Group",pk:n.pk,name:n.name,size:"small",density:"compact"},null,8,["pk","name"])]),_:2},1032,["headers","items"]),t("div",_,[e[9]||(e[9]=t("h3",null,"Group Logic",-1)),e[10]||(e[10]=t("p",null," A library in no groups is accessible to every user and non-users if those are enabled. ",-1)),e[11]||(e[11]=t("p",null,[m(" A library with "),t("em",null,"any"),m(" Include groups is accessible "),t("em",null,"only"),m(" to users who are in those groups. ")],-1)),e[12]||(e[12]=t("p",null,[m(" A library with "),t("em",null,"any"),m(" Exclude groups is not accessible to Guest users but is acccessable to any logged in users that are not in the Exclude groups. ")],-1)),e[13]||(e[13]=t("p",null," If you have libraries added and you do not see them in your browser, check to see if the library and your user are in the same group. ",-1)),t("table",Y,[e[8]||(e[8]=t("thead",null,[t("tr",null,[t("th",null,"Library in Group Type"),t("th",null,"Guest"),t("th",null,"User Out of Group"),t("th",null,"User In Group")])],-1)),t("tbody",null,[e[7]||(e[7]=t("tr",null,[t("td",null,"Not in a Group"),t("td",{class:"see"},"Can See"),t("td",{class:"see"},"Can See"),t("td",{class:"see"},"Can See")],-1)),t("tr",null,[t("td",null,[o(u,{item:{name:"Include",exclude:!1},"title-key":"name","group-type":""})]),e[1]||(e[1]=t("td",{class:"hidden"},"Hidden",-1)),e[2]||(e[2]=t("td",{class:"hidden"},"Hidden",-1)),e[3]||(e[3]=t("td",{class:"see"},"Can See",-1))]),t("tr",null,[t("td",null,[o(u,{item:{name:"Exclude",exclude:!0},"title-key":"name","group-type":""})]),e[4]||(e[4]=t("td",{class:"hidden"},"Hidden",-1)),e[5]||(e[5]=t("td",{class:"see"},"Can See",-1)),e[6]||(e[6]=t("td",{class:"hidden"},"Hidden",-1))])])])])])}const ne=k(z,[["render",q],["__scopeId","data-v-84dde1bc"]]);export{ne as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
#httpError[data-v-1cd9a888]{padding-top:max(20px,env(safe-area-inset-top));padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right));padding-bottom:max(20px,env(safe-area-inset-bottom))}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888],#link[data-v-1cd9a888]{position:absolute;left:50%;transform:translate(-50%) translateY(-25%)}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888]{top:25%}#httpCode[data-v-1cd9a888]{z-index:100;padding-top:1em}#title[data-v-1cd9a888]{text-align:center;font-size:6vw;color:rgb(var(--v-theme-textDisabled));stroke:rgb(var(--v-theme-textDisabled));fill:rgb(var(--v-theme-textDisabled));opacity:25%}#link[data-v-1cd9a888]{bottom:50%}@media
|
|
1
|
+
#httpError[data-v-1cd9a888]{padding-top:max(20px,env(safe-area-inset-top));padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right));padding-bottom:max(20px,env(safe-area-inset-bottom))}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888],#link[data-v-1cd9a888]{position:absolute;left:50%;transform:translate(-50%) translateY(-25%)}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888]{top:25%}#httpCode[data-v-1cd9a888]{z-index:100;padding-top:1em}#title[data-v-1cd9a888]{text-align:center;font-size:6vw;color:rgb(var(--v-theme-textDisabled));stroke:rgb(var(--v-theme-textDisabled));fill:rgb(var(--v-theme-textDisabled));opacity:25%}#link[data-v-1cd9a888]{bottom:50%}@media(max-width:959.98px){#title[data-v-1cd9a888]{font-size:32vw}}
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
#httpError[data-v-1cd9a888]{padding-top:max(20px,env(safe-area-inset-top));padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right));padding-bottom:max(20px,env(safe-area-inset-bottom))}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888],#link[data-v-1cd9a888]{position:absolute;left:50%;transform:translate(-50%) translateY(-25%)}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888]{top:25%}#httpCode[data-v-1cd9a888]{z-index:100;padding-top:1em}#title[data-v-1cd9a888]{text-align:center;font-size:6vw;color:rgb(var(--v-theme-textDisabled));stroke:rgb(var(--v-theme-textDisabled));fill:rgb(var(--v-theme-textDisabled));opacity:25%}#link[data-v-1cd9a888]{bottom:50%}@media
|
|
1
|
+
#httpError[data-v-1cd9a888]{padding-top:max(20px,env(safe-area-inset-top));padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right));padding-bottom:max(20px,env(safe-area-inset-bottom))}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888],#link[data-v-1cd9a888]{position:absolute;left:50%;transform:translate(-50%) translateY(-25%)}#httpCode[data-v-1cd9a888],#title[data-v-1cd9a888]{top:25%}#httpCode[data-v-1cd9a888]{z-index:100;padding-top:1em}#title[data-v-1cd9a888]{text-align:center;font-size:6vw;color:rgb(var(--v-theme-textDisabled));stroke:rgb(var(--v-theme-textDisabled));fill:rgb(var(--v-theme-textDisabled));opacity:25%}#link[data-v-1cd9a888]{bottom:50%}@media(max-width:959.98px){#title[data-v-1cd9a888]{font-size:32vw}}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as h,G as l,z as a,x as i,w as e,H as f,y as s,a as d,b as o,C as p}from"./main-Df6H3rcv.js";import{U as k,A as z,c as A}from"./unauthorized-MToUu3g6.js";import"./VDialog-CZkKUrky.js";import"./forwardRefs-8AR4cmsy.js";import"./change-password-dialog-CsA0dV8F.js";import"./VForm-Bz_gI_Wh.js";import"./VSelectionControl-BOfjazsp.js";import"./admin-0MogMIWh.js";import"./ssrBoot-BDUblGRH.js";const c={400:"Bad Request",403:"Forbidden",404:"Page Not Found",500:"Server Error"};Object.freeze(c);const B={name:"HttpError",components:{AppBanner:z,Unauthorized:k},data(){return{}},computed:{...l(f,["isAuthorized"]),code:function(){return+this.$route.params.code},title:function(){let t=c[this.code];return t||(t="Unknown Error"),t}}},E={id:"httpCode"},x={id:"title"};function C(t,r,S,U,y,n){const u=e("AppBanner"),m=e("router-link"),_=e("Unauthorized");return t.isAuthorized?(s(),a(A,{key:0,id:"httpError"},{default:i(()=>[d(u),o("h1",E,p(n.code),1),o("h1",x,p(n.title),1),d(m,{id:"link",to:{name:"home"}},{default:i(()=>[...r[0]||(r[0]=[o("h2",null,"Codex Home",-1)])]),_:1})]),_:1})):(s(),a(_,{key:1}))}const I=h(B,[["render",C],["__scopeId","data-v-1cd9a888"]]);export{I as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as h,G as l,z as a,x as i,w as e,H as f,y as s,a as d,b as o,C as p}from"./main-Df6H3rcv.js";import{U as k,A as z,c as A}from"./unauthorized-MToUu3g6.js";import"./VDialog-CZkKUrky.js";import"./forwardRefs-8AR4cmsy.js";import"./change-password-dialog-CsA0dV8F.js";import"./VForm-Bz_gI_Wh.js";import"./VSelectionControl-BOfjazsp.js";import"./admin-0MogMIWh.js";import"./ssrBoot-BDUblGRH.js";const c={400:"Bad Request",403:"Forbidden",404:"Page Not Found",500:"Server Error"};Object.freeze(c);const B={name:"HttpError",components:{AppBanner:z,Unauthorized:k},data(){return{}},computed:{...l(f,["isAuthorized"]),code:function(){return+this.$route.params.code},title:function(){let t=c[this.code];return t||(t="Unknown Error"),t}}},E={id:"httpCode"},x={id:"title"};function C(t,r,S,U,y,n){const u=e("AppBanner"),m=e("router-link"),_=e("Unauthorized");return t.isAuthorized?(s(),a(A,{key:0,id:"httpError"},{default:i(()=>[d(u),o("h1",E,p(n.code),1),o("h1",x,p(n.title),1),d(m,{id:"link",to:{name:"home"}},{default:i(()=>[...r[0]||(r[0]=[o("h2",null,"Codex Home",-1)])]),_:1})]),_:1})):(s(),a(_,{key:1}))}const I=h(B,[["render",C],["__scopeId","data-v-1cd9a888"]]);export{I as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as V,o as P,g as T,e as O,bx as S,t as g,r as k,c as d,m,u as w,a as A,cT as y,k as $,ch as b,w as j}from"./main-Df6H3rcv.js";import{r as I,u as R,q as x}from"./VDialog-CZkKUrky.js";import{f as B}from"./forwardRefs-8AR4cmsy.js";const q=V({id:String,interactive:Boolean,text:String,...P(I({closeOnBack:!1,location:"end",locationStrategy:"connected",eager:!0,minWidth:0,offset:10,openOnClick:!1,openOnHover:!0,origin:"auto",scrim:!1,scrollStrategy:"reposition",transition:null}),["absolute","persistent"])},"VTooltip"),D=T()({name:"VTooltip",props:q(),emits:{"update:modelValue":t=>!0},setup(t,n){let{slots:a}=n;const e=O(t,"modelValue"),{scopeId:s}=R(),i=S(),o=g(()=>t.id||`v-tooltip-${i}`),r=k(),f=d(()=>t.location.split(" ").length>1?t.location:t.location+" center"),v=d(()=>t.origin==="auto"||t.origin==="overlap"||t.origin.split(" ").length>1||t.location.split(" ").length>1?t.origin:t.origin+" center"),l=g(()=>t.transition!=null?t.transition:e.value?"scale-transition":"fade-transition"),h=d(()=>m({"aria-describedby":o.value},t.activatorProps));return w(()=>{const C=x.filterProps(t);return A(x,m({ref:r,class:["v-tooltip",{"v-tooltip--interactive":t.interactive},t.class],style:t.style,id:o.value},C,{modelValue:e.value,"onUpdate:modelValue":c=>e.value=c,transition:l.value,absolute:!0,location:f.value,origin:v.value,persistent:!0,role:"tooltip",activatorProps:h.value,_disableGlobalStack:!0},s),{activator:a.activator,default:function(){for(var c=arguments.length,p=new Array(c),u=0;u<c;u++)p[u]=arguments[u];return a.default?.(...p)??t.text}})}),B({},r)}});function F(t,n){const a=typeof t=="string"?j(t):t,e=G(a,n);return{mounted:e,updated:e,unmounted(s){y(null,s)}}}function G(t,n){return function(a,e,s){const i=typeof n=="function"?n(e):n,o=e.value?.text??e.value??i?.text,r=$(e.value)?e.value:{},f=()=>o??a.textContent,v=(s.ctx===e.instance.$?H(s,e.instance.$)?.provides:s.ctx?.provides)??e.instance.$.provides,l=b(t,m(i,r),f);l.appContext=Object.assign(Object.create(null),e.instance.$.appContext,{provides:v}),y(l,a)}}function H(t,n){const a=new Set,e=i=>{for(const o of i){if(!o)continue;if(o===t||o.el&&t.el&&o.el===t.el)return!0;a.add(o);let r;if(o.suspense?r=e([o.ssContent]):Array.isArray(o.children)?r=e(o.children):o.component?.vnode&&(r=e([o.component?.subTree])),r)return r;a.delete(o)}return!1};if(!e([n.subTree]))return n;const s=Array.from(a).reverse();for(const i of s)if(i.component)return i.component;return n}const W=F(D,t=>({activator:"parent",location:t.arg?.replace("-"," "),text:typeof t.value=="boolean"?void 0:t.value}));export{W as T};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as V,o as P,g as T,e as O,bx as S,t as g,r as k,c as d,m,u as w,a as A,cT as y,k as $,ch as b,w as j}from"./main-Df6H3rcv.js";import{r as I,u as R,q as x}from"./VDialog-CZkKUrky.js";import{f as B}from"./forwardRefs-8AR4cmsy.js";const q=V({id:String,interactive:Boolean,text:String,...P(I({closeOnBack:!1,location:"end",locationStrategy:"connected",eager:!0,minWidth:0,offset:10,openOnClick:!1,openOnHover:!0,origin:"auto",scrim:!1,scrollStrategy:"reposition",transition:null}),["absolute","persistent"])},"VTooltip"),D=T()({name:"VTooltip",props:q(),emits:{"update:modelValue":t=>!0},setup(t,n){let{slots:a}=n;const e=O(t,"modelValue"),{scopeId:s}=R(),i=S(),o=g(()=>t.id||`v-tooltip-${i}`),r=k(),f=d(()=>t.location.split(" ").length>1?t.location:t.location+" center"),v=d(()=>t.origin==="auto"||t.origin==="overlap"||t.origin.split(" ").length>1||t.location.split(" ").length>1?t.origin:t.origin+" center"),l=g(()=>t.transition!=null?t.transition:e.value?"scale-transition":"fade-transition"),h=d(()=>m({"aria-describedby":o.value},t.activatorProps));return w(()=>{const C=x.filterProps(t);return A(x,m({ref:r,class:["v-tooltip",{"v-tooltip--interactive":t.interactive},t.class],style:t.style,id:o.value},C,{modelValue:e.value,"onUpdate:modelValue":c=>e.value=c,transition:l.value,absolute:!0,location:f.value,origin:v.value,persistent:!0,role:"tooltip",activatorProps:h.value,_disableGlobalStack:!0},s),{activator:a.activator,default:function(){for(var c=arguments.length,p=new Array(c),u=0;u<c;u++)p[u]=arguments[u];return a.default?.(...p)??t.text}})}),B({},r)}});function F(t,n){const a=typeof t=="string"?j(t):t,e=G(a,n);return{mounted:e,updated:e,unmounted(s){y(null,s)}}}function G(t,n){return function(a,e,s){const i=typeof n=="function"?n(e):n,o=e.value?.text??e.value??i?.text,r=$(e.value)?e.value:{},f=()=>o??a.textContent,v=(s.ctx===e.instance.$?H(s,e.instance.$)?.provides:s.ctx?.provides)??e.instance.$.provides,l=b(t,m(i,r),f);l.appContext=Object.assign(Object.create(null),e.instance.$.appContext,{provides:v}),y(l,a)}}function H(t,n){const a=new Set,e=i=>{for(const o of i){if(!o)continue;if(o===t||o.el&&t.el&&o.el===t.el)return!0;a.add(o);let r;if(o.suspense?r=e([o.ssContent]):Array.isArray(o.children)?r=e(o.children):o.component?.vnode&&(r=e([o.component?.subTree])),r)return r;a.delete(o)}return!1};if(!e([n.subTree]))return n;const s=Array.from(a).reverse();for(const i of s)if(i.component)return i.component;return n}const W=F(D,t=>({activator:"parent",location:t.arg?.replace("-"," "),text:typeof t.value=="boolean"?void 0:t.value}));export{W as T};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as F,D as k,G as y,E as T,v as C,w as p,a as r,y as s,m as D,Z as q,z as w,I as _,x as u,C as v,N as E,af as X,O as Z,ap as H,a1 as B,bC as J,bD as Q,bE as ee,X as te,b as o,d as oe,A as a,l as re,bF as le,F as se,B as ie}from"./main-d46UvpG6.js";import{A as ne,R as ae,a as $,b as de,c as me}from"./relation-chips-D2XLYFHm.js";import{useAdminStore as h}from"./admin-C6VbbEgi.js";import{a as ue}from"./VDialog-BFf48e97.js";import{V as pe}from"./VCombobox-BPA3Li01.js";import{V as L}from"./VCheckbox-DSiToISz.js";import{c as ce,d as U}from"./VSelectionControl-xYnmeS9J.js";import{D as N}from"./datetime-column-cHNNkd7r.js";import{C as he}from"./confirm-dialog-WKjj039l.js";import{V as O}from"./VCheckboxBtn-CYmOhPsT.js";import{V as A,a as x,b as I,c as P}from"./VExpansionPanels-DFJglYob.js";import{k as R}from"./forwardRefs-BXEe8ItZ.js";import{V as fe}from"./VTable-BK7gXlps.js";import"./VForm-BNXhV_uk.js";import"./VSelect-DIXHkKJm.js";import"./ssrBoot-Bn2PfqMS.js";import"./VDivider-Dtis_q2S.js";import"./filter-Bu2xCEP4.js";const be={name:"AdminServerFolderPicker",emits:["change","menu"],data(){return{path:"",originalPath:"",showHidden:!1,menuOpen:!1}},computed:{...y(h,{folders:e=>e.folderPicker.folders,rootFolder:e=>e.folderPicker.rootFolder}),...y(T,{formErrors:e=>e.form.errors}),appendOuterIcon(){return this.showHidden?this.mdiFolderHidden:this.mdiFolderOutline},showHiddenTooltipPrefix(){return this.showHidden?"Hide":"Show"}},watch:{menuOpen(e){e&&this.$emit("menu",e)}},created(){this.loadFolders().then(()=>(this.path=this.rootFolder,this.originalPath=this.rootFolder,!0)).catch(console.warn)},methods:{...k(h,["clearFolders","loadFolders"]),...k(T,["clearErrors"]),change(e){let t;e?t=e.startsWith("/")||e.startsWith("\\")?e:[this.rootFolder,e].join("/"):t=this.rootFolder;const m=this.menuOpen;this.clearErrors(),this.loadFolders(t,this.showHidden).then(()=>{this.menuOpen=m;let b="";return this.formErrors.length===0&&(this.path=b=this.rootFolder),this.$emit("change",b)}).catch(console.warn)},onBlur(){this.menuOpen=!1,this.change(this.path)},onClear(){this.clearFolders(this.orignalPath).then(()=>this.change(this.orginalPath)).catch(console.error)},onKeyDownEnter(){this.change(this.path)},onItemClick(e){this.change(e)}}},ye={id:"folderPicker"};function ve(e,t,m,b,l,i){return p(),C("div",ye,[r(pe,D({modelValue:l.path,"onUpdate:modelValue":t[0]||(t[0]=d=>l.path=d),menu:l.menuOpen,"onUpdate:menu":t[1]||(t[1]=d=>l.menuOpen=d)},e.$attrs,{"aria-label":"Library folder",clearable:"","error-messages":e.formErrors,"full-width":"","hide-details":"auto",items:e.folders,"menu-props":{maxHeight:"370px"},"validate-on":"blur",variant:"filled",onBlur:i.onBlur,"onClick:clear":i.onClear,onKeydown:q(i.onKeyDownEnter,["enter"])}),{item:s(({item:d,props:f})=>[r(ue,D(f,{title:d.title,value:d.value,onClick:g=>i.onItemClick(d.value)}),null,16,["title","value","onClick"])]),_:1},16,["modelValue","menu","error-messages","items","onBlur","onClick:clear","onKeydown"]),r(L,{modelValue:l.showHidden,"onUpdate:modelValue":t[2]||(t[2]=d=>l.showHidden=d),density:"compact",class:"showHidden","hide-details":"auto",label:"Show Hidden Folders"},null,8,["modelValue"])])}const ge=F(be,[["render",ve],["__scopeId","data-v-61ca3769"]]),z="DDD HH:mm:SS",Ce=/^(?:[0-3]?\d?\d\s)?(?:[01]?\d|2[0-3])(?::[0-5]\d){2}$/,we={name:"TimeTextField",data(){return{FORMAT:z,timeRules:[e=>Ce.test(e)||`Invalid time format ${z}`]}}};function Fe(e,t,m,b,l,i){return p(),w(ce,D({ref:"timeField",density:"compact",filled:"",hint:l.FORMAT,round:"",rules:l.timeRules},e.$attrs),null,16,["hint","rules"])}const ke=F(we,[["render",Fe]]),j=["events","poll","pollEvery","groups"];Object.freeze(j);const V={path:"",events:!0,poll:!0,pollEvery:"01:00:00",groups:[]};Object.freeze(V);const S=(e,t)=>(e=e.replaceAll("\\","/"),t=t.replaceAll("\\","/"),e.endsWith("/")||(e+="/"),t.endsWith("/")||(t+="/"),t.startsWith(e)),_e={name:"AdminLibraryCreateUpdateInputs",components:{AdminRelationPicker:ne,AdminServerFolderPicker:ge,TimeTextField:ke},props:{oldRow:{type:[Object,Boolean],default:!1}},emits:["change"],data(){return{rules:{path:[e=>!!e||"Path is required",e=>{if(!e)return!1;for(const t of this.paths){if(S(t,e))return"Path is a child of an existing library";if(S(e,t))return"Path is a parent of an existing library"}return!0}]},row:E(this.oldRow||V)}},computed:{...y(h,["normalLibraries"]),...y(h,{groups:e=>e.groups}),paths(){return this.nameSet(this.normalLibraries,"path",this.oldRow,!1)}},watch:{row:{handler(e){this.$emit("change",e)},deep:!0},oldRow:{handler(e){this.row=E(e)},deep:!0}},methods:{...k(h,["nameSet"])},UPDATE_KEYS:j,EMPTY_ROW:V},Ae={key:1};function xe(e,t,m,b,l,i){const d=u("AdminServerFolderPicker"),f=u("TimeTextField"),g=u("AdminRelationPicker");return p(),C("section",null,[m.oldRow?(p(),C("div",Ae,v(m.oldRow.path),1)):(p(),w(d,{key:0,rules:l.rules.path,autofocus:"",label:"Library Folder",onChange:t[0]||(t[0]=c=>l.row.path=c)},null,8,["rules"])),r(L,{modelValue:l.row.events,"onUpdate:modelValue":t[1]||(t[1]=c=>l.row.events=c),"hide-details":"auto",hint:"Update Codex instantly when the filesystem changes",label:"Watch Filesystem Events","persistent-hint":!0},null,8,["modelValue"]),r(L,{modelValue:l.row.poll,"onUpdate:modelValue":t[2]||(t[2]=c=>l.row.poll=c),label:"Poll Filesystem Periodically","hide-details":"auto",hint:"Periodically poll the library for changes","persistent-hint":!0},null,8,["modelValue"]),r(f,{modelValue:l.row.pollEvery,"onUpdate:modelValue":t[3]||(t[3]=c=>l.row.pollEvery=c),label:"Poll Every",disabled:!l.row.poll},null,8,["modelValue","disabled"]),l.row.coversOnly?_("",!0):(p(),w(g,{key:2,modelValue:l.row.groups,"onUpdate:modelValue":t[4]||(t[4]=c=>l.row.groups=c),label:"Groups",objs:e.groups,"group-type":"","title-key":"name"},null,8,["modelValue","objs"]))])}const G=F(_e,[["render",xe]]),Ie={name:"AdminLibrariesTab",components:{AdminTable:me,AdminDeleteRowDialog:de,AdminCreateUpdateDialog:$,RelationChips:ae,ConfirmDialog:he,DateTimeColumn:N},props:{coversDir:{type:Boolean,default:!1}},data(){return{lastUpdate:{pk:0,field:void 0},mdiCircleOffOutline:ee,mdiDatabaseClockOutline:Q,mdiDatabaseSyncOutline:J,mdiOpenInNew:B,AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries","customCoverLibraries"]),...y(h,{groups:e=>e.groups,isFailedImports:e=>!!e?.failedImports?.length}),...y(T,{formErrors:e=>e.form?.errors}),...y(Z,{twentyFourHourTime:e=>e.settings.twentyFourHourTime}),headers(){const e=this.coversDir?"Covers":"Comics",t=[{title:"Path",key:"path",align:"start"},{title:e,key:"comicCount"}];return this.isFailedImports&&t.push({title:"Failed",key:"failedCount"}),t.push({title:"Watch File Events",key:"events"},{title:"Poll Files Periodically",key:"poll"},{title:"Poll Every",key:"pollEvery"},{title:"Last Poll",key:"lastPoll"}),!this.coversDir&&this.isGroups&&t.push({title:"Groups",key:"groups"}),t.push({title:"Actions",key:"actions",sortable:!1}),t},items(){return globalThis.coversDir?this.customCoverLibraries:this.normalLibraries},updateLabel(){return this.coversDir?"Cover Dir":""},itemName(){return this.coversDir?"custom covers":"comics"},iconSize(){const e=this.$vuetify.display;return e.xlAndUp?"x-large":e.lgAndUp?"large":e.mdAndUp?"default":"small"},isGroups(){return!!this.groups?.length}},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["updateRow","clearErrors","librarianTask","loadTables"]),formatNumber(e){return X.format(e)},changeCol(e,t,m){this.lastUpdate.pk=e,this.lastUpdate.field=t;const b={[t]:m};this.updateRow("Library",e,b)},getFormErrors(e,t){if(e===this.lastUpdate.pk&&t===this.lastUpdate.field)return this.formErrors},libraryLabel(e,t=!0){let m="";return e.coversOnly?(t&&(m+="Custom Group "),m+="Cover Dir"):m+="Library",m},poll(e){const t=this.libraryLabel(e);this.librarianTask("poll",`Poll ${t} ${e.pk}`,e.pk)},forcePoll(e){const t=this.libraryLabel(e);this.librarianTask("poll_force",`Force Poll ${t} ${e.pk}`,e.pk)},pollConfirmText(e){return`Poll ${this.libraryLabel(e,!1)}`}}},Pe={class:"failedComics"},Te={class:"actionButtonCell"};function De(e,t,m,b,l,i){const d=u("DateTimeColumn"),f=u("RelationChips"),g=u("ConfirmDialog"),c=u("AdminCreateUpdateDialog"),M=u("AdminDeleteRowDialog"),K=u("AdminTable");return p(),w(K,{headers:i.headers},te({"no-data":s(()=>[t[0]||(t[0]=o("td",{class:"adminNoData",colspan:"100%"}," Add a Library to start using Codex ",-1))]),"item.comicCount":s(({item:n})=>[a(v(i.formatNumber(n.comicCount)),1)]),"item.events":s(({item:n})=>[r(O,{"model-value":n.events,disabled:""},null,8,["model-value"])]),"item.poll":s(({item:n})=>[r(O,{"model-value":n.poll,disabled:""},null,8,["model-value"])]),"item.pollEvery":s(({item:n})=>[o("span",{class:oe({disabled:!n.poll})},v(n.pollEvery),3)]),"item.lastPoll":s(({item:n})=>[r(d,{dttm:n.lastPoll},null,8,["dttm"])]),"item.actions":s(({item:n})=>[o("span",Te,[r(g,{icon:l.mdiDatabaseClockOutline,"title-text":`Poll for updated ${i.itemName}`,text:n.path,"confirm-text":i.pollConfirmText(n),size:i.iconSize,density:"compact",onConfirm:Y=>i.poll(n)},null,8,["icon","title-text","text","confirm-text","size","onConfirm"]),r(g,{icon:l.mdiDatabaseSyncOutline,"title-text":`Force update ${i.itemName}`,text:n.path,"confirm-text":"Force Update",size:i.iconSize,density:"compact",onConfirm:Y=>i.forcePoll(n)},null,8,["icon","title-text","text","size","onConfirm"]),r(c,{table:"Library","old-row":n,inputs:l.AdminLibraryCreateUpdateInputs,label:i.updateLabel,"max-width":"22em",size:i.iconSize,density:"compact"},null,8,["old-row","inputs","label","size"]),n.coversOnly?_("",!0):(p(),w(M,{key:0,table:"Library",pk:n.pk,name:n.path,size:i.iconSize,density:"compact"},null,8,["pk","name","size"]))])]),_:2},[e.isFailedImports?{name:"item.failedCount",fn:s(({item:n})=>[o("span",Pe,v(i.formatNumber(n.failedCount)),1)]),key:"0"}:void 0,i.isGroups?{name:"item.groups",fn:s(({item:n})=>[r(f,{pks:n.groups,objs:e.groups,"group-type":"","title-key":"name"},null,8,["pks","objs"])]),key:"1"}:void 0]),1032,["headers"])}const W=F(Ie,[["render",De],["__scopeId","data-v-2e8006a3"]]),Le={name:"AdminCustomCoversPanel",components:{AdminLibraryTable:W},computed:{...y(h,["customCoverLibraries"])}};function Ve(e,t,m,b,l,i){const d=u("AdminLibraryTable");return p(),w(A,null,{default:s(()=>[r(x,null,{default:s(()=>[r(I,null,{default:s(()=>[...t[0]||(t[0]=[o("h4",{id:"coverDirHeader"},"Custom Covers",-1)])]),_:1}),r(P,null,{default:s(()=>[r(d,{items:e.customCoverLibraries,"disable-sort":"","covers-dir":!0},null,8,["items"]),r(A,null,{default:s(()=>[r(x,{id:"customCoversHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[1]||(t[1]=[o("h4",null,"Custom Covers Help",-1)])]),_:1}),r(P,null,{default:s(()=>[...t[2]||(t[2]=[o("p",null,"Custom covers may be added to the browser in two locations:",-1),o("h4",null,"Folders",-1),o("p",null,[a(" A library folder with a file named "),o("code",null,".codex-cover.jpg"),a(" will show a custom cover for that folder in Folder view. The addition and removal of these covers by watching filesystem events and polling is handled by the library that folder belongs to. ")],-1),o("h4",null,"Custom Covers Dir",-1),o("p",null,[a(" The Codex config directory has a special folder named "),o("code",null,"custom-covers"),a(" under which are subdirectories for each of the browser groups that may adopt custom covers. Images in these subdirectories that match the name of the browser group will be used as custom covers. For instance: "),o("code",null,".../custom-covers/publishers/American Comics Group.webp"),a(' would be used as the cover for the publisher "American Comics Group". '),o("code",null,".../custom-covers/series/arrow.png"),a(' would be used as the cover for every series named "Arrow", for '),o("em",null,"every"),a(" publisher. Similar to a comic library, the "),o("code",null,"custom-covers"),a(" directory may be watched and polled for changes. By default it is neither watched nor polled and must be enabled by the admin. ")],-1),o("h4",null,"Image Formats & Size",-1),o("p",null,[a(" Custom covers are detected only for files with the extensions: "),o("code",null,".bmp, .gif, .jpeg, .jpg, .png, .webp"),a(". ")],-1),o("p",null," Browser covers are transformed from their sources to 165px x 254px thumbnails. Custom covers will transform most aesthetically the closer to that ratio they are. ",-1),o("h4",null,"Priority",-1),o("p",null," Custom covers supersede covers set by the user's individual browser settings. ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})}const Ee=F(Le,[["render",Ve],["__scopeId","data-v-268927b7"]]),Ue={name:"AdminFailedImportsPanel",components:{DateTimeColumn:N},data(){return{mdiBookAlert:le,mdiOpenInNew:B}},computed:{...y(h,{failedImports:e=>e.failedImports,showFailedImports:e=>e.failedImports&&e.failedImports.length>0}),...re(h,["unseenFailedImports"])}},Oe={key:0},Re={class:"dateCol"},ze={href:"https://github.com/ajslater/codex/issues/",target:"_blank"};function Se(e,t,m,b,l,i){const d=u("DateTimeColumn");return e.showFailedImports?(p(),C("div",Oe,[r(A,null,{default:s(()=>[r(x,{id:"failedImportsPanel",onClick:t[0]||(t[0]=f=>e.unseenFailedImports=!1)},{default:s(()=>[r(I,null,{default:s(()=>[o("h4",null,"Failed Imports: "+v(e.failedImports.length),1),e.unseenFailedImports?(p(),w(R,{key:0,id:"failedImportsIcon",title:"New Failed Imports"},{default:s(()=>[a(v(l.mdiBookAlert),1)]),_:1})):_("",!0)]),_:1}),r(P,null,{default:s(()=>[r(fe,{class:"highlight-table"},{default:s(()=>[t[1]||(t[1]=o("thead",null,[o("tr",null,[o("th",null,"Path"),o("th",null,"Created")])],-1)),o("tbody",null,[(p(!0),C(se,null,ie(e.failedImports,f=>(p(),C("tr",{key:`fi:${f.path}`},[o("td",null,v(f.path),1),o("td",Re,[r(d,{dttm:f.createdAt},null,8,["dttm"])])]))),128))])]),_:1}),r(A,null,{default:s(()=>[r(x,{id:"failedImportsHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[2]||(t[2]=[o("h4",null,"Failed Imports Help",-1)])]),_:1}),r(P,null,{default:s(()=>[t[8]||(t[8]=o("p",null," These are Comic archives that have failed to import. This list is updated every time the library updates. You should probably review these files and fix or remove them. ",-1)),t[9]||(t[9]=o("h4",null,"Fixing comics",-1)),t[10]||(t[10]=o("p",null,[a(" Try using the zip fixer to fix comics: "),o("code",{class:"cli"},[a(" cp problem-comic.cbz /somewhere/safe/problem-comic.cbz.backup"),o("br"),a(" zip -F problem-comic.cbz --out fixed.zip"),o("br"),a(" mv fixed.zip problem-comic.cbz ")]),a(" You may also try "),o("code",null,"zip -FF"),a(" to fix comics which uses a different (not necissarily better) algorithm. If you fix some imports, and Codex does not immediately detect the change, poll the library which contains the fixed comics. ")],-1)),t[11]||(t[11]=o("h4",null,"Reporting Issues",-1)),o("p",null,[t[4]||(t[4]=a(" If the comic looks good to you, but still shows up as a failed import, it might be Codex's fault for not importing it correctly. Please file an ",-1)),o("a",ze,[t[3]||(t[3]=a("Issue Report",-1)),r(R,{size:"small"},{default:s(()=>[a(v(l.mdiOpenInNew),1)]),_:1})]),t[5]||(t[5]=a(" and include the stack trace from the logs at ",-1)),t[6]||(t[6]=o("code",null,"config/logs/codex.log",-1)),t[7]||(t[7]=a(" if you can. ",-1))])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})])):_("",!0)}const He=F(Ue,[["render",Se],["__scopeId","data-v-827c9a0b"]]),Be={name:"AdminLibrariesTab",components:{AdminFailedImportsPanel:He,AdminLibraryTable:W,AdminCreateUpdateDialog:$,AdminCustomCoversPanel:Ee},data(){return{AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries"])},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["loadTables"])}},$e={class:"tabHeader"};function Ne(e,t,m,b,l,i){const d=u("AdminCreateUpdateDialog"),f=u("AdminLibraryTable"),g=u("AdminFailedImportsPanel"),c=u("AdminCustomCoversPanel");return p(),C("div",null,[o("header",$e,[r(d,{table:"Library",inputs:l.AdminLibraryCreateUpdateInputs},null,8,["inputs"])]),r(f,{items:e.normalLibraries,"sort-by":[{key:"path",order:"asc"}]},null,8,["items"]),r(U,null,{default:s(()=>[r(g,{id:"failedImports"})]),_:1}),r(U,null,{default:s(()=>[r(c,{id:"customCovers"})]),_:1}),t[0]||(t[0]=o("p",{id:"libraryHelp"}," Each Watched File Events box checked creates a thread to monitor the Library. An large number of watching threads may exceed the limits of your operating system or container. ",-1))])}const nt=F(Be,[["render",Ne],["__scopeId","data-v-66bb908f"]]);export{nt as default};
|
|
1
|
+
import{_ as F,D as k,G as y,E as T,v as C,y as p,a as r,x as s,m as D,Z as q,z as w,I as _,w as u,C as v,N as E,af as X,O as Z,ap as H,a1 as B,bD as J,bE as Q,bF as ee,X as te,b as o,d as oe,A as a,l as re,bG as le,F as se,B as ie}from"./main-Df6H3rcv.js";import{A as ne,R as ae,a as $,b as de,c as me}from"./relation-chips-CaoqjI00.js";import{useAdminStore as h}from"./admin-0MogMIWh.js";import{a as ue}from"./VDialog-CZkKUrky.js";import{V as pe}from"./VCombobox-D4B1V7pC.js";import{V as L}from"./VCheckbox-C85C3qG-.js";import{c as ce,d as U}from"./VSelectionControl-BOfjazsp.js";import{D as N}from"./datetime-column-BbSapWKr.js";import{C as he}from"./confirm-dialog-DOcInEYk.js";import{V as O}from"./VCheckboxBtn-BL2_20_y.js";import{V as A,a as x,b as I,c as P}from"./VExpansionPanels-Et85Xw04.js";import{k as R}from"./forwardRefs-8AR4cmsy.js";import{V as fe}from"./VTable-DwP4GgFJ.js";import"./VForm-Bz_gI_Wh.js";import"./VSelect-DcgePQge.js";import"./ssrBoot-BDUblGRH.js";import"./VDivider-BXArtxT-.js";import"./filter-BtcXW5zO.js";const be={name:"AdminServerFolderPicker",emits:["change","menu"],data(){return{path:"",originalPath:"",showHidden:!1,menuOpen:!1}},computed:{...y(h,{folders:e=>e.folderPicker.folders,rootFolder:e=>e.folderPicker.rootFolder}),...y(T,{formErrors:e=>e.form.errors}),appendOuterIcon(){return this.showHidden?this.mdiFolderHidden:this.mdiFolderOutline},showHiddenTooltipPrefix(){return this.showHidden?"Hide":"Show"}},watch:{menuOpen(e){e&&this.$emit("menu",e)}},created(){this.loadFolders().then(()=>(this.path=this.rootFolder,this.originalPath=this.rootFolder,!0)).catch(console.warn)},methods:{...k(h,["clearFolders","loadFolders"]),...k(T,["clearErrors"]),change(e){let t;e?t=e.startsWith("/")||e.startsWith("\\")?e:[this.rootFolder,e].join("/"):t=this.rootFolder;const m=this.menuOpen;this.clearErrors(),this.loadFolders(t,this.showHidden).then(()=>{this.menuOpen=m;let b="";return this.formErrors.length===0&&(this.path=b=this.rootFolder),this.$emit("change",b)}).catch(console.warn)},onBlur(){this.menuOpen=!1,this.change(this.path)},onClear(){this.clearFolders(this.orignalPath).then(()=>this.change(this.orginalPath)).catch(console.error)},onKeyDownEnter(){this.change(this.path)},onItemClick(e){this.change(e)}}},ye={id:"folderPicker"};function ve(e,t,m,b,l,i){return p(),C("div",ye,[r(pe,D({modelValue:l.path,"onUpdate:modelValue":t[0]||(t[0]=d=>l.path=d),menu:l.menuOpen,"onUpdate:menu":t[1]||(t[1]=d=>l.menuOpen=d)},e.$attrs,{"aria-label":"Library folder",clearable:"","error-messages":e.formErrors,"full-width":"","hide-details":"auto",items:e.folders,"menu-props":{maxHeight:"370px"},"validate-on":"blur",variant:"filled",onBlur:i.onBlur,"onClick:clear":i.onClear,onKeydown:q(i.onKeyDownEnter,["enter"])}),{item:s(({item:d,props:f})=>[r(ue,D(f,{title:d.title,value:d.value,onClick:g=>i.onItemClick(d.value)}),null,16,["title","value","onClick"])]),_:1},16,["modelValue","menu","error-messages","items","onBlur","onClick:clear","onKeydown"]),r(L,{modelValue:l.showHidden,"onUpdate:modelValue":t[2]||(t[2]=d=>l.showHidden=d),density:"compact",class:"showHidden","hide-details":"auto",label:"Show Hidden Folders"},null,8,["modelValue"])])}const ge=F(be,[["render",ve],["__scopeId","data-v-61ca3769"]]),z="DDD HH:mm:SS",Ce=/^(?:[0-3]?\d?\d\s)?(?:[01]?\d|2[0-3])(?::[0-5]\d){2}$/,we={name:"TimeTextField",data(){return{FORMAT:z,timeRules:[e=>Ce.test(e)||`Invalid time format ${z}`]}}};function Fe(e,t,m,b,l,i){return p(),w(ce,D({ref:"timeField",density:"compact",filled:"",hint:l.FORMAT,round:"",rules:l.timeRules},e.$attrs),null,16,["hint","rules"])}const ke=F(we,[["render",Fe]]),j=["events","poll","pollEvery","groups"];Object.freeze(j);const V={path:"",events:!0,poll:!0,pollEvery:"01:00:00",groups:[]};Object.freeze(V);const S=(e,t)=>(e=e.replaceAll("\\","/"),t=t.replaceAll("\\","/"),e.endsWith("/")||(e+="/"),t.endsWith("/")||(t+="/"),t.startsWith(e)),_e={name:"AdminLibraryCreateUpdateInputs",components:{AdminRelationPicker:ne,AdminServerFolderPicker:ge,TimeTextField:ke},props:{oldRow:{type:[Object,Boolean],default:!1}},emits:["change"],data(){return{rules:{path:[e=>!!e||"Path is required",e=>{if(!e)return!1;for(const t of this.paths){if(S(t,e))return"Path is a child of an existing library";if(S(e,t))return"Path is a parent of an existing library"}return!0}]},row:E(this.oldRow||V)}},computed:{...y(h,["normalLibraries"]),...y(h,{groups:e=>e.groups}),paths(){return this.nameSet(this.normalLibraries,"path",this.oldRow,!1)}},watch:{row:{handler(e){this.$emit("change",e)},deep:!0},oldRow:{handler(e){this.row=E(e)},deep:!0}},methods:{...k(h,["nameSet"])},UPDATE_KEYS:j,EMPTY_ROW:V},Ae={key:1};function xe(e,t,m,b,l,i){const d=u("AdminServerFolderPicker"),f=u("TimeTextField"),g=u("AdminRelationPicker");return p(),C("section",null,[m.oldRow?(p(),C("div",Ae,v(m.oldRow.path),1)):(p(),w(d,{key:0,rules:l.rules.path,autofocus:"",label:"Library Folder",onChange:t[0]||(t[0]=c=>l.row.path=c)},null,8,["rules"])),r(L,{modelValue:l.row.events,"onUpdate:modelValue":t[1]||(t[1]=c=>l.row.events=c),"hide-details":"auto",hint:"Update Codex instantly when the filesystem changes",label:"Watch Filesystem Events","persistent-hint":!0},null,8,["modelValue"]),r(L,{modelValue:l.row.poll,"onUpdate:modelValue":t[2]||(t[2]=c=>l.row.poll=c),label:"Poll Filesystem Periodically","hide-details":"auto",hint:"Periodically poll the library for changes","persistent-hint":!0},null,8,["modelValue"]),r(f,{modelValue:l.row.pollEvery,"onUpdate:modelValue":t[3]||(t[3]=c=>l.row.pollEvery=c),label:"Poll Every",disabled:!l.row.poll},null,8,["modelValue","disabled"]),l.row.coversOnly?_("",!0):(p(),w(g,{key:2,modelValue:l.row.groups,"onUpdate:modelValue":t[4]||(t[4]=c=>l.row.groups=c),label:"Groups",objs:e.groups,"group-type":"","title-key":"name"},null,8,["modelValue","objs"]))])}const G=F(_e,[["render",xe]]),Ie={name:"AdminLibrariesTab",components:{AdminTable:me,AdminDeleteRowDialog:de,AdminCreateUpdateDialog:$,RelationChips:ae,ConfirmDialog:he,DateTimeColumn:N},props:{coversDir:{type:Boolean,default:!1}},data(){return{lastUpdate:{pk:0,field:void 0},mdiCircleOffOutline:ee,mdiDatabaseClockOutline:Q,mdiDatabaseSyncOutline:J,mdiOpenInNew:B,AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries","customCoverLibraries"]),...y(h,{groups:e=>e.groups,isFailedImports:e=>!!e?.failedImports?.length}),...y(T,{formErrors:e=>e.form?.errors}),...y(Z,{twentyFourHourTime:e=>e.settings.twentyFourHourTime}),headers(){const e=this.coversDir?"Covers":"Comics",t=[{title:"Path",key:"path",align:"start"},{title:e,key:"comicCount"}];return this.isFailedImports&&t.push({title:"Failed",key:"failedCount"}),t.push({title:"Watch File Events",key:"events"},{title:"Poll Files Periodically",key:"poll"},{title:"Poll Every",key:"pollEvery"},{title:"Last Poll",key:"lastPoll"}),!this.coversDir&&this.isGroups&&t.push({title:"Groups",key:"groups"}),t.push({title:"Actions",key:"actions",sortable:!1}),t},items(){return globalThis.coversDir?this.customCoverLibraries:this.normalLibraries},updateLabel(){return this.coversDir?"Cover Dir":""},itemName(){return this.coversDir?"custom covers":"comics"},iconSize(){const e=this.$vuetify.display;return e.xlAndUp?"x-large":e.lgAndUp?"large":e.mdAndUp?"default":"small"},isGroups(){return!!this.groups?.length}},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["updateRow","clearErrors","librarianTask","loadTables"]),formatNumber(e){return X.format(e)},changeCol(e,t,m){this.lastUpdate.pk=e,this.lastUpdate.field=t;const b={[t]:m};this.updateRow("Library",e,b)},getFormErrors(e,t){if(e===this.lastUpdate.pk&&t===this.lastUpdate.field)return this.formErrors},libraryLabel(e,t=!0){let m="";return e.coversOnly?(t&&(m+="Custom Group "),m+="Cover Dir"):m+="Library",m},poll(e){const t=this.libraryLabel(e);this.librarianTask("poll",`Poll ${t} ${e.pk}`,e.pk)},forcePoll(e){const t=this.libraryLabel(e);this.librarianTask("poll_force",`Force Poll ${t} ${e.pk}`,e.pk)},pollConfirmText(e){return`Poll ${this.libraryLabel(e,!1)}`}}},Pe={class:"failedComics"},Te={class:"actionButtonCell"};function De(e,t,m,b,l,i){const d=u("DateTimeColumn"),f=u("RelationChips"),g=u("ConfirmDialog"),c=u("AdminCreateUpdateDialog"),M=u("AdminDeleteRowDialog"),K=u("AdminTable");return p(),w(K,{headers:i.headers},te({"no-data":s(()=>[t[0]||(t[0]=o("td",{class:"adminNoData",colspan:"100%"}," Add a Library to start using Codex ",-1))]),"item.comicCount":s(({item:n})=>[a(v(i.formatNumber(n.comicCount)),1)]),"item.events":s(({item:n})=>[r(O,{"model-value":n.events,disabled:""},null,8,["model-value"])]),"item.poll":s(({item:n})=>[r(O,{"model-value":n.poll,disabled:""},null,8,["model-value"])]),"item.pollEvery":s(({item:n})=>[o("span",{class:oe({disabled:!n.poll})},v(n.pollEvery),3)]),"item.lastPoll":s(({item:n})=>[r(d,{dttm:n.lastPoll},null,8,["dttm"])]),"item.actions":s(({item:n})=>[o("span",Te,[r(g,{icon:l.mdiDatabaseClockOutline,"title-text":`Poll for updated ${i.itemName}`,text:n.path,"confirm-text":i.pollConfirmText(n),size:i.iconSize,density:"compact",onConfirm:Y=>i.poll(n)},null,8,["icon","title-text","text","confirm-text","size","onConfirm"]),r(g,{icon:l.mdiDatabaseSyncOutline,"title-text":`Force update ${i.itemName}`,text:n.path,"confirm-text":"Force Update",size:i.iconSize,density:"compact",onConfirm:Y=>i.forcePoll(n)},null,8,["icon","title-text","text","size","onConfirm"]),r(c,{table:"Library","old-row":n,inputs:l.AdminLibraryCreateUpdateInputs,label:i.updateLabel,"max-width":"22em",size:i.iconSize,density:"compact"},null,8,["old-row","inputs","label","size"]),n.coversOnly?_("",!0):(p(),w(M,{key:0,table:"Library",pk:n.pk,name:n.path,size:i.iconSize,density:"compact"},null,8,["pk","name","size"]))])]),_:2},[e.isFailedImports?{name:"item.failedCount",fn:s(({item:n})=>[o("span",Pe,v(i.formatNumber(n.failedCount)),1)]),key:"0"}:void 0,i.isGroups?{name:"item.groups",fn:s(({item:n})=>[r(f,{pks:n.groups,objs:e.groups,"group-type":"","title-key":"name"},null,8,["pks","objs"])]),key:"1"}:void 0]),1032,["headers"])}const W=F(Ie,[["render",De],["__scopeId","data-v-2e8006a3"]]),Le={name:"AdminCustomCoversPanel",components:{AdminLibraryTable:W},computed:{...y(h,["customCoverLibraries"])}};function Ve(e,t,m,b,l,i){const d=u("AdminLibraryTable");return p(),w(A,null,{default:s(()=>[r(x,null,{default:s(()=>[r(I,null,{default:s(()=>[...t[0]||(t[0]=[o("h4",{id:"coverDirHeader"},"Custom Covers",-1)])]),_:1}),r(P,null,{default:s(()=>[r(d,{items:e.customCoverLibraries,"disable-sort":"","covers-dir":!0},null,8,["items"]),r(A,null,{default:s(()=>[r(x,{id:"customCoversHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[1]||(t[1]=[o("h4",null,"Custom Covers Help",-1)])]),_:1}),r(P,null,{default:s(()=>[...t[2]||(t[2]=[o("p",null,"Custom covers may be added to the browser in two locations:",-1),o("h4",null,"Folders",-1),o("p",null,[a(" A library folder with a file named "),o("code",null,".codex-cover.jpg"),a(" will show a custom cover for that folder in Folder view. The addition and removal of these covers by watching filesystem events and polling is handled by the library that folder belongs to. ")],-1),o("h4",null,"Custom Covers Dir",-1),o("p",null,[a(" The Codex config directory has a special folder named "),o("code",null,"custom-covers"),a(" under which are subdirectories for each of the browser groups that may adopt custom covers. Images in these subdirectories that match the name of the browser group will be used as custom covers. For instance: "),o("code",null,".../custom-covers/publishers/American Comics Group.webp"),a(' would be used as the cover for the publisher "American Comics Group". '),o("code",null,".../custom-covers/series/arrow.png"),a(' would be used as the cover for every series named "Arrow", for '),o("em",null,"every"),a(" publisher. Similar to a comic library, the "),o("code",null,"custom-covers"),a(" directory may be watched and polled for changes. By default it is neither watched nor polled and must be enabled by the admin. ")],-1),o("h4",null,"Image Formats & Size",-1),o("p",null,[a(" Custom covers are detected only for files with the extensions: "),o("code",null,".bmp, .gif, .jpeg, .jpg, .png, .webp"),a(". ")],-1),o("p",null," Browser covers are transformed from their sources to 165px x 254px thumbnails. Custom covers will transform most aesthetically the closer to that ratio they are. ",-1),o("h4",null,"Priority",-1),o("p",null," Custom covers supersede covers set by the user's individual browser settings. ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})}const Ee=F(Le,[["render",Ve],["__scopeId","data-v-268927b7"]]),Ue={name:"AdminFailedImportsPanel",components:{DateTimeColumn:N},data(){return{mdiBookAlert:le,mdiOpenInNew:B}},computed:{...y(h,{failedImports:e=>e.failedImports,showFailedImports:e=>e.failedImports&&e.failedImports.length>0}),...re(h,["unseenFailedImports"])}},Oe={key:0},Re={class:"dateCol"},ze={href:"https://github.com/ajslater/codex/issues/",target:"_blank"};function Se(e,t,m,b,l,i){const d=u("DateTimeColumn");return e.showFailedImports?(p(),C("div",Oe,[r(A,null,{default:s(()=>[r(x,{id:"failedImportsPanel",onClick:t[0]||(t[0]=f=>e.unseenFailedImports=!1)},{default:s(()=>[r(I,null,{default:s(()=>[o("h4",null,"Failed Imports: "+v(e.failedImports.length),1),e.unseenFailedImports?(p(),w(R,{key:0,id:"failedImportsIcon",title:"New Failed Imports"},{default:s(()=>[a(v(l.mdiBookAlert),1)]),_:1})):_("",!0)]),_:1}),r(P,null,{default:s(()=>[r(fe,{class:"highlight-table"},{default:s(()=>[t[1]||(t[1]=o("thead",null,[o("tr",null,[o("th",null,"Path"),o("th",null,"Created")])],-1)),o("tbody",null,[(p(!0),C(se,null,ie(e.failedImports,f=>(p(),C("tr",{key:`fi:${f.path}`},[o("td",null,v(f.path),1),o("td",Re,[r(d,{dttm:f.createdAt},null,8,["dttm"])])]))),128))])]),_:1}),r(A,null,{default:s(()=>[r(x,{id:"failedImportsHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[2]||(t[2]=[o("h4",null,"Failed Imports Help",-1)])]),_:1}),r(P,null,{default:s(()=>[t[8]||(t[8]=o("p",null," These are Comic archives that have failed to import. This list is updated every time the library updates. You should probably review these files and fix or remove them. ",-1)),t[9]||(t[9]=o("h4",null,"Fixing comics",-1)),t[10]||(t[10]=o("p",null,[a(" Try using the zip fixer to fix comics: "),o("code",{class:"cli"},[a(" cp problem-comic.cbz /somewhere/safe/problem-comic.cbz.backup"),o("br"),a(" zip -F problem-comic.cbz --out fixed.zip"),o("br"),a(" mv fixed.zip problem-comic.cbz ")]),a(" You may also try "),o("code",null,"zip -FF"),a(" to fix comics which uses a different (not necissarily better) algorithm. If you fix some imports, and Codex does not immediately detect the change, poll the library which contains the fixed comics. ")],-1)),t[11]||(t[11]=o("h4",null,"Reporting Issues",-1)),o("p",null,[t[4]||(t[4]=a(" If the comic looks good to you, but still shows up as a failed import, it might be Codex's fault for not importing it correctly. Please file an ",-1)),o("a",ze,[t[3]||(t[3]=a("Issue Report",-1)),r(R,{size:"small"},{default:s(()=>[a(v(l.mdiOpenInNew),1)]),_:1})]),t[5]||(t[5]=a(" and include the stack trace from the logs at ",-1)),t[6]||(t[6]=o("code",null,"config/logs/codex.log",-1)),t[7]||(t[7]=a(" if you can. ",-1))])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})])):_("",!0)}const He=F(Ue,[["render",Se],["__scopeId","data-v-827c9a0b"]]),Be={name:"AdminLibrariesTab",components:{AdminFailedImportsPanel:He,AdminLibraryTable:W,AdminCreateUpdateDialog:$,AdminCustomCoversPanel:Ee},data(){return{AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries"])},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["loadTables"])}},$e={class:"tabHeader"};function Ne(e,t,m,b,l,i){const d=u("AdminCreateUpdateDialog"),f=u("AdminLibraryTable"),g=u("AdminFailedImportsPanel"),c=u("AdminCustomCoversPanel");return p(),C("div",null,[o("header",$e,[r(d,{table:"Library",inputs:l.AdminLibraryCreateUpdateInputs},null,8,["inputs"])]),r(f,{items:e.normalLibraries,"sort-by":[{key:"path",order:"asc"}]},null,8,["items"]),r(U,null,{default:s(()=>[r(g,{id:"failedImports"})]),_:1}),r(U,null,{default:s(()=>[r(c,{id:"customCovers"})]),_:1}),t[0]||(t[0]=o("p",{id:"libraryHelp"}," Each Watched File Events box checked creates a thread to monitor the Library. An large number of watching threads may exceed the limits of your operating system or container. ",-1))])}const nt=F(Be,[["render",Ne],["__scopeId","data-v-66bb908f"]]);export{nt as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as F,D as k,G as y,E as T,v as C,w as p,a as r,y as s,m as D,Z as q,z as w,I as _,x as u,C as v,N as E,af as X,O as Z,ap as H,a1 as B,bC as J,bD as Q,bE as ee,X as te,b as o,d as oe,A as a,l as re,bF as le,F as se,B as ie}from"./main-d46UvpG6.js";import{A as ne,R as ae,a as $,b as de,c as me}from"./relation-chips-D2XLYFHm.js";import{useAdminStore as h}from"./admin-C6VbbEgi.js";import{a as ue}from"./VDialog-BFf48e97.js";import{V as pe}from"./VCombobox-BPA3Li01.js";import{V as L}from"./VCheckbox-DSiToISz.js";import{c as ce,d as U}from"./VSelectionControl-xYnmeS9J.js";import{D as N}from"./datetime-column-cHNNkd7r.js";import{C as he}from"./confirm-dialog-WKjj039l.js";import{V as O}from"./VCheckboxBtn-CYmOhPsT.js";import{V as A,a as x,b as I,c as P}from"./VExpansionPanels-DFJglYob.js";import{k as R}from"./forwardRefs-BXEe8ItZ.js";import{V as fe}from"./VTable-BK7gXlps.js";import"./VForm-BNXhV_uk.js";import"./VSelect-DIXHkKJm.js";import"./ssrBoot-Bn2PfqMS.js";import"./VDivider-Dtis_q2S.js";import"./filter-Bu2xCEP4.js";const be={name:"AdminServerFolderPicker",emits:["change","menu"],data(){return{path:"",originalPath:"",showHidden:!1,menuOpen:!1}},computed:{...y(h,{folders:e=>e.folderPicker.folders,rootFolder:e=>e.folderPicker.rootFolder}),...y(T,{formErrors:e=>e.form.errors}),appendOuterIcon(){return this.showHidden?this.mdiFolderHidden:this.mdiFolderOutline},showHiddenTooltipPrefix(){return this.showHidden?"Hide":"Show"}},watch:{menuOpen(e){e&&this.$emit("menu",e)}},created(){this.loadFolders().then(()=>(this.path=this.rootFolder,this.originalPath=this.rootFolder,!0)).catch(console.warn)},methods:{...k(h,["clearFolders","loadFolders"]),...k(T,["clearErrors"]),change(e){let t;e?t=e.startsWith("/")||e.startsWith("\\")?e:[this.rootFolder,e].join("/"):t=this.rootFolder;const m=this.menuOpen;this.clearErrors(),this.loadFolders(t,this.showHidden).then(()=>{this.menuOpen=m;let b="";return this.formErrors.length===0&&(this.path=b=this.rootFolder),this.$emit("change",b)}).catch(console.warn)},onBlur(){this.menuOpen=!1,this.change(this.path)},onClear(){this.clearFolders(this.orignalPath).then(()=>this.change(this.orginalPath)).catch(console.error)},onKeyDownEnter(){this.change(this.path)},onItemClick(e){this.change(e)}}},ye={id:"folderPicker"};function ve(e,t,m,b,l,i){return p(),C("div",ye,[r(pe,D({modelValue:l.path,"onUpdate:modelValue":t[0]||(t[0]=d=>l.path=d),menu:l.menuOpen,"onUpdate:menu":t[1]||(t[1]=d=>l.menuOpen=d)},e.$attrs,{"aria-label":"Library folder",clearable:"","error-messages":e.formErrors,"full-width":"","hide-details":"auto",items:e.folders,"menu-props":{maxHeight:"370px"},"validate-on":"blur",variant:"filled",onBlur:i.onBlur,"onClick:clear":i.onClear,onKeydown:q(i.onKeyDownEnter,["enter"])}),{item:s(({item:d,props:f})=>[r(ue,D(f,{title:d.title,value:d.value,onClick:g=>i.onItemClick(d.value)}),null,16,["title","value","onClick"])]),_:1},16,["modelValue","menu","error-messages","items","onBlur","onClick:clear","onKeydown"]),r(L,{modelValue:l.showHidden,"onUpdate:modelValue":t[2]||(t[2]=d=>l.showHidden=d),density:"compact",class:"showHidden","hide-details":"auto",label:"Show Hidden Folders"},null,8,["modelValue"])])}const ge=F(be,[["render",ve],["__scopeId","data-v-61ca3769"]]),z="DDD HH:mm:SS",Ce=/^(?:[0-3]?\d?\d\s)?(?:[01]?\d|2[0-3])(?::[0-5]\d){2}$/,we={name:"TimeTextField",data(){return{FORMAT:z,timeRules:[e=>Ce.test(e)||`Invalid time format ${z}`]}}};function Fe(e,t,m,b,l,i){return p(),w(ce,D({ref:"timeField",density:"compact",filled:"",hint:l.FORMAT,round:"",rules:l.timeRules},e.$attrs),null,16,["hint","rules"])}const ke=F(we,[["render",Fe]]),j=["events","poll","pollEvery","groups"];Object.freeze(j);const V={path:"",events:!0,poll:!0,pollEvery:"01:00:00",groups:[]};Object.freeze(V);const S=(e,t)=>(e=e.replaceAll("\\","/"),t=t.replaceAll("\\","/"),e.endsWith("/")||(e+="/"),t.endsWith("/")||(t+="/"),t.startsWith(e)),_e={name:"AdminLibraryCreateUpdateInputs",components:{AdminRelationPicker:ne,AdminServerFolderPicker:ge,TimeTextField:ke},props:{oldRow:{type:[Object,Boolean],default:!1}},emits:["change"],data(){return{rules:{path:[e=>!!e||"Path is required",e=>{if(!e)return!1;for(const t of this.paths){if(S(t,e))return"Path is a child of an existing library";if(S(e,t))return"Path is a parent of an existing library"}return!0}]},row:E(this.oldRow||V)}},computed:{...y(h,["normalLibraries"]),...y(h,{groups:e=>e.groups}),paths(){return this.nameSet(this.normalLibraries,"path",this.oldRow,!1)}},watch:{row:{handler(e){this.$emit("change",e)},deep:!0},oldRow:{handler(e){this.row=E(e)},deep:!0}},methods:{...k(h,["nameSet"])},UPDATE_KEYS:j,EMPTY_ROW:V},Ae={key:1};function xe(e,t,m,b,l,i){const d=u("AdminServerFolderPicker"),f=u("TimeTextField"),g=u("AdminRelationPicker");return p(),C("section",null,[m.oldRow?(p(),C("div",Ae,v(m.oldRow.path),1)):(p(),w(d,{key:0,rules:l.rules.path,autofocus:"",label:"Library Folder",onChange:t[0]||(t[0]=c=>l.row.path=c)},null,8,["rules"])),r(L,{modelValue:l.row.events,"onUpdate:modelValue":t[1]||(t[1]=c=>l.row.events=c),"hide-details":"auto",hint:"Update Codex instantly when the filesystem changes",label:"Watch Filesystem Events","persistent-hint":!0},null,8,["modelValue"]),r(L,{modelValue:l.row.poll,"onUpdate:modelValue":t[2]||(t[2]=c=>l.row.poll=c),label:"Poll Filesystem Periodically","hide-details":"auto",hint:"Periodically poll the library for changes","persistent-hint":!0},null,8,["modelValue"]),r(f,{modelValue:l.row.pollEvery,"onUpdate:modelValue":t[3]||(t[3]=c=>l.row.pollEvery=c),label:"Poll Every",disabled:!l.row.poll},null,8,["modelValue","disabled"]),l.row.coversOnly?_("",!0):(p(),w(g,{key:2,modelValue:l.row.groups,"onUpdate:modelValue":t[4]||(t[4]=c=>l.row.groups=c),label:"Groups",objs:e.groups,"group-type":"","title-key":"name"},null,8,["modelValue","objs"]))])}const G=F(_e,[["render",xe]]),Ie={name:"AdminLibrariesTab",components:{AdminTable:me,AdminDeleteRowDialog:de,AdminCreateUpdateDialog:$,RelationChips:ae,ConfirmDialog:he,DateTimeColumn:N},props:{coversDir:{type:Boolean,default:!1}},data(){return{lastUpdate:{pk:0,field:void 0},mdiCircleOffOutline:ee,mdiDatabaseClockOutline:Q,mdiDatabaseSyncOutline:J,mdiOpenInNew:B,AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries","customCoverLibraries"]),...y(h,{groups:e=>e.groups,isFailedImports:e=>!!e?.failedImports?.length}),...y(T,{formErrors:e=>e.form?.errors}),...y(Z,{twentyFourHourTime:e=>e.settings.twentyFourHourTime}),headers(){const e=this.coversDir?"Covers":"Comics",t=[{title:"Path",key:"path",align:"start"},{title:e,key:"comicCount"}];return this.isFailedImports&&t.push({title:"Failed",key:"failedCount"}),t.push({title:"Watch File Events",key:"events"},{title:"Poll Files Periodically",key:"poll"},{title:"Poll Every",key:"pollEvery"},{title:"Last Poll",key:"lastPoll"}),!this.coversDir&&this.isGroups&&t.push({title:"Groups",key:"groups"}),t.push({title:"Actions",key:"actions",sortable:!1}),t},items(){return globalThis.coversDir?this.customCoverLibraries:this.normalLibraries},updateLabel(){return this.coversDir?"Cover Dir":""},itemName(){return this.coversDir?"custom covers":"comics"},iconSize(){const e=this.$vuetify.display;return e.xlAndUp?"x-large":e.lgAndUp?"large":e.mdAndUp?"default":"small"},isGroups(){return!!this.groups?.length}},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["updateRow","clearErrors","librarianTask","loadTables"]),formatNumber(e){return X.format(e)},changeCol(e,t,m){this.lastUpdate.pk=e,this.lastUpdate.field=t;const b={[t]:m};this.updateRow("Library",e,b)},getFormErrors(e,t){if(e===this.lastUpdate.pk&&t===this.lastUpdate.field)return this.formErrors},libraryLabel(e,t=!0){let m="";return e.coversOnly?(t&&(m+="Custom Group "),m+="Cover Dir"):m+="Library",m},poll(e){const t=this.libraryLabel(e);this.librarianTask("poll",`Poll ${t} ${e.pk}`,e.pk)},forcePoll(e){const t=this.libraryLabel(e);this.librarianTask("poll_force",`Force Poll ${t} ${e.pk}`,e.pk)},pollConfirmText(e){return`Poll ${this.libraryLabel(e,!1)}`}}},Pe={class:"failedComics"},Te={class:"actionButtonCell"};function De(e,t,m,b,l,i){const d=u("DateTimeColumn"),f=u("RelationChips"),g=u("ConfirmDialog"),c=u("AdminCreateUpdateDialog"),M=u("AdminDeleteRowDialog"),K=u("AdminTable");return p(),w(K,{headers:i.headers},te({"no-data":s(()=>[t[0]||(t[0]=o("td",{class:"adminNoData",colspan:"100%"}," Add a Library to start using Codex ",-1))]),"item.comicCount":s(({item:n})=>[a(v(i.formatNumber(n.comicCount)),1)]),"item.events":s(({item:n})=>[r(O,{"model-value":n.events,disabled:""},null,8,["model-value"])]),"item.poll":s(({item:n})=>[r(O,{"model-value":n.poll,disabled:""},null,8,["model-value"])]),"item.pollEvery":s(({item:n})=>[o("span",{class:oe({disabled:!n.poll})},v(n.pollEvery),3)]),"item.lastPoll":s(({item:n})=>[r(d,{dttm:n.lastPoll},null,8,["dttm"])]),"item.actions":s(({item:n})=>[o("span",Te,[r(g,{icon:l.mdiDatabaseClockOutline,"title-text":`Poll for updated ${i.itemName}`,text:n.path,"confirm-text":i.pollConfirmText(n),size:i.iconSize,density:"compact",onConfirm:Y=>i.poll(n)},null,8,["icon","title-text","text","confirm-text","size","onConfirm"]),r(g,{icon:l.mdiDatabaseSyncOutline,"title-text":`Force update ${i.itemName}`,text:n.path,"confirm-text":"Force Update",size:i.iconSize,density:"compact",onConfirm:Y=>i.forcePoll(n)},null,8,["icon","title-text","text","size","onConfirm"]),r(c,{table:"Library","old-row":n,inputs:l.AdminLibraryCreateUpdateInputs,label:i.updateLabel,"max-width":"22em",size:i.iconSize,density:"compact"},null,8,["old-row","inputs","label","size"]),n.coversOnly?_("",!0):(p(),w(M,{key:0,table:"Library",pk:n.pk,name:n.path,size:i.iconSize,density:"compact"},null,8,["pk","name","size"]))])]),_:2},[e.isFailedImports?{name:"item.failedCount",fn:s(({item:n})=>[o("span",Pe,v(i.formatNumber(n.failedCount)),1)]),key:"0"}:void 0,i.isGroups?{name:"item.groups",fn:s(({item:n})=>[r(f,{pks:n.groups,objs:e.groups,"group-type":"","title-key":"name"},null,8,["pks","objs"])]),key:"1"}:void 0]),1032,["headers"])}const W=F(Ie,[["render",De],["__scopeId","data-v-2e8006a3"]]),Le={name:"AdminCustomCoversPanel",components:{AdminLibraryTable:W},computed:{...y(h,["customCoverLibraries"])}};function Ve(e,t,m,b,l,i){const d=u("AdminLibraryTable");return p(),w(A,null,{default:s(()=>[r(x,null,{default:s(()=>[r(I,null,{default:s(()=>[...t[0]||(t[0]=[o("h4",{id:"coverDirHeader"},"Custom Covers",-1)])]),_:1}),r(P,null,{default:s(()=>[r(d,{items:e.customCoverLibraries,"disable-sort":"","covers-dir":!0},null,8,["items"]),r(A,null,{default:s(()=>[r(x,{id:"customCoversHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[1]||(t[1]=[o("h4",null,"Custom Covers Help",-1)])]),_:1}),r(P,null,{default:s(()=>[...t[2]||(t[2]=[o("p",null,"Custom covers may be added to the browser in two locations:",-1),o("h4",null,"Folders",-1),o("p",null,[a(" A library folder with a file named "),o("code",null,".codex-cover.jpg"),a(" will show a custom cover for that folder in Folder view. The addition and removal of these covers by watching filesystem events and polling is handled by the library that folder belongs to. ")],-1),o("h4",null,"Custom Covers Dir",-1),o("p",null,[a(" The Codex config directory has a special folder named "),o("code",null,"custom-covers"),a(" under which are subdirectories for each of the browser groups that may adopt custom covers. Images in these subdirectories that match the name of the browser group will be used as custom covers. For instance: "),o("code",null,".../custom-covers/publishers/American Comics Group.webp"),a(' would be used as the cover for the publisher "American Comics Group". '),o("code",null,".../custom-covers/series/arrow.png"),a(' would be used as the cover for every series named "Arrow", for '),o("em",null,"every"),a(" publisher. Similar to a comic library, the "),o("code",null,"custom-covers"),a(" directory may be watched and polled for changes. By default it is neither watched nor polled and must be enabled by the admin. ")],-1),o("h4",null,"Image Formats & Size",-1),o("p",null,[a(" Custom covers are detected only for files with the extensions: "),o("code",null,".bmp, .gif, .jpeg, .jpg, .png, .webp"),a(". ")],-1),o("p",null," Browser covers are transformed from their sources to 165px x 254px thumbnails. Custom covers will transform most aesthetically the closer to that ratio they are. ",-1),o("h4",null,"Priority",-1),o("p",null," Custom covers supersede covers set by the user's individual browser settings. ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})}const Ee=F(Le,[["render",Ve],["__scopeId","data-v-268927b7"]]),Ue={name:"AdminFailedImportsPanel",components:{DateTimeColumn:N},data(){return{mdiBookAlert:le,mdiOpenInNew:B}},computed:{...y(h,{failedImports:e=>e.failedImports,showFailedImports:e=>e.failedImports&&e.failedImports.length>0}),...re(h,["unseenFailedImports"])}},Oe={key:0},Re={class:"dateCol"},ze={href:"https://github.com/ajslater/codex/issues/",target:"_blank"};function Se(e,t,m,b,l,i){const d=u("DateTimeColumn");return e.showFailedImports?(p(),C("div",Oe,[r(A,null,{default:s(()=>[r(x,{id:"failedImportsPanel",onClick:t[0]||(t[0]=f=>e.unseenFailedImports=!1)},{default:s(()=>[r(I,null,{default:s(()=>[o("h4",null,"Failed Imports: "+v(e.failedImports.length),1),e.unseenFailedImports?(p(),w(R,{key:0,id:"failedImportsIcon",title:"New Failed Imports"},{default:s(()=>[a(v(l.mdiBookAlert),1)]),_:1})):_("",!0)]),_:1}),r(P,null,{default:s(()=>[r(fe,{class:"highlight-table"},{default:s(()=>[t[1]||(t[1]=o("thead",null,[o("tr",null,[o("th",null,"Path"),o("th",null,"Created")])],-1)),o("tbody",null,[(p(!0),C(se,null,ie(e.failedImports,f=>(p(),C("tr",{key:`fi:${f.path}`},[o("td",null,v(f.path),1),o("td",Re,[r(d,{dttm:f.createdAt},null,8,["dttm"])])]))),128))])]),_:1}),r(A,null,{default:s(()=>[r(x,{id:"failedImportsHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[2]||(t[2]=[o("h4",null,"Failed Imports Help",-1)])]),_:1}),r(P,null,{default:s(()=>[t[8]||(t[8]=o("p",null," These are Comic archives that have failed to import. This list is updated every time the library updates. You should probably review these files and fix or remove them. ",-1)),t[9]||(t[9]=o("h4",null,"Fixing comics",-1)),t[10]||(t[10]=o("p",null,[a(" Try using the zip fixer to fix comics: "),o("code",{class:"cli"},[a(" cp problem-comic.cbz /somewhere/safe/problem-comic.cbz.backup"),o("br"),a(" zip -F problem-comic.cbz --out fixed.zip"),o("br"),a(" mv fixed.zip problem-comic.cbz ")]),a(" You may also try "),o("code",null,"zip -FF"),a(" to fix comics which uses a different (not necissarily better) algorithm. If you fix some imports, and Codex does not immediately detect the change, poll the library which contains the fixed comics. ")],-1)),t[11]||(t[11]=o("h4",null,"Reporting Issues",-1)),o("p",null,[t[4]||(t[4]=a(" If the comic looks good to you, but still shows up as a failed import, it might be Codex's fault for not importing it correctly. Please file an ",-1)),o("a",ze,[t[3]||(t[3]=a("Issue Report",-1)),r(R,{size:"small"},{default:s(()=>[a(v(l.mdiOpenInNew),1)]),_:1})]),t[5]||(t[5]=a(" and include the stack trace from the logs at ",-1)),t[6]||(t[6]=o("code",null,"config/logs/codex.log",-1)),t[7]||(t[7]=a(" if you can. ",-1))])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})])):_("",!0)}const He=F(Ue,[["render",Se],["__scopeId","data-v-827c9a0b"]]),Be={name:"AdminLibrariesTab",components:{AdminFailedImportsPanel:He,AdminLibraryTable:W,AdminCreateUpdateDialog:$,AdminCustomCoversPanel:Ee},data(){return{AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries"])},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["loadTables"])}},$e={class:"tabHeader"};function Ne(e,t,m,b,l,i){const d=u("AdminCreateUpdateDialog"),f=u("AdminLibraryTable"),g=u("AdminFailedImportsPanel"),c=u("AdminCustomCoversPanel");return p(),C("div",null,[o("header",$e,[r(d,{table:"Library",inputs:l.AdminLibraryCreateUpdateInputs},null,8,["inputs"])]),r(f,{items:e.normalLibraries,"sort-by":[{key:"path",order:"asc"}]},null,8,["items"]),r(U,null,{default:s(()=>[r(g,{id:"failedImports"})]),_:1}),r(U,null,{default:s(()=>[r(c,{id:"customCovers"})]),_:1}),t[0]||(t[0]=o("p",{id:"libraryHelp"}," Each Watched File Events box checked creates a thread to monitor the Library. An large number of watching threads may exceed the limits of your operating system or container. ",-1))])}const nt=F(Be,[["render",Ne],["__scopeId","data-v-66bb908f"]]);export{nt as default};
|
|
1
|
+
import{_ as F,D as k,G as y,E as T,v as C,y as p,a as r,x as s,m as D,Z as q,z as w,I as _,w as u,C as v,N as E,af as X,O as Z,ap as H,a1 as B,bD as J,bE as Q,bF as ee,X as te,b as o,d as oe,A as a,l as re,bG as le,F as se,B as ie}from"./main-Df6H3rcv.js";import{A as ne,R as ae,a as $,b as de,c as me}from"./relation-chips-CaoqjI00.js";import{useAdminStore as h}from"./admin-0MogMIWh.js";import{a as ue}from"./VDialog-CZkKUrky.js";import{V as pe}from"./VCombobox-D4B1V7pC.js";import{V as L}from"./VCheckbox-C85C3qG-.js";import{c as ce,d as U}from"./VSelectionControl-BOfjazsp.js";import{D as N}from"./datetime-column-BbSapWKr.js";import{C as he}from"./confirm-dialog-DOcInEYk.js";import{V as O}from"./VCheckboxBtn-BL2_20_y.js";import{V as A,a as x,b as I,c as P}from"./VExpansionPanels-Et85Xw04.js";import{k as R}from"./forwardRefs-8AR4cmsy.js";import{V as fe}from"./VTable-DwP4GgFJ.js";import"./VForm-Bz_gI_Wh.js";import"./VSelect-DcgePQge.js";import"./ssrBoot-BDUblGRH.js";import"./VDivider-BXArtxT-.js";import"./filter-BtcXW5zO.js";const be={name:"AdminServerFolderPicker",emits:["change","menu"],data(){return{path:"",originalPath:"",showHidden:!1,menuOpen:!1}},computed:{...y(h,{folders:e=>e.folderPicker.folders,rootFolder:e=>e.folderPicker.rootFolder}),...y(T,{formErrors:e=>e.form.errors}),appendOuterIcon(){return this.showHidden?this.mdiFolderHidden:this.mdiFolderOutline},showHiddenTooltipPrefix(){return this.showHidden?"Hide":"Show"}},watch:{menuOpen(e){e&&this.$emit("menu",e)}},created(){this.loadFolders().then(()=>(this.path=this.rootFolder,this.originalPath=this.rootFolder,!0)).catch(console.warn)},methods:{...k(h,["clearFolders","loadFolders"]),...k(T,["clearErrors"]),change(e){let t;e?t=e.startsWith("/")||e.startsWith("\\")?e:[this.rootFolder,e].join("/"):t=this.rootFolder;const m=this.menuOpen;this.clearErrors(),this.loadFolders(t,this.showHidden).then(()=>{this.menuOpen=m;let b="";return this.formErrors.length===0&&(this.path=b=this.rootFolder),this.$emit("change",b)}).catch(console.warn)},onBlur(){this.menuOpen=!1,this.change(this.path)},onClear(){this.clearFolders(this.orignalPath).then(()=>this.change(this.orginalPath)).catch(console.error)},onKeyDownEnter(){this.change(this.path)},onItemClick(e){this.change(e)}}},ye={id:"folderPicker"};function ve(e,t,m,b,l,i){return p(),C("div",ye,[r(pe,D({modelValue:l.path,"onUpdate:modelValue":t[0]||(t[0]=d=>l.path=d),menu:l.menuOpen,"onUpdate:menu":t[1]||(t[1]=d=>l.menuOpen=d)},e.$attrs,{"aria-label":"Library folder",clearable:"","error-messages":e.formErrors,"full-width":"","hide-details":"auto",items:e.folders,"menu-props":{maxHeight:"370px"},"validate-on":"blur",variant:"filled",onBlur:i.onBlur,"onClick:clear":i.onClear,onKeydown:q(i.onKeyDownEnter,["enter"])}),{item:s(({item:d,props:f})=>[r(ue,D(f,{title:d.title,value:d.value,onClick:g=>i.onItemClick(d.value)}),null,16,["title","value","onClick"])]),_:1},16,["modelValue","menu","error-messages","items","onBlur","onClick:clear","onKeydown"]),r(L,{modelValue:l.showHidden,"onUpdate:modelValue":t[2]||(t[2]=d=>l.showHidden=d),density:"compact",class:"showHidden","hide-details":"auto",label:"Show Hidden Folders"},null,8,["modelValue"])])}const ge=F(be,[["render",ve],["__scopeId","data-v-61ca3769"]]),z="DDD HH:mm:SS",Ce=/^(?:[0-3]?\d?\d\s)?(?:[01]?\d|2[0-3])(?::[0-5]\d){2}$/,we={name:"TimeTextField",data(){return{FORMAT:z,timeRules:[e=>Ce.test(e)||`Invalid time format ${z}`]}}};function Fe(e,t,m,b,l,i){return p(),w(ce,D({ref:"timeField",density:"compact",filled:"",hint:l.FORMAT,round:"",rules:l.timeRules},e.$attrs),null,16,["hint","rules"])}const ke=F(we,[["render",Fe]]),j=["events","poll","pollEvery","groups"];Object.freeze(j);const V={path:"",events:!0,poll:!0,pollEvery:"01:00:00",groups:[]};Object.freeze(V);const S=(e,t)=>(e=e.replaceAll("\\","/"),t=t.replaceAll("\\","/"),e.endsWith("/")||(e+="/"),t.endsWith("/")||(t+="/"),t.startsWith(e)),_e={name:"AdminLibraryCreateUpdateInputs",components:{AdminRelationPicker:ne,AdminServerFolderPicker:ge,TimeTextField:ke},props:{oldRow:{type:[Object,Boolean],default:!1}},emits:["change"],data(){return{rules:{path:[e=>!!e||"Path is required",e=>{if(!e)return!1;for(const t of this.paths){if(S(t,e))return"Path is a child of an existing library";if(S(e,t))return"Path is a parent of an existing library"}return!0}]},row:E(this.oldRow||V)}},computed:{...y(h,["normalLibraries"]),...y(h,{groups:e=>e.groups}),paths(){return this.nameSet(this.normalLibraries,"path",this.oldRow,!1)}},watch:{row:{handler(e){this.$emit("change",e)},deep:!0},oldRow:{handler(e){this.row=E(e)},deep:!0}},methods:{...k(h,["nameSet"])},UPDATE_KEYS:j,EMPTY_ROW:V},Ae={key:1};function xe(e,t,m,b,l,i){const d=u("AdminServerFolderPicker"),f=u("TimeTextField"),g=u("AdminRelationPicker");return p(),C("section",null,[m.oldRow?(p(),C("div",Ae,v(m.oldRow.path),1)):(p(),w(d,{key:0,rules:l.rules.path,autofocus:"",label:"Library Folder",onChange:t[0]||(t[0]=c=>l.row.path=c)},null,8,["rules"])),r(L,{modelValue:l.row.events,"onUpdate:modelValue":t[1]||(t[1]=c=>l.row.events=c),"hide-details":"auto",hint:"Update Codex instantly when the filesystem changes",label:"Watch Filesystem Events","persistent-hint":!0},null,8,["modelValue"]),r(L,{modelValue:l.row.poll,"onUpdate:modelValue":t[2]||(t[2]=c=>l.row.poll=c),label:"Poll Filesystem Periodically","hide-details":"auto",hint:"Periodically poll the library for changes","persistent-hint":!0},null,8,["modelValue"]),r(f,{modelValue:l.row.pollEvery,"onUpdate:modelValue":t[3]||(t[3]=c=>l.row.pollEvery=c),label:"Poll Every",disabled:!l.row.poll},null,8,["modelValue","disabled"]),l.row.coversOnly?_("",!0):(p(),w(g,{key:2,modelValue:l.row.groups,"onUpdate:modelValue":t[4]||(t[4]=c=>l.row.groups=c),label:"Groups",objs:e.groups,"group-type":"","title-key":"name"},null,8,["modelValue","objs"]))])}const G=F(_e,[["render",xe]]),Ie={name:"AdminLibrariesTab",components:{AdminTable:me,AdminDeleteRowDialog:de,AdminCreateUpdateDialog:$,RelationChips:ae,ConfirmDialog:he,DateTimeColumn:N},props:{coversDir:{type:Boolean,default:!1}},data(){return{lastUpdate:{pk:0,field:void 0},mdiCircleOffOutline:ee,mdiDatabaseClockOutline:Q,mdiDatabaseSyncOutline:J,mdiOpenInNew:B,AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries","customCoverLibraries"]),...y(h,{groups:e=>e.groups,isFailedImports:e=>!!e?.failedImports?.length}),...y(T,{formErrors:e=>e.form?.errors}),...y(Z,{twentyFourHourTime:e=>e.settings.twentyFourHourTime}),headers(){const e=this.coversDir?"Covers":"Comics",t=[{title:"Path",key:"path",align:"start"},{title:e,key:"comicCount"}];return this.isFailedImports&&t.push({title:"Failed",key:"failedCount"}),t.push({title:"Watch File Events",key:"events"},{title:"Poll Files Periodically",key:"poll"},{title:"Poll Every",key:"pollEvery"},{title:"Last Poll",key:"lastPoll"}),!this.coversDir&&this.isGroups&&t.push({title:"Groups",key:"groups"}),t.push({title:"Actions",key:"actions",sortable:!1}),t},items(){return globalThis.coversDir?this.customCoverLibraries:this.normalLibraries},updateLabel(){return this.coversDir?"Cover Dir":""},itemName(){return this.coversDir?"custom covers":"comics"},iconSize(){const e=this.$vuetify.display;return e.xlAndUp?"x-large":e.lgAndUp?"large":e.mdAndUp?"default":"small"},isGroups(){return!!this.groups?.length}},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["updateRow","clearErrors","librarianTask","loadTables"]),formatNumber(e){return X.format(e)},changeCol(e,t,m){this.lastUpdate.pk=e,this.lastUpdate.field=t;const b={[t]:m};this.updateRow("Library",e,b)},getFormErrors(e,t){if(e===this.lastUpdate.pk&&t===this.lastUpdate.field)return this.formErrors},libraryLabel(e,t=!0){let m="";return e.coversOnly?(t&&(m+="Custom Group "),m+="Cover Dir"):m+="Library",m},poll(e){const t=this.libraryLabel(e);this.librarianTask("poll",`Poll ${t} ${e.pk}`,e.pk)},forcePoll(e){const t=this.libraryLabel(e);this.librarianTask("poll_force",`Force Poll ${t} ${e.pk}`,e.pk)},pollConfirmText(e){return`Poll ${this.libraryLabel(e,!1)}`}}},Pe={class:"failedComics"},Te={class:"actionButtonCell"};function De(e,t,m,b,l,i){const d=u("DateTimeColumn"),f=u("RelationChips"),g=u("ConfirmDialog"),c=u("AdminCreateUpdateDialog"),M=u("AdminDeleteRowDialog"),K=u("AdminTable");return p(),w(K,{headers:i.headers},te({"no-data":s(()=>[t[0]||(t[0]=o("td",{class:"adminNoData",colspan:"100%"}," Add a Library to start using Codex ",-1))]),"item.comicCount":s(({item:n})=>[a(v(i.formatNumber(n.comicCount)),1)]),"item.events":s(({item:n})=>[r(O,{"model-value":n.events,disabled:""},null,8,["model-value"])]),"item.poll":s(({item:n})=>[r(O,{"model-value":n.poll,disabled:""},null,8,["model-value"])]),"item.pollEvery":s(({item:n})=>[o("span",{class:oe({disabled:!n.poll})},v(n.pollEvery),3)]),"item.lastPoll":s(({item:n})=>[r(d,{dttm:n.lastPoll},null,8,["dttm"])]),"item.actions":s(({item:n})=>[o("span",Te,[r(g,{icon:l.mdiDatabaseClockOutline,"title-text":`Poll for updated ${i.itemName}`,text:n.path,"confirm-text":i.pollConfirmText(n),size:i.iconSize,density:"compact",onConfirm:Y=>i.poll(n)},null,8,["icon","title-text","text","confirm-text","size","onConfirm"]),r(g,{icon:l.mdiDatabaseSyncOutline,"title-text":`Force update ${i.itemName}`,text:n.path,"confirm-text":"Force Update",size:i.iconSize,density:"compact",onConfirm:Y=>i.forcePoll(n)},null,8,["icon","title-text","text","size","onConfirm"]),r(c,{table:"Library","old-row":n,inputs:l.AdminLibraryCreateUpdateInputs,label:i.updateLabel,"max-width":"22em",size:i.iconSize,density:"compact"},null,8,["old-row","inputs","label","size"]),n.coversOnly?_("",!0):(p(),w(M,{key:0,table:"Library",pk:n.pk,name:n.path,size:i.iconSize,density:"compact"},null,8,["pk","name","size"]))])]),_:2},[e.isFailedImports?{name:"item.failedCount",fn:s(({item:n})=>[o("span",Pe,v(i.formatNumber(n.failedCount)),1)]),key:"0"}:void 0,i.isGroups?{name:"item.groups",fn:s(({item:n})=>[r(f,{pks:n.groups,objs:e.groups,"group-type":"","title-key":"name"},null,8,["pks","objs"])]),key:"1"}:void 0]),1032,["headers"])}const W=F(Ie,[["render",De],["__scopeId","data-v-2e8006a3"]]),Le={name:"AdminCustomCoversPanel",components:{AdminLibraryTable:W},computed:{...y(h,["customCoverLibraries"])}};function Ve(e,t,m,b,l,i){const d=u("AdminLibraryTable");return p(),w(A,null,{default:s(()=>[r(x,null,{default:s(()=>[r(I,null,{default:s(()=>[...t[0]||(t[0]=[o("h4",{id:"coverDirHeader"},"Custom Covers",-1)])]),_:1}),r(P,null,{default:s(()=>[r(d,{items:e.customCoverLibraries,"disable-sort":"","covers-dir":!0},null,8,["items"]),r(A,null,{default:s(()=>[r(x,{id:"customCoversHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[1]||(t[1]=[o("h4",null,"Custom Covers Help",-1)])]),_:1}),r(P,null,{default:s(()=>[...t[2]||(t[2]=[o("p",null,"Custom covers may be added to the browser in two locations:",-1),o("h4",null,"Folders",-1),o("p",null,[a(" A library folder with a file named "),o("code",null,".codex-cover.jpg"),a(" will show a custom cover for that folder in Folder view. The addition and removal of these covers by watching filesystem events and polling is handled by the library that folder belongs to. ")],-1),o("h4",null,"Custom Covers Dir",-1),o("p",null,[a(" The Codex config directory has a special folder named "),o("code",null,"custom-covers"),a(" under which are subdirectories for each of the browser groups that may adopt custom covers. Images in these subdirectories that match the name of the browser group will be used as custom covers. For instance: "),o("code",null,".../custom-covers/publishers/American Comics Group.webp"),a(' would be used as the cover for the publisher "American Comics Group". '),o("code",null,".../custom-covers/series/arrow.png"),a(' would be used as the cover for every series named "Arrow", for '),o("em",null,"every"),a(" publisher. Similar to a comic library, the "),o("code",null,"custom-covers"),a(" directory may be watched and polled for changes. By default it is neither watched nor polled and must be enabled by the admin. ")],-1),o("h4",null,"Image Formats & Size",-1),o("p",null,[a(" Custom covers are detected only for files with the extensions: "),o("code",null,".bmp, .gif, .jpeg, .jpg, .png, .webp"),a(". ")],-1),o("p",null," Browser covers are transformed from their sources to 165px x 254px thumbnails. Custom covers will transform most aesthetically the closer to that ratio they are. ",-1),o("h4",null,"Priority",-1),o("p",null," Custom covers supersede covers set by the user's individual browser settings. ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})}const Ee=F(Le,[["render",Ve],["__scopeId","data-v-268927b7"]]),Ue={name:"AdminFailedImportsPanel",components:{DateTimeColumn:N},data(){return{mdiBookAlert:le,mdiOpenInNew:B}},computed:{...y(h,{failedImports:e=>e.failedImports,showFailedImports:e=>e.failedImports&&e.failedImports.length>0}),...re(h,["unseenFailedImports"])}},Oe={key:0},Re={class:"dateCol"},ze={href:"https://github.com/ajslater/codex/issues/",target:"_blank"};function Se(e,t,m,b,l,i){const d=u("DateTimeColumn");return e.showFailedImports?(p(),C("div",Oe,[r(A,null,{default:s(()=>[r(x,{id:"failedImportsPanel",onClick:t[0]||(t[0]=f=>e.unseenFailedImports=!1)},{default:s(()=>[r(I,null,{default:s(()=>[o("h4",null,"Failed Imports: "+v(e.failedImports.length),1),e.unseenFailedImports?(p(),w(R,{key:0,id:"failedImportsIcon",title:"New Failed Imports"},{default:s(()=>[a(v(l.mdiBookAlert),1)]),_:1})):_("",!0)]),_:1}),r(P,null,{default:s(()=>[r(fe,{class:"highlight-table"},{default:s(()=>[t[1]||(t[1]=o("thead",null,[o("tr",null,[o("th",null,"Path"),o("th",null,"Created")])],-1)),o("tbody",null,[(p(!0),C(se,null,ie(e.failedImports,f=>(p(),C("tr",{key:`fi:${f.path}`},[o("td",null,v(f.path),1),o("td",Re,[r(d,{dttm:f.createdAt},null,8,["dttm"])])]))),128))])]),_:1}),r(A,null,{default:s(()=>[r(x,{id:"failedImportsHelp"},{default:s(()=>[r(I,null,{default:s(()=>[...t[2]||(t[2]=[o("h4",null,"Failed Imports Help",-1)])]),_:1}),r(P,null,{default:s(()=>[t[8]||(t[8]=o("p",null," These are Comic archives that have failed to import. This list is updated every time the library updates. You should probably review these files and fix or remove them. ",-1)),t[9]||(t[9]=o("h4",null,"Fixing comics",-1)),t[10]||(t[10]=o("p",null,[a(" Try using the zip fixer to fix comics: "),o("code",{class:"cli"},[a(" cp problem-comic.cbz /somewhere/safe/problem-comic.cbz.backup"),o("br"),a(" zip -F problem-comic.cbz --out fixed.zip"),o("br"),a(" mv fixed.zip problem-comic.cbz ")]),a(" You may also try "),o("code",null,"zip -FF"),a(" to fix comics which uses a different (not necissarily better) algorithm. If you fix some imports, and Codex does not immediately detect the change, poll the library which contains the fixed comics. ")],-1)),t[11]||(t[11]=o("h4",null,"Reporting Issues",-1)),o("p",null,[t[4]||(t[4]=a(" If the comic looks good to you, but still shows up as a failed import, it might be Codex's fault for not importing it correctly. Please file an ",-1)),o("a",ze,[t[3]||(t[3]=a("Issue Report",-1)),r(R,{size:"small"},{default:s(()=>[a(v(l.mdiOpenInNew),1)]),_:1})]),t[5]||(t[5]=a(" and include the stack trace from the logs at ",-1)),t[6]||(t[6]=o("code",null,"config/logs/codex.log",-1)),t[7]||(t[7]=a(" if you can. ",-1))])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})])):_("",!0)}const He=F(Ue,[["render",Se],["__scopeId","data-v-827c9a0b"]]),Be={name:"AdminLibrariesTab",components:{AdminFailedImportsPanel:He,AdminLibraryTable:W,AdminCreateUpdateDialog:$,AdminCustomCoversPanel:Ee},data(){return{AdminLibraryCreateUpdateInputs:H(G)}},computed:{...y(h,["normalLibraries"])},mounted(){this.loadTables(["Group","Library","FailedImport"])},methods:{...k(h,["loadTables"])}},$e={class:"tabHeader"};function Ne(e,t,m,b,l,i){const d=u("AdminCreateUpdateDialog"),f=u("AdminLibraryTable"),g=u("AdminFailedImportsPanel"),c=u("AdminCustomCoversPanel");return p(),C("div",null,[o("header",$e,[r(d,{table:"Library",inputs:l.AdminLibraryCreateUpdateInputs},null,8,["inputs"])]),r(f,{items:e.normalLibraries,"sort-by":[{key:"path",order:"asc"}]},null,8,["items"]),r(U,null,{default:s(()=>[r(g,{id:"failedImports"})]),_:1}),r(U,null,{default:s(()=>[r(c,{id:"customCovers"})]),_:1}),t[0]||(t[0]=o("p",{id:"libraryHelp"}," Each Watched File Events box checked creates a thread to monitor the Library. An large number of watching threads may exceed the limits of your operating system or container. ",-1))])}const nt=F(Be,[["render",Ne],["__scopeId","data-v-66bb908f"]]);export{nt as default};
|
|
Binary file
|
|
Binary file
|