Changeset 2884416
- Timestamp:
- 03/21/2023 04:43:26 PM (3 years ago)
- Location:
- listowp/trunk
- Files:
-
- 36 edited
-
assets/css/admin.css (modified) (1 diff)
-
assets/css/frontend.css (modified) (1 diff)
-
assets/js/admin.js (modified) (5 diffs)
-
assets/js/frontend.js (modified) (1 diff)
-
assets/js/frontend/_load_order.json (modified) (1 diff)
-
assets/js/frontend/base.js (modified) (2 diffs)
-
assets/js/frontend/class-listo-collection-header.js (modified) (4 diffs)
-
assets/js/frontend/class-listo-new-collection.js (modified) (6 diffs)
-
assets/js/frontend/class-listo-new-item.js (modified) (6 diffs)
-
assets/js/frontend/class-listo-sortable.js (modified) (2 diffs)
-
assets/js/frontend/hooks.js (modified) (1 diff)
-
assets/js/frontend/init.js (modified) (1 diff)
-
assets/scss/_vars.scss (modified) (6 diffs)
-
assets/scss/components/_button.scss (modified) (3 diffs)
-
assets/scss/frontend.scss (modified) (1 diff)
-
assets/scss/structures/_lists-item.scss (modified) (1 diff)
-
assets/scss/structures/_lists.scss (modified) (4 diffs)
-
assets/scss/structures/_main.scss (modified) (1 diff)
-
assets/scss/structures/_tasks-item.scss (modified) (5 diffs)
-
assets/scss/structures/_tasks.scss (modified) (2 diffs)
-
assets/scss/structures/_wrapper.scss (modified) (3 diffs)
-
classes/config/config_panel.php (modified) (4 diffs)
-
classes/config/config_upgrade.php (modified) (2 diffs)
-
classes/frontend/assets_pro.php (modified) (1 diff)
-
classes/models/abstract_listing.php (modified) (1 diff)
-
classes/models/collections.php (modified) (3 diffs)
-
classes/models/item.php (modified) (4 diffs)
-
classes/models/items.php (modified) (2 diffs)
-
classes/users/preferences.php (modified) (3 diffs)
-
language/listowp.pot (modified) (2 diffs)
-
listo_plugin.php (modified) (2 diffs)
-
readme.txt (modified) (2 diffs)
-
templates/collection_header.php (modified) (1 diff)
-
templates/item.php (modified) (2 diffs)
-
templates/item_due.php (modified) (1 diff)
-
templates/root.php (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
listowp/trunk/assets/css/admin.css
r2878127 r2884416 1 .lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 1.5);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(22, 27, 37, 0.15);--DIVIDER--DARK: rgba(22, 27, 37, 0.3);--DIVIDER--LIGHT: rgba(22, 27, 37, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 550px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #1A202C;--C-G900: #171923;--C-G800: #1A202C;--C-G700: #E2E8F0;--C-G600: #CBD5E0;--C-G500: #A0AEC0;--C-G400: #718096;--C-G300: #4A5568;--C-G200: #2D3748;--C-G100: #161b25;--C-G50: #171923;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.loa-panel{background-color:var(--C-APP);border-radius:var(--RM);box-shadow:0 1px 2px var(--C-G300),0 10px 20px var(--C-G200)}.loa-panel__header{display:flex;align-items:center;gap:var(--P);padding:var(--P);background-color:var(--C-G50);border-bottom:1px solid var(--C-G200);border-top-left-radius:var(--RM);border-top-right-radius:var(--RM)}.loa-panel__name{display:flex;align-items:center;gap:var(--PXS);font-size:1.25rem}.loa-panel__name>span{font-weight:500}.loa-panel__desc{font-size:1rem;opacity:.8}.loa-panel__desc:empty{display:none}.loa-panel__content{display:flex;flex-direction:column;gap:var(--PXS);padding:var(--P)}.loa-opt{display:flex;flex-direction:column;gap:calc(var(--PXS)/2)}.loa-opt .loa-spinner{color:var(--C-G400);animation-name:spinner;animation-duration:1s;animation-iteration-count:infinite}.loa-opt .loa-check{color:var(--C-BRAND)}@keyframes spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.loa-opt__form{display:flex;align-items:flex-start;gap:var(--PXS)}.loa-opt__form.disabled{opacity:.65}@media(max-width: 75em){.loa-opt__form{flex-wrap:wrap}}.loa-opt__form-input{position:relative}.loa-opt--text .loa-opt__form-input .loa-check,.loa-opt--text .loa-opt__form-input .loa-spinner,.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{position:absolute;z-index:5;top:0;right:var(--PXS);display:flex;align-items:center;height:2.25rem}.loa-opt--text .loa-opt__form-input input.loa-input,.loa-opt--text .loa-opt__form-input select.loa-input,.loa-opt--select .loa-opt__form-input input.loa-input,.loa-opt--select .loa-opt__form-input select.loa-input{padding-right:2.25rem}.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{right:calc(var(--P)*-1)}.loa-opt--check .loa-opt__form-input{display:flex;align-items:center;flex-wrap:wrap;gap:calc(var(--PXS)/2)}.loa-opt__form-actions{display:flex;align-items:center;gap:calc(var(--PXS)/2)}.loa-opt__label{display:flex;align-items:center;gap:var(--PXS);font-size:.925rem;font-weight:400;color:var(--TC--LIGHT)}.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{width:100%;max-width:200px}@media(max-width: 75em){.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{max-width:100%}}.loa-opt--check .loa-opt__label{padding-top:calc(var(--PXS)/3)}.loa-opt--text+.loa-opt--text,.loa-opt--text+.loa-opt--select,.loa-opt--select+.loa-opt--text,.loa-opt--select+.loa-opt--select{margin-top:var(--PXS)}.loa-opt--text .loa-opt__form,.loa-opt--select .loa-opt__form{align-items:flex-start}.loa-opt--text .loa-opt__label,.loa-opt--select .loa-opt__label{display:flex;align-items:center;min-height:2.25rem}.loa-opt__desc{font-size:.8rem;line-height:1.2;color:var(--C-G500)}.loa-opt__desc>i{opacity:.5}.loa-opt--check .loa-opt__desc{width:100%}.loa-opt--text .loa-opt__desc,.loa-opt--select .loa-opt__desc{padding-top:calc(var(--PXS)/2)}.loa-opt__separator{margin-top:var(--PXS);margin-left:calc(var(--P)*-1);margin-right:calc(var(--P)*-1);padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);padding-bottom:var(--PXS);border-top:1px solid var(--DIVIDER)}.loa-opt__separator:first-child{margin-top:0;padding-top:0;border-top:none}.loa-opt__separator+.loa-opt--check .loa-opt__label{font-weight:500}.loa-opt__separator-name{font-size:1.125rem;font-weight:500}.loa-opt__separator-desc{font-size:1rem}.loa-btn{--c: var(--C-G600);--c-h: var(--C-G600);--bg: transparent;--bg-h: var(--C-G300);--bdc: var(--C-G300);--bdc-h: var(--C-G300);display:inline-block;height:2.25rem;padding-left:var(--PS);padding-right:var(--PS);border-radius:var(--R);font-weight:500;color:var(--c);background-color:var(--bg);border:2px solid var(--bdc);box-shadow:none;outline:none;cursor:pointer}.loa-btn:hover,.loa-btn:focus{color:var(--c-h);background-color:var(--bg-h);border:2px solid var(--bdc-h);box-shadow:none;outline:none}.loa-btn:disabled{opacity:.5;cursor:not-allowed}.loa-btn--action{--c: var(--C-BRAND--DARK);--c-h: #fff;--bg: transparent;--bg-h: var(--C-BRAND--DARK);--bdc: var(--C-BRAND--DARK);--bdc-h: var(--C-BRAND--DARK)}.loa-input{--input-bg: transparent;--input-b: 1px solid var(--C-G300);--input-sh: none;--input-p: 0 var(--PXS);height:2.25rem}.loa-input:focus{--input-b: 1px solid var(--C-BRAND);--input-sh: 0 0 0 4px var(--C-BRAND--LIGHTEN)}.loa-input--full{width:100%}.loa-checkbox__control{font-size:1.6rem;cursor:pointer}.loa-checkbox__control.fa-toggle-on{color:var(--C-BRAND--DARK)}.loa-checkbox__control.fa-toggle-off{color:var(--C-G500)}.toplevel_page_listowp,.listowp_page_listowp-license{background-color:var(--C-G100)}.loa-wrapper{--P: 20px;max-width:1500px;padding-left:15px;padding-right:var(--P)}.loa-wrapper select,.loa-wrapper input[type=text],.loa-wrapper input[type=number]{width:100%}.loa-wrapper .loa-input--full{width:100% !important}.loa-main{display:flex;flex-direction:column;gap:var(--P)}@media(min-width: 75em){.loa-main{display:grid;grid-template-columns:repeat(2, 1fr)}}.loa-header{padding:var(--P)}.loa-header__logo{display:block;max-width:170px}.loa-column{display:flex;flex-direction:column;gap:var(--P)}1 .lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 2);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-APP-ALPHA9: rgb(255, 255, 255, .9);--C-APP-ALPHA8: rgb(255, 255, 255, .9);--C-APP-ALPHA7: rgb(255, 255, 255, .9);--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-G50: #f0f1f3;--C-G100: #e0e2e8;--C-G200: #c3c6d1;--C-G300: #a5abbb;--C-G400: #8991a5;--C-G500: #6d7790;--C-G600: #515e7b;--C-G700: #364767;--C-G800: #183153;--C-G900: #001c40;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(38, 45, 61, 0.15);--DIVIDER--DARK: rgba(35, 43, 58, 0.3);--DIVIDER--LIGHT: rgba(40, 48, 65, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 750px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #191a1b;--C-APP-ALPHA9: rgb(25, 26, 27, .9);--C-APP-ALPHA8: rgb(25, 26, 27, .8);--C-APP-ALPHA7: rgb(25, 26, 27, .7);--C-G900: #262628;--C-G800: #292a2b;--C-G700: #8e9092;--C-G600: #696c6e;--C-G500: #606367;--C-G400: #56595f;--C-G300: #3e4044;--C-G200: #3c3f45;--C-G100: #1d1f21;--C-G50: #1f1f22;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.loa-panel{background-color:var(--C-APP);border-radius:var(--RM);box-shadow:0 1px 2px var(--C-G300),0 10px 20px var(--C-G200)}.loa-panel__header{display:flex;align-items:center;gap:var(--P);padding:var(--P);background-color:var(--C-G50);border-bottom:1px solid var(--C-G200);border-top-left-radius:var(--RM);border-top-right-radius:var(--RM)}.loa-panel__name{display:flex;align-items:center;gap:var(--PXS);font-size:1.25rem}.loa-panel__name>span{font-weight:500}.loa-panel__desc{font-size:1rem;opacity:.8}.loa-panel__desc:empty{display:none}.loa-panel__content{display:flex;flex-direction:column;gap:var(--PXS);padding:var(--P)}.loa-opt{display:flex;flex-direction:column;gap:calc(var(--PXS)/2)}.loa-opt .loa-spinner{color:var(--C-G400);animation-name:spinner;animation-duration:1s;animation-iteration-count:infinite}.loa-opt .loa-check{color:var(--C-BRAND)}@keyframes spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.loa-opt__form{display:flex;align-items:flex-start;gap:var(--PXS)}.loa-opt__form.disabled{opacity:.65}@media(max-width: 75em){.loa-opt__form{flex-wrap:wrap}}.loa-opt__form-input{position:relative}.loa-opt--text .loa-opt__form-input .loa-check,.loa-opt--text .loa-opt__form-input .loa-spinner,.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{position:absolute;z-index:5;top:0;right:var(--PXS);display:flex;align-items:center;height:2.25rem}.loa-opt--text .loa-opt__form-input input.loa-input,.loa-opt--text .loa-opt__form-input select.loa-input,.loa-opt--select .loa-opt__form-input input.loa-input,.loa-opt--select .loa-opt__form-input select.loa-input{padding-right:2.25rem}.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{right:calc(var(--P)*-1)}.loa-opt--check .loa-opt__form-input{display:flex;align-items:center;flex-wrap:wrap;gap:calc(var(--PXS)/2)}.loa-opt__form-actions{display:flex;align-items:center;gap:calc(var(--PXS)/2)}.loa-opt__label{display:flex;align-items:center;gap:var(--PXS);font-size:.925rem;font-weight:400;color:var(--TC--LIGHT)}.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{width:100%;max-width:200px}@media(max-width: 75em){.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{max-width:100%}}.loa-opt--check .loa-opt__label{padding-top:calc(var(--PXS)/3)}.loa-opt--text+.loa-opt--text,.loa-opt--text+.loa-opt--select,.loa-opt--select+.loa-opt--text,.loa-opt--select+.loa-opt--select{margin-top:var(--PXS)}.loa-opt--text .loa-opt__form,.loa-opt--select .loa-opt__form{align-items:flex-start}.loa-opt--text .loa-opt__label,.loa-opt--select .loa-opt__label{display:flex;align-items:center;min-height:2.25rem}.loa-opt__desc{font-size:.8rem;line-height:1.2;color:var(--C-G500)}.loa-opt__desc>i{opacity:.5}.loa-opt--check .loa-opt__desc{width:100%}.loa-opt--text .loa-opt__desc,.loa-opt--select .loa-opt__desc{padding-top:calc(var(--PXS)/2)}.loa-opt__separator{margin-top:var(--PXS);margin-left:calc(var(--P)*-1);margin-right:calc(var(--P)*-1);padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);padding-bottom:var(--PXS);border-top:1px solid var(--DIVIDER)}.loa-opt__separator:first-child{margin-top:0;padding-top:0;border-top:none}.loa-opt__separator+.loa-opt--check .loa-opt__label{font-weight:500}.loa-opt__separator-name{font-size:1.125rem;font-weight:500}.loa-opt__separator-desc{font-size:1rem}.loa-btn{--c: var(--C-G600);--c-h: var(--C-G600);--bg: transparent;--bg-h: var(--C-G300);--bdc: var(--C-G300);--bdc-h: var(--C-G300);display:inline-block;height:2.25rem;padding-left:var(--PS);padding-right:var(--PS);border-radius:var(--R);font-weight:500;color:var(--c);background-color:var(--bg);border:2px solid var(--bdc);box-shadow:none;outline:none;cursor:pointer}.loa-btn:hover,.loa-btn:focus{color:var(--c-h);background-color:var(--bg-h);border:2px solid var(--bdc-h);box-shadow:none;outline:none}.loa-btn:disabled{opacity:.5;cursor:not-allowed}.loa-btn--action{--c: var(--C-BRAND--DARK);--c-h: #fff;--bg: transparent;--bg-h: var(--C-BRAND--DARK);--bdc: var(--C-BRAND--DARK);--bdc-h: var(--C-BRAND--DARK)}.loa-input{--input-bg: transparent;--input-b: 1px solid var(--C-G300);--input-sh: none;--input-p: 0 var(--PXS);height:2.25rem}.loa-input:focus{--input-b: 1px solid var(--C-BRAND);--input-sh: 0 0 0 4px var(--C-BRAND--LIGHTEN)}.loa-input--full{width:100%}.loa-checkbox__control{font-size:1.6rem;cursor:pointer}.loa-checkbox__control.fa-toggle-on{color:var(--C-BRAND--DARK)}.loa-checkbox__control.fa-toggle-off{color:var(--C-G500)}.toplevel_page_listowp,.listowp_page_listowp-license{background-color:var(--C-G100)}.loa-wrapper{--P: 20px;max-width:1500px;padding-left:15px;padding-right:var(--P)}.loa-wrapper select,.loa-wrapper input[type=text],.loa-wrapper input[type=number]{width:100%}.loa-wrapper .loa-input--full{width:100% !important}.loa-main{display:flex;flex-direction:column;gap:var(--P)}@media(min-width: 75em){.loa-main{display:grid;grid-template-columns:repeat(2, 1fr)}}.loa-header{padding:var(--P)}.loa-header__logo{display:block;max-width:170px}.loa-column{display:flex;flex-direction:column;gap:var(--P)} -
listowp/trunk/assets/css/frontend.css
r2878127 r2884416 1 .lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 1.5);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(22, 27, 37, 0.15);--DIVIDER--DARK: rgba(22, 27, 37, 0.3);--DIVIDER--LIGHT: rgba(22, 27, 37, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 550px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #1A202C;--C-G900: #171923;--C-G800: #1A202C;--C-G700: #E2E8F0;--C-G600: #CBD5E0;--C-G500: #A0AEC0;--C-G400: #718096;--C-G300: #4A5568;--C-G200: #2D3748;--C-G100: #161b25;--C-G50: #171923;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.lo-btn{--bg: transparent;--bg-hover: transparent;--color: inherit;--color-hover: inherit;--radius: var(--RL);display:inline-flex;align-items:center;justify-content:center;gap:var(--PXS);height:auto;margin:0;padding:0;font-family:"Inter",sans-serif;font-size:1rem;color:var(--color);background-color:var(--bg);border:none;border-radius:var(--radius);box-shadow:none;outline:none;transition:var(--T);cursor:pointer}.lo-btn:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:focus{color:var(--color);background-color:var(--bg)}.lo-btn:focus:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:disabled{opacity:.5;cursor:not-allowed}.lo-btn--default{padding:0 var(--PS);height:2.35rem}.lo-btn--link{--bg: transparent;--bg-hover: var(--C-G200);--color: var(--TC--LIGHT);--color-hover: var(--TC);--border-color: var(--C-G300);border:1px solid var(--border-color)}.lo-btn--action{--bg-hover: var(--C-BRAND);--color: var(--C-BRAND--DARK);--color-hover: #fff;padding:0 var(--PS);height:2.35rem;border:2px solid var(--bg-hover)}.lo-tip{--tip-bg: var(--C-G600);--op: .95;--arrow-size: 8px;--arrow-gap: calc(100% - (var(--arrow-size) - 1px));--transform: translateY(10px) translateX(-50%);--transform--h: translateY(-10px) translateX(-50%);position:relative}.lo-tip:before{content:" ";position:absolute;z-index:9995;left:50%;bottom:var(--arrow-gap);transform:var(--transform);width:0;height:0;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-top:var(--arrow-size) solid var(--tip-bg);opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:after{content:attr(aria-label);position:absolute;z-index:9999;left:50%;bottom:100%;transform:var(--transform);display:inline-flex;align-items:center;height:1.8rem;padding-left:var(--PXS);padding-right:var(--PXS);font-family:"Inter",sans-serif;font-size:.8rem;font-weight:400;line-height:1.2;white-space:nowrap;color:#fff;background-color:var(--tip-bg);border-radius:var(--R);box-shadow:rgba(50,50,93,.25) 0px 2px 5px -1px,rgba(0,0,0,.3) 0px 1px 3px -1px;opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:hover:before,.lo-tip:hover:after{transform:var(--transform--h);opacity:var(--op)}@media(max-width: 61.24em){.lo-tip:before,.lo-tip:after{display:none}}.lo-tip--left{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(10px);--transform--h: translateY(-50%) translateX(-10px)}.lo-tip--left:before{top:50%;left:auto;right:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-left:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--left:after{top:50%;left:auto;right:100%;bottom:auto}.lo-tip--right{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(-10px);--transform--h: translateY(-50%) translateX(10px)}.lo-tip--right:before{top:50%;left:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--right:after{top:50%;left:100%;bottom:auto}.lo-tip--bottom{--transform: translateY(-10px) translateX(-50%);--transform--h: translateY(10px) translateX(-50%)}.lo-tip--bottom:before{top:var(--arrow-gap);bottom:auto;border-top:none;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-bottom:var(--arrow-size) solid var(--tip-bg)}.lo-tip--bottom:after{top:100%;bottom:auto}.lo-tip--alt:after{content:attr(aria-label-alt)}.lo-readmore{position:relative;color:var(--TC--LIGHTEN);transition:var(--T)}.lo-task .lo-readmore{margin-left:auto;opacity:0}.lo-readmore>i:before{position:relative;z-index:1}.lo-readmore>i:after{content:"";position:absolute;z-index:0;top:50%;left:50%;transform:translate(-50%, -50%);width:1.75em;height:1.75em;background-color:var(--DIVIDER--LIGHT);border-radius:50%;opacity:0;transition:var(--T-O);transition-duration:.4s}.lo-task .lo-readmore>i:after{display:none}.lo-readmore:hover{color:var(--TC--LIGHT)}.lo-readmore:hover>i:after{opacity:1}.lo-readmore:focus{color:var(--TC--LIGHTEN)}.lo-readmore:focus:hover{color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task--full .lo-readmore{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-readmore{opacity:1}}.lo-wrapper{--w: var(--APP-W);--h: var(--APP-H);--min-h: var(--APP-MIN-H);--max-h: var(--APP-MAX-H);position:relative;display:flex;width:var(w);min-height:var(--min-h);max-height:max(var(--h),var(--max-h));margin-left:auto;margin-right:auto}@media(max-width: 61.24em){.lo-wrapper{--h: var(--APP-MH);--max-h: var(--APP-MAX-MH);padding-left:var(--SIDEBAR-MW)}}.lo-wrapper__toggle{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHT);--color-hover: var(--TC);position:absolute;z-index:100;top:1px;right:1px;display:flex;align-items:center;justify-content:center;width:34px;height:34px}.lo-wrapper--fullscreen .lo-wrapper__toggle{top:1px;right:1px}.lo-wrapper--fullscreen .lo-wrapper__toggle>i:before{content:""}.lo-wrapper--fullscreen{--w: 100%;--h: 100%;--min-h: 100%;--max-h: 100%;position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;max-width:var(--APP-FULLCREEN-MAX-W)}.lo-wrapper--fullscreen:before{content:" ";position:fixed;z-index:-1;top:0;left:0;right:0;bottom:0;display:block;background-color:var(--C-G900);opacity:.95}.lo-sidebar{--width: var(--SIDEBAR-MW);position:relative;display:flex;flex-direction:column;width:var(--width);min-width:var(--width);background-color:var(--C-APP);border-top-left-radius:var(--RL);border-bottom-left-radius:var(--RL);border:1px solid var(--DIVIDER);border-right:none}@media(max-width: 61.24em){.lo-sidebar{position:absolute;top:0;left:0;bottom:0;z-index:100}}@media(min-width: 61.25em){.lo-sidebar{--width: max(var(--SIDEBAR-MIN-W), var(--SIDEBAR-W))}}.lo-wrapper--fullscreen .lo-sidebar{border-radius:0}.lo-sidebar__toggle{--radius: 0;display:flex;align-items:center;justify-content:center;min-height:var(--SIDEBAR-MW);height:var(--SIDEBAR-MW);font-size:1.25rem;color:var(--TC--LIGHT);border-top:1px solid var(--DIVIDER)}.lo-sidebar--expanded .lo-sidebar__toggle>i{transform:rotate(180deg)}@media(min-width: 61.25em){.lo-sidebar__toggle{display:none}}.lo-sidebar__cover{content:" ";position:absolute;top:0;left:0;right:0;bottom:0;z-index:90;display:none;background-color:rgba(0,0,0,.5);border-radius:var(--RL)}.lo-wrapper--fullscreen .lo-sidebar__cover{border-radius:0}.lo-sidebar--expanded{--width: var(--SIDEBAR-MW--EXPANDED)}.lo-sidebar--expanded+.lo-sidebar__cover{display:block}.lo-main{display:flex;flex-direction:column;width:100%;min-width:0;background-color:var(--C-G100);border:1px solid var(--DIVIDER--LIGHT);border-top-right-radius:var(--RL);border-bottom-right-radius:var(--RL)}.lo-wrapper--fullscreen .lo-main{border-radius:0}.lo-lists__inner{display:flex;flex-direction:column}.lo-lists__form{position:relative;border-top:1px solid var(--DIVIDER)}.lo-lists__add-wrapper{position:relative;z-index:5;display:none;margin:calc(var(--PXS)/2)}.lo-sidebar--expanded .lo-lists__add-wrapper{display:block}@media(min-width: 61.25em){.lo-lists__add-wrapper{display:block}}.lo-lists__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - (var(--PXS)/2 + 2px));font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);box-shadow:0 0 0 4px var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-lists__add>i{color:var(--i-color);transition:var(--T);transition-duration:.4s}@media(max-width: 61.24em){.lo-lists__add{justify-content:center}}@media(min-width: 61.25em){.lo-lists__add{--border-c: var(--C-G300);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400)}.lo-lists__add>i{--size: 1.2rem;font-size:calc(var(--size)*1.8)}.lo-lists__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-lists__add-form{display:none;align-items:center;padding:var(--PXS) var(--PS)}.lo-sidebar--expanded .lo-lists__add-form{display:flex}@media(min-width: 61.25em){.lo-lists__add-form{display:flex}}.lo-lists__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-lists__add-form-action{--bg: transparent;--bg-hover: transparent;--color: var(--C-BRAND);--color-hover: var(--C-BRAND);position:relative;padding:var(--PXS);font-size:1.35rem}.lo-lists__add-form-action>i{position:relative;z-index:1}.lo-lists__add-form-action:last-child{--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);padding-right:0}.lo-lists__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-lists--smart{padding-bottom:0}.lo-lists--smart .lo-lists__inner{min-height:63px}.lo-lists--custom{flex-grow:1;overflow:auto;border-bottom-left-radius:var(--RL);box-shadow:inset 0 3px 3px rgba(0,0,0,.08)}.lo-wrapper--fullscreen .lo-lists--custom{border-radius:0}.lo-list{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);position:relative;color:var(--TC);border-top:1px solid var(--DIVIDER);box-shadow:0 0 0 1px rgba(0,0,0,0);transition:var(--T);cursor:pointer}.lo-lists--smart .lo-list:first-child{border-top:none;border-top-left-radius:var(--RL)}.lo-wrapper--fullscreen .lo-lists--smart .lo-list:first-child{border-radius:0}.lo-lists--smart .lo-list:before{display:none}.lo-list:hover{color:var(--TC);background-color:var(--bg-color-hover)}.lo-list.active{--icon-color: var(--icon-color-active);color:var(--TC);border-top:1px solid rgba(0,0,0,0);background-color:var(--shadow-active-2);box-shadow:0 0 0 1px var(--shadow-active)}.lo-list__inner{display:flex;gap:var(--PXS);padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-lists--smart .lo-list__inner,.lo-lists__add .lo-list__inner{align-items:center}.lo-sidebar--expanded .lo-list__inner{padding:var(--PXS)}@media(max-width: 61.24em){.lo-list__inner{justify-content:center}}@media(min-width: 61.25em){.lo-list__inner{min-height:63px;padding:var(--PXS) var(--PS)}}.lo-list__name{display:none}.lo-list__name>span{word-break:break-word}.lo-sidebar--expanded .lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}@media(min-width: 61.25em){.lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}}.lo-list__count{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-size:.8rem;font-weight:normal;opacity:.5}.active .lo-list__count,.lo-tasks__header .lo-list__count{opacity:1}.lo-list__count>span{display:flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);height:1.115rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);line-height:1;color:var(--TC);background-color:var(--bg-color);border-radius:calc(var(--R)/1.5)}.lo-list__count>span>i{color:var(--icon-color)}@media(max-width: 61.24em){.lo-list__count{gap:calc(var(--PXS)/3)}.lo-lists--smart .lo-list__count{position:absolute;top:calc(var(--PXS)/3);right:calc(var(--PXS)/3)}}.lo-list__icon{--size: 1rem;display:flex;align-items:center;justify-content:center;width:calc(var(--size)*1.8);min-width:calc(var(--size)*1.8);height:calc(var(--size)*1.8);font-size:.925rem;font-style:normal;color:#fff;background-color:var(--icon-color);border-radius:50%;box-shadow:0 0 0 0px var(--shadow-active-2);transition:var(--T)}.lo-list__icon:before{font-size:var(--size)}.lo-list:hover .lo-list__icon{box-shadow:0 0 0 4px var(--shadow-active-2),0 0 0 4px var(--shadow-active-2)}.lo-list.active .lo-list__icon{box-shadow:0 0 0 6px var(--shadow-active-2)}@media(min-width: 61.25em){.lo-list__icon{--size: 1.2rem}.lo-lists--custom .lo-list__icon{margin-top:calc(var(--PXS)/2 - 1px)}}.lo-list--inbox,.lo-list[data-id=inbox]{--bg-color: var(--C-INBOX--LIGHT);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN)}.lo-list--all,.lo-list[data-id=all]{--bg-color: var(--C-ALL--LIGHT);--icon-color: var(--C-ALL);--icon-color-active: var(--C-ALL);--shadow-active: var(--C-ALL);--shadow-active-2: var(--C-ALL--LIGHTEN)}.lo-list[data-id=due]{--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE);--shadow-active: var(--C-DUE);--shadow-active-2: var(--C-DUE--LIGHTEN)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list--scheduled,.lo-list[data-id=scheduled]{--bg-color: var(--C-SCHEDULE--LIGHT);--icon-color: var(--C-SCHEDULE);--icon-color-active: var(--C-SCHEDULE);--shadow-active: var(--C-SCHEDULE);--shadow-active-2: var(--C-SCHEDULE--LIGHTEN)}.lo-list--done,.lo-list[data-id=done]{--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE);--shadow-active: var(--C-DONE);--shadow-active-2: var(--C-DONE--LIGHTEN)}.lo-list--recurring,.lo-list[data-id=recurring]{--bg-color: var(--C-RECU--LIGHT);--icon-color: var(--C-RECU);--icon-color-active: var(--C-RECU);--shadow-active: var(--C-RECU);--shadow-active-2: var(--C-RECU--LIGHTEN)}.lo-list__info{position:relative;padding:calc(var(--PXS) + 4px);line-height:var(--LHX)}@media(min-width: 61.25em){.lo-list__info{display:flex;align-items:center;min-height:127px;padding:var(--PS) var(--P)}}.lo-list__info:hover .lo-list__edit{opacity:1}.lo-list__info:hover .lo-list__info-title{gap:var(--PXS)}.lo-list__info-data{flex-grow:1;min-width:0}.lo-list__info-title{display:inline-flex;align-items:center;gap:0;font-size:1.2rem;line-height:1.2;color:var(--TC);transition:var(--T)}.lo-list__info-title .lo-list__edit{--color: var(--TC--LIGHTEN);--color-hover: var(--TC);font-size:.85rem;font-weight:bold;opacity:0;transition:var(--T),var(--T-O);cursor:pointer}.lo-list__info-title:hover{gap:var(--PXS)}.lo-wrapper--fullscreen .lo-list__info-title{padding-right:var(--PS)}.lo-list__info-desc{color:var(--TC--LIGHT);height:calc(var(--LHX)*1em);overflow:hidden;transition:var(--T)}.lo-list__info-desc:empty{opacity:.5}.lo-list__info-desc:empty:before{content:attr(data-placeholder)}.lo-list__info-count{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);padding-top:var(--PXS);font-size:.925rem}.lo-list__info-count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__info-count>span:nth-child(3){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list__count{gap:var(--PXS)}.lo-list__count>span{padding-left:0;padding-right:0;background-color:rgba(0,0,0,0)}.lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__icon{position:relative}.lo-list__icon-count{position:absolute;top:-3px;right:-8px;background:#f44336;border:2px solid #fff;font-weight:bold;padding:0 2px;min-width:18px;font-family:"Inter",sans-serif;font-size:.6rem;line-height:1;font-weight:400;border-radius:10px;display:flex;height:18px;align-items:center;justify-content:center}.active .lo-list__icon-count{border-color:var(--bg-color)}.lo-tasks{--mobile-padd: 4px;display:flex;flex-direction:column;gap:5px;height:100%;padding:var(--mobile-padd);padding-bottom:50px;overflow:auto}@media(min-width: 61.25em){.lo-tasks{padding:var(--PXS);padding-bottom:50px;gap:var(--PXS)}}.lo-tasks__header{position:relative;background-color:var(--C-APP);border-bottom:1px solid var(--DIVIDER);border-top-right-radius:var(--RL)}.lo-tasks__actions{display:flex;align-items:center;gap:var(--PXS);color:var(--TC--LIGHT)}.lo-tasks__delete{--size: 36px;position:relative;display:flex;align-items:center;justify-content:center;gap:var(--PXS);min-width:var(--size);height:var(--size);margin-right:auto;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:1rem;background-color:var(--C-APP);border:1px solid var(--C-G300);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete button,.lo-tasks__delete span{--color: var(--TC--LIGHT);--color-hover: var(--C-DUE);color:var(--TC--LIGHT);transition:var(--T);cursor:pointer}.lo-tasks__delete button:hover,.lo-tasks__delete span:hover{color:var(--TC)}.lo-tasks__delete:hover{background-color:var(--C-DUE--LIGHTEN);border:1px solid var(--C-DUE--LIGHT)}.lo-tasks__delete:hover button,.lo-tasks__delete:hover span{color:var(--C-DUE)}.lo-tasks__delete-toggle>span,.lo-tasks__delete-toggle>div{position:absolute;top:50%;right:0;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL)}.lo-tasks__delete-opt{display:flex;align-items:center;gap:var(--PXS);padding-left:var(--PXS)}.lo-tasks__delete-opt a,.lo-tasks__delete-opt span{font-weight:500}.lo-tasks__delete-close{display:flex;align-items:center;justify-content:center;width:calc(var(--size) - var(--PXS))}.lo-tasks__delete-close>span,.lo-tasks__delete-close>div{position:absolute;top:50%;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete-close:hover>span,.lo-tasks__delete-close:hover>div{background-color:var(--C-DUE--LIGHTEN)}.lo-tasks__form{position:relative;display:flex;flex-direction:column;gap:var(--PS)}.lo-tasks__add-wrapper{position:relative;z-index:5;padding:4px;padding-bottom:0}@media(min-width: 61.25em){.lo-tasks__add-wrapper{padding:var(--PXS);padding-bottom:0}}.lo-tasks__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);border-radius:var(--R);box-shadow:0 0 0 0 var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-tasks__add>i{color:var(--i-color);transition:var(--T);transition-duration:.4s}@media(max-width: 61.24em){.lo-tasks__add{justify-content:center}}@media(min-width: 61.25em){.lo-tasks__add{--border-c: var(--C-G300);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400);gap:var(--PXS);box-shadow:0 0 0 4px var(--shadow-c)}.lo-tasks__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-tasks__add-form{display:flex;align-items:center;padding:var(--PXS) calc(var(--PXS) + 4px);border-top:1px dashed var(--DIVIDER)}@media(min-width: 61.25em){.lo-tasks__add-form{padding:var(--PXS) var(--P)}}.lo-tasks__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-tasks__add-form-action{--size: 34px;--font-size: 1.35rem;--bg: transparent;--bg-hover: transparent;--color: var(--C-BRAND);--color-hover: var(--C-BRAND);position:relative;padding:var(--PXS);font-size:var(--font-size)}.lo-tasks__add-form-action>i{position:relative;z-index:1}.lo-tasks__add-form-action:last-child{--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);padding-right:0}.lo-tasks__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-tasks__edit{display:flex;flex-direction:column;width:100%;gap:var(--PXS)}.lo-tasks__edit-form{display:flex;flex-direction:column}.lo-tasks__edit-form input.lo-input,.lo-tasks__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-weight:400;transition:none}.lo-tasks__edit-form input.lo-input:first-child,.lo-tasks__edit-form textarea.lo-input:first-child{font-size:1.2rem}.lo-tasks__edit-form input.lo-input:focus,.lo-tasks__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-tasks__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2)}.lo-tasks__empty{display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;color:var(--C-G500);border:2px dashed var(--C-G300);border-radius:var(--R)}.lo-tasks__empty>i{color:var(--C-G400)}.lo-task{--bg-color: var(--C-APP);--shadow: var(--DIVIDER--LIGHT);--shadow-hover-1: var(--C-G400);--shadow-hover-2: var(--C-G200);position:relative;flex-shrink:0;padding:var(--PXS);color:var(--TC);background-color:var(--bg-color);border-radius:var(--R);box-shadow:0 0 0 1px var(--shadow);transition:var(--T);transition-duration:.25s}.lo-task:hover{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}.lo-task:focus{color:var(--TC)}@media(min-width: 61.25em){.lo-task{display:flex;align-items:flex-start;gap:var(--PXS);padding:var(--PS)}}.lo-task__edit-toggle{font-size:.85rem;color:var(--TC--LIGHTEN);transition:var(--T),var(--T-O);opacity:0;cursor:pointer}@media(max-width: 61.24em){.lo-task--full .lo-task__edit-toggle{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-task__edit-toggle{opacity:1}}.lo-task__edit-form{display:flex;flex-direction:column}.lo-task__edit-form input.lo-input,.lo-task__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-size:1rem;font-weight:400;transition:none}.lo-task__edit-form input.lo-input:last-child,.lo-task__edit-form textarea.lo-input:last-child{font-size:.825rem}.lo-task__edit-form input.lo-input:focus,.lo-task__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-task__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task__check-wrapper{position:absolute;top:var(--PXS);right:var(--PXS)}@media(min-width: 61.25em){.lo-task__check-wrapper{top:var(--PS);right:var(--PS)}}.lo-task__check{cursor:pointer}.lo-task__check>i{font-size:1.45rem;color:var(--C-G400);transition:var(--T)}.lo-task__check>i:hover{color:var(--C-DONE)}.lo-task__check>i:hover:before{content:"";font-weight:bold}.lo-task__name{flex-grow:1}.lo-task__name-title{display:flex;align-items:center;gap:0;padding-right:var(--P);line-height:var(--LHM);transition:var(--T)}.lo-task__name-title .lo-input{width:100%}.lo-task__name-title:hover{color:var(--TC)}.lo-task:hover .lo-task__name-title{gap:var(--PXS)}.lo-task--done .lo-task__name-title{color:var(--TC--LIGHT);text-decoration:line-through;text-decoration-color:var(--DIVIDER--DARK)}.lo-task__name-desc{font-size:.825rem;line-height:var(--LHX);color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task__name-desc{margin-top:var(--PXS)}.lo-task__name-desc:empty{margin-top:0}}.lo-task__name-desc--empty{opacity:.5}.lo-task__name-meta{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task--done .lo-task__name-meta{opacity:.75}@media(min-width: 61.25em){.lo-task--edit .lo-task__name-meta{position:absolute;left:var(--PS);bottom:var(--PS)}}.lo-task__collapse{position:absolute;z-index:5;top:calc(var(--PXS)/2);right:calc(var(--PXS)/2);color:var(--TC--LIGHTEN);transition:var(--T);cursor:pointer}.lo-task__collapse:hover{color:var(--TC)}.lo-task__delete{cursor:pointer}@media(min-width: 61.25em){.lo-task__delete{margin-right:0}}.lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G200);--bg-hover: var(--C-G200);--bsh: var(--C-G50);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);min-height:1.45rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:.925rem;font-weight:500;line-height:1.4;white-space:nowrap;color:var(--c);background-color:var(--bg);border-radius:var(--R);box-shadow:0 0 0 2px rgba(0,0,0,0);transition:var(--T),var(--T-O);cursor:pointer}.lo-task__meta>i{color:var(--ic)}.lo-task__meta>span{display:flex;align-items:center;position:relative}.lo-task__meta:hover{box-shadow:0 0 0 4px var(--bsh)}.lo-task--done .lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G200);--bsh: var(--C-G100)}.lo-task--done .lo-task__meta:hover{box-shadow:none}.lo-task__meta--date{padding-right:0}.lo-task__meta-input{position:absolute !important;top:0;left:0;width:100% !important;height:100% !important;overflow:hidden;opacity:0;cursor:pointer}.lo-task__meta-toggle{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1.375rem;padding-left:var(--PXS);font-size:.725rem;border-left:1px solid var(--DIVIDER);cursor:pointer}.lo-task__meta--date .lo-task__meta-toggle{padding-right:var(--PXS)}.lo-task__meta--scheduled{--c: #fff;--ic: #fff;--bg: var(--C-SCHEDULE);--bsh: var(--C-SCHEDULE--LIGHTEN)}.lo-task__meta--scheduled .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--scheduled .lo-task__meta-input{color-scheme:dark}.lo-task__meta--expired{--c: #fff;--ic: #fff;--bg: var(--C-DUE);--bsh: var(--C-DUE--LIGHTEN)}.lo-task__meta--expired .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--expired .lo-task__meta-input{color-scheme:dark}@media(max-width: 61.24em){.lo-task--full{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}}.lo-task--done{--bg-color: var(--C-G100);--shadow: var(--DIVIDER)}.lo-task--done:hover,.lo-task--done:focus{--bg-color: var(--C-G50);--shadow: var(--DIVIDER--LIGHT)}.lo-task--done .lo-task__check>i{font-weight:bold;color:var(--C-DONE)}.lo-task--done .lo-task__check>i:before{content:""}.lo-task--done .lo-task__check>i:hover{color:var(--C-G500)}.lo-task--done .lo-task__check>i:hover:before{content:""}.lo-pref{--p: 0;position:absolute;z-index:100;top:var(--p);left:var(--p);right:var(--p);bottom:var(--p);background-color:rgba(255,255,255,.75);border-radius:var(--RL);box-shadow:rgba(40,40,44,.2) 0px 7px 29px 0px;backdrop-filter:blur(10px)}.lo-pref__toggle{--bg: var(--C-APP);--bg-hover: var(--C-APP);--color: var(--TC--LIGHT);--color-hover: var(--TC);--radius: 50%;position:absolute;z-index:50;right:var(--PXS);bottom:var(--PXS);display:flex;align-items:center;justify-content:center;width:35px;height:35px;font-size:1.25rem;border:1px solid var(--C-G300);box-shadow:rgba(0,0,0,.04) 0px 3px 5px}.lo-pref__close{position:absolute;z-index:5;top:var(--PXS);right:var(--PXS);font-size:1.25rem;color:var(--TC--LIGHTEN)}.lo-pref__title{padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);font-size:1.15rem;line-height:1}.lo-pref__inner{display:grid;grid-template-columns:repeat(4, 1fr);gap:var(--P);padding:var(--P)}.lo-pref__box{display:flex;flex-direction:column;gap:var(--PXS)}.lo-pref__box-title{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-weight:500}.lo-pref__box-title>i{color:var(--TC--LIGHTEN)}.lo-pref__box-desc{font-size:.825rem;color:var(--TC--LIGHT)}.lo-pref__box-opt{font-size:.9rem}1 .lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 2);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-APP-ALPHA9: rgb(255, 255, 255, .9);--C-APP-ALPHA8: rgb(255, 255, 255, .9);--C-APP-ALPHA7: rgb(255, 255, 255, .9);--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-G50: #f0f1f3;--C-G100: #e0e2e8;--C-G200: #c3c6d1;--C-G300: #a5abbb;--C-G400: #8991a5;--C-G500: #6d7790;--C-G600: #515e7b;--C-G700: #364767;--C-G800: #183153;--C-G900: #001c40;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(38, 45, 61, 0.15);--DIVIDER--DARK: rgba(35, 43, 58, 0.3);--DIVIDER--LIGHT: rgba(40, 48, 65, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 750px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #191a1b;--C-APP-ALPHA9: rgb(25, 26, 27, .9);--C-APP-ALPHA8: rgb(25, 26, 27, .8);--C-APP-ALPHA7: rgb(25, 26, 27, .7);--C-G900: #262628;--C-G800: #292a2b;--C-G700: #8e9092;--C-G600: #696c6e;--C-G500: #606367;--C-G400: #56595f;--C-G300: #3e4044;--C-G200: #3c3f45;--C-G100: #1d1f21;--C-G50: #1f1f22;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.lo-btn{--bg: transparent;--bg-hover: transparent;--color: inherit;--color-hover: inherit;--radius: var(--R);display:inline-flex;align-items:center;justify-content:center;gap:var(--PXS);height:auto;margin:0;padding:0;font-family:"Inter",sans-serif;font-size:1rem;color:var(--color);background-color:var(--bg);border:none;border-radius:var(--radius);box-shadow:none;outline:none;transition:var(--T);cursor:pointer}.lo-btn:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:focus{color:var(--color);background-color:var(--bg)}.lo-btn:focus:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:disabled{opacity:.5;cursor:not-allowed}.lo-btn--default{padding:0 var(--PS);height:2.35rem}.lo-btn--sm{padding:0 var(--PXS);height:2rem;font-size:.9rem}.lo-btn--link{--bg: transparent;--bg-hover: var(--C-G50);--color: var(--TC--LIGHT);--color-hover: var(--TC);--border-color: var(--C-G200);border:1px solid var(--border-color)}.lo-btn--action{--bg: var(--C-BRAND);--bg-hover: var(--C-BRAND--DARK);--color: #fff;--color-hover: #fff;--border-color: var(--C-BRAND--DARK);border:1px solid var(--border-color)}.lo-tip{--tip-bg: var(--C-G600);--op: .95;--arrow-size: 8px;--arrow-gap: calc(100% - (var(--arrow-size) - 1px));--transform: translateY(10px) translateX(-50%);--transform--h: translateY(-10px) translateX(-50%);position:relative}.lo-tip:before{content:" ";position:absolute;z-index:9995;left:50%;bottom:var(--arrow-gap);transform:var(--transform);width:0;height:0;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-top:var(--arrow-size) solid var(--tip-bg);opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:after{content:attr(aria-label);position:absolute;z-index:9999;left:50%;bottom:100%;transform:var(--transform);display:inline-flex;align-items:center;height:1.8rem;padding-left:var(--PXS);padding-right:var(--PXS);font-family:"Inter",sans-serif;font-size:.8rem;font-weight:400;line-height:1.2;white-space:nowrap;color:#fff;background-color:var(--tip-bg);border-radius:var(--R);box-shadow:rgba(50,50,93,.25) 0px 2px 5px -1px,rgba(0,0,0,.3) 0px 1px 3px -1px;opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:hover:before,.lo-tip:hover:after{transform:var(--transform--h);opacity:var(--op)}@media(max-width: 61.24em){.lo-tip:before,.lo-tip:after{display:none}}.lo-tip--left{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(10px);--transform--h: translateY(-50%) translateX(-10px)}.lo-tip--left:before{top:50%;left:auto;right:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-left:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--left:after{top:50%;left:auto;right:100%;bottom:auto}.lo-tip--right{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(-10px);--transform--h: translateY(-50%) translateX(10px)}.lo-tip--right:before{top:50%;left:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--right:after{top:50%;left:100%;bottom:auto}.lo-tip--bottom{--transform: translateY(-10px) translateX(-50%);--transform--h: translateY(10px) translateX(-50%)}.lo-tip--bottom:before{top:var(--arrow-gap);bottom:auto;border-top:none;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-bottom:var(--arrow-size) solid var(--tip-bg)}.lo-tip--bottom:after{top:100%;bottom:auto}.lo-tip--alt:after{content:attr(aria-label-alt)}.lo-popover{position:absolute;z-index:50;top:100%;left:0;width:280px;padding:var(--PS);background-color:var(--C-APP);border-radius:var(--RM);box-shadow:rgba(46,50,62,.05) 0px 6px 24px 0px,var(--DIVIDER) 0px 0px 0px 1px}.lo-readmore{position:relative;color:var(--TC--LIGHTEN);transition:var(--T)}.lo-task .lo-readmore{margin-left:auto;opacity:0}.lo-readmore>i:before{position:relative;z-index:1}.lo-readmore>i:after{content:"";position:absolute;z-index:0;top:50%;left:50%;transform:translate(-50%, -50%);width:1.75em;height:1.75em;background-color:var(--DIVIDER--LIGHT);border-radius:50%;opacity:0;transition:var(--T-O);transition-duration:.4s}.lo-task .lo-readmore>i:after{display:none}.lo-readmore:hover{color:var(--TC--LIGHT)}.lo-readmore:hover>i:after{opacity:1}.lo-readmore:focus{color:var(--TC--LIGHTEN)}.lo-readmore:focus:hover{color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task--full .lo-readmore{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-readmore{opacity:1}}.lo-form{display:flex;flex-direction:column;gap:var(--PS)}.lo-form__row{display:flex;gap:var(--PXS);width:100%}.lo-form__label{min-width:30%;color:var(--TC)}.lo-form__control{display:flex;align-items:center}.lo-form__control>i{min-width:1.35rem;color:var(--TC--LIGHT)}.lo-form__control select,.lo-form__control input[type=text],.lo-form__control input[type=date],.lo-form__control input[type=number]{font-size:.875rem;line-height:1;-webkit-appearance:none}.lo-form__control input[type=date]::-webkit-inner-spin-button,.lo-form__control input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.lo-form__actions{display:flex;gap:var(--PXS);justify-content:flex-end;padding-top:var(--PS);border-top:1px solid var(--DIVIDER--LIGHT)}.lo-form__actions .lo-btn:first-child{margin-right:auto}.lo-wrapper{--w: var(--APP-W);--h: var(--APP-H);--min-h: var(--APP-MIN-H);--max-h: var(--APP-MAX-H);position:relative;display:flex;width:var(w);min-height:var(--min-h);max-height:max(var(--h),var(--max-h));margin-left:auto;margin-right:auto}@media(max-width: 61.24em){.lo-wrapper{--h: var(--APP-MH);--max-h: var(--APP-MAX-MH);padding-left:var(--SIDEBAR-MW)}}.lo-wrapper__toggle{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHTEN);--color-hover: var(--TC);position:absolute;z-index:100;top:1px;right:28px;display:flex;align-items:center;justify-content:center;width:34px;height:34px}.lo-wrapper--fullscreen .lo-wrapper__toggle{top:1px;right:28px}.lo-wrapper--fullscreen .lo-wrapper__toggle>i:before{content:""}.lo-wrapper--fullscreen{--w: 100%;--h: 100%;--min-h: 100%;--max-h: 100%;position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;max-width:var(--APP-FULLCREEN-MAX-W)}.lo-wrapper--fullscreen:before{content:" ";position:fixed;z-index:-1;top:0;left:0;right:0;bottom:0;display:block;background-color:var(--C-G900);opacity:.95}.lo-sidebar{--width: var(--SIDEBAR-MW);position:relative;display:flex;flex-direction:column;width:var(--width);min-width:var(--width);background-color:var(--C-APP);border-top-left-radius:var(--RL);border-bottom-left-radius:var(--RL);border:1px solid var(--DIVIDER);border-right:none}@media(max-width: 61.24em){.lo-sidebar{position:absolute;top:0;left:0;bottom:0;z-index:100}}@media(min-width: 61.25em){.lo-sidebar{--width: max(var(--SIDEBAR-MIN-W), var(--SIDEBAR-W))}}.lo-wrapper--fullscreen .lo-sidebar{border-radius:0}.lo-sidebar__toggle{--radius: 0;display:flex;align-items:center;justify-content:center;min-height:var(--SIDEBAR-MW);height:var(--SIDEBAR-MW);font-size:1.25rem;color:var(--TC--LIGHT);border-top:1px solid var(--DIVIDER)}.lo-sidebar--expanded .lo-sidebar__toggle>i{transform:rotate(180deg)}@media(min-width: 61.25em){.lo-sidebar__toggle{display:none}}.lo-sidebar__cover{content:" ";position:absolute;top:0;left:0;right:0;bottom:0;z-index:90;display:none;background-color:rgba(0,0,0,.5);border-radius:var(--RL)}.lo-wrapper--fullscreen .lo-sidebar__cover{border-radius:0}.lo-sidebar--expanded{--width: var(--SIDEBAR-MW--EXPANDED)}.lo-sidebar--expanded+.lo-sidebar__cover{display:block}.lo-main{display:flex;flex-direction:column;width:100%;min-width:0;background-color:var(--C-G50);border:1px solid var(--DIVIDER--LIGHT);border-top-right-radius:var(--RL);border-bottom-right-radius:var(--RL)}.lo-wrapper--fullscreen .lo-main{border-radius:0}.lo-lists__inner{display:flex;flex-direction:column}.lo-lists__form{position:relative;border-top:1px solid var(--DIVIDER)}.lo-lists__add-wrapper{position:relative;z-index:5;display:none;margin:calc(var(--PXS)/2)}.lo-sidebar--expanded .lo-lists__add-wrapper{display:block}@media(min-width: 61.25em){.lo-lists__add-wrapper{display:block}}.lo-lists__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - (var(--PXS)/2 + 2px));font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);box-shadow:0 0 0 4px var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-lists__add>i{position:relative;color:var(--i-color);transition:var(--T);transition-duration:.4s}.lo-lists__add>i:after{content:"+";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);font-size:1.35rem;font-weight:bold}@media(max-width: 61.24em){.lo-lists__add{justify-content:center}}@media(min-width: 61.25em){.lo-lists__add{--border-c: var(--C-G200);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400)}.lo-lists__add>i{--size: 1.2rem;font-size:calc(var(--size)*1.8)}.lo-lists__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-lists__add-form{display:none;align-items:center;padding:var(--PXS) var(--PS)}.lo-sidebar--expanded .lo-lists__add-form{display:flex}@media(min-width: 61.25em){.lo-lists__add-form{display:flex}}.lo-lists__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-lists__add-form-action{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);position:relative;padding:var(--PXS);font-size:1.35rem}.lo-lists__add-form-action>i{position:relative;z-index:1}.lo-lists__add-form-action:last-child{--color: var(--C-BRAND);--color-hover: var(--C-BRAND);padding-right:0}.lo-lists__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-lists--smart{padding-bottom:0}.lo-lists--smart .lo-lists__inner{min-height:63px}.lo-lists--custom{flex-grow:1;overflow:auto;border-bottom-left-radius:var(--RL);box-shadow:inset 0 3px 3px rgba(0,0,0,.08)}.lo-wrapper--fullscreen .lo-lists--custom{border-radius:0}.lo-list{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);position:relative;color:var(--TC);border-top:1px solid var(--DIVIDER);box-shadow:0 0 0 1px rgba(0,0,0,0);transition:var(--T);cursor:pointer}.lo-lists--smart .lo-list:first-child{border-top:none;border-top-left-radius:var(--RL)}.lo-wrapper--fullscreen .lo-lists--smart .lo-list:first-child{border-radius:0}.lo-lists--smart .lo-list:before{display:none}.lo-list:hover{color:var(--TC);background-color:var(--bg-color-hover)}.lo-list.active{--icon-color: var(--icon-color-active);color:var(--TC);border-top:1px solid rgba(0,0,0,0);background-color:var(--shadow-active-2);box-shadow:0 0 0 1px var(--shadow-active)}.lo-list__inner{display:flex;gap:var(--PXS);padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-lists--smart .lo-list__inner,.lo-lists__add .lo-list__inner{align-items:center}.lo-sidebar--expanded .lo-list__inner{padding:var(--PXS)}@media(max-width: 61.24em){.lo-list__inner{justify-content:center}}@media(min-width: 61.25em){.lo-list__inner{min-height:63px;padding:var(--PXS) var(--PS)}}.lo-list__name{display:none}.lo-list__name>span{word-break:break-word}.lo-sidebar--expanded .lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}@media(min-width: 61.25em){.lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}}.lo-list__count{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-size:.8rem;font-weight:normal;opacity:.5}.active .lo-list__count,.lo-tasks__header .lo-list__count{opacity:1}.lo-list__count>span{display:flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);height:1.115rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);line-height:1;color:var(--TC);background-color:var(--bg-color);border-radius:calc(var(--R)/1.5)}.lo-list__count>span>i{color:var(--icon-color)}@media(max-width: 61.24em){.lo-list__count{gap:calc(var(--PXS)/3)}.lo-lists--smart .lo-list__count{position:absolute;top:calc(var(--PXS)/3);right:calc(var(--PXS)/3)}}.lo-list__icon{--size: 1rem;display:flex;align-items:center;justify-content:center;width:calc(var(--size)*1.8);min-width:calc(var(--size)*1.8);height:calc(var(--size)*1.8);font-size:.925rem;font-style:normal;color:#fff;background-color:var(--icon-color);border-radius:50%;box-shadow:0 0 0 0px var(--shadow-active-2);transition:var(--T)}.lo-list__icon:before{font-size:var(--size)}.lo-list:hover .lo-list__icon{box-shadow:0 0 0 4px var(--shadow-active-2),0 0 0 4px var(--shadow-active-2)}.lo-list.active .lo-list__icon{box-shadow:0 0 0 6px var(--shadow-active-2)}@media(min-width: 61.25em){.lo-list__icon{--size: 1.2rem}.lo-lists--custom .lo-list__icon{margin-top:calc(var(--PXS)/2 - 1px)}}.lo-list--inbox,.lo-list[data-id=inbox]{--bg-color: var(--C-INBOX--LIGHT);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN)}.lo-list--all,.lo-list[data-id=all]{--bg-color: var(--C-ALL--LIGHT);--icon-color: var(--C-ALL);--icon-color-active: var(--C-ALL);--shadow-active: var(--C-ALL);--shadow-active-2: var(--C-ALL--LIGHTEN)}.lo-list[data-id=due]{--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE);--shadow-active: var(--C-DUE);--shadow-active-2: var(--C-DUE--LIGHTEN)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list--scheduled,.lo-list[data-id=scheduled]{--bg-color: var(--C-SCHEDULE--LIGHT);--icon-color: var(--C-SCHEDULE);--icon-color-active: var(--C-SCHEDULE);--shadow-active: var(--C-SCHEDULE);--shadow-active-2: var(--C-SCHEDULE--LIGHTEN)}.lo-list--done,.lo-list[data-id=done]{--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE);--shadow-active: var(--C-DONE);--shadow-active-2: var(--C-DONE--LIGHTEN)}.lo-list--recurring,.lo-list[data-id=recurring]{--bg-color: var(--C-RECU--LIGHT);--icon-color: var(--C-RECU);--icon-color-active: var(--C-RECU);--shadow-active: var(--C-RECU);--shadow-active-2: var(--C-RECU--LIGHTEN)}.lo-list__info{position:relative;padding:calc(var(--PXS) + 4px);line-height:var(--LHX)}@media(min-width: 61.25em){.lo-list__info{display:flex;align-items:center;min-height:127px;padding:var(--PS) calc(var(--PS) + var(--PXS))}}.lo-list__info:hover .lo-list__edit{opacity:1}.lo-list__info:hover .lo-list__info-title{gap:var(--PXS)}.lo-list__info-data{flex-grow:1;min-width:0}.lo-list__info-title{display:inline-flex;align-items:center;gap:0;font-size:1.2rem;line-height:1.2;color:var(--TC);transition:var(--T)}.lo-list__info-title .lo-list__edit{--color: var(--TC--LIGHTEN);--color-hover: var(--TC);font-size:.85rem;font-weight:bold;opacity:0;transition:var(--T),var(--T-O);cursor:pointer}.lo-list__info-title:hover{gap:var(--PXS)}.lo-wrapper--fullscreen .lo-list__info-title{padding-right:var(--PS)}.lo-list__info-desc{color:var(--TC--LIGHT);height:calc(var(--LHX)*1em);overflow:hidden;transition:var(--T)}.lo-list__info-desc:empty{opacity:.5}.lo-list__info-desc:empty:before{content:attr(data-placeholder)}.lo-list__info-count{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);padding-top:var(--PXS);font-size:.925rem}.lo-list__info-count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__info-count>span:nth-child(3){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list__count{gap:var(--PXS)}.lo-list__count>span{padding-left:0;padding-right:0;background-color:rgba(0,0,0,0)}.lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__icon{position:relative}.lo-list__icon-count{position:absolute;top:-3px;right:-8px;background:#f44336;border:2px solid #fff;font-weight:bold;padding:0 2px;min-width:18px;font-family:"Inter",sans-serif;font-size:.6rem;line-height:1;font-weight:400;border-radius:10px;display:flex;height:18px;align-items:center;justify-content:center}.active .lo-list__icon-count{border-color:var(--bg-color)}.lo-tasks{--mobile-padd: 4px;display:flex;flex-direction:column;gap:5px;height:100%;padding:var(--mobile-padd);padding-bottom:50px;overflow:auto}@media(min-width: 61.25em){.lo-tasks{padding:var(--PXS);padding-bottom:50px;gap:var(--PXS)}}.lo-tasks__header{position:relative;background-color:var(--C-APP);border-bottom:1px solid var(--DIVIDER);border-top-right-radius:var(--RL)}.lo-tasks__actions{display:flex;align-items:center;gap:var(--PXS);color:var(--TC--LIGHT)}.lo-tasks__delete{--size: 36px;position:relative;display:flex;align-items:center;justify-content:center;gap:var(--PXS);min-width:var(--size);height:var(--size);margin-right:auto;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:1rem;background-color:var(--C-APP);border:1px solid var(--C-G300);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete button,.lo-tasks__delete span{--color: var(--TC--LIGHT);--color-hover: var(--C-DUE);color:var(--TC--LIGHT);transition:var(--T);cursor:pointer}.lo-tasks__delete button:hover,.lo-tasks__delete span:hover{color:var(--TC)}.lo-tasks__delete:hover{background-color:var(--C-DUE--LIGHTEN);border:1px solid var(--C-DUE--LIGHT)}.lo-tasks__delete:hover button,.lo-tasks__delete:hover span{color:var(--C-DUE)}.lo-tasks__delete-toggle>span,.lo-tasks__delete-toggle>div{position:absolute;top:50%;right:0;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL)}.lo-tasks__delete-opt{display:flex;align-items:center;gap:var(--PXS);padding-left:var(--PXS)}.lo-tasks__delete-opt a,.lo-tasks__delete-opt span{font-weight:500}.lo-tasks__delete-close{display:flex;align-items:center;justify-content:center;width:calc(var(--size) - var(--PXS))}.lo-tasks__delete-close>span,.lo-tasks__delete-close>div{position:absolute;top:50%;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete-close:hover>span,.lo-tasks__delete-close:hover>div{background-color:var(--C-DUE--LIGHTEN)}.lo-tasks__form{position:relative;display:flex;flex-direction:column;gap:var(--PS)}.lo-tasks__add-wrapper{position:relative;z-index:5;padding:4px;padding-bottom:0}@media(min-width: 61.25em){.lo-tasks__add-wrapper{padding:var(--PXS);padding-bottom:0}}.lo-tasks__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);border-radius:var(--R);box-shadow:0 0 0 0 var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-tasks__add>i{color:var(--i-color);transition:var(--T);transition-duration:.4s}@media(max-width: 61.24em){.lo-tasks__add{justify-content:center}}@media(min-width: 61.25em){.lo-tasks__add{--border-c: var(--C-G300);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400);gap:var(--PXS);box-shadow:0 0 0 4px var(--shadow-c)}.lo-tasks__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-tasks__add-form{display:flex;align-items:center;padding:var(--PXS) calc(var(--PXS) + 4px);border-top:1px dashed var(--DIVIDER)}@media(min-width: 61.25em){.lo-tasks__add-form{padding:var(--PXS) var(--P)}}.lo-tasks__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-tasks__add-form-action{--size: 34px;--font-size: 1.35rem;--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);position:relative;padding:var(--PXS);font-size:var(--font-size)}.lo-tasks__add-form-action>i{position:relative;z-index:1}.lo-tasks__add-form-action:last-child{--color: var(--C-BRAND);--color-hover: var(--C-BRAND);padding-right:0}.lo-tasks__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-tasks__edit{display:flex;flex-direction:column;width:100%;gap:var(--PXS)}.lo-tasks__edit-form{display:flex;flex-direction:column}.lo-tasks__edit-form input.lo-input,.lo-tasks__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-weight:400;transition:none}.lo-tasks__edit-form input.lo-input:first-child,.lo-tasks__edit-form textarea.lo-input:first-child{font-size:1.2rem}.lo-tasks__edit-form input.lo-input:focus,.lo-tasks__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-tasks__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2)}.lo-tasks__empty{display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;color:var(--C-G500);border:2px dashed var(--C-G300);border-radius:var(--R)}.lo-tasks__empty>i{color:var(--C-G400)}.lo-task{--bg-color: var(--C-APP);--shadow: var(--DIVIDER--LIGHT);--shadow-hover-1: var(--C-G200);--shadow-hover-2: var(--C-G100);position:relative;flex-shrink:0;padding:var(--PXS);color:var(--TC);background-color:var(--bg-color);border-radius:var(--R);box-shadow:0 0 0 1px var(--shadow);transition:var(--T);transition-duration:.25s}.lo-task:hover{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}.lo-task:focus{color:var(--TC)}@media(min-width: 61.25em){.lo-task{display:flex;align-items:flex-start;gap:var(--PXS);padding:var(--PS)}}.lo-task__edit-toggle{font-size:.85rem;color:var(--TC--LIGHTEN);transition:var(--T),var(--T-O);opacity:0;cursor:pointer}@media(max-width: 61.24em){.lo-task--full .lo-task__edit-toggle{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-task__edit-toggle{opacity:1}}.lo-task__edit-form{display:flex;flex-direction:column}.lo-task__edit-form input.lo-input,.lo-task__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-size:1rem;font-weight:400;transition:none}.lo-task__edit-form input.lo-input:last-child,.lo-task__edit-form textarea.lo-input:last-child{font-size:.825rem}.lo-task__edit-form input.lo-input:focus,.lo-task__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-task__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task__check-wrapper{position:absolute;top:var(--PXS);right:var(--PXS)}@media(min-width: 61.25em){.lo-task__check-wrapper{top:var(--PS);right:var(--PS)}}.lo-task__check{cursor:pointer}.lo-task__check>i{font-size:1.45rem;color:var(--C-G400);transition:var(--T)}.lo-task__check>i:hover{color:var(--C-DONE)}.lo-task__check>i:hover:before{content:"";font-weight:bold}.lo-task__name{flex-grow:1}.lo-task__name-title{display:flex;align-items:center;gap:0;padding-right:var(--P);line-height:var(--LHM);transition:var(--T)}.lo-task__name-title .lo-input{width:100%}.lo-task__name-title:hover{color:var(--TC)}.lo-task:hover .lo-task__name-title{gap:var(--PXS)}.lo-task--done .lo-task__name-title{color:var(--TC--LIGHT);text-decoration:line-through;text-decoration-color:var(--DIVIDER--DARK)}.lo-task__name-desc{font-size:.825rem;line-height:var(--LHX);color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task__name-desc{margin-top:var(--PXS)}.lo-task__name-desc:empty{margin-top:0}}.lo-task__name-desc--empty{opacity:.5}.lo-task__name-meta{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task--done .lo-task__name-meta{opacity:.75}@media(min-width: 61.25em){.lo-task--edit .lo-task__name-meta{position:absolute;left:var(--PS);bottom:var(--PS)}}.lo-task__collapse{position:absolute;z-index:5;top:calc(var(--PXS)/2);right:calc(var(--PXS)/2);color:var(--TC--LIGHTEN);transition:var(--T);cursor:pointer}.lo-task__collapse:hover{color:var(--TC)}.lo-task__delete{cursor:pointer}@media(min-width: 61.25em){.lo-task__delete{margin-right:0}}.lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G100);--bg-hover: var(--C-G100);--bsh: var(--C-G50);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);min-height:1.45rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:.925rem;font-weight:500;line-height:1.4;white-space:nowrap;color:var(--c);background-color:var(--bg);border-radius:var(--R);box-shadow:0 0 0 2px rgba(0,0,0,0);transition:var(--T),var(--T-O);cursor:pointer}.lo-task__meta>i{color:var(--ic)}.lo-task__meta>span{display:flex;align-items:center;position:relative}.lo-task__meta:hover{box-shadow:0 0 0 4px var(--bsh)}.lo-task--done .lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G100);--bsh: var(--C-G100)}.lo-task--done .lo-task__meta:hover{box-shadow:none}.lo-task__meta--date{padding-right:0}.lo-task__meta--time{appearance:none;-webkit-appearance:none}.lo-task__meta-input{position:absolute !important;top:0;left:0;width:100% !important;height:100% !important;overflow:hidden;opacity:0;cursor:pointer}.lo-task__meta-toggle{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1.375rem;padding-left:var(--PXS);font-size:.725rem;border-left:1px solid var(--DIVIDER);cursor:pointer}.lo-task__meta--date .lo-task__meta-toggle{padding-right:var(--PXS)}.lo-task__meta--scheduled{--c: #fff;--ic: #fff;--bg: var(--C-SCHEDULE);--bsh: var(--C-SCHEDULE--LIGHTEN)}.lo-task__meta--scheduled .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--scheduled .lo-task__meta-input{color-scheme:dark}.lo-task__meta--expired{--c: #fff;--ic: #fff;--bg: var(--C-DUE);--bsh: var(--C-DUE--LIGHTEN)}.lo-task__meta--expired .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--expired .lo-task__meta-input{color-scheme:dark}@media(max-width: 61.24em){.lo-task--full{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}}.lo-task--done{--bg-color: var(--C-G50);--shadow: var(--DIVIDER)}.lo-task--done:hover,.lo-task--done:focus{--bg-color: var(--C-G50);--shadow: var(--DIVIDER--LIGHT)}.lo-task--done .lo-task__check>i{font-weight:bold;color:var(--C-DONE)}.lo-task--done .lo-task__check>i:before{content:""}.lo-task--done .lo-task__check>i:hover{color:var(--C-G500)}.lo-task--done .lo-task__check>i:hover:before{content:""}.lo-pref{--p: 0;position:absolute;z-index:100;top:var(--p);left:var(--p);right:var(--p);bottom:var(--p);background-color:var(--C-APP-ALPHA7);border-radius:var(--RL);box-shadow:rgba(40,40,44,.2) 0px 7px 29px 0px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lo-pref__toggle{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHTEN);--color-hover: var(--TC);position:absolute;z-index:100;top:1px;right:1px;display:flex;align-items:center;justify-content:center;width:34px;height:34px}.lo-pref__close{position:absolute;z-index:5;top:var(--PXS);right:var(--PXS);font-size:1.25rem;color:var(--TC--LIGHTEN)}.lo-pref__title{padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);font-size:1.15rem;line-height:1}.lo-pref__inner{display:grid;grid-template-columns:repeat(4, 1fr);gap:var(--P);padding:var(--P)}.lo-pref__box{display:flex;flex-direction:column;gap:var(--PXS)}.lo-pref__box-title{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-weight:500}.lo-pref__box-title>i{color:var(--TC--LIGHTEN)}.lo-pref__box-desc{font-size:.825rem;color:var(--TC--LIGHT)}.lo-pref__box-opt{font-size:.9rem} -
listowp/trunk/assets/js/admin.js
r2877206 r2884416 15 15 this.$el.on('change', 'select', e => this.onSelectChange(e)); 16 16 17 ajax('listo/v1/admin', { position }) 18 .done(json => this.render(json)) 19 .fail(xhr => alert(xhr.responseJSON.message)); 17 ajax('listo/v1/admin', { position }).done(json => this.render(json)); 20 18 } 21 19 … … 111 109 }); 112 110 }) 113 .fail(xhr => { 114 alert(xhr.responseJSON.message); 115 progress($config, 'fail'); 116 }); 111 .fail(() => progress($config, 'fail')); 117 112 118 113 // Update toggle class. … … 182 177 progress($config, 'done'); 183 178 }) 184 .fail(xhr => { 185 alert(xhr.responseJSON.message); 186 progress($config, 'fail'); 187 }); 179 .fail(() => progress($config, 'fail')); 188 180 } 189 181 … … 203 195 progress($config, 'done'); 204 196 }) 205 .fail(xhr => { 206 alert(xhr.responseJSON.message); 207 progress($config, 'fail'); 208 }); 197 .fail(() => progress($config, 'fail')); 209 198 } 210 199 } … … 218 207 beforeSend(xhr) { 219 208 xhr.setRequestHeader('X-WP-Nonce', REST_NONCE); 209 } 210 }).fail(xhr => { 211 if (xhr && xhr.responseJSON) { 212 alert(xhr.responseJSON.message); 220 213 } 221 214 }); -
listowp/trunk/assets/js/frontend.js
r2878127 r2884416 1 !function(t,o,s, a={}){const n=t.wpApiSettings.root,l=t.wpApiSettings.nonce;var e={ajax(t,e={},i="GET"){return o.ajax({url:""+n+t,method:i,data:e,dataType:"json",beforeSend(t){t.setRequestHeader("X-WP-Nonce",l)}})},template(t){var e={variable:"data",evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,escape:/\{\{-([\s\S]+?)\}\}/g};let i=s.template(t,e);return i="function"!=typeof i?s.template(t,null,e):i},data(e="",i){let o=a,s;e=e.split(".");for(let t=0;t<e.length&&void 0!==o[e[t]];t++)t===e.length-1?void 0===i?s=o[e[t]]:o[e[t]]=i:o=o[e[t]];return s},class(t,e){if(t.match(/^Listo([A-Z][a-z]+)*$/))return"function"==typeof e&&"function"==typeof(e=e(this,o))&&(this[t]=e),this[t];throw new Error("Invalid Listo class name.")},escapeHtml(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},nl2br(t){return t.replace(/\r?\n/g,"<br>")},isIOS:/iPad|iPhone|iPod/.test(navigator.userAgent)};t.listo=e}(window,window.jQuery,window._,window.listoData),function(t){Object.assign(t,{hooks:function(){let n={};function i(t,e,i,o=10){if("function"==typeof e&&(o=i||o,i=e,e=`cb_t${(new Date).getTime()}_r`+(1e4+Math.floor(1e4*Math.random()))),"function"!=typeof i)throw new Error("The callback parameter must be a function.");if("number"!=typeof o)throw new Error("The priority parameter must be a number.");let s=n[t],a=(s=s||(n[t]=[])).length;for(;0<a&&!(o>=s[a-1].priority);a--);return s.splice(a,0,{name:e,callback:i,priority:o}),e}function o(t,e){if(void 0===e)delete n[t];else{var i=n[t];if(i){for(let t=i.length-1;0<=t;t--)i[t].name===e&&i.splice(t,1);i.length||delete n[t]}}}function s(t,i,...o){let e=n[t],s;return i&&(s=o[0]),e&&e.forEach(t=>{try{var e=t.callback.apply(null,o);i&&(s=o[0]=e)}catch(t){}}),s}return{addFilter(t,...e){return i("filter/"+t,...e)},removeFilter(t,...e){return o("filter/"+t,...e)},applyFilters(t,...e){return s("filter/"+t,!0,...e)},addAction(t,...e){return i("action/"+t,...e)},removeAction(t,...e){return o("action/"+t,...e)},doAction(t,...e){return s("action/"+t,!1,...e)}}}()})}(window.listo),function(t){function e(t){t.style.height="",t.style.height=+t.scrollHeight+"px"}t.fn.listo_autosize=function(){return this.each(function(){e(this),t(this).off("input.listo-autosize").on("input.listo-autosize",function(){e(this)})})}}(window.jQuery),listo.trimHtml=function(t,e){var i=document.createElement("div"),t=(i.innerHTML=t,function t(e,o=0){return[...e.childNodes].forEach(e=>{if([Node.ELEMENT_NODE,Node.TEXT_NODE].find(t=>t===e.nodeType))if(o<=0)e.remove();else{if(Node.ELEMENT_NODE===e.nodeType){if("BR"===e.tagName)return void o--;var i=t(e,o);o=i.length,e.childNodes.length||e.remove()}if(Node.TEXT_NODE===e.nodeType){let t=e.textContent;t.length<=o?o-=t.length:((t=t[o].match(/\s/)?t.slice(0,o):-1===(i=(t=t.slice(0,o)).lastIndexOf(" "))?"":t.slice(0,Math.min(t.length,i))).length?e.textContent=t:e.remove(),o=0)}}}),{element:e,length:o}}(i,e));return t.element.innerHTML},listo.class("Listo",function(o,a){const{ajax:i,hooks:n,template:s,data:l,escapeHtml:d,nl2br:r}=o,c=!!+l("enable_collections");return class{constructor(t){this.collectionsMap={},this.currentCollection=l("last_viewed_collection");var e=s(l("templates.root")),i={enable_collections:c,lang:l("lang")};this.$el=a(t).html(e(i)),this.$wrapper=this.$el.find("[data-listo=wrapper]"),this.$sidebar=this.$el.find("[data-listo=sidebar]"),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$collectionHeader=this.$el.find("[data-listo=collection-header]"),this.$items=this.$el.find("[data-listo=items]"),this.$panels=this.$el.find("[data-listo=panel]"),this.$timezone=this.$el.find("[data-listo=user-timezone]"),this.$preferences=this.$el.find("[data-listo=preferences]"),this.$el.on("click change","[data-listo]",t=>this.triggerEventListener(t)),this.$el.on("click","[data-listo=pref-toggle]",t=>this.$preferences.fadeToggle(200)),this.$el.on("click","[data-listo=pref-close]",t=>this.$preferences.fadeToggle(200)),new(o.class("ListoCollectionHeader"))(this.$collectionHeader),new(o.class("ListoCollectionItems"))(this.$items),new(o.class("ListoNewCollection"))({toggle:this.$el.find("[data-listo=new-collection]"),form:this.$el.find("[data-listo=new-collection-form]")}),new(o.class("ListoNewItem"))({toggle:this.$el.find("[data-listo=new-item]"),form:this.$el.find("[data-listo=new-item-form]")}),this.sortable=new(o.class("ListoSortable"))(this.$el),n.addFilter("current_collection_id",()=>this.currentCollection),n.addFilter("can_create_item",t=>this.canCreateItem(t)),n.addAction("collection_added",t=>this.onCollectionAdded(t)),n.addAction("collection_updated",t=>this.onCollectionUpdated(t)),n.addAction("collection_deleted",t=>this.onCollectionDeleted(t)),n.addAction("items_loaded",()=>this.onItemsLoaded()),n.addAction("item_added",t=>this.onItemAdded(t)),n.addAction("item_moved",t=>this.onItemMoved(t)),n.addAction("maintenance",()=>this.maintenance()),a(document).on("keydown",t=>{"KeyF"!==t.code||!t.ctrlKey||t.altKey||t.shiftKey||this.onWrapperToggleClick(t)}),this.maintenance().always(()=>{c?this.loadCollections():this.loadItems("all"),this.getTimezone()})}$collection(t){return this.$smartCollections.add(this.$collections).children(`[data-listo=collection][data-id=${t}]`)}$item(t){return this.$items.children(`[data-listo=item][data-id=${t}]`)}loadCollections(){return this.$panels.addClass("loading"),i("listo/v1/collections").done(t=>{if(this.collectionsMap={},this.$smartCollections.empty(),this.$collections.empty(),t instanceof Array){t.sort((t,e)=>+t.order-+e.order);let i=s(l("templates.collection"));t.forEach(t=>{this.collectionsMap[t.id]=t;var e=i(t);(0<t.smart?this.$smartCollections:this.$collections).append(e)}),this.loadItems(this.currentCollection)}n.doAction("collections_loaded")}).fail(t=>alert(t.responseJSON.message)).always(()=>{this.$panels.removeClass("loading")})}loadItems(t){this.$panels.addClass("loading"),this.currentCollection=t;var e=this.$el.find("[data-listo=collection]"),i=this.$collection(t);e.filter(".active").not(i).removeClass("active"),i.addClass("active"),n.doAction("set_current_collection",this.collectionsMap[t])}loadItem(t){return i("listo/v1/items",{id:t}).done(t=>{}).fail(t=>alert(t.responseJSON.message))}updateItem(t,e={}){return i("listo/v1/items",Object.assign(e,{id:t}),"PATCH").done(t=>{}).fail(t=>alert(t.responseJSON.message))}canCreateItem(t){return t=t||this.currentCollection,-1===["due","scheduled","done","recurring"].indexOf(t)}getTimezone(){return i("listo/v1/preferences",{id:"timezone"}).done(t=>{t.timezone&&this.$timezone.val(t.timezone)})}setTimezone(t){return i("listo/v1/preferences",{id:"timezone",value:t},"PATCH")}maintenance(){return i("listo/v1/maintenance").done(t=>{if(t instanceof Array&&t[0]instanceof Object)for(const e in t[0]){let s=t[0][e];this.$collection(e).find("[data-field]").each((t,e)=>{var e=a(e),i=e.data("field"),o=s[i+"_formatted"];e.html(o),"count_items_due"===i&&(+o?e.show():e.hide())}),n.doAction("count_items_updated",Object.assign(s,{id:e}))}})}triggerEventListener(t){var e="on"+h(t.currentTarget.getAttribute("data-listo")+"-"+t.type);"function"==typeof this[e]&&this[e](t)}onWrapperToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$wrapper.toggleClass("lo-wrapper--fullscreen")}onSidebarToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$sidebar.hasClass("lo-sidebar--expanded")?(a(document).off("click.listo-sidebar"),this.$sidebar.removeClass("lo-sidebar--expanded")):(this.$sidebar.addClass("lo-sidebar--expanded"),a(document).one("click.listo-sidebar",()=>{this.$sidebar.removeClass("lo-sidebar--expanded")}))}onCollectionAdded(t={}){"object"==typeof t&&t.id&&(this.currentCollection=t.id,this.loadCollections())}onCollectionUpdated(e={}){if("object"==typeof e&&e.id){var i=this.$collection(e.id);for(const o in e){let t=e[o];-1<["initials","title","description"].indexOf(o)&&(t=r(d(t))),i.find(`[data-field=${o}]`).html(t)}}}onCollectionDeleted(t){this.$collection(t).remove(),this.currentCollection="inbox",this.loadCollections()}onCollectionClick(t){t.preventDefault();t=a(t.currentTarget);this.loadItems(t.data("id"))}onItemsLoaded(){this.sortable.init(this.currentCollection)}onItemAdded(t={}){"object"==typeof t&&t.id&&(n.doAction("maintenance"),this.loadItems(this.currentCollection))}onItemMoved(t=0){var e;this.$items.children("[data-listo=item]").length||n.applyFilters("can_create_item")||(e=s(l("templates.item_list_empty"))({collection:this.currentCollection}),this.$items.append(e)),n.doAction("maintenance")}onUserTimezoneChange(t){this.setTimezone(t.currentTarget.value).done(()=>{c?this.loadCollections():this.loadItems("all")})}onGdprDeleteClick(t){if(t.preventDefault(),t.stopPropagation(),confirm(l("lang.gdpr_delete_confirmation")))return i("listo/v1/gdpr",{},"DELETE").done(t=>{this.currentCollection="inbox",this.$timezone.val("+00:00"),c?this.loadCollections():this.loadItems("all")}).fail(t=>alert(t.responseJSON.message))}onDropdownToggleClick(t){let e=a(t.currentTarget).siblings("[data-listo=dropdown-menu]");e.is(":hidden")?(t.stopPropagation(),e.show(),a(document).one("click",()=>e.hide())):e.hide()}onDropdownMenuClick(t){t.stopPropagation()}};function h(t){return t.replace(/(?:^|-)([a-z])/gi,function(t,e){return e.toUpperCase()})}}),listo.class("ListoCollectionHeader",function(t,e){const{ajax:s,hooks:a,data:i,escapeHtml:n,nl2br:l}=t,d=+i("animation_speed");return class{constructor(t){this.data=null,this.saving=!1,this.$el=e(t),this.$info=this.$el.find("[data-listo=collection-info]"),this.$infoTitle=this.$info.find("[data-listo=title]"),this.$infoDescription=this.$info.find("[data-listo=description]"),this.$infoDescriptionToggle=this.$info.find("[data-listo=description-toggle]"),this.$edit=this.$el.find("[data-listo=edit-collection]"),this.$editForm=this.$el.find("[data-listo=edit-collection-form]"),this.$editTitle=this.$editForm.find("[name=title]"),this.$editDescription=this.$editForm.find("[name=description]"),this.$editCancel=this.$editForm.find("[data-listo=cancel]"),this.$editSave=this.$editForm.find("[data-listo=save]"),this.$delete=this.$el.find("[data-listo=delete-collection]"),this.$deleteForm=this.$el.find("[data-listo=delete-collection-form]"),this.$deleteCancel=this.$el.find("[data-listo=delete-collection-cancel]"),this.$deleteConfirm=this.$el.find("[data-listo=delete-collection-confirm]"),this.$createItem=e('[data-listo="wrapper"]').find("[data-listo=new-item]"),this.$infoDescriptionToggle.on("click",t=>this.onInfoDescriptionToggleClick(t)),this.$edit.on("click",t=>this.onEditClick(t)),this.$editTitle.on("input",t=>this.onEditTitleInput(t)),this.$editDescription.on("input",t=>this.onEditDescriptionInput(t)),this.$editCancel.on("click",t=>this.onEditCancelClick(t)),this.$editSave.on("click",t=>this.onEditSaveClick(t)),this.$delete.on("click",t=>this.onDeleteClick(t)),this.$deleteCancel.on("click",t=>this.onDeleteCancelClick(t)),this.$deleteConfirm.on("click",t=>this.onDeleteConfirmClick(t)),a.addAction("collections_loaded",()=>this.$el.show()),a.addAction("set_current_collection",t=>this.update(t)),a.addAction("count_items_updated",t=>this.updateCountItems(t))}reset(){var t=this.data.title.trim(),e=this.data.description.trim(),i=+this.data.smart,o=-1===["due","scheduled","done","recurring"].indexOf(this.data.id),t=(this.$info.show(),this.$infoTitle.html(l(n(t))),this.$infoDescription.html(l(n(e))),this.$edit[i?"hide":"show"](),this.$editForm.hide(),this.$editTitle.val(t),this.$editDescription.val(e),this.$editCancel.removeAttr("disabled"),this.$editSave.attr("disabled","disabled"),this.$delete.parent()[i?"fadeOut":"fadeIn"](d),this.$delete.show(),this.$deleteForm.hide(),this.$deleteCancel.hide(),this.$createItem[o?"show":"hide"](),this.$infoDescription[0]);t.scrollHeight>1.5*t.clientHeight?this.$infoDescriptionToggle.show():this.$infoDescriptionToggle.hide(),this.updateCountItems(this.data)}update(t){this.data=t,this.reset()}updateCountItems(t={}){t.id===this.data.id&&(this.$info.find("[data-field=count_items]").html(t.count_items),this.$info.find("[data-field=count_items_done]").html(t.count_items_done),this.$info.find("[data-field=count_items_due]").html(t.count_items_due))}onInfoDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();t="auto"===this.$infoDescription[0].style.height;this.$infoDescription.css({height:t?"":"auto",overflow:t?"":"visible"}),this.$infoDescriptionToggle[t?"removeClass":"addClass"]("lo-tip--alt")}onEditClick(t){t.preventDefault(),t.stopPropagation(),this.$info.hide(),this.$edit.hide(),this.$editForm.show(),this.$editTitle.data("value",this.$editTitle.val()),this.$editDescription.data("value",this.$editDescription.val()).listo_autosize(),this.$editSave.attr("disabled","disabled"),this.$createItem.fadeOut(d),setTimeout(()=>this.$editTitle[0].focus(),100)}onEditTitleInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditDescriptionInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditCancelClick(t){t.preventDefault(),t.stopPropagation(),this.reset()}onEditSaveClick(t){if(t.preventDefault(),t.stopPropagation(),!this.saving){this.saving=!0,this.$editCancel.add(this.$editSave).attr("disabled","disabled");let e=this.data.id;var t=this.$editTitle.val().trim(),o=this.$editDescription.val().trim();let i={id:e,title:t,description:o};s("listo/v1/collections",i,"PATCH").done(t=>{Object.assign(this.data,i),s("listo/v1/collections",{id:e}).done(t=>{t instanceof Array&&t[0]&&(this.data=t[0])}).always(()=>{this.saving=!1,this.reset(),a.doAction("collection_updated",this.data)})}).fail(t=>alert(t.responseJSON.message))}}onDeleteClick(t){t.preventDefault(),t.stopPropagation(),this.$delete.hide(),this.$deleteForm.add(this.$deleteCancel).fadeIn(d)}onDeleteCancelClick(t){t.preventDefault(),t.stopPropagation(),this.$deleteForm.add(this.$deleteCancel).fadeOut(d,()=>this.$delete.show())}onDeleteConfirmClick(t){t.preventDefault(),t.stopPropagation(),s("listo/v1/collections/"+this.data.id,{},"DELETE").done(t=>{this.$deleteForm.add(this.$deleteCancel).hide(),this.$delete.show(),a.doAction("collection_deleted",this.data.id)}).fail(t=>alert(t.responseJSON.message))}onCreateItemClick(t){}}}),listo.class("ListoCollectionItems",function(t,c){const{ajax:o,hooks:s,template:a,data:n,isIOS:l}=t,i=+n("animation_speed");return class{constructor(t){this.collection=null,this.$el=c(t),this.$el.on("click","[data-listo=item]",t=>this.onItemClick(t)),this.$el.on("click","[data-listo=item-toggle]",t=>this.onItemToggleClick(t)),this.$el.on("click","[data-listo=item-check]",t=>this.onItemCheckClick(t)),this.$el.on("click","[data-listo=description-toggle]",t=>this.onDescriptionToggleClick(t)),this.$el.on("click","[data-listo=item-due-picker]",t=>this.onItemDuePickerClick(t)).on("input","[data-listo=item-due-picker]",t=>this.onItemDuePickerInput(t)).on("change","[data-listo=item-due-picker]",t=>this.onItemDuePickerChange(t)).on("blur","[data-listo=item-due-picker]",t=>this.onItemDuePickerBlur(t)),this.$el.on("click","[data-listo=item-due-remove]",t=>this.onItemDueRemoveClick(t)),this.$el.on("click","[data-listo=delete-item]",t=>this.onDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-cancel]",t=>this.onCancelDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-confirm]",t=>this.onConfirmDeleteItemClick(t)),this.$el.on("click","[data-listo=edit-item]",t=>this.onEditItemClick(t)),this.$el.on("input","[name=title]",t=>this.onEditTitleInput(t)),this.$el.on("input","[name=description]",t=>this.onEditDescriptionInput(t)),this.$el.on("click","[data-listo=cancel]",t=>this.onCancelEditItemClick(t)),this.$el.on("click","[data-listo=save]",t=>this.onSaveEditItemClick(t)),s.addAction("set_current_collection",t=>this.update(t))}update(t){this.collection=t.id,o("listo/v1/items",{collection:this.collection}).done(t=>{this.render(t),s.doAction("items_loaded",t)}).fail(t=>alert(t.responseJSON.message))}render(t){if(this.$el.empty(),t instanceof Array&&t.length){let e=a(n("templates.item"));t.forEach(t=>{t.due=t.due&&t.due.split(" ")[0],this.$el.append(e(t))})}else s.applyFilters("can_create_item")||(t=a(n("templates.item_list_empty")),this.$el.append(t({collection:this.collection})))}loadItem(t){return o("listo/v1/items",{id:t}).done(t=>{}).fail(t=>alert(t.responseJSON.message))}updateItem(t,e={}){return o("listo/v1/items",Object.assign(e,{id:t}),"PATCH").done(t=>{t instanceof Array&&t[0]&&s.doAction("item_updated",t[0])}).fail(t=>alert(t.responseJSON.message))}toggleItem(t,e){var i=c(t),o=c("[data-listo=item]"),s="lo-task--full";!0!==e||i.hasClass(s)?!1===e&&i.hasClass(s)?i.removeClass(s):void 0===e&&this.toggleItem(t,!i.hasClass(s)):(o.removeClass(s),i.addClass(s))}onItemClick(t){t.preventDefault(),t.stopPropagation(),this.toggleItem(t.currentTarget,!0)}onItemToggleClick(t){t.preventDefault(),t.stopPropagation();t=c(t.currentTarget).closest("[data-listo=item]");this.toggleItem(t)}onItemCheckClick(t){t.preventDefault(),t.stopPropagation();let o=c(t.currentTarget).closest("[data-listo=item]");if(!o.data("saving")){o.data("saving",1);let t=o.data("id"),e=o.data("rrule_id"),i=+o.data("status")?0:1;this.updateItem(t,{status:i,rrule_id:e}).done(()=>{e&&i?(this.update({id:this.collection}),o.removeData("saving"),s.doAction("maintenance")):"done"!==this.collection||i?this.loadItem(t).done(t=>{var e;t instanceof Array&&t.length&&(e=a(n("templates.item")),(t=t[0]).due=t.due&&t.due.split(" ")[0],o.replaceWith(e(t))),o.removeData("saving"),s.doAction("maintenance")}):(o.remove(),o.removeData("saving"),s.doAction("maintenance"))})}}onItemDuePickerClick(t){t.stopPropagation();t=c(t.currentTarget);t.data("value",t.val()),t[0].showPicker()}onItemDuePickerInput(t){t.stopPropagation();let i=(new Date).getTime(),o=c(t.currentTarget).data("date-event-id",i);setTimeout(()=>{var t=(l?o.data("onblur"):o.data("onchange"))&&o.data("value")!==o.val();if(o.removeData("onchange onblur"),t&&o.data("date-event-id")===i){let i=o.closest("[data-listo=item-due]");var t=i.closest("[data-listo=item]").data("id"),e=o.val();i.show().css("opacity",.3),this.updateItem(t,{due:e}).done(t=>{var e;t instanceof Array&&t.length&&(e=a(n("templates.item_due")),(t=t[0]).due=t.due&&t.due.split(" ")[0],i.replaceWith(e(t))),s.doAction("maintenance")})}},200)}onItemDuePickerChange(t){t.stopPropagation(),c(t.currentTarget).data("onchange",!0)}onItemDuePickerBlur(t){t.stopPropagation(),c(t.currentTarget).data("onblur",!0),this.onItemDuePickerInput(t)}onItemDueRemoveClick(t){t.stopPropagation();let i=c(t.currentTarget).closest("[data-listo=item-due]");t=i.closest("[data-listo=item]");this.updateItem(t.data("id"),{due:""}).done(t=>{var e;t instanceof Array&&t.length&&(e=a(n("templates.item_due")),(t=t[0]).due=t.due&&t.due.split(" ")[0],i.replaceWith(e(t))),s.doAction("maintenance")})}onDeleteItemClick(t){t.preventDefault(),t.stopPropagation();t=c(t.currentTarget).closest("[data-listo=item]");t.find("[data-listo=delete-item]").hide(),t.find("[data-listo=delete-item-form]").add(t.find("[data-listo=delete-item-cancel]")).fadeIn(i)}onCancelDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=c(t.currentTarget).closest("[data-listo=item]");e.find("[data-listo=delete-item-form]").add(e.find("[data-listo=delete-item-cancel]")).fadeOut(i,()=>{e.find("[data-listo=delete-item]").show()})}onConfirmDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=c(t.currentTarget).closest("[data-listo=item]");t=e.data("id");return o("listo/v1/items/"+t,{},"DELETE").done(()=>{e.siblings().length?e.css({opacity:0}).slideUp(i,()=>e.remove()):this.render([]),s.doAction("maintenance")}).fail(t=>alert(t.responseJSON.message))}onDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();var t=c(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=description]").parent(),t=t.find("[data-listo=description-toggle]");e.slideToggle(),t.toggleClass("lo-tip--alt")}onEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=c(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),a=t.find("[data-listo=edit-item]"),n=t.find("[data-listo=edit-item-form]");let l=n.find("[name=title]");var d=n.find("[name=description]"),r=n.find("[data-listo=save]");t.toggleClass("lo-task--edit"),a.hide(),e.hide(),i.hide(),o.hide(),s.hide(),n.show(),l.data("value",l.val()),d.data("value",d.val()).listo_autosize(),r.attr("disabled","disabled"),setTimeout(()=>l[0].focus(),100)}onEditTitleInput(t){var t=c(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onEditDescriptionInput(t){var t=c(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onCancelEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=c(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),a=t.find("[data-listo=edit-item]"),n=t.find("[data-listo=edit-item-form]"),l=n.find("[name=title]"),d=n.find("[name=description]"),r=n.find("[data-listo=save]");t.toggleClass("lo-task--edit"),e.show(),a.show(),i.show(),o.hide(),s.show(),n.hide(),l.val(l.data("value")),d.val(d.data("value")),r.attr("disabled","disabled")}onSaveEditItemClick(t){t.preventDefault(),t.stopPropagation();let i=c(t.currentTarget).closest("[data-listo=item]");var t=i.find("[data-listo=edit-item-form]"),e=t.find("[name=title]"),t=t.find("[name=description]"),e={id:i.data("id"),title:e.val().trim(),description:t.val().trim()};return o("listo/v1/items",e,"PATCH").done(t=>{var e=a(n("templates.item")),t=t[0];t.due=t.due&&t.due.split(" ")[0],i.replaceWith(e(t)),s.doAction("maintenance")}).fail(t=>alert(t.responseJSON.message))}}}),listo.class("ListoNewCollection",function(t,e){const{ajax:s,hooks:a,data:i}=t,o=+i("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$saveAndNew=this.$form.find("[data-listo=save-and-new]"),this.$buttons=this.$save.add(this.$saveAndNew),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$save.on("click",()=>this.submit()),this.$saveAndNew.on("click",()=>this.submit(!0)),a.addAction("collections_loaded",()=>this.$toggle.show()),a.addAction("new_item_form",()=>this.hide())}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(o),this.$title.focus(),a.doAction("new_collection_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(o))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(i){let o=this.value();o&&!this.saving&&(this.saving=!0,this.onInput(),s("listo/v1/collections",{},"POST").done(e=>{if(e instanceof Array&&e[0]){let t=Object.assign(e[0],{title:o});e=t["id"];s("listo/v1/collections",{id:e,title:o},"PATCH").fail(t=>alert(t.responseJSON.message)).always(()=>{this.value(""),this.saving=!1,this.onInput(),a.doAction("collection_added",t),i?this.$title.focus():this.hide()})}}).fail(t=>alert(t.responseJSON.message)))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),(t.shiftKey?this.$saveAndNew:this.$save).trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$buttons.removeAttr("disabled"):this.$buttons.attr("disabled","disabled")}}}),listo.class("ListoNewItem",function(t,e){const{ajax:a,hooks:n,data:i}=t,o=+i("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$saveAndNew=this.$form.find("[data-listo=save-and-new]"),this.$buttons=this.$save.add(this.$saveAndNew),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$save.on("click",()=>this.submit()),this.$saveAndNew.on("click",()=>this.submit(!0)),n.addAction("new_collection_form",()=>this.hide())}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(o),this.$title.focus(),n.doAction("new_item_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(o))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(o){let s=this.value();s&&!this.saving&&(this.saving=!0,this.onInput(),a("listo/v1/items",{},"POST").done(e=>{if(e instanceof Array&&e[0]){var i=+n.applyFilters("current_collection_id")||void 0;let t=Object.assign(e[0],{title:s,collection:i});e=t["id"];a("listo/v1/items",{id:e,title:s,collection:i},"PATCH").fail(t=>alert(t.responseJSON.message)).always(()=>{this.value(""),this.saving=!1,this.onInput(),n.doAction("item_added",t),o?this.$title.focus():this.hide()})}}).fail(t=>alert(t.responseJSON.message)))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),(t.shiftKey?this.$saveAndNew:this.$save).trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$buttons.removeAttr("disabled"):this.$buttons.attr("disabled","disabled")}}}),listo.class("ListoSortable",function(t,l){const{ajax:i,hooks:o}=t;return class{constructor(t){this.$el=l(t),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$items=this.$el.find("[data-listo=items]")}getObjects(){return l().add(this.$smartCollections.find("[data-listo=collection]")).add(this.$collections.find("[data-listo=collection]")).add(this.$items.find("[data-listo=item]")).toArray()}init(t){this.currentCollection=t,this.objects=this.getObjects(),this.draggedObject=null,this.objects.forEach(t=>{t.getAttribute("draggable")||(t.draggable=!0,t.addEventListener("dragstart",this.onDragStart.bind(this)),t.addEventListener("dragenter",this.onDragEnter.bind(this)),t.addEventListener("dragover",this.onDragOver.bind(this)),t.addEventListener("dragleave",this.onDragLeave.bind(this)),t.addEventListener("dragend",this.onDragEnd.bind(this)),t.addEventListener("drop",this.onDrop.bind(this)))})}reorderCollections(){var t=this.$collections.children("[data-listo=collection]").toArray().map(t=>t.getAttribute("data-id"));return i("listo/v1/collections",{ids:t},"PATCH").done(()=>{o.doAction("collections_reorder")})}reorderItems(){var t=this.$items.children("[data-listo=item]").toArray().map(t=>t.getAttribute("data-id")),e=this.currentCollection;return i("listo/v1/items",{ids:t,collection:e},"PATCH").done(()=>{o.doAction("items_reorder")})}moveItem(t,e){return e=0<e?e:0,i("listo/v1/items",{id:t,collection:e},"PATCH").done(()=>{o.doAction("item_move",{id:t,collection:e})})}canDrag(t){if("collection"===t.getAttribute("data-listo")){if(!+t.getAttribute("data-id"))return!1}else{t=this.currentCollection;if(!+t&&"inbox"!==t)return!1}return!0}canDrop(t,e){if(t&&t!==e){var i=t.getAttribute("data-listo"),o=e.getAttribute("data-listo"),t=t.getAttribute("data-id"),e=e.getAttribute("data-id");if("collection"===i){if("item"===o)return!1;if(!+e)return!1}else if("item"===i)if("collection"===o){if(e==this.currentCollection)return!1;if(!+e&&"inbox"!==e)return!1}else if(!+this.currentCollection)return!1;return{sourceType:i,sourceId:t,targetType:o,targetId:e}}return!1}onDragStart(t){var e=t.currentTarget;this.canDrag(e)?this.draggedObject=e:t.preventDefault()}onDragEnter(t){var e=this.draggedObject,t=t.currentTarget;this.canDrop(e,t)}onDragOver(t){return t.preventDefault(),!1}onDragLeave(t){this.draggedObject,t.currentTarget}onDragEnd(t){t.currentTarget;this.objects.forEach(t=>{})}onDrop(s){s.stopPropagation(),s.preventDefault();let a=this.draggedObject;var s=s.currentTarget,n=this.canDrop(a,s);if(n){let{sourceType:t,sourceId:e,targetType:i,targetId:o}=n;"item"===t&&"collection"===i?l(a).css({opacity:0}).slideUp(()=>{a.remove(),this.moveItem(e,o)}):t===i&&(n=a.parentElement,d(a)>d(s)?n.insertBefore(a,s):(s=s.nextElementSibling)?n.insertBefore(a,s):n.append(a),"collection"===t?this.reorderCollections():"item"===t&&this.reorderItems()),this.draggedObject=null}}};function d(t,e=0){return e=t.previousElementSibling?d(t.previousElementSibling,e+1):e}}),function(e,t,i,o={}){function s(){document.querySelectorAll("[data-listo=root]").forEach(t=>new e.Listo(t))}+t.logged_in&&i(function(){o&&o.domReady?o.domReady(()=>setTimeout(s,0)):s()})}(window.listo,window.listoData,window.jQuery,window.wp);1 !function(t,o,s,n={}){const a=t.wpApiSettings.root,l=t.wpApiSettings.nonce;var e={ajax(t,e={},i="GET"){return o.ajax({url:""+a+t,method:i,data:e,dataType:"json",beforeSend(t){t.setRequestHeader("X-WP-Nonce",l)}}).fail(t=>{t&&t.responseJSON&&alert(t.responseJSON.message)})},template(t){var e={variable:"data",evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,escape:/\{\{-([\s\S]+?)\}\}/g};let i=s.template(t,e);return i="function"!=typeof i?s.template(t,null,e):i},data(e="",i){let o=n,s;e=e.split(".");for(let t=0;t<e.length&&void 0!==o[e[t]];t++)t===e.length-1?void 0===i?s=o[e[t]]:o[e[t]]=i:o=o[e[t]];return s},class(t,e){if(t.match(/^Listo([A-Z][a-z]+)*$/))return"function"==typeof e&&"function"==typeof(e=e(this,o))&&(this[t]=e),this[t];throw new Error("Invalid Listo class name.")},escapeHtml(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},nl2br(t){return t.replace(/\r?\n/g,"<br>")},isIOS:/iPad|iPhone|iPod/.test(navigator.userAgent),focus(t){var e;(t=t.jquery?t[0]:t).focus(),t.setSelectionRange&&(e=t.value.length,t.setSelectionRange(e,e))}};t.listo=e}(window,window.jQuery,window._,window.listoData),function(t){Object.assign(t,{hooks:function(){let a={};function i(t,e,i,o=10){if("function"==typeof e&&(o=i||o,i=e,e=`cb_t${(new Date).getTime()}_r`+(1e4+Math.floor(1e4*Math.random()))),"function"!=typeof i)throw new Error("The callback parameter must be a function.");if("number"!=typeof o)throw new Error("The priority parameter must be a number.");let s=a[t],n=(s=s||(a[t]=[])).length;for(;0<n&&!(o>=s[n-1].priority);n--);return s.splice(n,0,{name:e,callback:i,priority:o}),e}function o(t,e){if(void 0===e)delete a[t];else{var i=a[t];if(i){for(let t=i.length-1;0<=t;t--)i[t].name===e&&i.splice(t,1);i.length||delete a[t]}}}function s(t,i,...o){let e=a[t],s;return i&&(s=o[0]),e&&(e=e.map(t=>t.callback)).forEach(t=>{try{var e=t.apply(null,o);i&&(s=o[0]=e)}catch(t){}}),s}return{addFilter(t,...e){return i("filter/"+t,...e)},removeFilter(t,...e){return o("filter/"+t,...e)},applyFilters(t,...e){return s("filter/"+t,!0,...e)},addAction(t,...e){return i("action/"+t,...e)},removeAction(t,...e){return o("action/"+t,...e)},doAction(t,...e){return s("action/"+t,!1,...e)}}}()})}(window.listo),function(t){function e(t){t.style.height="",t.style.height=+t.scrollHeight+"px"}t.fn.listo_autosize=function(){return this.each(function(){e(this),t(this).off("input.listo-autosize").on("input.listo-autosize",function(){e(this)})})}}(window.jQuery),listo.trimHtml=function(t,e){var i=document.createElement("div"),t=(i.innerHTML=t,function t(e,o=0){return[...e.childNodes].forEach(e=>{if([Node.ELEMENT_NODE,Node.TEXT_NODE].find(t=>t===e.nodeType))if(o<=0)e.remove();else{if(Node.ELEMENT_NODE===e.nodeType){if("BR"===e.tagName)return void o--;var i=t(e,o);o=i.length,e.childNodes.length||e.remove()}if(Node.TEXT_NODE===e.nodeType){let t=e.textContent;t.length<=o?o-=t.length:((t=t[o].match(/\s/)?t.slice(0,o):-1===(i=(t=t.slice(0,o)).lastIndexOf(" "))?"":t.slice(0,Math.min(t.length,i))).length?e.textContent=t:e.remove(),o=0)}}}),{element:e,length:o}}(i,e));return t.element.innerHTML},listo.class("ListoAbstract",function(t,e){return class{constructor(t){this.$container=e(t),this.$container.on("click change input","[data-listo]",t=>{this.triggerEventListener(t)})}triggerEventListener(t){var e="on"+i(t.currentTarget.getAttribute("data-listo")+"-"+t.type);"function"==typeof this[e]&&this[e](t)}};function i(t){return t.replace(/(?:^|-)([a-z])/gi,function(t,e){return e.toUpperCase()})}}),listo.class("ListoRoot",function(o,n){const{ajax:i,hooks:a,template:s,data:l,escapeHtml:d,nl2br:r}=o,c=!!+l("enable_collections"),e=+l("animation_speed")||0;return class extends o.class("ListoAbstract"){constructor(t){super(t),this.collectionsMap={},this.currentCollection=l("last_viewed_collection");var e=s(l("templates.root")),i={enable_collections:c,lang:l("lang")};this.$el=n(t).html(e(i)),this.$wrapper=this.$el.find("[data-listo=wrapper]"),this.$sidebar=this.$el.find("[data-listo=sidebar]"),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$collectionHeader=this.$el.find("[data-listo=collection-header]"),this.$items=this.$el.find("[data-listo=items]"),this.$panels=this.$el.find("[data-listo=panel]"),this.$timezone=this.$el.find("[data-listo=user-timezone]"),this.$preferences=this.$el.find("[data-listo=preferences]"),new(o.class("ListoCollectionHeader"))(this.$collectionHeader),new(o.class("ListoItems"))(this.$items),new(o.class("ListoNewCollection"))({toggle:this.$el.find("[data-listo=new-collection]"),form:this.$el.find("[data-listo=new-collection-form]")}),new(o.class("ListoNewItem"))({toggle:this.$el.find("[data-listo=new-item]"),form:this.$el.find("[data-listo=new-item-form]")}),this.sortable=new(o.class("ListoSortable"))(this.$el),a.addFilter("current_collection_id",()=>this.currentCollection),a.addFilter("can_create_item",t=>this.canCreateItem(t)),a.addAction("collection_added",t=>this.onCollectionAdded(t)),a.addAction("collection_updated",t=>this.onCollectionUpdated(t)),a.addAction("collection_deleted",t=>this.onCollectionDeleted(t)),a.addAction("items_loaded",()=>this.onItemsLoaded()),a.addAction("item_added",()=>this.onItemAdded()),a.addAction("item_moved",t=>this.onItemMoved(t)),a.addAction("maintenance",()=>this.maintenance()),n(document).on("keydown",t=>{"KeyF"===t.code&&t.ctrlKey&&!t.altKey&&this.onWrapperToggleClick(t)}),this.maintenance().always(()=>{c?this.loadCollections():this.loadItems("all"),this.getTimezone()})}$collection(t){return this.$smartCollections.add(this.$collections).children(`[data-listo=collection][data-id=${t}]`)}$item(t){return this.$items.children(`[data-listo=item][data-id=${t}]`)}loadCollections(){return this.$panels.addClass("loading"),i("listo/v1/collections").done(t=>{if(this.collectionsMap={},this.$smartCollections.empty(),this.$collections.empty(),t instanceof Array){t.sort((t,e)=>+t.order-+e.order);let i=s(l("templates.collection"));t.forEach(t=>{this.collectionsMap[t.id]=t;var e=i(t);(0<t.smart?this.$smartCollections:this.$collections).append(e)}),this.loadItems(this.currentCollection)}a.doAction("collections_loaded")}).always(()=>{this.$panels.removeClass("loading")})}loadItems(t){this.$panels.addClass("loading"),this.currentCollection=t;var e=this.$el.find("[data-listo=collection]"),i=this.$collection(t);e.filter(".active").not(i).removeClass("active"),i.addClass("active"),a.doAction("set_current_collection",this.collectionsMap[t])}loadItem(t){return i("listo/v1/items",{id:t}).done(t=>{})}updateItem(t,e={}){return i("listo/v1/items",Object.assign(e,{id:t}),"PATCH").done(t=>{})}canCreateItem(t){return t=t||this.currentCollection,-1===["due","scheduled","done","recurring"].indexOf(t)}getTimezone(){return i("listo/v1/preferences",{id:"timezone"}).done(t=>{t.timezone&&this.$timezone.val(t.timezone)})}setTimezone(t){return i("listo/v1/preferences",{id:"timezone",value:t},"PATCH")}maintenance(){return i("listo/v1/maintenance").done(t=>{if(t instanceof Array&&t[0]instanceof Object)for(const e in t[0]){let s=t[0][e];this.$collection(e).find("[data-field]").each((t,e)=>{var e=n(e),i=e.data("field"),o=s[i+"_formatted"];e.html(o),"count_items_due"===i&&(+o?e.show():e.hide())}),a.doAction("count_items_updated",Object.assign(s,{id:e}))}})}onWrapperToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$wrapper.toggleClass("lo-wrapper--fullscreen")}onSidebarToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$sidebar.hasClass("lo-sidebar--expanded")?(n(document).off("click.listo-sidebar"),this.$sidebar.removeClass("lo-sidebar--expanded")):(this.$sidebar.addClass("lo-sidebar--expanded"),n(document).one("click.listo-sidebar",()=>{this.$sidebar.removeClass("lo-sidebar--expanded")}))}onCollectionAdded(t={}){"object"==typeof t&&t.id&&(this.currentCollection=t.id,this.loadCollections())}onCollectionUpdated(e={}){if("object"==typeof e&&e.id){var i=this.$collection(e.id);for(const o in e){let t=e[o];-1<["initials","title","description"].indexOf(o)&&(t=r(d(t))),i.find(`[data-field=${o}]`).html(t)}}}onCollectionDeleted(t){this.$collection(t).remove(),this.currentCollection="inbox",this.loadCollections(),a.doAction("maintenance")}onCollectionClick(t){t.preventDefault(),t.stopPropagation();t=n(t.currentTarget);this.loadItems(t.data("id"))}onItemsLoaded(){this.sortable.init(this.currentCollection)}onItemAdded(){a.doAction("maintenance")}onItemMoved(t=0){var e;this.$items.children("[data-listo=item]").length||a.applyFilters("can_create_item")||(e=s(l("templates.item_list_empty"))({collection:this.currentCollection}),this.$items.append(e)),a.doAction("maintenance")}onUserTimezoneChange(t){this.setTimezone(t.currentTarget.value).done(()=>{c?this.loadCollections():this.loadItems("all")})}onGdprDeleteClick(t){if(t.preventDefault(),t.stopPropagation(),confirm(l("lang.gdpr_delete_confirmation")))return i("listo/v1/gdpr",{},"DELETE").done(t=>{this.currentCollection="inbox",this.$timezone.val("+00:00"),c?this.loadCollections():this.loadItems("all")})}onDropdownToggleClick(t){let e=n(t.currentTarget).siblings("[data-listo=dropdown-menu]");e.is(":hidden")?(t.stopPropagation(),e.show(),n(document).one("click",()=>e.hide())):e.hide()}onDropdownMenuClick(t){t.stopPropagation()}onPreferencesClick(t){t.stopPropagation()}onPreferencesToggleClick(t){this.$preferences.fadeIn(e),n(document).on("keydown.listo-preferences",t=>{"Escape"===t.code&&(n(document).off("keydown.listo-preferences"),this.$preferences.fadeOut(e))})}onPreferencesCloseClick(t){n(document).off("keydown.listo-preferences"),this.$preferences.fadeOut(e)}}}),listo.class("ListoCollectionHeader",function(e,i){const{ajax:s,hooks:n,data:t,escapeHtml:a,nl2br:l}=e,d=+t("animation_speed");return class{constructor(t){this.data=null,this.saving=!1,this.$el=i(t),this.$info=this.$el.find("[data-listo=collection-info]"),this.$infoTitle=this.$info.find("[data-listo=title]"),this.$infoDescription=this.$info.find("[data-listo=description]"),this.$infoDescriptionToggle=this.$info.find("[data-listo=description-toggle]"),this.$edit=this.$el.find("[data-listo=edit-collection]"),this.$editForm=this.$el.find("[data-listo=edit-collection-form]"),this.$editTitle=this.$editForm.find("[name=title]"),this.$editDescription=this.$editForm.find("[name=description]"),this.$editCancel=this.$editForm.find("[data-listo=cancel]"),this.$editSave=this.$editForm.find("[data-listo=save]"),this.$delete=this.$el.find("[data-listo=delete-collection]"),this.$deleteForm=this.$el.find("[data-listo=delete-collection-form]"),this.$deleteCancel=this.$el.find("[data-listo=delete-collection-cancel]"),this.$deleteConfirm=this.$el.find("[data-listo=delete-collection-confirm]"),this.$createItem=i('[data-listo="wrapper"]').find("[data-listo=new-item]"),this.$infoDescriptionToggle.on("click",t=>this.onInfoDescriptionToggleClick(t)),this.$edit.on("click",t=>this.onEditClick(t)),this.$editTitle.on("input",t=>this.onEditTitleInput(t)),this.$editDescription.on("input",t=>this.onEditDescriptionInput(t)),this.$editCancel.on("click",t=>this.onEditCancelClick(t)),this.$editSave.on("click",t=>this.onEditSaveClick(t)),this.$delete.on("click",t=>this.onDeleteClick(t)),this.$deleteCancel.on("click",t=>this.onDeleteCancelClick(t)),this.$deleteConfirm.on("click",t=>this.onDeleteConfirmClick(t)),n.addAction("set_current_collection",t=>this.update(t)),n.addAction("count_items_updated",t=>this.updateCountItems(t)),n.addAction("collections_loaded","new_item_form",()=>{n.removeAction("collections_loaded","new_item_form"),this.$el.show()})}reset(){var t=this.data.title.trim(),e=this.data.description.trim(),i=+this.data.smart,o=-1===["due","scheduled","done","recurring"].indexOf(this.data.id),t=(this.$info.show(),this.$infoTitle.html(l(a(t))),this.$infoDescription.html(l(a(e))),this.$edit[i?"hide":"show"](),this.$editForm.hide(),this.$editTitle.val(t),this.$editDescription.val(e),this.$editCancel.removeAttr("disabled"),this.$editSave.attr("disabled","disabled"),this.$delete.parent()[i?"fadeOut":"fadeIn"](d),this.$delete.show(),this.$deleteForm.hide(),this.$deleteCancel.hide(),this.$createItem[o?"show":"hide"](),this.$infoDescription[0]);t.scrollHeight>1.5*t.clientHeight?this.$infoDescriptionToggle.show():this.$infoDescriptionToggle.hide(),this.updateCountItems(this.data)}update(t){this.data=t,this.reset()}updateCountItems(t={}){t.id===this.data.id&&(this.$info.find("[data-field=count_items]").html(t.count_items),this.$info.find("[data-field=count_items_done]").html(t.count_items_done),this.$info.find("[data-field=count_items_due]").html(t.count_items_due))}onInfoDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();t="auto"===this.$infoDescription[0].style.height;this.$infoDescription.css({height:t?"":"auto",overflow:t?"":"visible"}),this.$infoDescriptionToggle[t?"removeClass":"addClass"]("lo-tip--alt")}onEditClick(t){t.preventDefault(),t.stopPropagation(),this.$info.hide(),this.$edit.hide(),this.$editForm.show(),this.$editTitle.data("value",this.$editTitle.val()),this.$editDescription.data("value",this.$editDescription.val()).listo_autosize(),this.$editSave.attr("disabled","disabled"),this.$createItem.fadeOut(d),e.focus(this.$editTitle)}onEditTitleInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditDescriptionInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditCancelClick(t){t.preventDefault(),t.stopPropagation(),this.reset()}onEditSaveClick(t){if(t.preventDefault(),t.stopPropagation(),!this.saving){this.saving=!0,this.$editCancel.add(this.$editSave).attr("disabled","disabled");let e=this.data.id;var t=this.$editTitle.val().trim(),o=this.$editDescription.val().trim();let i={id:e,title:t,description:o};s("listo/v1/collections",i,"PATCH").done(t=>{Object.assign(this.data,i),s("listo/v1/collections",{id:e}).done(t=>{t instanceof Array&&t[0]&&(this.data=t[0])}).always(()=>{this.saving=!1,this.reset(),n.doAction("collection_updated",this.data)})})}}onDeleteClick(t){t.preventDefault(),t.stopPropagation(),this.$delete.hide(),this.$deleteForm.add(this.$deleteCancel).fadeIn(d)}onDeleteCancelClick(t){t.preventDefault(),t.stopPropagation(),this.$deleteForm.add(this.$deleteCancel).fadeOut(d,()=>this.$delete.show())}onDeleteConfirmClick(t){t.preventDefault(),t.stopPropagation(),s("listo/v1/collections/"+this.data.id,{},"DELETE").done(t=>{this.$deleteForm.add(this.$deleteCancel).hide(),this.$delete.show(),n.doAction("collection_deleted",this.data.id)})}onCreateItemClick(t){}}}),listo.class("ListoNewCollection",function(o,e){const{ajax:s,hooks:n,data:t}=o,i=+t("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$save.on("click",()=>this.submit()),n.addAction("new_item_form",()=>this.hide()),n.addAction("collections_loaded","new_collection_form",()=>{n.removeAction("collections_loaded","new_collection_form"),this.$toggle.show()})}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(i),o.focus(this.$title),n.doAction("new_collection_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(i))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(){let i=this.value();i&&!this.saving&&(this.saving=!0,this.onInput(),s("listo/v1/collections",{},"POST").done(e=>{if(e instanceof Array&&e[0]){let t=Object.assign(e[0],{title:i});e=t["id"];s("listo/v1/collections",{id:e,title:i},"PATCH").always(()=>{this.value(""),this.saving=!1,this.onInput(),o.focus(this.$title),n.doAction("collection_added",t)})}}))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),this.$save.trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$save.removeAttr("disabled"):this.$save.attr("disabled","disabled")}}}),listo.class("ListoItems",function(c,h){const{ajax:i,hooks:n,template:a,data:l}=c,o=+l("animation_speed");return class{constructor(t){this.collection=null,this.$el=h(t),this.$el.on("click","[data-listo=item]",t=>this.onItemClick(t)),this.$el.on("click","[data-listo=item-toggle]",t=>this.onItemToggleClick(t)),this.$el.on("click","[data-listo=item-check]",t=>this.onItemCheckClick(t)),this.$el.on("click","[data-listo=description-toggle]",t=>this.onDescriptionToggleClick(t)),this.$el.on("click","[data-listo=delete-item]",t=>this.onDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-cancel]",t=>this.onCancelDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-confirm]",t=>this.onConfirmDeleteItemClick(t)),this.$el.on("click","[data-listo=edit-item]",t=>this.onEditItemClick(t)),this.$el.on("input","[name=title]",t=>this.onEditTitleInput(t)),this.$el.on("input","[name=description]",t=>this.onEditDescriptionInput(t)),this.$el.on("click","[data-listo=cancel]",t=>this.onCancelEditItemClick(t)),this.$el.on("click","[data-listo=save]",t=>this.onSaveEditItemClick(t)),new(c.class("ListoItemDue"))(t),n.addAction("set_current_collection",t=>{this.collection=t.id,this.update()}),n.addAction("item_added",()=>this.update())}update(){i("listo/v1/items",{collection:this.collection}).done(t=>{this.render(t),n.doAction("items_loaded",t)})}render(t){if(this.$el.empty(),t instanceof Array&&t.length){let e=a(l("templates.item"));t.forEach(t=>this.$el.append(e(t)))}else n.applyFilters("can_create_item")||(t=a(l("templates.item_list_empty")),this.$el.append(t({collection:this.collection})))}loadItem(t){return i("listo/v1/items",{id:t}).done(t=>{})}updateItem(t,e={}){return i("listo/v1/items",Object.assign(e,{id:t}),"PATCH")}toggleItem(t,e){var i=h(t),o=h("[data-listo=item]"),s="lo-task--full";!0!==e||i.hasClass(s)?!1===e&&i.hasClass(s)?i.removeClass(s):void 0===e&&this.toggleItem(t,!i.hasClass(s)):(o.removeClass(s),i.addClass(s))}onItemClick(t){t.preventDefault(),t.stopPropagation(),this.toggleItem(t.currentTarget,!0)}onItemToggleClick(t){t.preventDefault(),t.stopPropagation();t=h(t.currentTarget).closest("[data-listo=item]");this.toggleItem(t)}onItemCheckClick(t){t.preventDefault(),t.stopPropagation();let s=h(t.currentTarget).closest("[data-listo=item]");if(!s.data("saving")){s.data("saving",1);let e=s.data("id"),i=s.data("rrule_id"),o=+s.data("status")?0:1;this.updateItem(e,{status:o,rrule_id:i}).done(t=>{i&&o?(this.update(),s.removeData("saving"),n.doAction("item_updated",t[0]),n.doAction("maintenance")):"done"!==this.collection||o?this.loadItem(e).done(t=>{var e;t instanceof Array&&t.length&&(e=a(l("templates.item")),t=t[0],s.replaceWith(e(t)),n.doAction("item_updated",t)),s.removeData("saving"),n.doAction("maintenance")}):(s.remove(),s.removeData("saving"),n.doAction("item_updated",t[0]),n.doAction("maintenance"))})}}onDeleteItemClick(t){t.preventDefault(),t.stopPropagation();t=h(t.currentTarget).closest("[data-listo=item]");t.find("[data-listo=delete-item]").hide(),t.find("[data-listo=delete-item-form]").add(t.find("[data-listo=delete-item-cancel]")).fadeIn(o)}onCancelDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=h(t.currentTarget).closest("[data-listo=item]");e.find("[data-listo=delete-item-form]").add(e.find("[data-listo=delete-item-cancel]")).fadeOut(o,()=>{e.find("[data-listo=delete-item]").show()})}onConfirmDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=h(t.currentTarget).closest("[data-listo=item]");t=e.data("id");return i("listo/v1/items/"+t,{},"DELETE").done(()=>{e.siblings().length?e.css({opacity:0}).slideUp(o,()=>e.remove()):this.render([]),n.doAction("maintenance")})}onDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();var t=h(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=description]").parent(),t=t.find("[data-listo=description-toggle]");e.slideToggle(),t.toggleClass("lo-tip--alt")}onEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=h(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),n=t.find("[data-listo=edit-item]"),a=t.find("[data-listo=edit-item-form]"),l=a.find("[name=title]"),d=a.find("[name=description]"),r=a.find("[data-listo=save]");t.toggleClass("lo-task--edit"),n.hide(),e.hide(),i.hide(),o.hide(),s.hide(),a.show(),l.data("value",l.val()),d.data("value",d.val()).listo_autosize(),r.attr("disabled","disabled"),c.focus(l)}onEditTitleInput(t){var t=h(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onEditDescriptionInput(t){var t=h(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onCancelEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=h(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),n=t.find("[data-listo=edit-item]"),a=t.find("[data-listo=edit-item-form]"),l=a.find("[name=title]"),d=a.find("[name=description]"),r=a.find("[data-listo=save]");t.toggleClass("lo-task--edit"),e.show(),n.show(),i.show(),o.hide(),s.show(),a.hide(),l.val(l.data("value")),d.val(d.data("value")),r.attr("disabled","disabled")}onSaveEditItemClick(t){t.preventDefault(),t.stopPropagation();let i=h(t.currentTarget).closest("[data-listo=item]");var t=i.find("[data-listo=edit-item-form]"),e=t.find("[name=title]"),t=t.find("[name=description]"),o=i.data("id"),e=e.val().trim(),t=t.val().trim();return this.updateItem(o,{title:e,description:t}).done(t=>{var e=a(l("templates.item")),t=t[0];i.replaceWith(e(t)),n.doAction("item_updated",t),n.doAction("maintenance")})}}}),listo.class("ListoItemDue",function(t,e){const{ajax:o,hooks:s,template:n,data:a}=t;return class extends t.class("ListoAbstract"){constructor(t){super(t),e(document).on("click",()=>{this.$container.find("[data-listo=item]").each((t,e)=>{this.hide(e)})})}update(i,t){var e=this.$item(i).data("id");return t=Object.assign({},t,{id:e}),o("listo/v1/items",t,"PATCH").done(t=>{var e;t instanceof Array&&t[0]&&(e=n(a("templates.item_due")),t=t[0],console.log(t),this.$toggle(i).replaceWith(e(t))),s.doAction("maintenance")})}$item(t){return e(t.currentTarget||t).closest("[data-listo=item]")}$toggle(t){return this.$item(t).find("[data-listo=item-due]")}$popup(t){return this.$item(t).find("[data-listo=item-due-popup]")}show(t){var t=this.$popup(t),e=(this.$container.find("[data-listo=item-due-popup]").not(t).filter(":visible").hide(),t.show(),s.doAction("item_due_show",t),s.applyFilters("item_due_can_submit",!0,t));this.toggleSubmit(t,e)}hide(t){this.$popup(t).hide()}toggle(t){this.$popup(t).is(":visible")?this.hide(t):this.show(t)}toggleSubmit(t,e){let i=t.find("[data-listo=item-due-set]");"boolean"==typeof e?e?i.removeAttr("disabled"):i.attr("disabled","disabled"):e&&e.done&&(i.attr("disabled","disabled"),e.done(t=>{t?i.removeAttr("disabled"):i.attr("disabled","disabled")}))}onItemClick(t){this.hide(t)}onItemDueClick(t){t.stopPropagation(),this.toggle(t)}onItemDuePopupClick(t){t.stopPropagation()}onItemDueDateChange(t){s.doAction("item_due_date_changed",this.$popup(t))}onItemDueDateToggleClick(t){this.$popup(t).find("[data-listo=item-due-date]")[0].showPicker()}onItemDueSetClick(t){t.stopPropagation();var e=this.$popup(t),i={due:e.find("[data-listo=item-due-date]").val()+" "+(e.find("[data-listo=item-due-hours]").val()+`:${e.find("[data-listo=item-due-minutes]").val()}:00`)},i=s.applyFilters("item_due_submit_data",i,e);this.update(t,i)}onItemDueClearClick(t){t.stopPropagation(),this.update(t,{due:""})}}}),listo.class("ListoNewItem",function(s,e){const{ajax:n,hooks:a,data:t}=s,i=+t("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$save.on("click",()=>this.submit()),a.addAction("new_collection_form",()=>this.hide())}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(i),s.focus(this.$title),a.doAction("new_item_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(i))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(){let o=this.value();o&&!this.saving&&(this.saving=!0,this.onInput(),n("listo/v1/items",{},"POST").done(e=>{if(e instanceof Array&&e[0]){var i=+a.applyFilters("current_collection_id")||void 0;let t=Object.assign(e[0],{title:o,collection:i});e=t["id"];n("listo/v1/items",{id:e,title:o,collection:i},"PATCH").always(()=>{this.value(""),this.saving=!1,this.onInput(),s.focus(this.$title),a.doAction("item_added",t)})}}))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),this.$save.trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$save.removeAttr("disabled"):this.$save.attr("disabled","disabled")}}}),listo.class("ListoSortable",function(t,l){const{ajax:i,hooks:o}=t;return class{constructor(t){this.$el=l(t),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$items=this.$el.find("[data-listo=items]"),o.addAction("item_added",()=>this.onItemAdded()),o.addAction("item_updated",()=>this.onItemUpdated())}getObjects(){return l().add(this.$smartCollections.find("[data-listo=collection]")).add(this.$collections.find("[data-listo=collection]")).add(this.$items.find("[data-listo=item]")).toArray()}init(t){this.currentCollection=t,this.objects=this.getObjects(),this.draggedObject=null,this.objects.forEach(t=>{t.getAttribute("draggable")||(t.draggable=!0,t.addEventListener("dragstart",this.onDragStart.bind(this)),t.addEventListener("dragenter",this.onDragEnter.bind(this)),t.addEventListener("dragover",this.onDragOver.bind(this)),t.addEventListener("dragleave",this.onDragLeave.bind(this)),t.addEventListener("dragend",this.onDragEnd.bind(this)),t.addEventListener("drop",this.onDrop.bind(this)))})}reorderCollections(){var t=this.$collections.children("[data-listo=collection]").toArray().map(t=>t.getAttribute("data-id"));return i("listo/v1/collections",{ids:t},"PATCH").done(()=>{o.doAction("collections_reorder")})}reorderItems(){var t=this.$items.children("[data-listo=item]").toArray().map(t=>t.getAttribute("data-id")),e=this.currentCollection;return i("listo/v1/items",{ids:t,collection:e},"PATCH").done(()=>{o.doAction("items_reorder")})}moveItem(t,e){return e=0<e?e:0,i("listo/v1/items",{id:t,collection:e},"PATCH").done(()=>{o.doAction("item_move",{id:t,collection:e})})}canDrag(t){if("collection"===t.getAttribute("data-listo")){if(!+t.getAttribute("data-id"))return!1}else{t=this.currentCollection;if(!+t&&"inbox"!==t)return!1}return!0}canDrop(t,e){if(t&&t!==e){var i=t.getAttribute("data-listo"),o=e.getAttribute("data-listo"),t=t.getAttribute("data-id"),e=e.getAttribute("data-id");if("collection"===i){if("item"===o)return!1;if(!+e)return!1}else if("item"===i)if("collection"===o){if(e==this.currentCollection)return!1;if(!+e&&"inbox"!==e)return!1}else if(!+this.currentCollection)return!1;return{sourceType:i,sourceId:t,targetType:o,targetId:e}}return!1}onDragStart(t){var e=t.currentTarget;this.canDrag(e)?this.draggedObject=e:t.preventDefault()}onDragEnter(t){var e=this.draggedObject,t=t.currentTarget;this.canDrop(e,t)}onDragOver(t){return t.preventDefault(),!1}onDragLeave(t){this.draggedObject,t.currentTarget}onDragEnd(t){t.currentTarget;this.objects.forEach(t=>{})}onDrop(s){s.stopPropagation(),s.preventDefault();let n=this.draggedObject;var s=s.currentTarget,a=this.canDrop(n,s);if(a){let{sourceType:t,sourceId:e,targetType:i,targetId:o}=a;"item"===t&&"collection"===i?l(n).css({opacity:0}).slideUp(()=>{n.remove(),this.moveItem(e,o)}):t===i&&(a=n.parentElement,d(n)>d(s)?a.insertBefore(n,s):(s=s.nextElementSibling)?a.insertBefore(n,s):a.append(n),"collection"===t?this.reorderCollections():"item"===t&&this.reorderItems()),this.draggedObject=null}}onItemAdded(){this.init(this.currentCollection)}onItemUpdated(){this.init(this.currentCollection)}};function d(t,e=0){return e=t.previousElementSibling?d(t.previousElementSibling,e+1):e}}),function(e,t,i,o={}){function s(){document.querySelectorAll("[data-listo=root]").forEach(t=>{new(e.class("ListoRoot"))(t)})}+t.logged_in&&i(function(){o&&o.domReady?o.domReady(()=>setTimeout(s,0)):s()})}(window.listo,window.listoData,window.jQuery,window.wp); -
listowp/trunk/assets/js/frontend/_load_order.json
r2877206 r2884416 4 4 "autosize", 5 5 "trim-html", 6 "class-listo", 6 "class-listo-abstract", 7 "class-listo-root", 7 8 "class-listo-collection-header", 8 "class-listo-collection-items",9 9 "class-listo-new-collection", 10 "class-listo-items", 11 "class-listo-item-due", 10 12 "class-listo-new-item", 11 13 "class-listo-sortable", -
listowp/trunk/assets/js/frontend/base.js
r2877206 r2884416 20 20 beforeSend(xhr) { 21 21 xhr.setRequestHeader('X-WP-Nonce', REST_NONCE); 22 } 23 }).fail(xhr => { 24 if (xhr && xhr.responseJSON) { 25 alert(xhr.responseJSON.message); 22 26 } 23 27 }); … … 126 130 * @type {boolean} 127 131 */ 128 isIOS: /iPad|iPhone|iPod/.test(navigator.userAgent) 132 isIOS: /iPad|iPhone|iPod/.test(navigator.userAgent), 133 134 /** 135 * Focus and put cursor to the end of an input text. 136 * 137 * @param {Element|jQuery} input 138 */ 139 focus(input) { 140 input = input.jquery ? input[0] : input; 141 input.focus(); 142 143 if (input.setSelectionRange) { 144 let len = input.value.length; 145 input.setSelectionRange(len, len); 146 } 147 } 129 148 }; 130 149 -
listowp/trunk/assets/js/frontend/class-listo-collection-header.js
r2877206 r2884416 36 36 this.$deleteConfirm.on('click', e => this.onDeleteConfirmClick(e)); 37 37 38 hooks.addAction('collections_loaded', () => this.$el.show());39 38 hooks.addAction('set_current_collection', data => this.update(data)); 40 39 hooks.addAction('count_items_updated', data => this.updateCountItems(data)); 40 41 hooks.addAction('collections_loaded', 'new_item_form', () => { 42 hooks.removeAction('collections_loaded', 'new_item_form'); 43 this.$el.show(); 44 }); 41 45 } 42 46 … … 112 116 113 117 // Set focus on the title input. 114 setTimeout(() => this.$editTitle[0].focus(), 100);118 listo.focus(this.$editTitle); 115 119 } 116 120 … … 159 163 let params = { id, title, description }; 160 164 161 ajax('listo/v1/collections', params, 'PATCH') 162 .done(json => { 163 Object.assign(this.data, params); // temporary, or if GET request failed 164 ajax('listo/v1/collections', { id }) 165 .done(json => { 166 if (json instanceof Array && json[0]) { 167 this.data = json[0]; 168 } 169 }) 170 .always(() => { 171 this.saving = false; 172 this.reset(); 173 hooks.doAction('collection_updated', this.data); 174 }); 175 }) 176 .fail(xhr => alert(xhr.responseJSON.message)); 165 ajax('listo/v1/collections', params, 'PATCH').done(json => { 166 Object.assign(this.data, params); // temporary, or if GET request failed 167 ajax('listo/v1/collections', { id }) 168 .done(json => { 169 if (json instanceof Array && json[0]) { 170 this.data = json[0]; 171 } 172 }) 173 .always(() => { 174 this.saving = false; 175 this.reset(); 176 hooks.doAction('collection_updated', this.data); 177 }); 178 }); 177 179 } 178 180 … … 196 198 e.stopPropagation(); 197 199 198 ajax(`listo/v1/collections/${this.data.id}`, {}, 'DELETE') 199 .done(json => { 200 this.$deleteForm.add(this.$deleteCancel).hide(); 201 this.$delete.show(); 202 203 hooks.doAction('collection_deleted', this.data.id); 204 }) 205 .fail(xhr => alert(xhr.responseJSON.message)); 200 ajax(`listo/v1/collections/${this.data.id}`, {}, 'DELETE').done(json => { 201 this.$deleteForm.add(this.$deleteCancel).hide(); 202 this.$delete.show(); 203 204 hooks.doAction('collection_deleted', this.data.id); 205 }); 206 206 } 207 207 -
listowp/trunk/assets/js/frontend/class-listo-new-collection.js
r2878127 r2884416 13 13 this.$cancel = this.$form.find('[data-listo=cancel]'); 14 14 this.$save = this.$form.find('[data-listo=save]'); 15 this.$saveAndNew = this.$form.find('[data-listo=save-and-new]');16 this.$buttons = this.$save.add(this.$saveAndNew);17 15 18 16 this.$toggle.on('click', e => e.stopPropagation() || this.show()); 19 this.$cancel.on('click', e => e.stopPropagation() || this.hide());20 17 this.$form.on('click', e => e.stopPropagation()); 21 18 this.$title.on('keydown', e => this.onKeyDown(e)); 22 19 this.$title.on('input', () => this.onInput()); 20 this.$cancel.on('click', e => e.stopPropagation() || this.hide()); 23 21 this.$save.on('click', () => this.submit()); 24 this.$saveAndNew.on('click', () => this.submit(true));25 22 26 hooks.addAction('collections_loaded', () => this.$toggle.show());27 23 hooks.addAction('new_item_form', () => this.hide()); 24 25 // Run once on page load. 26 hooks.addAction('collections_loaded', 'new_collection_form', () => { 27 hooks.removeAction('collections_loaded', 'new_collection_form'); 28 this.$toggle.show(); 29 }); 28 30 } 29 31 … … 32 34 this.$toggle.hide(); 33 35 this.$form.fadeIn(ANIM_SPEED); 34 this.$title.focus(); 36 listo.focus(this.$title); 37 35 38 hooks.doAction('new_collection_form'); 36 39 } … … 52 55 } 53 56 54 submit( keepOpen) {57 submit() { 55 58 let title = this.value(); 56 59 if (!title) { … … 63 66 64 67 // Create collection with an empty title. 65 ajax('listo/v1/collections', {}, 'POST') 66 .done(json => { 67 if (json instanceof Array && json[0]) { 68 let collection = Object.assign(json[0], { title }); 69 let { id } = collection; 68 ajax('listo/v1/collections', {}, 'POST').done(json => { 69 if (json instanceof Array && json[0]) { 70 let collection = Object.assign(json[0], { title }); 71 let { id } = collection; 70 72 71 // Update collection title. 72 ajax('listo/v1/collections', { id, title }, 'PATCH') 73 .fail(xhr => alert(xhr.responseJSON.message)) 74 .always(() => { 75 this.value(''); 76 this.saving = false; 77 this.onInput(); 73 // Update collection title. 74 ajax('listo/v1/collections', { id, title }, 'PATCH').always(() => { 75 this.value(''); 76 this.saving = false; 77 this.onInput(); 78 listo.focus(this.$title); 78 79 79 hooks.doAction('collection_added', collection); 80 81 keepOpen ? this.$title.focus() : this.hide(); 82 }); 83 } 84 }) 85 .fail(xhr => alert(xhr.responseJSON.message)); 80 hooks.doAction('collection_added', collection); 81 }); 82 } 83 }); 86 84 } 87 85 … … 90 88 e.preventDefault(); 91 89 e.stopPropagation(); 92 e.shiftKey ? this.$saveAndNew.trigger('click') :this.$save.trigger('click');90 this.$save.trigger('click'); 93 91 } else if ('Escape' === e.code) { 94 92 this.hide(); … … 98 96 onInput() { 99 97 this.value() && !this.saving 100 ? this.$ buttons.removeAttr('disabled')101 : this.$ buttons.attr('disabled', 'disabled');98 ? this.$save.removeAttr('disabled') 99 : this.$save.attr('disabled', 'disabled'); 102 100 } 103 101 }; -
listowp/trunk/assets/js/frontend/class-listo-new-item.js
r2878127 r2884416 13 13 this.$cancel = this.$form.find('[data-listo=cancel]'); 14 14 this.$save = this.$form.find('[data-listo=save]'); 15 this.$saveAndNew = this.$form.find('[data-listo=save-and-new]');16 this.$buttons = this.$save.add(this.$saveAndNew);17 15 18 16 this.$toggle.on('click', e => e.stopPropagation() || this.show()); 19 this.$cancel.on('click', e => e.stopPropagation() || this.hide());20 17 this.$form.on('click', e => e.stopPropagation()); 21 18 this.$title.on('keydown', e => this.onKeyDown(e)); 22 19 this.$title.on('input', () => this.onInput()); 20 this.$cancel.on('click', e => e.stopPropagation() || this.hide()); 23 21 this.$save.on('click', () => this.submit()); 24 this.$saveAndNew.on('click', () => this.submit(true));25 22 26 23 hooks.addAction('new_collection_form', () => this.hide()); … … 31 28 this.$toggle.hide(); 32 29 this.$form.fadeIn(ANIM_SPEED); 33 this.$title.focus(); 30 listo.focus(this.$title); 31 34 32 hooks.doAction('new_item_form'); 35 33 } … … 51 49 } 52 50 53 submit( keepOpen) {51 submit() { 54 52 let title = this.value(); 55 53 if (!title) { … … 62 60 63 61 // Create item with an empty title. 64 ajax('listo/v1/items', {}, 'POST') 65 .done(json => { 66 if (json instanceof Array && json[0]) { 67 let collection = +hooks.applyFilters('current_collection_id') || undefined; 68 let item = Object.assign(json[0], { title, collection }); 69 let { id } = item; 62 ajax('listo/v1/items', {}, 'POST').done(json => { 63 if (json instanceof Array && json[0]) { 64 let collection = +hooks.applyFilters('current_collection_id') || undefined; 65 let item = Object.assign(json[0], { title, collection }); 66 let { id } = item; 70 67 71 // Update item title. 72 ajax('listo/v1/items', { id, title, collection }, 'PATCH') 73 .fail(xhr => alert(xhr.responseJSON.message)) 74 .always(() => { 75 this.value(''); 76 this.saving = false; 77 this.onInput(); 68 // Update item title. 69 ajax('listo/v1/items', { id, title, collection }, 'PATCH').always(() => { 70 this.value(''); 71 this.saving = false; 72 this.onInput(); 73 listo.focus(this.$title); 78 74 79 hooks.doAction('item_added', item); 80 81 keepOpen ? this.$title.focus() : this.hide(); 82 }); 83 } 84 }) 85 .fail(xhr => alert(xhr.responseJSON.message)); 75 hooks.doAction('item_added', item); 76 }); 77 } 78 }); 86 79 } 87 80 … … 90 83 e.preventDefault(); 91 84 e.stopPropagation(); 92 e.shiftKey ? this.$saveAndNew.trigger('click') :this.$save.trigger('click');85 this.$save.trigger('click'); 93 86 } else if ('Escape' === e.code) { 94 87 this.hide(); … … 98 91 onInput() { 99 92 this.value() && !this.saving 100 ? this.$ buttons.removeAttr('disabled')101 : this.$ buttons.attr('disabled', 'disabled');93 ? this.$save.removeAttr('disabled') 94 : this.$save.attr('disabled', 'disabled'); 102 95 } 103 96 }; -
listowp/trunk/assets/js/frontend/class-listo-sortable.js
r2877206 r2884416 8 8 this.$collections = this.$el.find('[data-listo=collections]'); 9 9 this.$items = this.$el.find('[data-listo=items]'); 10 11 hooks.addAction('item_added', () => this.onItemAdded()); 12 hooks.addAction('item_updated', () => this.onItemUpdated()); 10 13 } 11 14 … … 215 218 } 216 219 } 220 221 onItemAdded() { 222 this.init(this.currentCollection); 223 } 224 225 onItemUpdated() { 226 this.init(this.currentCollection); 227 } 217 228 }; 218 229 -
listowp/trunk/assets/js/frontend/hooks.js
r2877206 r2884416 96 96 97 97 if (callbacks) { 98 callbacks.forEach(item => { 98 // Map callback objects to their actual functions since the list 99 // can be altered (added/deleted) during execution. 100 callbacks = callbacks.map(cb => cb.callback); 101 102 callbacks.forEach(fn => { 99 103 try { 100 let callbackResult = item.callback.apply(null, args);104 let callbackResult = fn.apply(null, args); 101 105 if (returnFirstArg) { 102 106 result = args[0] = callbackResult; -
listowp/trunk/assets/js/frontend/init.js
r2877206 r2884416 5 5 6 6 function initListoWP() { 7 document.querySelectorAll('[data-listo=root]').forEach(el => new listo.Listo(el)); 7 document.querySelectorAll('[data-listo=root]').forEach(el => { 8 new (listo.class('ListoRoot'))(el); 9 }); 8 10 } 9 11 -
listowp/trunk/assets/scss/_vars.scss
r2878127 r2884416 3 3 // SPACING 4 4 --P: 30px; 5 --PS: calc(var(--P) / 1.5);5 --PS: calc(var(--P) / 2); 6 6 --PXS: calc(var(--P) / 3); 7 7 … … 23 23 // APP COLORS 24 24 --C-APP: #fff; 25 --C-APP-ALPHA9: rgb(255, 255, 255, .9); 26 --C-APP-ALPHA8: rgb(255, 255, 255, .9); 27 --C-APP-ALPHA7: rgb(255, 255, 255, .9); 25 28 26 29 // GRAY PALETTE … … 35 38 --C-G800: #1A202C; 36 39 --C-G900: #171923; 40 41 --C-G50: #f0f1f3; 42 --C-G100: #e0e2e8; 43 --C-G200: #c3c6d1; 44 --C-G300: #a5abbb; 45 --C-G400: #8991a5; 46 --C-G500: #6d7790; 47 --C-G600: #515e7b; 48 --C-G700: #364767; 49 --C-G800: #183153; 50 --C-G900: #001c40; 37 51 38 52 // BRAND COLORS … … 78 92 79 93 // DIVIDER DEFAULT STYLES 80 --DIVIDER: rgba( 22, 27, 37, 0.15);81 --DIVIDER--DARK: rgba( 22, 27, 37, 0.3);82 --DIVIDER--LIGHT: rgba( 22, 27, 37, 0.08);94 --DIVIDER: rgba(38, 45, 61, 0.15); 95 --DIVIDER--DARK: rgba(35, 43, 58, 0.3); 96 --DIVIDER--LIGHT: rgba(40, 48, 65, 0.08); 83 97 84 98 // GLOBAL TRANSITION SETTINGS (set: "none" to disable) … … 94 108 // LAYOUT SETTINGS 95 109 --APP-H: 75vh; // App height 96 --APP-MH: 55vh; // MobileApp height97 --APP-MIN-H: 550px; // App min height110 --APP-MH: 55vh; // (Mobile) App height 111 --APP-MIN-H: 750px; // App min height 98 112 --APP-MAX-H: 800px; // App max height 99 --APP-MAX-MH: 600px; // MobileApp max height113 --APP-MAX-MH: 600px; // (Mobile) App max height 100 114 --APP-W: 100%; // App width 101 --APP-FULLCREEN-MAX-W: 1400px; 115 --APP-FULLCREEN-MAX-W: 1400px; // Limit width of the fullscreen view 102 116 103 117 // SIDEBAR SETTINGS … … 112 126 .lo-dark { 113 127 // APP COLORS 114 --C-APP: #1A202C; 128 --C-APP: #191a1b; 129 --C-APP-ALPHA9: rgb(25, 26, 27, .9); 130 --C-APP-ALPHA8: rgb(25, 26, 27, .8); 131 --C-APP-ALPHA7: rgb(25, 26, 27, .7); 115 132 116 133 // GRAY PALETTE 117 --C-G900: # 171923;118 --C-G800: # 1A202C;119 --C-G700: # E2E8F0;120 --C-G600: # CBD5E0;121 --C-G500: # A0AEC0;122 --C-G400: # 718096;123 --C-G300: # 4A5568;124 --C-G200: # 2D3748;125 --C-G100: #1 61b25;126 --C-G50: #1 71923;134 --C-G900: #262628; 135 --C-G800: #292a2b; 136 --C-G700: #8e9092; 137 --C-G600: #696c6e; 138 --C-G500: #606367; 139 --C-G400: #56595f; 140 --C-G300: #3e4044; 141 --C-G200: #3c3f45; 142 --C-G100: #1d1f21; 143 --C-G50: #1f1f22; 127 144 128 145 // TEXT COLORS -
listowp/trunk/assets/scss/components/_button.scss
r2877206 r2884416 11 11 --color: inherit; 12 12 --color-hover: inherit; 13 --radius: var(--R L);13 --radius: var(--R); 14 14 15 15 display: inline-flex; … … 61 61 62 62 // 63 // Small button class modifier 64 // ---------------------------------------------------------------- 65 .lo-btn--sm { 66 padding: 0 var(--PXS); 67 height: 2rem; 68 font-size: .9rem; 69 } 70 71 // 63 72 // Link button class modifier 64 73 // ---------------------------------------------------------------- 65 74 .lo-btn--link { 66 75 --bg: transparent; 67 --bg-hover: var(--C-G 200);76 --bg-hover: var(--C-G50); 68 77 --color: var(--TC--LIGHT); 69 78 --color-hover: var(--TC); 70 --border-color: var(--C-G 300);79 --border-color: var(--C-G200); 71 80 72 81 border: 1px solid var(--border-color); … … 77 86 // ---------------------------------------------------------------- 78 87 .lo-btn--action { 79 --bg-hover: var(--C-BRAND); 80 --color: var(--C-BRAND--DARK); 88 --bg: var(--C-BRAND); 89 --bg-hover: var(--C-BRAND--DARK); 90 --color: #fff; 81 91 --color-hover: #fff; 92 --border-color: var(--C-BRAND--DARK); 82 93 83 padding: 0 var(--PS); 84 height: 2.35rem; 85 border: 2px solid var(--bg-hover); 94 border: 1px solid var(--border-color); 86 95 } -
listowp/trunk/assets/scss/frontend.scss
r2878127 r2884416 7 7 @import 'components/button'; 8 8 @import 'components/tip'; 9 @import 'components/popover'; 9 10 10 11 // HELPERS 11 12 @import 'helpers/helpers'; 13 @import 'helpers/form'; 12 14 13 15 // STRUCTURES -
listowp/trunk/assets/scss/structures/_lists-item.scss
r2878127 r2884416 287 287 align-items: center; 288 288 min-height: 127px; 289 padding: var(--PS) var(--P);289 padding: var(--PS) calc(var(--PS) + var(--PXS)); 290 290 } 291 291 -
listowp/trunk/assets/scss/structures/_lists.scss
r2878127 r2884416 66 66 67 67 > i { 68 position: relative; 68 69 color: var(--i-color); 69 70 transition: var(--T); 70 71 transition-duration: .4s; 72 73 &:after { 74 content: "\2b"; 75 position: absolute; 76 top: 50%; 77 left: 50%; 78 transform: translate(-50%, -50%); 79 font-size: 1.35rem; 80 font-weight: bold; 81 } 71 82 } 72 83 … … 76 87 77 88 @include mq($from: desktop) { 78 --border-c: var(--C-G 300);89 --border-c: var(--C-G200); 79 90 --color: var(--C-G600); 80 91 --bg: transparent; … … 130 141 --bg: transparent; 131 142 --bg-hover: transparent; 132 --color: var(-- C-BRAND);133 --color-hover: var(-- C-BRAND);143 --color: var(--TC--LIGHT); 144 --color-hover: var(--TC--LIGHT); 134 145 135 146 position: relative; … … 143 154 144 155 &:last-child { 145 --color: var(-- TC--LIGHT);146 --color-hover: var(-- TC--LIGHT);156 --color: var(--C-BRAND); 157 --color-hover: var(--C-BRAND); 147 158 148 159 padding-right: 0; -
listowp/trunk/assets/scss/structures/_main.scss
r2877206 r2884416 9 9 width: 100%; 10 10 min-width: 0; 11 background-color: var(--C-G 100);11 background-color: var(--C-G50); 12 12 border: 1px solid var(--DIVIDER--LIGHT); 13 13 border-top-right-radius: var(--RL); -
listowp/trunk/assets/scss/structures/_tasks-item.scss
r2877206 r2884416 7 7 --bg-color: var(--C-APP); 8 8 --shadow: var(--DIVIDER--LIGHT); 9 --shadow-hover-1: var(--C-G 400);10 --shadow-hover-2: var(--C-G 200);9 --shadow-hover-1: var(--C-G200); 10 --shadow-hover-2: var(--C-G100); 11 11 12 12 position: relative; … … 233 233 --c: var(--C-G600); 234 234 --ic: var(--C-G500); 235 --bg: var(--C-G 200);236 --bg-hover: var(--C-G 200);235 --bg: var(--C-G100); 236 --bg-hover: var(--C-G100); 237 237 --bsh: var(--C-G50); 238 238 … … 273 273 --c: var(--C-G600); 274 274 --ic: var(--C-G500); 275 --bg: var(--C-G 200);275 --bg: var(--C-G100); 276 276 --bsh: var(--C-G100); 277 277 … … 284 284 .lo-task__meta--date { 285 285 padding-right: 0; 286 } 287 288 .lo-task__meta--time { 289 appearance: none; 290 -webkit-appearance: none; 286 291 } 287 292 … … 359 364 // ---------------------------------------------------------------- 360 365 .lo-task--done { 361 --bg-color: var(--C-G 100);366 --bg-color: var(--C-G50); 362 367 --shadow: var(--DIVIDER); 363 368 -
listowp/trunk/assets/scss/structures/_tasks.scss
r2878127 r2884416 243 243 --bg: transparent; 244 244 --bg-hover: transparent; 245 --color: var(-- C-BRAND);246 --color-hover: var(-- C-BRAND);245 --color: var(--TC--LIGHT); 246 --color-hover: var(--TC--LIGHT); 247 247 248 248 position: relative; … … 256 256 257 257 &:last-child { 258 --color: var(-- TC--LIGHT);259 --color-hover: var(-- TC--LIGHT);258 --color: var(--C-BRAND); 259 --color-hover: var(--C-BRAND); 260 260 261 261 padding-right: 0; -
listowp/trunk/assets/scss/structures/_wrapper.scss
r2877206 r2884416 34 34 --bg: transparent; 35 35 --bg-hover: transparent; 36 --color: var(--TC--LIGHT );36 --color: var(--TC--LIGHTEN); 37 37 --color-hover: var(--TC); 38 38 … … 40 40 z-index: 100; 41 41 top: 1px; 42 right: 1px;42 right: 28px; 43 43 display: flex; 44 44 align-items: center; … … 49 49 .lo-wrapper--fullscreen & { 50 50 top: 1px; 51 right: 1px;51 right: 28px; 52 52 53 53 > i { -
listowp/trunk/classes/config/config_panel.php
r2878127 r2884416 152 152 153 153 // Position 154 if(stristr($name,'_position')) { 154 if(stristr($name,'_position') || stristr($name,'_int')) { 155 $label = $label ? $label : _x('Position','admin','listowp'); 155 156 $config[$name] = [ 156 157 'type' => 'int', 157 'title' => _x('Position','admin','listowp'),158 'title' => $label, 158 159 ]; 159 160 } … … 208 209 'date_format' => _x('Used on Tasks due this year','admin','listowp'), 209 210 'date_format_long' => _x('Used on Tasks due any other year','admin','listowp'), 211 'bb_position' => self::maybe_desc_empty_for_default() .'<br/><b>By default, BuddyBoss does not number tabs from 1</b><br/>Please <a href="https://ListoWP.com/r/docs_config_integrations" target="_blank">check the documentation</a> for more information.' 210 212 ]; 211 213 … … 214 216 if(isset($item['pro']) && !apply_filters('listowp_is_pro',0) ) { 215 217 // @TODO #143 - convert upsell to static HTML included in the plugin 216 //return 'Not configurable in the free version. <a href="'.admin_url('admin.php?page=listo-upgrade').'">Upgrade to ListoWPPro!</a>';217 return 'Not configurable in the free version. <a href="https://ListoWP.com/pricing" target="_blank">Upgrade to ListoWPPro!</a>';218 //return 'Not configurable in the free version. <a href="'.admin_url('admin.php?page=listo-upgrade').'">Upgrade to Pro!</a>'; 219 return 'Not configurable in the free version. <a href="https://ListoWP.com/pricing" target="_blank">Upgrade to Pro!</a>'; 218 220 } 219 221 … … 222 224 } 223 225 224 if( stristr($item['id'],'_position') || stristr($item['id'],'_slug') || stristr($item['id'],'_label') ) {226 if( stristr($item['id'],'_position') || stristr($item['id'],'_slug') || stristr($item['id'],'_label') || stristr($item['id'],'_int')) { 225 227 return self::maybe_desc_empty_for_default(); 226 228 } -
listowp/trunk/classes/config/config_upgrade.php
r2878127 r2884416 19 19 <div class="loa-upgrade-pricing-inner"> 20 20 <div class="loa-upgrade-pricing__column loa-upgrade-pricing__column--yearly"> 21 <div class="loa-upgrade-pricing__title">Yearly - <strong>20% off!</strong></div>22 <div class="loa-upgrade-pricing__price"><strike style="color:#990000;opacity:0.5">$29</strike> $23</div>21 <div class="loa-upgrade-pricing__title">Yearly <span>20% off!</span></div> 22 <div class="loa-upgrade-pricing__price"><strike>$29</strike> $23</div> 23 23 <div class="loa-upgrade-pricing__action"> 24 24 <a href="https://listowp.com/?listo_add_to_cart=yearly&discount=UPGRADE20" target="_blank">BUY NOW</a> 25 25 </div> 26 <div class="loa-upgrade-pricing__price__discount" style="opacity:0.5;font-size:10px;text-align:center;">Use code <code style="font-size:10px;background:white;padding:0">UPGRADE20</code> on checkout</div>26 <div class="loa-upgrade-pricing__price__discount">Use code <code>UPGRADE20</code> on checkout</div> 27 27 <div class="loa-upgrade-pricing__features"> 28 28 <div class="loa-upgrade-pricing__feature"> … … 41 41 </div> 42 42 <div class="loa-upgrade-pricing__column loa-upgrade-pricing__column--lifetime"> 43 <div class="loa-upgrade-pricing__title">Lifetime - <strong>20% off!</strong></div>44 <div class="loa-upgrade-pricing__price"><strike style="color:#990000;opacity:0.5">$299</strike> $239</div>43 <div class="loa-upgrade-pricing__title">Lifetime <span>20% off!</span></div> 44 <div class="loa-upgrade-pricing__price"><strike>$299</strike> $239</div> 45 45 <div class="loa-upgrade-pricing__action"> 46 46 <a href="https://listowp.com/?listo_add_to_cart=lifetime&discount=UPGRADE20" target="_blank">BUY NOW</a> 47 47 </div> 48 <div class="loa-upgrade-pricing__price__discount" style="opacity:0.5;font-size:10px;text-align:center;">Use code <code style="font-size:10px;background:white;padding:0">UPGRADE20</code> on checkout</div>48 <div class="loa-upgrade-pricing__price__discount">Use code <code>UPGRADE20</code> on checkout</div> 49 49 <div class="loa-upgrade-pricing__features"> 50 50 <div class="loa-upgrade-pricing__feature"> -
listowp/trunk/classes/frontend/assets_pro.php
r2877206 r2884416 6 6 $pro_data = [ 7 7 'templates' => [ 8 'recurring' => $assets->get_template('pro/ recurring'),8 'recurring' => $assets->get_template('pro/item_due_recurring'), 9 9 ] 10 10 ]; -
listowp/trunk/classes/models/abstract_listing.php
r2877206 r2884416 75 75 // Add default ORDER statement 76 76 protected function query_order($order=[]) { 77 $this->query .= " ORDER BY `order` ASC, `id` DESC"; 77 $order = array_merge($order, ['order' => '`order` ASC','id'=>'`id` DESC']); 78 79 foreach($order as $k=>$v) { 80 if(NULL==$v) { 81 unset($order[$k]); 82 } 83 } 84 $this->query .= " ORDER BY ".implode(',', $order); 78 85 } 79 86 -
listowp/trunk/classes/models/collections.php
r2877206 r2884416 122 122 $this->init('collection'); 123 123 $this->query_start(); 124 $this->query_where(); 124 125 $board = is_int($this->request['board']) ? $this->request['board'] : NULL; 126 127 $where = [ 128 'board ' => "board IS NULL", 129 ]; 130 131 if($board) { 132 $where = [ 133 'board ' => "board=$board", 134 ]; 135 } 136 137 $this->query_where($where); 125 138 $this->query_order(); 126 139 … … 128 141 129 142 // Attach smart collections only if we are requesting a full list 130 if($this->request->get_method() == 'GET' && !isset($this->request['id']) ) {143 if($this->request->get_method() == 'GET' && !isset($this->request['id']) && NULL===$board) { 131 144 $default_ids = [ 132 145 'due', … … 144 157 } 145 158 } 146 159 new Listo_Debug($this->query); 147 160 $result = $this->wpdb->get_results($this->query, ARRAY_A); 148 161 foreach($result as $id) { -
listowp/trunk/classes/models/item.php
r2877206 r2884416 7 7 public $due; 8 8 public $due_formatted; 9 public $due_human; 9 public $due_formatted_long; 10 public $due_formatted_long_time; 10 11 public $due_past; 11 12 … … 14 15 public $rrule = NULL; 15 16 public $rrule_id = NULL; 17 18 public $rrule_label = NULL; 16 19 17 20 … … 36 39 } 37 40 38 if ( 'status' == $property && 1==$value) { 39 $now = current_time('mysql',TRUE); 40 $this->set('closed', $now); 41 if('rrule_id' == $property) { 42 if('none' == $value) { 43 $value = NULL; 44 } 45 } 46 47 if ( 'status' == $property) { 48 if(1==$value) { 49 $now = current_time('mysql',TRUE); 50 $this->set('closed', $now); 51 } else { 52 $this->set('closed', NULL); 53 } 41 54 } 42 55 … … 59 72 $this->due_formatted = Listo_Time::format($this->due); 60 73 $this->due_formatted_long = Listo_Time::format($this->due, TRUE); 74 $this->due_formatted_long_time = Listo_Time::format($this->due, TRUE, TRUE); 61 75 62 76 $diff = Listo_Time::diff_human($this->due); 63 77 $this->due_past = $diff['past']; 64 78 $this->due_this_year = $diff['this_year']; 79 80 if($this->rrule_id && class_exists('Listo_Recurring')) { 81 $defaults = Listo_Recurring::defaults(date('Y-m-d H:i:s')); 82 if(array_key_exists($this->rrule_id, $defaults)) { 83 $this->rrule_label = $defaults[$this->rrule_id]['label']; 84 } 85 } 65 86 } 66 87 -
listowp/trunk/classes/models/items.php
r2877206 r2884416 11 11 $this->init('item'); 12 12 $this->query_start(); 13 14 $prefs = Listo_User_Preferences::get_instance(); 13 15 14 16 $where = []; … … 34 36 } 35 37 38 $where['board'] ="NOT EXISTS (SELECT id FROM {$this->wpdb->prefix}listo_collections WHERE id=$this->table.collection AND {$this->wpdb->prefix}listo_collections.board IS NOT NULL)"; 39 40 // Hide "Done" except "done" smart list 41 if($prefs->get('items_hide_done', 0) && $this->request['collection']!='done') { 42 $where['status'] = '`status`=0'; 43 } 44 36 45 $where = apply_filters('listowp_items_query_where', $where, $this->request); 37 46 38 47 $this->query_where($where); 39 48 40 $this->query_order(); 49 // Ordering 50 $order = []; 51 52 /** 53 * order `order` - no ASC or DESC here 54 * status `status` 55 * due `due`, but keep empty on the bottom 56 */ 57 58 $sort = $prefs->get('items_order', 0); 59 $sort_dir = $prefs->get('items_order_dir', 'asc'); 60 switch($sort) { 61 case 'due': 62 $order['due_is_null'] = '(`due` IS NULL) ASC'; # https://stackoverflow.com/questions/8510632/php-mysql-order-by-date-but-empty-dates-last-not-first 63 $order['due'] = '`due` '.$sort_dir; 64 break; 65 case 'status': 66 $order['status'] = '`status` '.$sort_dir; 67 break; 68 case 'edited': 69 $order['edited'] = '`edited` '.$sort_dir; 70 break; 71 case 'created': 72 $order['created'] = '`created` '.$sort_dir; 73 break; 74 default: 75 // Abstract knows what to do 76 break; 77 } 78 79 80 81 $this->query_order($order); 41 82 42 83 $ids = []; -
listowp/trunk/classes/users/preferences.php
r2877206 r2884416 13 13 global $wpdb; 14 14 15 $sql = $wpdb->prepare("SELECT ` key`, `value` FROM {$wpdb->prefix}listo_user_preferences WHERE `user`=%d", Listo_User::get_id());15 $sql = $wpdb->prepare("SELECT `name`, `value` FROM {$wpdb->prefix}listo_user_preferences WHERE `user`=%d", Listo_User::get_id()); 16 16 $rows = $wpdb->get_results( $sql, ARRAY_A ); 17 17 18 18 if ( $wpdb->num_rows > 0 ) { 19 19 foreach ( $rows as $row ) { 20 $this->prefs[$row[' key']] = maybe_unserialize($row['value']);20 $this->prefs[$row['name']] = maybe_unserialize($row['value']); 21 21 } 22 22 } 23 23 } 24 24 25 public function set($ key, $value) {25 public function set($name, $value) { 26 26 global $wpdb; 27 27 … … 29 29 30 30 // Insert 31 if(!isset($this->prefs[$ key])) {32 $sql = $wpdb->prepare("INSERT INTO {$wpdb->prefix}listo_user_preferences (`user`,` key`,`value`) VALUES (%d, %s, %s)", Listo_User::get_id(), $key, $value);31 if(!isset($this->prefs[$name])) { 32 $sql = $wpdb->prepare("INSERT INTO {$wpdb->prefix}listo_user_preferences (`user`,`name`,`value`) VALUES (%d, %s, %s)", Listo_User::get_id(), $name, $value); 33 33 //new Listo_Debug($sql); 34 34 $wpdb->query($sql); … … 36 36 37 37 // Update 38 $sql = $wpdb->prepare("UPDATE {$wpdb->prefix}listo_user_preferences SET `value`=%s WHERE `user`=%d AND ` key`=%s", $value, Listo_User::get_id(), $key);38 $sql = $wpdb->prepare("UPDATE {$wpdb->prefix}listo_user_preferences SET `value`=%s WHERE `user`=%d AND `name`=%s", $value, Listo_User::get_id(), $name); 39 39 $wpdb->query($sql); 40 40 //new Listo_Debug($sql); 41 $this->prefs[$ key]=$value;41 $this->prefs[$name]=$value; 42 42 } 43 43 44 public function get($ key, $default = NULL) {44 public function get($name, $default = NULL) { 45 45 46 if(isset($this->prefs[$ key])) {47 return $this->prefs[$ key];46 if(isset($this->prefs[$name])) { 47 return $this->prefs[$name]; 48 48 } 49 49 -
listowp/trunk/language/listowp.pot
r2878127 r2884416 3 3 msgstr "" 4 4 "Project-Id-Version: ListoWP\n" 5 "POT-Creation-Date: 2023-03-10 1 5:15-0500\n"5 "POT-Creation-Date: 2023-03-10 17:02-0500\n" 6 6 "PO-Revision-Date: 2023-02-02 16:34-0500\n" 7 7 "Last-Translator: \n" … … 515 515 516 516 #: templates/root.php:66 517 msgid "Close Preferences" 517 msgctxt "Button to close window etc" 518 msgid "Close" 518 519 msgstr "" 519 520 -
listowp/trunk/listo_plugin.php
r2878127 r2884416 2 2 /** 3 3 * Plugin Name: ListoWP 4 * Plugin URI: https://ListoWP.com5 4 * Description: Front-end To Do Lists for your WordPress users 6 * Author: Matt Jaworski 7 * Version: 0.9.4 8 * Copyright: (c) Matt Jaworski 5 * Author: ListoWP 6 * Author URI: https://ListoWP.com 7 * Version: 0.9.5 8 * Copyright: (c) MJWP, LLC 9 9 * License: GPLv2 or later 10 10 * License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 22 22 **/ 23 23 24 if(class_exists('Listo_Plugin')) { 25 deactivate_plugins( plugin_basename( __FILE__ ) ); 26 add_action('admin_notices',function(){ 27 ?> 28 <div class="error listo">Please make sure to have only one version of ListoWP active. If you are using ListoWP Pro, the free version can be deactivated and removed.</div> 29 <?php 30 }); 31 } else { 32 33 class Listo_Plugin { 34 35 private static $instance = null; 36 37 const PLUGIN_VERSION = '0.9.5'; 38 39 public static function get_instance() { 40 return ( null == self::$instance ) ? new self() : self::$instance; 41 } 24 42 25 43 26 class Listo_Plugin { 27 28 private static $instance = NULL; 29 30 const PLUGIN_VERSION = '0.9.4'; 31 32 public static function get_instance() { 33 return (NULL==self::$instance) ? new self() : self::$instance; 34 } 44 private function __construct() { 45 $this->autoload(); 46 add_action( 'plugins_loaded', array( &$this, 'load_textdomain' ) ); 47 } 35 48 36 49 50 /** UTILITIES **/ 37 51 38 private function __construct() { 39 $this->autoload(); 40 add_action('plugins_loaded', array(&$this, 'load_textdomain')); 41 } 52 private function autoload() { 53 require_once( 'classes' . DIRECTORY_SEPARATOR . 'boot' . DIRECTORY_SEPARATOR . 'all.php' ); 54 Listo_Autoload::get_instance(); 55 Listo_API::get_instance(); 56 Listo_Frontend_Assets::get_instance(); 42 57 58 register_activation_hook( __FILE__, [ 'Listo_Activation', '_' ] ); 59 if ( class_exists( 'Listo_Activation_Pro' ) ) { 60 register_activation_hook( __FILE__, [ 'Listo_Activation_Pro', '_' ] ); 61 } 62 } 43 63 64 public function load_textdomain() { 65 $path = str_ireplace( WP_PLUGIN_DIR, '', dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; 66 load_plugin_textdomain( 'listowp', false, $path ); 67 } 68 } 44 69 45 /** UTILITIES **/ 46 47 private function autoload() { 48 require_once('classes' . DIRECTORY_SEPARATOR . 'boot' . DIRECTORY_SEPARATOR . 'all.php'); 49 Listo_Autoload::get_instance(); 50 Listo_API::get_instance(); 51 Listo_Frontend_Assets::get_instance(); 52 53 register_activation_hook(__FILE__, ['Listo_Activation', '_']); 54 55 56 } 57 58 public function load_textdomain() 59 { 60 $path = str_ireplace(WP_PLUGIN_DIR, '', dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; 61 load_plugin_textdomain('listowp', FALSE, $path); 62 } 70 Listo_Plugin::get_instance(); 63 71 } 64 65 Listo_Plugin::get_instance(); -
listowp/trunk/readme.txt
r2878127 r2884416 6 6 Requires at least: 6.0 7 7 Tested up to: 6.1 8 Stable tag: 0.9. 48 Stable tag: 0.9.5 9 9 License: GPLv2 or later 10 10 … … 61 61 62 62 == Changelog == 63 64 = 0.9.5 - 65 * Mar 21, 2023 • BETA6 66 * NEW • PRO • Task deadlines can now be recurring 67 * NEW • Task deadlines can also be set with time 68 * IMP • Task deadline setting is now a drop-down menu 69 * IMP • PRO • BuddyBoss integration: added extra explanation to the "position" option as BB does not number the profile tabs from "1" 70 * IMP • PRO • Separate activation script for Pro related options & database tables 71 * IMP • PRO • Add a warning if admin is trying to activate both Free and Pro at the same time 72 * FIX • PRO • PeepSo integration: wrong use of slug & label 73 * FIX • Edited tasks couldn't be dragged 74 * FIX • Plugin activation resets configuration 63 75 64 76 = 0.9.4 - -
listowp/trunk/templates/collection_header.php
r2878127 r2884416 63 63 placeholder="<?php echo esc_attr__('Task title', 'listowp'); ?>" /> 64 64 <div class="lo-tasks__add-form-actions"> 65 <button class="lo-tasks__add-form-action lo-btn lo-tip" disabled data-listo="save-and-new"66 aria-label="<?php echo esc_attr__("Add & new", 'listowp') . " (⇧⏎)"; ?>">67 <i class="fa-solid fa-circle-plus"></i>68 </button>69 65 <button class="lo-tasks__add-form-action lo-btn lo-tip" data-listo="cancel" 70 66 aria-label="<?php echo esc_attr__('Cancel', 'listowp'); ?>"> 71 67 <i class="fa-regular fa-circle-xmark"></i> 72 68 </button> 69 <button class="lo-tasks__add-form-action lo-btn lo-tip" disabled data-listo="save" 70 aria-label="<?php echo esc_attr__("Add", 'listowp'); ?>"> 71 <i class="fa-solid fa-circle-plus"></i> 72 </button> 73 73 74 </div> 74 75 </div> -
listowp/trunk/templates/item.php
r2877206 r2884416 44 44 <div class="lo-task__name-meta"> 45 45 <?php echo Listo_Frontend_Assets::get_instance()->get_template('item_due'); ?> 46 <?php do_action('listowp_item_meta');?> 46 47 47 <!-- Read more --> 48 48 <button … … 54 54 <i class="fa-solid fa-circle-info"></i> 55 55 </button> 56 56 57 <!-- Edit button --> 57 58 <div class="lo-task__edit-toggle lo-task__meta lo-tip lo-tip--bottom" data-listo="edit-item" aria-label="<?php echo esc_attr__('Edit', 'listowp'); ?>"> -
listowp/trunk/templates/item_due.php
r2877206 r2884416 1 1 {{ if (data.due) { }} 2 <span class="lo-task__meta lo-task__meta--date {{= data.due_past ? 'lo-task__meta--expired' : 'lo-task__meta--scheduled' }}" 3 data-listo="item-due"> 4 5 <!-- {{ if (data.rrule) { }}--> 6 <!-- <i class="fa-solid fa-repeat"></i>--> 7 <!-- {{ } else{ }}--> 8 {{ if (data.due_past) { }} 2 <div class="lo-task__meta lo-task__meta--date {{= data.due_past ? 'lo-task__meta--expired' : 'lo-task__meta--scheduled' }}" data-listo="item-due"> 3 <div class="lo-tip lo-tip--right" aria-label="{{= data.due_formatted_long_time }}{{ if (data.rrule_label) { }} • {{= data.rrule_label }}{{ } }}"> 4 {{ if (data.rrule) { }} 5 <i class="fa-solid fa-repeat"></i> 6 {{ } else if (data.due_past) { }} 9 7 <i class="fa-solid fa-circle-exclamation"></i> 10 8 {{ } else { }} 11 9 <i class="fa-solid fa-calendar-days"></i> 12 10 {{ } }} 13 <!-- {{ } }}-->14 <span class="lo-tip lo-tip--right" aria-label="<?php echo esc_attr(__('Due date', 'listowp')); ?>">15 11 {{= data.due_this_year ? data.due_formatted : data.due_formatted_long }} 16 <input class="lo-task__meta-input" type="date" value="{{= data.due }}" data-listo="item-due-picker" /> 17 </span> 18 <span class="lo-tip lo-tip--right" aria-label="<?php echo esc_attr(__('Clear', 'listowp')); ?>"> 19 <i class="fa-solid fa-xmark lo-task__meta-toggle" data-listo="item-due-remove"></i> 20 </span> 21 </span> 12 <i class="fa-solid fa-angle-down lo-task__meta-toggle"></i> 13 </div> 14 15 <?php echo Listo_Frontend_Assets::get_instance()->get_template('item_due_popup'); ?> 16 </div> 22 17 {{ } else { }} 23 <span class="lo-task__meta lo-task__meta--date lo-tip lo-tip--right" data-listo="item-due" aria-label="<?php echo esc_attr(__('No due date', 'listowp')); ?>"> 24 <i class="fa-regular fa-calendar"></i> 25 <input class="lo-task__meta-input" type="date" value="" data-listo="item-due-picker" /> 26 <i class="fa-solid fa-angle-down lo-task__meta-toggle" data-listo="item-due-change"></i> 27 </span> 18 <div class="lo-task__meta lo-task__meta--date" data-listo="item-due"> 19 <div class="lo-tip lo-tip--right" aria-label="<?php echo esc_attr__('No due date', 'listowp'); ?>"> 20 <i class="fa-regular fa-calendar"></i> 21 <i class="fa-solid fa-angle-down lo-task__meta-toggle"></i> 22 </div> 23 24 <?php echo Listo_Frontend_Assets::get_instance()->get_template('item_due_popup'); ?> 25 </div> 28 26 {{ } }} -
listowp/trunk/templates/root.php
r2878127 r2884416 5 5 <a class="lo-activate" href="<?php echo admin_url('admin.php?page=listowp-license');?>">Please activate your ListoWP Pro license!</a> 6 6 <?php } else { 7 7 8 if(Listo_User::get_id()) { ?> 8 9 <?php $color_theme = Listo_Config::get('default_theme_select'); ?> … … 23 24 <i class="fa-solid fa-up-right-and-down-left-from-center"></i> 24 25 </button> 26 <button class="lo-pref__toggle lo-btn lo-tip lo-tip--left" data-listo="preferences-toggle" aria-label="<?php echo esc_attr__('Preferences', 'listowp'); ?>"> 27 <i class="fa-solid fa-gear"></i> 28 </button> 25 29 {{ if (data.enable_collections) { }} 26 30 <div class="lo-sidebar" data-listo="sidebar"> … … 37 41 placeholder="<?php echo esc_attr(__('List name', 'listowp')); ?>" /> 38 42 <div class="lo-lists__add-form-actions"> 39 <button class="lo-btn lo-lists__add-form-action lo-tip lo-tip--bottom" disabled data-listo="save-and-new" aria-label="<?php echo esc_attr(__('Add & new', 'listowp'))." (⇧⏎)"; ?>"><i class="fa-solid fa-circle-plus"></i></button>40 43 <button class="lo-btn lo-lists__add-form-action lo-tip lo-tip--bottom" data-listo="cancel" aria-label="<?php echo esc_attr(__('Cancel', 'listowp')); ?>"><i class="fa-regular fa-circle-xmark"></i></button> 44 <button class="lo-btn lo-lists__add-form-action lo-tip lo-tip--bottom" disabled data-listo="save" aria-label="<?php echo esc_attr(__('Add', 'listowp')); ?>"><i class="fa-solid fa-circle-plus"></i></button> 41 45 </div> 42 46 </div> … … 44 48 <div class="lo-lists__add-wrapper" data-listo="new-collection" style="display:none"> 45 49 <div class="lo-lists__add"> 46 <i class="fa- solid fa-circle-plus"></i><?php echo __('New list','listowp'); ?>50 <i class="fa-regular fa-circle"></i><?php echo __('New list','listowp'); ?> 47 51 </div> 48 52 </div> … … 62 66 <div class="lo-tasks" data-listo="items"></div> 63 67 </div> 64 <button class="lo-pref__toggle lo-btn lo-tip lo-tip--left" data-listo="pref-toggle" aria-label="<?php echo esc_attr__('Preferences', 'listowp'); ?>"><i class="fa-solid fa-gear"></i></button> 65 <div class="lo-pref" style="display:none" data-listo="preferences"> 66 <button class="lo-pref__close lo-btn lo-tip lo-tip--left" data-listo="pref-close" aria-label="<?php echo esc_attr__('Close Preferences', 'listowp'); ?>"> 68 <div class="lo-pref" data-listo="preferences" style="display:none"> 69 <button class="lo-pref__close lo-btn lo-tip lo-tip--left" data-listo="preferences-close" aria-label="<?php echo esc_attr_x('Close', 'Button to close window etc','listowp'); ?>"> 67 70 <i class="fa-solid fa-circle-xmark"></i> 68 71 </button>
Note: See TracChangeset
for help on using the changeset viewer.