diff --git a/composer.lock b/composer.lock index 88f9452..336ed9f 100644 --- a/composer.lock +++ b/composer.lock @@ -66,16 +66,16 @@ }, { "name": "chillerlan/php-qrcode", - "version": "4.4.2", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/chillerlan/php-qrcode.git", - "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4" + "reference": "7b66282572fc14075c0507d74d9837dab25b38d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4", - "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/7b66282572fc14075c0507d74d9837dab25b38d6", + "reference": "7b66282572fc14075c0507d74d9837dab25b38d6", "shasum": "" }, "require": { @@ -84,11 +84,15 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "phan/phan": "^5.4.5", + "chillerlan/php-authenticator": "^4.3.1 || ^5.2.1", + "ext-fileinfo": "*", + "phan/phan": "^5.5.2", + "phpcompatibility/php-compatibility": "10.x-dev", "phpmd/phpmd": "^2.15", "phpunit/phpunit": "^9.6", "setasign/fpdf": "^1.8.2", - "squizlabs/php_codesniffer": "^3.11" + "slevomat/coding-standard": "^8.23.0", + "squizlabs/php_codesniffer": "^4.0.0" }, "suggest": { "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", @@ -98,17 +102,26 @@ "type": "library", "autoload": { "psr-4": { - "chillerlan\\QRCode\\": "src/" + "chillerlan\\QRCode\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "MIT", + "Apache-2.0" ], "authors": [ { "name": "Kazuhiko Arase", - "homepage": "https://github.com/kazuhikoarase" + "homepage": "https://github.com/kazuhikoarase/qrcode-generator" + }, + { + "name": "ZXing Authors", + "homepage": "https://github.com/zxing/zxing" + }, + { + "name": "Ashot Khanamiryan", + "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder" }, { "name": "Smiley", @@ -120,26 +133,29 @@ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors" } ], - "description": "A QR code generator with a user friendly API. PHP 7.4+", + "description": "A QR Code generator and reader with a user-friendly API. PHP 7.4+", "homepage": "https://github.com/chillerlan/php-qrcode", "keywords": [ "phpqrcode", "qr", "qr code", + "qr-reader", "qrcode", - "qrcode-generator" + "qrcode-generator", + "qrcode-reader" ], "support": { + "docs": "https://php-qrcode.readthedocs.io", "issues": "https://github.com/chillerlan/php-qrcode/issues", - "source": "https://github.com/chillerlan/php-qrcode/tree/4.4.2" + "source": "https://github.com/chillerlan/php-qrcode" }, "funding": [ { "url": "https://ko-fi.com/codemasher", - "type": "ko_fi" + "type": "Ko-Fi" } ], - "time": "2024-11-15T15:36:24+00:00" + "time": "2025-11-23T23:51:44+00:00" }, { "name": "chillerlan/php-settings-container", @@ -1214,10 +1230,10 @@ "dist": { "type": "path", "url": "user/plugins/seans-qrcode", - "reference": "3e788bc8c3c0079257114a51b0c9f3b4d44dd7cf" + "reference": "d162de53f08a19e0b27335362a74788712f1d20e" }, "require": { - "chillerlan/php-qrcode": "^4.4.0", + "chillerlan/php-qrcode": "^4.4.0 || ^5.0.3", "ext-gd": "*", "ext-mbstring": "*", "php": "^8.0" diff --git a/frontend/assets/sass/styles.scss b/frontend/assets/sass/styles.scss index 7cb7c98..6ee2990 100644 --- a/frontend/assets/sass/styles.scss +++ b/frontend/assets/sass/styles.scss @@ -5,6 +5,14 @@ $raleway: "Raleway", system-ui, -apple-system, "Segoe UI", Raleway, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; $oswald: "Oswald", system-ui, -apple-system, "Segoe UI", Oswald, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +// Theme variables (safe defaults) +$theme: "light" !default; +$primary: #112e51 !default; +// Accent color for light theme +$accent: $primary !default; +// Background color for light theme buttons +$light: #ffffff !default; + // Bootstrap Overrides $enable-negative-margins: true; $font-family-sans-serif: $raleway; @@ -81,3 +89,52 @@ $border-radius: 6px; } } } + +.login { + input.button { + font-weight: 600; + padding: 10px 25px; + margin-top: 15px !important; + + @if ($theme == "light") { + background: $accent !important; + } @else { + background: $light !important; + border-left: 7px solid $accent !important; + } + } +} + +.visually-hidden { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.visually-hidden-focusable:active, +.visually-hidden-focusable:focus { + position: static !important; + width: auto !important; + height: auto !important; + margin: 0 !important; + overflow: visible !important; + clip: auto !important; + white-space: normal !important; +} +.customize-link-toggle { + transition: box-shadow 0.15s ease, outline 0.15s ease, background-color 0.15s ease; +} + +.customize-link-toggle:focus-visible, +.customize-link-toggle:focus { + outline: 3px solid $primary; + outline-offset: 2px; + box-shadow: 0 0 0 0.15rem rgba($primary, 0.5); + background-color: rgba($primary, 0.08); +} diff --git a/frontend/dist/styles.css b/frontend/dist/styles.css index 1cc6000..315a778 100644 --- a/frontend/dist/styles.css +++ b/frontend/dist/styles.css @@ -26,23 +26,23 @@ --bs-gray-700: #495057; --bs-gray-800: #343a40; --bs-gray-900: #212529; - --bs-primary: #0d6efd; + --bs-primary: #112e51; --bs-secondary: #6c757d; --bs-success: #198754; --bs-info: #0dcaf0; --bs-warning: #ffc107; --bs-danger: #dc3545; - --bs-light: #f8f9fa; + --bs-light: #ffffff; --bs-dark: #212529; - --bs-primary-rgb: 13, 110, 253; + --bs-primary-rgb: 17, 46, 81; --bs-secondary-rgb: 108, 117, 125; --bs-success-rgb: 25, 135, 84; --bs-info-rgb: 13, 202, 240; --bs-warning-rgb: 255, 193, 7; --bs-danger-rgb: 220, 53, 69; - --bs-light-rgb: 248, 249, 250; + --bs-light-rgb: 255, 255, 255; --bs-dark-rgb: 33, 37, 41; - --bs-primary-text-emphasis: rgb(5.2, 44, 101.2); + --bs-primary-text-emphasis: rgb(6.8, 18.4, 32.4); --bs-secondary-text-emphasis: rgb(43.2, 46.8, 50); --bs-success-text-emphasis: rgb(10, 54, 33.6); --bs-info-text-emphasis: rgb(5.2, 80.8, 96); @@ -50,7 +50,7 @@ --bs-danger-text-emphasis: rgb(88, 21.2, 27.6); --bs-light-text-emphasis: #495057; --bs-dark-text-emphasis: #495057; - --bs-primary-bg-subtle: rgb(206.6, 226, 254.6); + --bs-primary-bg-subtle: rgb(207.4, 213.2, 220.2); --bs-secondary-bg-subtle: rgb(225.6, 227.4, 229); --bs-success-bg-subtle: rgb(209, 231, 220.8); --bs-info-bg-subtle: rgb(206.6, 244.4, 252); @@ -58,7 +58,7 @@ --bs-danger-bg-subtle: rgb(248, 214.6, 217.8); --bs-light-bg-subtle: rgb(251.5, 252, 252.5); --bs-dark-bg-subtle: #ced4da; - --bs-primary-border-subtle: rgb(158.2, 197, 254.2); + --bs-primary-border-subtle: rgb(159.8, 171.4, 185.4); --bs-secondary-border-subtle: rgb(196.2, 199.8, 203); --bs-success-border-subtle: rgb(163, 207, 186.6); --bs-info-border-subtle: rgb(158.2, 233.8, 249); @@ -90,11 +90,11 @@ --bs-tertiary-bg: #f8f9fa; --bs-tertiary-bg-rgb: 248, 249, 250; --bs-heading-color: inherit; - --bs-link-color: #0d6efd; - --bs-link-color-rgb: 13, 110, 253; + --bs-link-color: #112e51; + --bs-link-color-rgb: 17, 46, 81; --bs-link-decoration: underline; - --bs-link-hover-color: rgb(10.4, 88, 202.4); - --bs-link-hover-color-rgb: 10, 88, 202; + --bs-link-hover-color: rgb(13.6, 36.8, 64.8); + --bs-link-hover-color-rgb: 14, 37, 65; --bs-code-color: #d63384; --bs-highlight-color: #212529; --bs-highlight-bg: rgb(255, 242.6, 205.4); @@ -115,7 +115,7 @@ --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); --bs-focus-ring-width: 0.25rem; --bs-focus-ring-opacity: 0.25; - --bs-focus-ring-color: rgba(13, 110, 253, 0.25); + --bs-focus-ring-color: rgba(17, 46, 81, 0.25); --bs-form-valid-color: #198754; --bs-form-valid-border-color: #198754; --bs-form-invalid-color: #dc3545; @@ -138,7 +138,7 @@ --bs-tertiary-color-rgb: 222, 226, 230; --bs-tertiary-bg: rgb(42.5, 47.5, 52.5); --bs-tertiary-bg-rgb: 43, 48, 53; - --bs-primary-text-emphasis: rgb(109.8, 168, 253.8); + --bs-primary-text-emphasis: rgb(112.2, 129.6, 150.6); --bs-secondary-text-emphasis: rgb(166.8, 172.2, 177); --bs-success-text-emphasis: rgb(117, 183, 152.4); --bs-info-text-emphasis: rgb(109.8, 223.2, 246); @@ -146,7 +146,7 @@ --bs-danger-text-emphasis: rgb(234, 133.8, 143.4); --bs-light-text-emphasis: #f8f9fa; --bs-dark-text-emphasis: #dee2e6; - --bs-primary-bg-subtle: rgb(2.6, 22, 50.6); + --bs-primary-bg-subtle: rgb(3.4, 9.2, 16.2); --bs-secondary-bg-subtle: rgb(21.6, 23.4, 25); --bs-success-bg-subtle: rgb(5, 27, 16.8); --bs-info-bg-subtle: rgb(2.6, 40.4, 48); @@ -154,7 +154,7 @@ --bs-danger-bg-subtle: rgb(44, 10.6, 13.8); --bs-light-bg-subtle: #343a40; --bs-dark-bg-subtle: #1a1d20; - --bs-primary-border-subtle: rgb(7.8, 66, 151.8); + --bs-primary-border-subtle: rgb(10.2, 27.6, 48.6); --bs-secondary-border-subtle: rgb(64.8, 70.2, 75); --bs-success-border-subtle: rgb(15, 81, 50.4); --bs-info-border-subtle: rgb(7.8, 121.2, 144); @@ -163,10 +163,10 @@ --bs-light-border-subtle: #495057; --bs-dark-border-subtle: #343a40; --bs-heading-color: inherit; - --bs-link-color: rgb(109.8, 168, 253.8); - --bs-link-hover-color: rgb(138.84, 185.4, 254.04); - --bs-link-color-rgb: 110, 168, 254; - --bs-link-hover-color-rgb: 139, 185, 254; + --bs-link-color: rgb(112.2, 129.6, 150.6); + --bs-link-hover-color: rgb(140.76, 154.68, 171.48); + --bs-link-color-rgb: 112, 130, 151; + --bs-link-hover-color-rgb: 141, 155, 171; --bs-code-color: rgb(230.4, 132.6, 181.2); --bs-highlight-color: #dee2e6; --bs-highlight-bg: rgb(102, 77.2, 2.8); @@ -513,8 +513,8 @@ legend { width: 100%; padding: 0; margin-bottom: 0.5rem; - font-size: calc(1.275rem + 0.3vw); line-height: inherit; + font-size: calc(1.275rem + 0.3vw); } @media (min-width: 1200px) { legend { @@ -543,6 +543,10 @@ legend + * { -webkit-appearance: textfield; outline-offset: -2px; } +[type=search]::-webkit-search-cancel-button { + cursor: pointer; + filter: grayscale(1); +} /* rtl:raw: [type="tel"], @@ -592,9 +596,9 @@ progress { } .display-1 { - font-size: calc(1.625rem + 4.5vw); font-weight: 300; line-height: 1.2; + font-size: calc(1.625rem + 4.5vw); } @media (min-width: 1200px) { .display-1 { @@ -603,9 +607,9 @@ progress { } .display-2 { - font-size: calc(1.575rem + 3.9vw); font-weight: 300; line-height: 1.2; + font-size: calc(1.575rem + 3.9vw); } @media (min-width: 1200px) { .display-2 { @@ -614,9 +618,9 @@ progress { } .display-3 { - font-size: calc(1.525rem + 3.3vw); font-weight: 300; line-height: 1.2; + font-size: calc(1.525rem + 3.3vw); } @media (min-width: 1200px) { .display-3 { @@ -625,9 +629,9 @@ progress { } .display-4 { - font-size: calc(1.475rem + 2.7vw); font-weight: 300; line-height: 1.2; + font-size: calc(1.475rem + 2.7vw); } @media (min-width: 1200px) { .display-4 { @@ -636,9 +640,9 @@ progress { } .display-5 { - font-size: calc(1.425rem + 2.1vw); font-weight: 300; line-height: 1.2; + font-size: calc(1.425rem + 2.1vw); } @media (min-width: 1200px) { .display-5 { @@ -647,9 +651,9 @@ progress { } .display-6 { - font-size: calc(1.375rem + 1.5vw); font-weight: 300; line-height: 1.2; + font-size: calc(1.375rem + 1.5vw); } @media (min-width: 1200px) { .display-6 { @@ -766,7 +770,7 @@ progress { } .col { - flex: 1 0 0%; + flex: 1 0 0; } .row-cols-auto > * { @@ -975,7 +979,7 @@ progress { @media (min-width: 576px) { .col-sm { - flex: 1 0 0%; + flex: 1 0 0; } .row-cols-sm-auto > * { flex: 0 0 auto; @@ -1144,7 +1148,7 @@ progress { } @media (min-width: 768px) { .col-md { - flex: 1 0 0%; + flex: 1 0 0; } .row-cols-md-auto > * { flex: 0 0 auto; @@ -1313,7 +1317,7 @@ progress { } @media (min-width: 992px) { .col-lg { - flex: 1 0 0%; + flex: 1 0 0; } .row-cols-lg-auto > * { flex: 0 0 auto; @@ -1482,7 +1486,7 @@ progress { } @media (min-width: 1200px) { .col-xl { - flex: 1 0 0%; + flex: 1 0 0; } .row-cols-xl-auto > * { flex: 0 0 auto; @@ -1651,7 +1655,7 @@ progress { } @media (min-width: 1400px) { .col-xxl { - flex: 1 0 0%; + flex: 1 0 0; } .row-cols-xxl-auto > * { flex: 0 0 auto; @@ -1878,9 +1882,9 @@ progress { .form-control:focus { color: var(--bs-body-color); background-color: #ebebeb; - border-color: rgb(134, 182.5, 254); + border-color: rgb(136, 150.5, 168); outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + box-shadow: 0 0 0 0.25rem rgba(17, 46, 81, 0.25); } .form-control::-webkit-date-and-time-value { min-width: 85px; @@ -2024,9 +2028,9 @@ textarea.form-control-lg { } } .form-select:focus { - border-color: rgb(134, 182.5, 254); + border-color: rgb(136, 150.5, 168); outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + box-shadow: 0 0 0 0.25rem rgba(17, 46, 81, 0.25); } .form-select[multiple], .form-select[size]:not([size="1"]) { padding-right: 0.75rem; @@ -2108,13 +2112,13 @@ textarea.form-control-lg { filter: brightness(90%); } .form-check-input:focus { - border-color: rgb(134, 182.5, 254); + border-color: rgb(136, 150.5, 168); outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + box-shadow: 0 0 0 0.25rem rgba(17, 46, 81, 0.25); } .form-check-input:checked { - background-color: #0d6efd; - border-color: #0d6efd; + background-color: #112e51; + border-color: #112e51; } .form-check-input:checked[type=checkbox] { --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); @@ -2123,8 +2127,8 @@ textarea.form-control-lg { --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); } .form-check-input[type=checkbox]:indeterminate { - background-color: #0d6efd; - border-color: #0d6efd; + background-color: #112e51; + border-color: #112e51; --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); } .form-check-input:disabled { @@ -2155,7 +2159,7 @@ textarea.form-control-lg { } } .form-switch .form-check-input:focus { - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28134, 182.5, 254%29'/%3e%3c/svg%3e"); + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28136, 150.5, 168%29'/%3e%3c/svg%3e"); } .form-switch .form-check-input:checked { background-position: right center; @@ -2201,10 +2205,10 @@ textarea.form-control-lg { outline: 0; } .form-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(17, 46, 81, 0.25); } .form-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(17, 46, 81, 0.25); } .form-range::-moz-focus-outer { border: 0; @@ -2214,7 +2218,7 @@ textarea.form-control-lg { height: 1rem; margin-top: -0.25rem; appearance: none; - background-color: #0d6efd; + background-color: #112e51; border: 0; border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; @@ -2225,7 +2229,7 @@ textarea.form-control-lg { } } .form-range::-webkit-slider-thumb:active { - background-color: rgb(182.4, 211.5, 254.4); + background-color: rgb(183.6, 192.3, 202.8); } .form-range::-webkit-slider-runnable-track { width: 100%; @@ -2240,7 +2244,7 @@ textarea.form-control-lg { width: 1rem; height: 1rem; appearance: none; - background-color: #0d6efd; + background-color: #112e51; border: 0; border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; @@ -2251,7 +2255,7 @@ textarea.form-control-lg { } } .form-range::-moz-range-thumb:active { - background-color: rgb(182.4, 211.5, 254.4); + background-color: rgb(183.6, 192.3, 202.8); } .form-range::-moz-range-track { width: 100%; @@ -2287,9 +2291,11 @@ textarea.form-control-lg { top: 0; left: 0; z-index: 2; + max-width: 100%; height: 100%; padding: 1rem 0.75rem; overflow: hidden; + color: rgba(var(--bs-body-color-rgb), 0.65); text-align: start; text-overflow: ellipsis; white-space: nowrap; @@ -2325,18 +2331,19 @@ textarea.form-control-lg { .form-floating > .form-select { padding-top: 1.625rem; padding-bottom: 0.625rem; + padding-left: 0.75rem; } .form-floating > .form-control:focus ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-control-plaintext ~ label, .form-floating > .form-select ~ label { - color: rgba(var(--bs-body-color-rgb), 0.65); transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } -.form-floating > .form-control:focus ~ label::after, -.form-floating > .form-control:not(:placeholder-shown) ~ label::after, -.form-floating > .form-control-plaintext ~ label::after, -.form-floating > .form-select ~ label::after { +.form-floating > .form-control:-webkit-autofill ~ label { + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > textarea:focus ~ label::after, +.form-floating > textarea:not(:placeholder-shown) ~ label::after { position: absolute; inset: 1rem 0.375rem; z-index: -1; @@ -2345,9 +2352,8 @@ textarea.form-control-lg { background-color: #ebebeb; border-radius: var(--bs-border-radius); } -.form-floating > .form-control:-webkit-autofill ~ label { - color: rgba(var(--bs-body-color-rgb), 0.65); - transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +.form-floating > textarea:disabled ~ label::after { + background-color: var(--bs-secondary-bg); } .form-floating > .form-control-plaintext ~ label { border-width: 0 0; @@ -2356,10 +2362,6 @@ textarea.form-control-lg { .form-floating > .form-control:disabled ~ label { color: #6c757d; } -.form-floating > :disabled ~ label::after, -.form-floating > .form-control:disabled ~ label::after { - background-color: var(--bs-secondary-bg); -} .input-group { position: relative; @@ -2442,7 +2444,7 @@ textarea.form-control-lg { border-bottom-right-radius: 0; } .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { - margin-left: calc(0 * -1); + margin-left: calc(-1 * 0); border-top-left-radius: 0; border-bottom-left-radius: 0; } @@ -2484,7 +2486,7 @@ textarea.form-control-lg { .was-validated .form-control:valid, .form-control.is-valid { border-color: var(--bs-form-valid-border-color); padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right calc(0.375em + 0.1875rem) center; background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); @@ -2503,7 +2505,7 @@ textarea.form-control-lg { border-color: var(--bs-form-valid-border-color); } .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { - --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); padding-right: 4.125rem; background-position: right 0.75rem center, center right 2.25rem; background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); @@ -2713,19 +2715,19 @@ textarea.form-control-lg { .btn-primary { --bs-btn-color: #fff; - --bs-btn-bg: #0d6efd; - --bs-btn-border-color: #0d6efd; + --bs-btn-bg: #112e51; + --bs-btn-border-color: #112e51; --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: rgb(11.05, 93.5, 215.05); - --bs-btn-hover-border-color: rgb(10.4, 88, 202.4); - --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-hover-bg: rgb(14.45, 39.1, 68.85); + --bs-btn-hover-border-color: rgb(13.6, 36.8, 64.8); + --bs-btn-focus-shadow-rgb: 53, 77, 107; --bs-btn-active-color: #fff; - --bs-btn-active-bg: rgb(10.4, 88, 202.4); - --bs-btn-active-border-color: rgb(9.75, 82.5, 189.75); + --bs-btn-active-bg: rgb(13.6, 36.8, 64.8); + --bs-btn-active-border-color: rgb(12.75, 34.5, 60.75); --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #0d6efd; - --bs-btn-disabled-border-color: #0d6efd; + --bs-btn-disabled-bg: #112e51; + --bs-btn-disabled-border-color: #112e51; } .btn-secondary { @@ -2815,19 +2817,19 @@ textarea.form-control-lg { .btn-light { --bs-btn-color: #000; - --bs-btn-bg: #f8f9fa; - --bs-btn-border-color: #f8f9fa; + --bs-btn-bg: #ffffff; + --bs-btn-border-color: #ffffff; --bs-btn-hover-color: #000; - --bs-btn-hover-bg: rgb(210.8, 211.65, 212.5); - --bs-btn-hover-border-color: rgb(198.4, 199.2, 200); - --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-hover-bg: rgb(216.75, 216.75, 216.75); + --bs-btn-hover-border-color: #cccccc; + --bs-btn-focus-shadow-rgb: 217, 217, 217; --bs-btn-active-color: #000; - --bs-btn-active-bg: rgb(198.4, 199.2, 200); - --bs-btn-active-border-color: rgb(186, 186.75, 187.5); + --bs-btn-active-bg: #cccccc; + --bs-btn-active-border-color: rgb(191.25, 191.25, 191.25); --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); --bs-btn-disabled-color: #000; - --bs-btn-disabled-bg: #f8f9fa; - --bs-btn-disabled-border-color: #f8f9fa; + --bs-btn-disabled-bg: #ffffff; + --bs-btn-disabled-border-color: #ffffff; } .btn-dark { @@ -2848,19 +2850,19 @@ textarea.form-control-lg { } .btn-outline-primary { - --bs-btn-color: #0d6efd; - --bs-btn-border-color: #0d6efd; + --bs-btn-color: #112e51; + --bs-btn-border-color: #112e51; --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #0d6efd; - --bs-btn-hover-border-color: #0d6efd; - --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-hover-bg: #112e51; + --bs-btn-hover-border-color: #112e51; + --bs-btn-focus-shadow-rgb: 17, 46, 81; --bs-btn-active-color: #fff; - --bs-btn-active-bg: #0d6efd; - --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-bg: #112e51; + --bs-btn-active-border-color: #112e51; --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-color: #112e51; --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #0d6efd; + --bs-btn-disabled-border-color: #112e51; --bs-gradient: none; } @@ -2950,19 +2952,19 @@ textarea.form-control-lg { } .btn-outline-light { - --bs-btn-color: #f8f9fa; - --bs-btn-border-color: #f8f9fa; + --bs-btn-color: #ffffff; + --bs-btn-border-color: #ffffff; --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #f8f9fa; - --bs-btn-hover-border-color: #f8f9fa; - --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-hover-bg: #ffffff; + --bs-btn-hover-border-color: #ffffff; + --bs-btn-focus-shadow-rgb: 255, 255, 255; --bs-btn-active-color: #000; - --bs-btn-active-bg: #f8f9fa; - --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-bg: #ffffff; + --bs-btn-active-border-color: #ffffff; --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-color: #ffffff; --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #f8f9fa; + --bs-btn-disabled-border-color: #ffffff; --bs-gradient: none; } @@ -2995,7 +2997,7 @@ textarea.form-control-lg { --bs-btn-disabled-color: #6c757d; --bs-btn-disabled-border-color: transparent; --bs-btn-box-shadow: 0 0 0 #000; - --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-focus-shadow-rgb: 53, 77, 107; text-decoration: underline; } .btn-link:focus-visible { @@ -3210,7 +3212,7 @@ textarea.form-control-lg { flex-flow: row wrap; } .card-group > .card { - flex: 1 0 0%; + flex: 1 0 0; margin-bottom: 0; } .card-group > .card + .card { @@ -3221,24 +3223,24 @@ textarea.form-control-lg { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .card-group > .card:not(:last-child) .card-img-top, - .card-group > .card:not(:last-child) .card-header { + .card-group > .card:not(:last-child) > .card-img-top, + .card-group > .card:not(:last-child) > .card-header { border-top-right-radius: 0; } - .card-group > .card:not(:last-child) .card-img-bottom, - .card-group > .card:not(:last-child) .card-footer { + .card-group > .card:not(:last-child) > .card-img-bottom, + .card-group > .card:not(:last-child) > .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } - .card-group > .card:not(:first-child) .card-img-top, - .card-group > .card:not(:first-child) .card-header { + .card-group > .card:not(:first-child) > .card-img-top, + .card-group > .card:not(:first-child) > .card-header { border-top-left-radius: 0; } - .card-group > .card:not(:first-child) .card-img-bottom, - .card-group > .card:not(:first-child) .card-footer { + .card-group > .card:not(:first-child) > .card-img-bottom, + .card-group > .card:not(:first-child) > .card-footer { border-bottom-left-radius: 0; } } @@ -3255,12 +3257,12 @@ textarea.form-control-lg { --bs-accordion-btn-padding-y: 1rem; --bs-accordion-btn-color: var(--bs-body-color); --bs-accordion-btn-bg: var(--bs-accordion-bg); - --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); --bs-accordion-btn-icon-width: 1.25rem; --bs-accordion-btn-icon-transform: rotate(-180deg); --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; - --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='rgb%285.2, 44, 101.2%29' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); - --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='rgb%286.8, 18.4, 32.4%29' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(17, 46, 81, 0.25); --bs-accordion-body-padding-x: 1.25rem; --bs-accordion-body-padding-y: 1rem; --bs-accordion-active-color: var(--bs-primary-text-emphasis); @@ -3369,16 +3371,15 @@ textarea.form-control-lg { .accordion-flush > .accordion-item:last-child { border-bottom: 0; } -.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { - border-radius: 0; -} -.accordion-flush > .accordion-item > .accordion-collapse { +.accordion-flush > .accordion-item > .accordion-collapse, +.accordion-flush > .accordion-item > .accordion-header .accordion-button, +.accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { border-radius: 0; } [data-bs-theme=dark] .accordion-button::after { - --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28109.8, 168, 253.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28109.8, 168, 253.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28112.2, 129.6, 150.6%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28112.2, 129.6, 150.6%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); } .alert { @@ -3478,19 +3479,19 @@ textarea.form-control-lg { .btn-close { --bs-btn-close-color: #000; - --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e"); --bs-btn-close-opacity: 0.5; --bs-btn-close-hover-opacity: 0.75; - --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(17, 46, 81, 0.25); --bs-btn-close-focus-opacity: 1; --bs-btn-close-disabled-opacity: 0.25; - --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); box-sizing: content-box; width: 1em; height: 1em; padding: 0.25em 0.25em; color: var(--bs-btn-close-color); background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + filter: var(--bs-btn-close-filter); border: 0; border-radius: 6px; opacity: var(--bs-btn-close-opacity); @@ -3512,11 +3513,16 @@ textarea.form-control-lg { } .btn-close-white { - filter: var(--bs-btn-close-white-filter); + --bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%); } -[data-bs-theme=dark] .btn-close { - filter: var(--bs-btn-close-white-filter); +:root, +[data-bs-theme=light] { + --bs-btn-close-filter: ; +} + +[data-bs-theme=dark] { + --bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%); } .clearfix::after { @@ -3570,8 +3576,8 @@ textarea.form-control-lg { text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; } .link-primary:hover, .link-primary:focus { - color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important; - text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; + color: RGBA(14, 37, 65, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(14, 37, 65, var(--bs-link-underline-opacity, 1)) !important; } .link-secondary { @@ -3624,8 +3630,8 @@ textarea.form-control-lg { text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; } .link-light:hover, .link-light:focus { - color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important; - text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important; + color: RGBA(255, 255, 255, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 255, 255, var(--bs-link-underline-opacity, 1)) !important; } .link-dark { @@ -3826,6 +3832,10 @@ textarea.form-control-lg { .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { position: absolute !important; } +.visually-hidden *, +.visually-hidden-focusable:not(:focus):not(:focus-within) * { + overflow: hidden !important; +} .stretched-link::after { position: absolute; @@ -9359,4 +9369,45 @@ textarea.form-control-lg { width: 100%; border-radius: 6px !important; } +} +.login input.button { + font-weight: 600; + padding: 10px 25px; + margin-top: 15px !important; + background: #112e51 !important; +} + +.visually-hidden { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.visually-hidden-focusable:active, +.visually-hidden-focusable:focus { + position: static !important; + width: auto !important; + height: auto !important; + margin: 0 !important; + overflow: visible !important; + clip: auto !important; + white-space: normal !important; +} + +.customize-link-toggle { + transition: box-shadow 0.15s ease, outline 0.15s ease, background-color 0.15s ease; +} + +.customize-link-toggle:focus-visible, +.customize-link-toggle:focus { + outline: 3px solid #112e51; + outline-offset: 2px; + box-shadow: 0 0 0 0.15rem rgba(17, 46, 81, 0.5); + background-color: rgba(17, 46, 81, 0.08); } \ No newline at end of file diff --git a/frontend/footer.php b/frontend/footer.php index 17f2ec6..a67e8ce 100644 --- a/frontend/footer.php +++ b/frontend/footer.php @@ -45,13 +45,18 @@ function copyTextToClipboard(text) { copyBtn.addEventListener('click', function(event) { copyTextToClipboard(event.target.dataset.shorturl); }); + + // Move focus to copy button when result screen is shown + window.addEventListener('load', function () { + copyBtn.focus(); + }); } const closeShortenedLinkScreenButton = document.querySelector('button#close-shortened-screen'); if (closeShortenedLinkScreenButton) { closeShortenedLinkScreenButton.addEventListener('click', function(event) { - window.location.href=window.location.href; + window.location.href = window.location.href; }); } diff --git a/frontend/header.php b/frontend/header.php index 034b65e..9ede818 100644 --- a/frontend/header.php +++ b/frontend/header.php @@ -9,7 +9,7 @@ - + <?php echo title ?> @@ -43,4 +43,23 @@ border-color: ; } + + + diff --git a/index.php b/index.php index 51f7c1f..2fabe2c 100644 --- a/index.php +++ b/index.php @@ -84,79 +84,140 @@ function shorten() -
-
-
-
- - - -
- -
- -
-

Your short link

+Skip to main content +
+
+
+
+
+ + + +
+ +
-
-
-
- - +
+

Your short link

+ +
+
+
+ + + +
+ + View info and stats at + + +
- View info and stats at +
-
- -
- UTC Logo -
-
-

- - - - + +
+ <?php echo shortTitle ?> +
+
+

Shorten a URL

+

+ + + + + - - +
+ © +
+ $val): ?> + + + +
- -
-
- © -
- $val): ?> - -
-
+
diff --git a/user/config.php b/user/config.php index 8c7199c..a8e53a3 100644 --- a/user/config.php +++ b/user/config.php @@ -30,6 +30,7 @@ $amp_default_role = "anonymous"; $amp_role_assignment = array( 'administrator' => array( + 'admin', 'utc123',/* UC */ 'xjm218',/* BH */ 'jty711',/* CG */ @@ -68,6 +69,19 @@ /** A hash used to encrypt cookies. This one is used only local dev ** Hint: copy from http://yourls.org/cookie */ define( 'YOURLS_COOKIEKEY', 'YOURLS_LOCAL_COOKIEKEY' ); + + /* + ** Auth Manager Plus plugin configuration (LOCAL) + ** Role Assignments per user + */ + $amp_default_role = "anonymous"; + $amp_role_assignment = array( + 'administrator' => array( + 'admin', // this is the DDEV local admin user + ), + // Add any other local test users/roles here if needed + ); + } // ---------- Environment-aware YOURLS_DEBUG ---------- diff --git a/user/plugins/auth-mgr-plus/plugin.php b/user/plugins/auth-mgr-plus/plugin.php index 52f2c5b..a1410b8 100644 --- a/user/plugins/auth-mgr-plus/plugin.php +++ b/user/plugins/auth-mgr-plus/plugin.php @@ -706,4 +706,4 @@ function amp_add_user_row( $cells, $keyword ) { return $cells; } -?> \ No newline at end of file +?> diff --git a/user/plugins/seans-qrcode/QRImageWithLogo.php b/user/plugins/seans-qrcode/QRImageWithLogo.php index 967041e..41cd2bd 100644 --- a/user/plugins/seans-qrcode/QRImageWithLogo.php +++ b/user/plugins/seans-qrcode/QRImageWithLogo.php @@ -12,12 +12,8 @@ * @noinspection PhpComposerExtensionStubsInspection */ -// namespace chillerlan\QRCode; - use chillerlan\QRCode\Output\{QRCodeOutputException, QRImage}; -use function imagecopyresampled, imagecreatefrompng, imagesx, imagesy, is_file, is_readable; - /** * @property \chillerlan\QRCodeExamples\LogoOptions $options */ diff --git a/user/plugins/seans-qrcode/composer.json b/user/plugins/seans-qrcode/composer.json index 1771a62..bb9b24a 100644 --- a/user/plugins/seans-qrcode/composer.json +++ b/user/plugins/seans-qrcode/composer.json @@ -4,7 +4,7 @@ "description": "QR Code plugin for YOURLS", "require": { "php": "^8.0", - "chillerlan/php-qrcode": "^4.4.0", + "chillerlan/php-qrcode": "^4.4.0 || ^5.0.3", "ext-mbstring": "*", "ext-gd": "*" } diff --git a/user/plugins/seans-qrcode/composer.lock b/user/plugins/seans-qrcode/composer.lock index a8f411f..027d770 100644 --- a/user/plugins/seans-qrcode/composer.lock +++ b/user/plugins/seans-qrcode/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "409d7829335c97990d5bc31bc1b151c5", + "content-hash": "51ab3adf7ff100f83f9c86c3535e9299", "packages": [ { "name": "chillerlan/php-qrcode", - "version": "4.4.2", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/chillerlan/php-qrcode.git", - "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4" + "reference": "7b66282572fc14075c0507d74d9837dab25b38d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4", - "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/7b66282572fc14075c0507d74d9837dab25b38d6", + "reference": "7b66282572fc14075c0507d74d9837dab25b38d6", "shasum": "" }, "require": { @@ -26,11 +26,15 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "phan/phan": "^5.4.5", + "chillerlan/php-authenticator": "^4.3.1 || ^5.2.1", + "ext-fileinfo": "*", + "phan/phan": "^5.5.2", + "phpcompatibility/php-compatibility": "10.x-dev", "phpmd/phpmd": "^2.15", "phpunit/phpunit": "^9.6", "setasign/fpdf": "^1.8.2", - "squizlabs/php_codesniffer": "^3.11" + "slevomat/coding-standard": "^8.23.0", + "squizlabs/php_codesniffer": "^4.0.0" }, "suggest": { "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", @@ -40,17 +44,26 @@ "type": "library", "autoload": { "psr-4": { - "chillerlan\\QRCode\\": "src/" + "chillerlan\\QRCode\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "MIT", + "Apache-2.0" ], "authors": [ { "name": "Kazuhiko Arase", - "homepage": "https://github.com/kazuhikoarase" + "homepage": "https://github.com/kazuhikoarase/qrcode-generator" + }, + { + "name": "ZXing Authors", + "homepage": "https://github.com/zxing/zxing" + }, + { + "name": "Ashot Khanamiryan", + "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder" }, { "name": "Smiley", @@ -62,26 +75,29 @@ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors" } ], - "description": "A QR code generator with a user friendly API. PHP 7.4+", + "description": "A QR Code generator and reader with a user-friendly API. PHP 7.4+", "homepage": "https://github.com/chillerlan/php-qrcode", "keywords": [ "phpqrcode", "qr", "qr code", + "qr-reader", "qrcode", - "qrcode-generator" + "qrcode-generator", + "qrcode-reader" ], "support": { + "docs": "https://php-qrcode.readthedocs.io", "issues": "https://github.com/chillerlan/php-qrcode/issues", - "source": "https://github.com/chillerlan/php-qrcode/tree/4.4.2" + "source": "https://github.com/chillerlan/php-qrcode" }, "funding": [ { "url": "https://ko-fi.com/codemasher", - "type": "ko_fi" + "type": "Ko-Fi" } ], - "time": "2024-11-15T15:36:24+00:00" + "time": "2025-11-23T23:51:44+00:00" }, { "name": "chillerlan/php-settings-container", @@ -162,5 +178,5 @@ "ext-gd": "*" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/user/plugins/seans-qrcode/plugin.php b/user/plugins/seans-qrcode/plugin.php index 3860e39..ab43d50 100644 --- a/user/plugins/seans-qrcode/plugin.php +++ b/user/plugins/seans-qrcode/plugin.php @@ -37,8 +37,8 @@ class LogoOptions extends QROptions{ // size in QR modules, multiply with QROptions::$scale for pixel size - protected int $logoSpaceWidth; - protected int $logoSpaceHeight; + protected ?int $logoSpaceWidth = null; + protected ?int $logoSpaceHeight = null; } // Kick in if the loader does not recognize a valid pattern diff --git a/user/plugins/sleeky-backend/assets/css/_base.scss b/user/plugins/sleeky-backend/assets/css/_base.scss index 27ffa72..2485c6d 100644 --- a/user/plugins/sleeky-backend/assets/css/_base.scss +++ b/user/plugins/sleeky-backend/assets/css/_base.scss @@ -1,3 +1,4 @@ +``` @import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800'); @import url('https://fonts.googleapis.com/icon?family=Material+Icons'); @@ -182,9 +183,9 @@ select:hover { // End Notification Bar -// +// // Login page -// +// .login { #wrap { margin: auto; @@ -194,11 +195,16 @@ select:hover { font-size: 1em; font-weight: 600; } - .login-logo { width: 150px; margin: 30px auto; display: flex; + @if ($theme == "light") { + background: #112e51; + border: 6px solid #112e51; + border-radius: 4px; + padding: 4px; + } } input.text { @@ -238,7 +244,7 @@ select:hover { // End login page -// +// // Start Index page // .index { @@ -391,558 +397,4 @@ select:hover { padding: 5px; background-color: $light; vertical-align: middle; - transition: 0.4s all; - } - - tbody tr:hover td { - background-color: $lightest !important; - } - - tbody tr.normal-row td { - background: $light; - } - - .keyword { - border-left: 7px solid $accent; - } - - input.text { - padding: 5px; - margin: 8px 5px !important; - } - - .navigation .nav_link a { - background: $light; - border: none; - - &:hover { - background: $lightest; - } - } - - tr.edit-row td { - background: $default !important; - } - - // Icons - $icons-list: stats, share, edit, delete; - @each $icon in $icons-list { - @if $icon == delete { - td.actions .button_#{$icon} { - background: red url(../img/#{$icon}.png) 0px center no-repeat; - background-size: 23px; - background-position: center; - border: none; - padding: 3px; - border-radius: 2px; - - &:hover { - background: darken(red, 10%) url(../img/#{$icon}.png) 0px center no-repeat; - background-size: 23px; - background-position: center; - } - } - } @else { - td.actions .button_#{$icon} { - background: $accent url(../img/#{$icon}.png) 0px center no-repeat; - background-size: 23px; - background-position: center; - border: none; - padding: 3px; - border-radius: 2px; - - &:hover { - background: darken($accent, 10%) url(../img/#{$icon}.png) 0px center no-repeat; - background-size: 23px; - background-position: center; - } - } - } - } - } -} - -// End index page - - -// -// Nav -// -nav { - background: $default; - height: 100%; - position: fixed; - top: 0; - left: 0; - padding: 50px 30px; - width: 200px; - z-index: 10; - - li#admin_menu_logout_link { - font-size: 1.3em; - } - - ul#admin_menu li:hover { - list-style-type: none; - color: darken($title, 20%); - } - - ul#admin_menu li { - color: $title; - padding: 5px 0; - } - - #admin_menu_logout_link:hover { - color: $title !important; - } - - .admin_menu_sublevel { - font-weight: 100; - margin-left: -20px; - } - - .material-icons { - font-size: 1em; - vertical-align: middle; - margin-top: -1px; - } - - ul { - list-style-type: none; - } -} - -img.logo { - width: 200px; - position: fixed; - top: 0; - left: 0; - background: $accent; - padding: 12px 35px 13px 25px; - z-index: 20; -} - -.nav-open { - color: white; - position: fixed; - top: 0; - right: 0; - z-index: 30; - padding: 10px 15px; - cursor: pointer; - display: none; - - i { - font-size: 2em; - line-height: 30px; - } -} - -header { - display: none; -} - -// End nav - -// -// Information -// -#wrap { - #tabs { - min-width: 580px; - - .tab { - background: $light !important; - } - - .wrap_unfloat { - margin-bottom: -5px; - } - - ul#headers { - border: none; - padding: 0px; - } - - li { - color: $text; - } - - #historical_clicks li:hover { - background: darken($default, 10%) !important; - } - - ul#headers li a, - #stats_lines li a { - outline: none; - border: none; - border-radius: 0; - background: $light; - color: $text; - padding: 10px 15px 7px 25px; - - &:hover { - background: darken($default, 10%); - } - - h2 { - font-weight: 400; - font-size: 1em; - } - - &.selected { - background: $lightest; - border-bottom: 2px solid $accent; - - &:hover { - background: darken($default, 15%); - } - } - } - - #stats_lines li a { - padding: 7px 15px; - } - - ul.toggle_display { - border: none; - } - - svg { - ellipse { - fill: $accent; - } - } - } -} - -// -// General Styles -// - -body.index #wrap { - padding-top: 50px; -} - -#wrap { - background: none; - margin-left: 270px; - border: none; - color: $text; - max-width: 100%; -} - -.notice { - width: calc(100% - 22px); - margin: 0; - padding: 0; - border-radius: 0; - background: $accent; - border: 1px solid $accent; - padding: 10px; - - p { - color: white; - } -} - -#shareboxes { - margin-top: -10px; -} - -#sharebox { - width: 558px; - margin-right: 0px; -} - -div.share { - background: $default; - border-radius: 0; - border: none; - padding: 0px 20px 10px; - margin-top: 10px; - - textarea { - background: $light; - color: $text; - border: none; - padding: 3px; - outline: none; - margin: 1px !important; - } - - #charcount { - padding-left: 5px; - color: $text; - } - - #share_links a { - color: $text; - } -} - -.sub_wrap, -.plugins main, -.plugin_page_sleeky_settings main, -code { - background: $default; - padding: 10px; - padding: 5px 25px; - max-width: 100%; - - span { - background: rgba(255, 255, 255, 0.2); - } - - code, - tt { - background: rgba(0, 123, 255, 0.7); - - @if ($theme == "light") { - background: rgba(35, 185, 222, 0.5); - } - } - - a.bookmarklet { - border: none; - background: #ffffff url(/user/plugins/yourls-favicon/assets/favicon.gif) 4px center no-repeat; - color: #3c3c3c; - border-radius: 1px; - padding: 7px 7px 7px 25px; - color: darken(white, 80%) !important; - - &:hover { - background: #e0e0e0 url(/user/plugins/yourls-favicon/assets/favicon.gif) 4px center no-repeat; - } - } - - // Table - table.tblSorter { - background: $default; - - a { - color: $text; - - &:hover { - color: darken($text, 30%); - } - } - - thead tr th, - tfoot tr th, - th.header { - border: none; - background-color: $light; - padding: 10px; - } - - tbody td { - background: $lightest; - color: $text; - } - } -} - -#filter_options { - padding: 0px 10px !important; -} - -body > div > pre { - overflow-x: scroll; - padding-left: 290px; -} - -// End General Styles - - -// -// Footer -// - -#footer { - position: fixed; - bottom: 0; - width: 230px; - color: #828282; - padding: 10px; - text-align: left; - z-index: 10; - - p { - background: none; - border: none; - font-size: 1em; - - a { - background: none; - padding-left: 0; - color: $text; - - &:hover { - color: #828282; - } - } - } -} - -// End footer - -// Mobile styles -@include for-size(phone-only) { - body.index #wrap { - padding-top: 210px; - } - - body.tools #wrap, - body.plugins #wrap, - body.plugin_page_sleeky_settings #wrap { - padding-top: 50px; - } - #wrap { - margin-left: 0; - - main { - overflow-x: scroll; - } - } - - img.logo { - padding: 11px 100% 15px 20px; - } - - .nav-open { - display: block; - } - - nav { - height: 0; - padding: 0; - width: 0; - - ul#admin_menu { - position: fixed; - top: 0; - left: 0; - z-index: 9999 !important; - width: 100%; - height: 100%; - padding: 50px; - display: none; - @if ($theme == "light") { - background: $accent; - } @else { - background: $default; - } - - li { - color: white; - } - - a, a:link, a:active, a:visited { - color: white; - } - } - } - - .index { - .top { - display: block; - margin-top: 50px; - width: 100vw; - height: auto; - - form { - margin-left: 0 !important; - } - - #new_url_form { - min-width: unset; - height: auto; - } - - .short { - padding: 0; - } - - #add-url, - #add-keyword { - width: calc(100% - 10px); - margin: 10px 0px !important; - } - - input.button { - margin: 0 !important; - width: 100%; - } - } - - table.tblSorter { - min-width: 600px; - - // Icons - $icons-list: stats, share, edit, delete; - @each $icon in $icons-list { - td.actions .button_#{$icon} { - background-size: 15px; - margin: 3px; - } - } - } - } - - #copybox { - width: 100%; - } - - .jquery-notify-bar { - margin-top: 210px; - margin-bottom: -210px; - width: calc(100vw - 20px); - - a { - margin-left: -30px; - } - } - - #footer { - display: none; - } - - .infos #wrap { - margin-top: 30px; - - - #headers { - li { - margin: 0; - display: inline-block; - } - } - } - - .infos #tabs { - min-width: initial; - - .tab { - overflow: scroll; - } - - ul#headers { - margin: 20px 0; - - li { - a { - padding: 10px 5px; - } - - h2 { - margin: 0; - } - } - } - } - - body > div > pre { - padding-left: 20px; - } -} \ No newline at end of file + transition: 0.4s all diff --git a/user/plugins/sleeky-backend/assets/css/light.css b/user/plugins/sleeky-backend/assets/css/light.css index 6f0a831..d357ad8 100644 --- a/user/plugins/sleeky-backend/assets/css/light.css +++ b/user/plugins/sleeky-backend/assets/css/light.css @@ -1 +1 @@ -@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800");@import url("https://fonts.googleapis.com/icon?family=Material+Icons");body{background-color:#efefef;display:inline}div,p,td,input,p{font-family:'Open Sans', sans-serif !important}h1,h2{color:#1d1d1d}p{color:#313131}a,a:link,a:active,a:visited{color:#828282;text-decoration:none}a:hover{color:#000;transition:0.4s all}input{padding:10px;border:none !important;background:#fff !important;color:#313131 !important;font-size:1em !important;outline:none;margin:0px 5px !important;border-radius:0 !important;border-radius:3px !important}input.button,input.submit,input[type="submit"]{border-left:7px solid #112e51 !important;background:#fff !important;font-weight:600;transition:0.3s all !important;cursor:pointer;background:#112e51 !important;border-left:none !important;color:white !important;font-weight:700}input.button:hover,input.submit:hover,input[type="submit"]:hover{background:#040a12 !important;background:#040a12 !important}input[type="button"]:disabled,input[type="submit"]:disabled{cursor:not-allowed}input.text,input[type="text"]{border:1px solid rgba(255,255,255,0.25) !important;transition:0.4s all}select{width:150px;padding:5px 35px 5px 10px;border:none;border-radius:0;height:26px;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:#313131;background:url(data:image/png;base64,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) 96%/15% no-repeat #fff;margin:5px 10px;transition:0.4s all;outline:none}select:hover{background:url(data:image/png;base64,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) 96%/15% no-repeat #fff}#javascript_error{background:red;color:white;padding:20px;margin-top:10px}.jquery-notify-bar{color:#fff;text-shadow:none;border:none;opacity:1;box-shadow:none;font-size:1.1em;font-weight:500;position:static;margin-top:30px;margin-bottom:-45px;padding:10px}.jquery-notify-bar a,.jquery-notify-bar a:link,.jquery-notify-bar a:active,.jquery-notify-bar a:visited{color:white}.jquery-notify-bar.error,.jquery-notify-bar.fail{background-color:#FF9800;color:white}.jquery-notify-bar.success{color:white;background-color:#4CAF50}.login #wrap{margin:auto}.login label{font-size:1em;font-weight:600}.login .login-logo{width:150px;margin:30px auto;display:flex}.login input.text{width:270px !important}.login input.button{font-weight:600;padding:10px 25px;margin-top:15px !important;font-weight:600;background:#112e51 !important}.login input.button else{background:#fff !important;border-left:7px solid #112e51 !important}.login input.button:hover{background:#081627 !important}.login .error{padding:10px;background:#112e51;color:white;position:fixed;top:0;left:0;width:100%;margin:0;text-align:center}.index #add-url{width:200px}.index #new_url_form{box-sizing:border-box;overflow:hidden}.index #new_url{border:none;background:#f7f7f7;text-align:left}.index #new_url input.button{margin-top:10px !important}.index #new_url div{background:#f7f7f7;padding:4px;padding-top:0px}.index .create{background:#112e51 !important;width:150px;font-size:1.3em !important;border:none !important;font-weight:700;text-align:center;margin-top:10px !important;margin-left:20px !important}.index .top{position:absolute;top:0;left:0;width:100vw;height:50px;background:#081627}.index .top label{font-size:1em;font-weight:600;color:#313131;color:#f7f7f7}.index .top input.text{width:360px;padding:4px;font-weight:200;font-size:1em !important;background:#f7f7f7 !important}.index .top .short{padding-left:10px}.index .top #add-keyword{width:100px}.index .top input.button{font-weight:500;padding:5px 10px;font-size:1em !important;margin-left:10px !important;background:#dde6ee !important;background:#f7f7f7 !important;font-weight:700;color:#112e51 !important}.index .top input.button:hover{background:#081627 !important;background:#e6e6e6 !important}.index .top #new_url_form{margin-left:260px;padding:12px}.index table.tblSorter{background-color:#f7f7f7;color:#313131}.index table.tblSorter a{color:#313131}.index table.tblSorter small a{color:gray}.index table.tblSorter thead tr .tablesorter-header{padding:10px}.index table.tblSorter tfoot tr{background-color:#f7f7f7}.index table.tblSorter thead tr th,.index table.tblSorter tfoot tr th,.index table.tblSorter th.header{background-color:transparent;border:none;padding:4px}.index table.tblSorter thead tr .tablesorter-headerAsc,.index table.tblSorter thead tr .tablesorter-headerDesc{background-color:#dde6ee !important}.index table.tblSorter tbody td{color:#313131;padding:5px;background-color:#fff;vertical-align:middle;transition:0.4s all}.index table.tblSorter tbody tr:hover td{background-color:#dde6ee !important}.index table.tblSorter tbody tr.normal-row td{background:#fff}.index table.tblSorter .keyword{border-left:7px solid #112e51}.index table.tblSorter input.text{padding:5px;margin:8px 5px !important}.index table.tblSorter .navigation .nav_link a{background:#fff;border:none}.index table.tblSorter .navigation .nav_link a:hover{background:#dde6ee}.index table.tblSorter tr.edit-row td{background:#f7f7f7 !important}.index table.tblSorter td.actions .button_stats{background:#112e51 url(../img/stats.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_stats:hover{background:#081627 url(../img/stats.png) 0px center no-repeat;background-size:23px;background-position:center}.index table.tblSorter td.actions .button_share{background:#112e51 url(../img/share.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_share:hover{background:#081627 url(../img/share.png) 0px center no-repeat;background-size:23px;background-position:center}.index table.tblSorter td.actions .button_edit{background:#112e51 url(../img/edit.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_edit:hover{background:#081627 url(../img/edit.png) 0px center no-repeat;background-size:23px;background-position:center}.index table.tblSorter td.actions .button_delete{background:red url(../img/delete.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_delete:hover{background:#c00 url(../img/delete.png) 0px center no-repeat;background-size:23px;background-position:center}nav{background:#f7f7f7;height:100%;position:fixed;top:0;left:0;padding:50px 30px;width:200px;z-index:10}nav li#admin_menu_logout_link{font-size:1.3em}nav ul#admin_menu li:hover{list-style-type:none;color:#000}nav ul#admin_menu li{color:#1d1d1d;padding:5px 0}nav #admin_menu_logout_link:hover{color:#1d1d1d !important}nav .admin_menu_sublevel{font-weight:100;margin-left:-20px}nav .material-icons{font-size:1em;vertical-align:middle;margin-top:-1px}nav ul{list-style-type:none}img.logo{width:200px;position:fixed;top:0;left:0;background:#112e51;padding:12px 35px 13px 25px;z-index:20}.nav-open{color:white;position:fixed;top:0;right:0;z-index:30;padding:10px 15px;cursor:pointer;display:none}.nav-open i{font-size:2em;line-height:30px}header{display:none}#wrap #tabs{min-width:580px}#wrap #tabs .tab{background:#fff !important}#wrap #tabs .wrap_unfloat{margin-bottom:-5px}#wrap #tabs ul#headers{border:none;padding:0px}#wrap #tabs li{color:#313131}#wrap #tabs #historical_clicks li:hover{background:#dedede !important}#wrap #tabs ul#headers li a,#wrap #tabs #stats_lines li a{outline:none;border:none;border-radius:0;background:#fff;color:#313131;padding:10px 15px 7px 25px}#wrap #tabs ul#headers li a:hover,#wrap #tabs #stats_lines li a:hover{background:#dedede}#wrap #tabs ul#headers li a h2,#wrap #tabs #stats_lines li a h2{font-weight:400;font-size:1em}#wrap #tabs ul#headers li a.selected,#wrap #tabs #stats_lines li a.selected{background:#dde6ee;border-bottom:2px solid #112e51}#wrap #tabs ul#headers li a.selected:hover,#wrap #tabs #stats_lines li a.selected:hover{background:#d1d1d1}#wrap #tabs #stats_lines li a{padding:7px 15px}#wrap #tabs ul.toggle_display{border:none}#wrap #tabs svg ellipse{fill:#112e51}body.index #wrap{padding-top:50px}#wrap{background:none;margin-left:270px;border:none;color:#313131;max-width:100%}.notice{width:calc(100% - 22px);margin:0;padding:0;border-radius:0;background:#112e51;border:1px solid #112e51;padding:10px}.notice p{color:white}#shareboxes{margin-top:-10px}#sharebox{width:558px;margin-right:0px}div.share{background:#f7f7f7;border-radius:0;border:none;padding:0px 20px 10px;margin-top:10px}div.share textarea{background:#fff;color:#313131;border:none;padding:3px;outline:none;margin:1px !important}div.share #charcount{padding-left:5px;color:#313131}div.share #share_links a{color:#313131}.sub_wrap,.plugins main,.plugin_page_sleeky_settings main,code{background:#f7f7f7;padding:10px;padding:5px 25px;max-width:100%}.sub_wrap span,.plugins main span,.plugin_page_sleeky_settings main span,code span{background:rgba(255,255,255,0.2)}.sub_wrap code,.sub_wrap tt,.plugins main code,.plugins main tt,.plugin_page_sleeky_settings main code,.plugin_page_sleeky_settings main tt,code code,code tt{background:rgba(0,123,255,0.7);background:rgba(35,185,222,0.5)}.sub_wrap a.bookmarklet,.plugins main a.bookmarklet,.plugin_page_sleeky_settings main a.bookmarklet,code a.bookmarklet{border:none;background:#fff url(/user/plugins/yourls-favicon/assets/favicon.gif) 4px center no-repeat;color:#3c3c3c;border-radius:1px;padding:7px 7px 7px 25px;color:#333 !important}.sub_wrap a.bookmarklet:hover,.plugins main a.bookmarklet:hover,.plugin_page_sleeky_settings main a.bookmarklet:hover,code a.bookmarklet:hover{background:#e0e0e0 url(/user/plugins/yourls-favicon/assets/favicon.gif) 4px center no-repeat}.sub_wrap table.tblSorter,.plugins main table.tblSorter,.plugin_page_sleeky_settings main table.tblSorter,code table.tblSorter{background:#f7f7f7}.sub_wrap table.tblSorter a,.plugins main table.tblSorter a,.plugin_page_sleeky_settings main table.tblSorter a,code table.tblSorter a{color:#313131}.sub_wrap table.tblSorter a:hover,.plugins main table.tblSorter a:hover,.plugin_page_sleeky_settings main table.tblSorter a:hover,code table.tblSorter a:hover{color:#000}.sub_wrap table.tblSorter thead tr th,.sub_wrap table.tblSorter tfoot tr th,.sub_wrap table.tblSorter th.header,.plugins main table.tblSorter thead tr th,.plugins main table.tblSorter tfoot tr th,.plugins main table.tblSorter th.header,.plugin_page_sleeky_settings main table.tblSorter thead tr th,.plugin_page_sleeky_settings main table.tblSorter tfoot tr th,.plugin_page_sleeky_settings main table.tblSorter th.header,code table.tblSorter thead tr th,code table.tblSorter tfoot tr th,code table.tblSorter th.header{border:none;background-color:#fff;padding:10px}.sub_wrap table.tblSorter tbody td,.plugins main table.tblSorter tbody td,.plugin_page_sleeky_settings main table.tblSorter tbody td,code table.tblSorter tbody td{background:#dde6ee;color:#313131}#filter_options{padding:0px 10px !important}body>div>pre{overflow-x:scroll;padding-left:290px}#footer{position:fixed;bottom:0;width:230px;color:#828282;padding:10px;text-align:left;z-index:10}#footer p{background:none;border:none;font-size:1em}#footer p a{background:none;padding-left:0;color:#313131}#footer p a:hover{color:#828282}@media (max-width: 899px){body.index #wrap{padding-top:210px}body.tools #wrap,body.plugins #wrap,body.plugin_page_sleeky_settings #wrap{padding-top:50px}#wrap{margin-left:0}#wrap main{overflow-x:scroll}img.logo{padding:11px 100% 15px 20px}.nav-open{display:block}nav{height:0;padding:0;width:0}nav ul#admin_menu{position:fixed;top:0;left:0;z-index:9999 !important;width:100%;height:100%;padding:50px;display:none;background:#112e51}nav ul#admin_menu li{color:white}nav ul#admin_menu a,nav ul#admin_menu a:link,nav ul#admin_menu a:active,nav ul#admin_menu a:visited{color:white}.index .top{display:block;margin-top:50px;width:100vw;height:auto}.index .top form{margin-left:0 !important}.index .top #new_url_form{min-width:unset;height:auto}.index .top .short{padding:0}.index .top #add-url,.index .top #add-keyword{width:calc(100% - 10px);margin:10px 0px !important}.index .top input.button{margin:0 !important;width:100%}.index table.tblSorter{min-width:600px}.index table.tblSorter td.actions .button_stats{background-size:15px;margin:3px}.index table.tblSorter td.actions .button_share{background-size:15px;margin:3px}.index table.tblSorter td.actions .button_edit{background-size:15px;margin:3px}.index table.tblSorter td.actions .button_delete{background-size:15px;margin:3px}#copybox{width:100%}.jquery-notify-bar{margin-top:210px;margin-bottom:-210px;width:calc(100vw - 20px)}.jquery-notify-bar a{margin-left:-30px}#footer{display:none}.infos #wrap{margin-top:30px}.infos #wrap #headers li{margin:0;display:inline-block}.infos #tabs{min-width:initial}.infos #tabs .tab{overflow:scroll}.infos #tabs ul#headers{margin:20px 0}.infos #tabs ul#headers li a{padding:10px 5px}.infos #tabs ul#headers li h2{margin:0}body>div>pre{padding-left:20px}} +@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800");@import url("https://fonts.googleapis.com/icon?family=Material+Icons");body{background-color:#efefef;display:inline}div,p,td,input,p{font-family:'Open Sans', sans-serif !important}h1,h2{color:#1d1d1d}p{color:#313131}a,a:link,a:active,a:visited{color:#828282;text-decoration:none}a:hover{color:#000;transition:0.4s all}input{padding:10px;border:none !important;background:#fff !important;color:#313131 !important;font-size:1em !important;outline:none;margin:0px 5px !important;border-radius:0 !important;border-radius:3px !important}input.button,input.submit,input[type="submit"]{border-left:7px solid #112e51 !important;background:#fff !important;font-weight:600;transition:0.3s all !important;cursor:pointer;background:#112e51 !important;border-left:none !important;color:white !important;font-weight:700}input.button:hover,input.submit:hover,input[type="submit"]:hover{background:#040a12 !important;background:#040a12 !important}input[type="button"]:disabled,input[type="submit"]:disabled{cursor:not-allowed}input.text,input[type="text"]{border:1px solid rgba(255,255,255,0.25) !important;transition:0.4s all}select{width:150px;padding:5px 35px 5px 10px;border:none;border-radius:0;height:26px;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:#313131;background:url(data:image/png;base64,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) 96%/15% no-repeat #fff;margin:5px 10px;transition:0.4s all;outline:none}select:hover{background:url(data:image/png;base64,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) 96%/15% no-repeat #fff}#javascript_error{background:red;color:white;padding:20px;margin-top:10px}.jquery-notify-bar{color:#fff;text-shadow:none;border:none;opacity:1;box-shadow:none;font-size:1.1em;font-weight:500;position:static;margin-top:30px;margin-bottom:-45px;padding:10px}.jquery-notify-bar a,.jquery-notify-bar a:link,.jquery-notify-bar a:active,.jquery-notify-bar a:visited{color:white}.jquery-notify-bar.error,.jquery-notify-bar.fail{background-color:#FF9800;color:white}.jquery-notify-bar.success{color:white;background-color:#4CAF50}.login #wrap{margin:auto}.login label{font-size:1em;font-weight:600}.login .login-logo{width:150px;margin:30px auto;display:flex;background:#112e51;border:6px solid #112e51;border-radius:4px;padding:4px}.login input.text{width:270px !important}.login input.button{font-weight:600;padding:10px 25px;margin-top:15px !important;font-weight:600;background:#112e51 !important}.login input.button else{background:#fff !important;border-left:7px solid #112e51 !important}.login input.button:hover{background:#081627 !important}.login .error{padding:10px;background:#112e51;color:white;position:fixed;top:0;left:0;width:100%;margin:0;text-align:center}.index #add-url{width:200px}.index #new_url_form{box-sizing:border-box;overflow:hidden}.index #new_url{border:none;background:#f7f7f7;text-align:left}.index #new_url input.button{margin-top:10px !important}.index #new_url div{background:#f7f7f7;padding:4px;padding-top:0px}.index .create{background:#112e51 !important;width:150px;font-size:1.3em !important;border:none !important;font-weight:700;text-align:center;margin-top:10px !important;margin-left:20px !important}.index .top{position:absolute;top:0;left:0;width:100vw;height:50px;background:#081627}.index .top label{font-size:1em;font-weight:600;color:#313131;color:#f7f7f7}.index .top input.text{width:360px;padding:4px;font-weight:200;font-size:1em !important;background:#f7f7f7 !important}.index .top .short{padding-left:10px}.index .top #add-keyword{width:100px}.index .top input.button{font-weight:500;padding:5px 10px;font-size:1em !important;margin-left:10px !important;background:#dde6ee !important;background:#f7f7f7 !important;font-weight:700;color:#112e51 !important}.index .top input.button:hover{background:#081627 !important;background:#e6e6e6 !important}.index .top #new_url_form{margin-left:260px;padding:12px}.index table.tblSorter{background-color:#f7f7f7;color:#313131}.index table.tblSorter a{color:#313131}.index table.tblSorter small a{color:gray}.index table.tblSorter thead tr .tablesorter-header{padding:10px}.index table.tblSorter tfoot tr{background-color:#f7f7f7}.index table.tblSorter thead tr th,.index table.tblSorter tfoot tr th,.index table.tblSorter th.header{background-color:transparent;border:none;padding:4px}.index table.tblSorter thead tr .tablesorter-headerAsc,.index table.tblSorter thead tr .tablesorter-headerDesc{background-color:#dde6ee !important}.index table.tblSorter tbody td{color:#313131;padding:5px;background-color:#fff;vertical-align:middle;transition:0.4s all}.index table.tblSorter tbody tr:hover td{background-color:#dde6ee !important}.index table.tblSorter tbody tr.normal-row td{background:#fff}.index table.tblSorter .keyword{border-left:7px solid #112e51}.index table.tblSorter input.text{padding:5px;margin:8px 5px !important}.index table.tblSorter .navigation .nav_link a{background:#fff;border:none}.index table.tblSorter .navigation .nav_link a:hover{background:#dde6ee}.index table.tblSorter tr.edit-row td{background:#f7f7f7 !important}.index table.tblSorter td.actions .button_stats{background:#112e51 url(../img/stats.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_stats:hover{background:#081627 url(../img/stats.png) 0px center no-repeat;background-size:23px;background-position:center}.index table.tblSorter td.actions .button_share{background:#112e51 url(../img/share.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_share:hover{background:#081627 url(../img/share.png) 0px center no-repeat;background-size:23px;background-position:center}.index table.tblSorter td.actions .button_edit{background:#112e51 url(../img/edit.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_edit:hover{background:#081627 url(../img/edit.png) 0px center no-repeat;background-size:23px;background-position:center}.index table.tblSorter td.actions .button_delete{background:red url(../img/delete.png) 0px center no-repeat;background-size:23px;background-position:center;border:none;padding:3px;border-radius:2px}.index table.tblSorter td.actions .button_delete:hover{background:#c00 url(../img/delete.png) 0px center no-repeat;background-size:23px;background-position:center}nav{background:#f7f7f7;height:100%;position:fixed;top:0;left:0;padding:50px 30px;width:200px;z-index:10}nav li#admin_menu_logout_link{font-size:1.3em}nav ul#admin_menu li:hover{list-style-type:none;color:#000}nav ul#admin_menu li{color:#1d1d1d;padding:5px 0}nav #admin_menu_logout_link:hover{color:#1d1d1d !important}nav .admin_menu_sublevel{font-weight:100;margin-left:-20px}nav .material-icons{font-size:1em;vertical-align:middle;margin-top:-1px}nav ul{list-style-type:none}img.logo{width:200px;position:fixed;top:0;left:0;background:#112e51;padding:12px 35px 13px 25px;z-index:20}.nav-open{color:white;position:fixed;top:0;right:0;z-index:30;padding:10px 15px;cursor:pointer;display:none}.nav-open i{font-size:2em;line-height:30px}header{display:none}#wrap #tabs{min-width:580px}#wrap #tabs .tab{background:#fff !important}#wrap #tabs .wrap_unfloat{margin-bottom:-5px}#wrap #tabs ul#headers{border:none;padding:0px}#wrap #tabs li{color:#313131}#wrap #tabs #historical_clicks li:hover{background:#dedede !important}#wrap #tabs ul#headers li a,#wrap #tabs #stats_lines li a{outline:none;border:none;border-radius:0;background:#fff;color:#313131;padding:10px 15px 7px 25px}#wrap #tabs ul#headers li a:hover,#wrap #tabs #stats_lines li a:hover{background:#dedede}#wrap #tabs ul#headers li a h2,#wrap #tabs #stats_lines li a h2{font-weight:400;font-size:1em}#wrap #tabs ul#headers li a.selected,#wrap #tabs #stats_lines li a.selected{background:#dde6ee;border-bottom:2px solid #112e51}#wrap #tabs ul#headers li a.selected:hover,#wrap #tabs #stats_lines li a.selected:hover{background:#d1d1d1}#wrap #tabs #stats_lines li a{padding:7px 15px}#wrap #tabs ul.toggle_display{border:none}#wrap #tabs svg ellipse{fill:#112e51}body.index #wrap{padding-top:50px}#wrap{background:none;margin-left:270px;border:none;color:#313131;max-width:100%}.notice{width:calc(100% - 22px);margin:0;padding:0;border-radius:0;background:#112e51;border:1px solid #112e51;padding:10px}.notice p{color:white}#shareboxes{margin-top:-10px}#sharebox{width:558px;margin-right:0px}div.share{background:#f7f7f7;border-radius:0;border:none;padding:0px 20px 10px;margin-top:10px}div.share textarea{background:#fff;color:#313131;border:none;padding:3px;outline:none;margin:1px !important}div.share #charcount{padding-left:5px;color:#313131}div.share #share_links a{color:#313131}.sub_wrap,.plugins main,.plugin_page_sleeky_settings main,code{background:#f7f7f7;padding:10px;padding:5px 25px;max-width:100%}.sub_wrap span,.plugins main span,.plugin_page_sleeky_settings main span,code span{background:rgba(255,255,255,0.2)}.sub_wrap code,.sub_wrap tt,.plugins main code,.plugins main tt,.plugin_page_sleeky_settings main code,.plugin_page_sleeky_settings main tt,code code,code tt{background:rgba(0,123,255,0.7);background:rgba(35,185,222,0.5)}.sub_wrap a.bookmarklet,.plugins main a.bookmarklet,.plugin_page_sleeky_settings main a.bookmarklet,code a.bookmarklet{border:none;background:#fff url(/user/plugins/yourls-favicon/assets/favicon.gif) 4px center no-repeat;color:#3c3c3c;border-radius:1px;padding:7px 7px 7px 25px;color:#333 !important}.sub_wrap a.bookmarklet:hover,.plugins main a.bookmarklet:hover,.plugin_page_sleeky_settings main a.bookmarklet:hover,code a.bookmarklet:hover{background:#e0e0e0 url(/user/plugins/yourls-favicon/assets/favicon.gif) 4px center no-repeat}.sub_wrap table.tblSorter,.plugins main table.tblSorter,.plugin_page_sleeky_settings main table.tblSorter,code table.tblSorter{background:#f7f7f7}.sub_wrap table.tblSorter a,.plugins main table.tblSorter a,.plugin_page_sleeky_settings main table.tblSorter a,code table.tblSorter a{color:#313131}.sub_wrap table.tblSorter a:hover,.plugins main table.tblSorter a:hover,.plugin_page_sleeky_settings main table.tblSorter a:hover,code table.tblSorter a:hover{color:#000}.sub_wrap table.tblSorter thead tr th,.sub_wrap table.tblSorter tfoot tr th,.sub_wrap table.tblSorter th.header,.plugins main table.tblSorter thead tr th,.plugins main table.tblSorter tfoot tr th,.plugins main table.tblSorter th.header,.plugin_page_sleeky_settings main table.tblSorter thead tr th,.plugin_page_sleeky_settings main table.tblSorter tfoot tr th,.plugin_page_sleeky_settings main table.tblSorter th.header,code table.tblSorter thead tr th,code table.tblSorter tfoot tr th,code table.tblSorter th.header{border:none;background-color:#fff;padding:10px}.sub_wrap table.tblSorter tbody td,.plugins main table.tblSorter tbody td,.plugin_page_sleeky_settings main table.tblSorter tbody td,code table.tblSorter tbody td{background:#dde6ee;color:#313131}#filter_options{padding:0px 10px !important}body>div>pre{overflow-x:scroll;padding-left:290px}#footer{position:fixed;bottom:0;width:230px;color:#828282;padding:10px;text-align:left;z-index:10}#footer p{background:none;border:none;font-size:1em}#footer p a{background:none;padding-left:0;color:#313131}#footer p a:hover{color:#828282}@media (max-width: 899px){body.index #wrap{padding-top:210px}body.tools #wrap,body.plugins #wrap,body.plugin_page_sleeky_settings #wrap{padding-top:50px}#wrap{margin-left:0}#wrap main{overflow-x:scroll}img.logo{padding:11px 100% 15px 20px}.nav-open{display:block}nav{height:0;padding:0;width:0}nav ul#admin_menu{position:fixed;top:0;left:0;z-index:9999 !important;width:100%;height:100%;padding:50px;display:none;background:#112e51}nav ul#admin_menu li{color:white}nav ul#admin_menu a,nav ul#admin_menu a:link,nav ul#admin_menu a:active,nav ul#admin_menu a:visited{color:white}.index .top{display:block;margin-top:50px;width:100vw;height:auto}.index .top form{margin-left:0 !important}.index .top #new_url_form{min-width:unset;height:auto}.index .top .short{padding:0}.index .top #add-url,.index .top #add-keyword{width:calc(100% - 10px);margin:10px 0px !important}.index .top input.button{margin:0 !important;width:100%}.index table.tblSorter{min-width:600px}.index table.tblSorter td.actions .button_stats{background-size:15px;margin:3px}.index table.tblSorter td.actions .button_share{background-size:15px;margin:3px}.index table.tblSorter td.actions .button_edit{background-size:15px;margin:3px}.index table.tblSorter td.actions .button_delete{background-size:15px;margin:3px}#copybox{width:100%}.jquery-notify-bar{margin-top:210px;margin-bottom:-210px;width:calc(100vw - 20px)}.jquery-notify-bar a{margin-left:-30px}#footer{display:none}.infos #wrap{margin-top:30px}.infos #wrap #headers li{margin:0;display:inline-block}.infos #tabs{min-width:initial}.infos #tabs .tab{overflow:scroll}.infos #tabs ul#headers{margin:20px 0}.infos #tabs ul#headers li a{padding:10px 5px}.infos #tabs ul#headers li h2{margin:0}body>div>pre{padding-left:20px}} diff --git a/user/plugins/sleeky-backend/assets/css/themes/light.scss b/user/plugins/sleeky-backend/assets/css/themes/light.scss index 7d9331e..8d8b3ba 100644 --- a/user/plugins/sleeky-backend/assets/css/themes/light.scss +++ b/user/plugins/sleeky-backend/assets/css/themes/light.scss @@ -11,12 +11,12 @@ $darker: #efefef; $darkest: #161616; // Main Base Accent color -$accent: #112e51; -// $accent_secondary: black; +$accent: #112e51; +$accent_secondary: black; // Text colours $title: #1d1d1d; $text: #313131; // Import the base styles -@import "../base.scss"; \ No newline at end of file +@import "../base.scss"; diff --git a/user/plugins/sleeky-backend/assets/js/theme.js b/user/plugins/sleeky-backend/assets/js/theme.js index 5b1b9bd..d4b8c78 100644 --- a/user/plugins/sleeky-backend/assets/js/theme.js +++ b/user/plugins/sleeky-backend/assets/js/theme.js @@ -20,7 +20,7 @@ $( document ).ready(function() { } else if ($('meta[name=sleeky_theme]').attr("content") == 'dark') { theme = "dark"; } - + console.log("Theme is", theme) // Update favicon @@ -40,7 +40,7 @@ $( document ).ready(function() { $("#login").prepend(``); } - + } else if ($("body").hasClass("index")) { // Index page console.log("Index page"); @@ -99,7 +99,7 @@ $( document ).ready(function() { } } else { console.warn("Unknown page"); - + handleNav(); } @@ -137,8 +137,8 @@ $( document ).ready(function() { // Update footer var content = $(this).html(); var i = 77 - var updated_content = "Running on" + content.slice(13, i) + '& Sleeky' + content.slice(i-1) + var updated_content = "Running on" + content.slice(13, i) + ' & Sleeky' + content.slice(i-0) $(this).html(updated_content); } }); -}); \ No newline at end of file +}); diff --git a/user/plugins/sleeky-backend/package-lock.json b/user/plugins/sleeky-backend/package-lock.json index 8e1ddae..7922d22 100644 --- a/user/plugins/sleeky-backend/package-lock.json +++ b/user/plugins/sleeky-backend/package-lock.json @@ -1169,7 +1169,6 @@ "integrity": "sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ==", "deprecated": "Node Sass is no longer supported. Please use `sass` or `sass-embedded` instead.", "hasInstallScript": true, - "license": "MIT", "dependencies": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", diff --git a/user/plugins/timezones/README.md b/user/plugins/timezones/README.md new file mode 100644 index 0000000..9b313cb --- /dev/null +++ b/user/plugins/timezones/README.md @@ -0,0 +1,22 @@ +# Timezones [![Listed in Awesome YOURLS!](https://img.shields.io/badge/Awesome-YOURLS-C5A3BE)](https://github.com/YOURLS/awesome-yourls/) + +A plugin to tell YOURLS your time zone and how you'd like times and dates displayed + +Require [YOURLS](https://yourls.org) `1.7.10` and above. + +## Usage + + + + + +## Installation + +1. In `/user/plugins`, create a new folder named `timezones`. +2. Drop these files in that directory. +3. Go to the Plugins administration page (eg. `http://sho.rt/admin/plugins.php`) and activate the plugin. +4. Have fun! + +## License + +Do whatever the hell you want with it diff --git a/user/plugins/timezones/admin.php b/user/plugins/timezones/admin.php new file mode 100644 index 0000000..98f89f8 --- /dev/null +++ b/user/plugins/timezones/admin.php @@ -0,0 +1,273 @@ +Time Zone Configuration +

This plugin allows to specify a time zone and to format time/date display

'; + + if( defined('YOURLS_HOURS_OFFSET') ) { + print '

Note: you have YOURLS_HOURS_OFFSET defined in your config.php. This plugin will override this setting.

'; + } + + print '
+ '; + + // Time zones drop down + print '

Time zone:

+
+

Choose a city near your location, in the same timezone as you, or a UTC time offset.

'; + yourls_tzp_tz_dropdown( $user_time_zone ); + print '

Universal time (UTC) time is: ' . date( 'Y-m-d H:i:s', yourls_tzp_timezoned_timestamp( time(), 'UTC' ) ). '

'; + if($user_time_zone) { + print "

Time in $user_time_zone_display is: " . date( 'Y-m-d H:i:s', yourls_tzp_timezoned_timestamp( time(), $user_time_zone) ) . '

'; + } + print '
'; + + // Display radio button for date format + $choices = array( + 'j F Y', // 13 April 2020 + 'F j, Y', // May 10, 2020 + 'd/m/Y', // 20/10/2020 + 'm/d/Y', // 10/20/2020 + 'Y/m/d', // 2020/10/20 + ); + yourls_tzp_format_radio( 'Date Format', 'date_format', $choices, $user_time_zone, $user_date_format, $user_date_format_custom ); + + // Display radio button for date format + $choices = array( + 'H:i', // 21:23 + 'g:i a', // 9:23 pm + 'g:i A', // 9:23 PM + ); + yourls_tzp_format_radio( 'Time Format', 'time_format', $choices, $user_time_zone, $user_time_format, $user_time_format_custom ); + + print '

+
+

Note: custom formats need a PHP date() string.'; + +} + +/** + * Output CSS & JS + */ +function yourls_tzp_js_css() { + $plugin_url = yourls_plugin_url( __DIR__ ); + print << + + + + +JSCSS; + +} + +/** + * Draw the time zone drop down + * + * @param string $user_time_zone Timezone to be marked as "selected" in the dropdown + */ +function yourls_tzp_tz_dropdown( $user_time_zone ) { + // Continent list + $continent = array( + 'Africa' => DateTimeZone::AFRICA, + 'America' => DateTimeZone::AMERICA, + 'Antarctica' => DateTimeZone::ANTARCTICA, + 'Asia' => DateTimeZone::ASIA, + 'Atlantic' => DateTimeZone::ATLANTIC, + 'Australia' => DateTimeZone::AUSTRALIA, + 'Europe' => DateTimeZone::EUROPE, + 'Indian' => DateTimeZone::INDIAN, + 'Pacific' => DateTimeZone::PACIFIC, + ); + + // Timezones per continents + $timezones = array(); + foreach ($continent as $name => $mask) { + $zones = DateTimeZone::listIdentifiers($mask); + foreach($zones as $timezone) { + // Remove region name + $timezones[$name][$timezone] = substr($timezone, strlen($name) +1); + } + } + + // Manual UTC offset + $offset_range = array( + '-12', '-11:30', '-11', '-10:30', '-10', '-9.5', '-9', + '-8:30', '-8', '-7:30', '-7', '-6:30', '-6', '-5:30', + '-5', '-4:30', '-4', '-3:30', '-3', '-2:30', '-2', + '-1:30', '-1', '-0:30', 'UTC', '+0:30', '+1', '+1:30', + '+2', '+2:30', '+3', '+3:30', '+4', '+4:30', '+5', + '+5:30', '+5:45', '+6', '+6:30', '+7', '+7:30', '+8', + '+8:30', '+8:45', '+9', '+9:30', '+10', '+10:30', '+11', + '+11:30', '+12', '+12:45', '+13', '+13:45', '+14' + ); + + foreach( $offset_range as $offset_name ) { + $offset_value = $offset_name; + $offset_name = str_replace( array( '.25', '.5', '.75' ), array( ':15', ':30', ':45' ), $offset_name ); + if ($offset_name != 'UTC') { + $offset_name = 'UTC' . $offset_name; + } + // $offset_value = 'UTC' . $offset_value; + $timezones['UTC'][$offset_value] = $offset_name; + } + + print ''; +} + + +/** + * Output radio button list + * + * @param string $title Dropdown title + * @param string $input_name Dropdown 'radio' name + * @param array $formats List of available choices, to which 'custom' will be appended + * @param string $tz Time zone + * @param string $selected Checked radio value + * @param string $custom Custom format value + */ +function yourls_tzp_format_radio( $title, $input_name, $formats, $tz, $selected, $custom ) { + print "

$title:

+
"; + + foreach ($formats as $format) { + $checked = ( $format === $selected ) ? 'checked="checked"' : '' ; + print "

\n"; + } + + $checked = ( 'custom' === $selected ) ? 'checked="checked"' : '' ; + $preview = date( $custom, yourls_tzp_timezoned_timestamp( time(), $tz ) ); + print "\n"; + + print '
'; + +} + +/** + * Update time zone in database + */ +function yourls_tzp_config_update_settings() { + + $settings = array( + 'time_zone' => yourls_tzp_get_value($_POST, 'time_zone', 'UTC'), + 'date_format' => yourls_tzp_get_value($_POST, 'date_format', 'Y/m/d'), + 'date_format_custom' => yourls_tzp_get_value($_POST, 'date_format_custom_value', 'Y/m/d'), + 'time_format' => yourls_tzp_get_value($_POST, 'time_format', 'H:i'), + 'time_format_custom' => yourls_tzp_get_value($_POST, 'time_format_custom_value', 'H:i'), + ); + + yourls_update_option( 'timezone', $settings ); + + return $settings; +} diff --git a/user/plugins/timezones/assets/php-date-formatter.min.js b/user/plugins/timezones/assets/php-date-formatter.min.js new file mode 100644 index 0000000..b0fcdc9 --- /dev/null +++ b/user/plugins/timezones/assets/php-date-formatter.min.js @@ -0,0 +1,13 @@ +/*! + * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2020 + * @version 1.3.6 + * + * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format. + * This library is a standalone javascript library and does not depend on other libraries or plugins like jQuery. The + * library also adds support for Universal Module Definition (UMD). + * + * @see http://php.net/manual/en/function.date.php + * + * For more JQuery plugins visit http://plugins.krajee.com + * For more Yii related demos visit http://demos.krajee.com + */!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():t.DateFormatter=e()}("undefined"!=typeof self?self:this,function(){var t,e;return e={DAY:864e5,HOUR:3600,defaults:{dateSettings:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["AM","PM"],ordinal:function(t){var e=t%10,n={1:"st",2:"nd",3:"rd"};return 1!==Math.floor(t%100/10)&&n[e]?n[e]:"th"}},separators:/[ \-+\/.:@]/g,validParts:/[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,intParts:/[djwNzmnyYhHgGis]/g,tzParts:/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,tzClip:/[^-+\dA-Z]/g},getInt:function(t,e){return parseInt(t,e?e:10)},compare:function(t,e){return"string"==typeof t&&"string"==typeof e&&t.toLowerCase()===e.toLowerCase()},lpad:function(t,n,r){var a=t.toString();return r=r||"0",a.length=0;u--)"S"===r[u]&&r.splice(u,1);for(a=t.replace(g.separators,"\x00").split("\x00"),u=0;uo?"20":"19")+i):o,h=!0;break;case"m":case"n":case"M":case"F":if(isNaN(o)){if(s=g.getMonth(i),!(s>0))return null;y.month=s}else{if(!(o>=1&&12>=o))return null;y.month=o}h=!0;break;case"d":case"j":if(!(o>=1&&31>=o))return null;y.day=o,h=!0;break;case"g":case"h":if(c=r.indexOf("a")>-1?r.indexOf("a"):r.indexOf("A")>-1?r.indexOf("A"):-1,d=a[c],-1!==c)f=e.compare(d,p.meridiem[0])?0:e.compare(d,p.meridiem[1])?12:-1,o>=1&&12>=o&&-1!==f?y.hour=o%12===0?f:o+f:o>=0&&23>=o&&(y.hour=o);else{if(!(o>=0&&23>=o))return null;y.hour=o}m=!0;break;case"G":case"H":if(!(o>=0&&23>=o))return null;y.hour=o,m=!0;break;case"i":if(!(o>=0&&59>=o))return null;y.min=o,m=!0;break;case"s":if(!(o>=0&&59>=o))return null;y.sec=o,m=!0}if(h===!0){var D=y.year||0,v=y.month?y.month-1:0,S=y.day||1;y.date=new Date(D,v,S,y.hour,y.min,y.sec,0)}else{if(m!==!0)return null;y.date=new Date(0,0,0,y.hour,y.min,y.sec,0)}return y.date},guessDate:function(t,n){if("string"!=typeof t)return t;var r,a,u,i,o,s,c=this,f=t.replace(c.separators,"\x00").split("\x00"),l=/^[djmn]/g,d=n.match(c.validParts),g=new Date,h=0;if(!l.test(d[0]))return t;for(u=0;ur?r:4,a=e.getInt(4>r?a.toString().substr(0,4-r)+o:o.substr(0,4)),!a)return null;g.setFullYear(a);break;case 3:g.setHours(s);break;case 4:g.setMinutes(s);break;case 5:g.setSeconds(s)}i=o.substr(h),i.length>0&&f.splice(u+1,0,i)}return g},parseFormat:function(t,n){var r,a=this,u=a.dateSettings,i=/\\?(.?)/gi,o=function(t,e){return r[t]?r[t]():e};return r={d:function(){return e.lpad(r.j(),2)},D:function(){return u.daysShort[r.w()]},j:function(){return n.getDate()},l:function(){return u.days[r.w()]},N:function(){return r.w()||7},w:function(){return n.getDay()},z:function(){var t=new Date(r.Y(),r.n()-1,r.j()),n=new Date(r.Y(),0,1);return Math.round((t-n)/e.DAY)},W:function(){var t=new Date(r.Y(),r.n()-1,r.j()-r.N()+3),n=new Date(t.getFullYear(),0,4);return e.lpad(1+Math.round((t-n)/e.DAY/7),2)},F:function(){return u.months[n.getMonth()]},m:function(){return e.lpad(r.n(),2)},M:function(){return u.monthsShort[n.getMonth()]},n:function(){return n.getMonth()+1},t:function(){return new Date(r.Y(),r.n(),0).getDate()},L:function(){var t=r.Y();return t%4===0&&t%100!==0||t%400===0?1:0},o:function(){var t=r.n(),e=r.W(),n=r.Y();return n+(12===t&&9>e?1:1===t&&e>9?-1:0)},Y:function(){return n.getFullYear()},y:function(){return r.Y().toString().slice(-2)},a:function(){return r.A().toLowerCase()},A:function(){var t=r.G()<12?0:1;return u.meridiem[t]},B:function(){var t=n.getUTCHours()*e.HOUR,r=60*n.getUTCMinutes(),a=n.getUTCSeconds();return e.lpad(Math.floor((t+r+a+e.HOUR)/86.4)%1e3,3)},g:function(){return r.G()%12||12},G:function(){return n.getHours()},h:function(){return e.lpad(r.g(),2)},H:function(){return e.lpad(r.G(),2)},i:function(){return e.lpad(n.getMinutes(),2)},s:function(){return e.lpad(n.getSeconds(),2)},u:function(){return e.lpad(1e3*n.getMilliseconds(),6)},e:function(){var t=/\((.*)\)/.exec(String(n))[1];return t||"Coordinated Universal Time"},I:function(){var t=new Date(r.Y(),0),e=Date.UTC(r.Y(),0),n=new Date(r.Y(),6),a=Date.UTC(r.Y(),6);return t-e!==n-a?1:0},O:function(){var t=n.getTimezoneOffset(),r=Math.abs(t);return(t>0?"-":"+")+e.lpad(100*Math.floor(r/60)+r%60,4)},P:function(){var t=r.O();return t.substr(0,3)+":"+t.substr(3,2)},T:function(){var t=(String(n).match(a.tzParts)||[""]).pop().replace(a.tzClip,"");return t||"UTC"},Z:function(){return 60*-n.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(i,o)},r:function(){return"D, d M Y H:i:s O".replace(i,o)},U:function(){return n.getTime()/1e3||0}},o(t,t)},formatDate:function(t,n){var r,a,u,i,o,s=this,c="",f="\\";if("string"==typeof t&&(t=s.parseDate(t,n),!t))return null;if(t instanceof Date){for(u=n.length,r=0;u>r;r++)o=n.charAt(r),"S"!==o&&o!==f&&(r>0&&n.charAt(r-1)===f?c+=o:(i=s.parseFormat(o,t),r!==u-1&&s.intParts.test(o)&&"S"===n.charAt(r+1)&&(a=e.getInt(i)||0,i+=s.dateSettings.ordinal(a)),c+=i));return c}return""}},t}); \ No newline at end of file diff --git a/user/plugins/timezones/assets/select2.min.css b/user/plugins/timezones/assets/select2.min.css new file mode 100644 index 0000000..7c18ad5 --- /dev/null +++ b/user/plugins/timezones/assets/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/user/plugins/timezones/assets/select2.min.js b/user/plugins/timezones/assets/select2.min.js new file mode 100644 index 0000000..091d4b5 --- /dev/null +++ b/user/plugins/timezones/assets/select2.min.js @@ -0,0 +1,2 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ +!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(u){var e=function(){if(u&&u.fn&&u.fn.select2&&u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,r,h,o,s,f,g,m,v,y,_,i,a,b;function w(e,t){return i.call(e,t)}function l(e,t){var n,r,i,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[s])&&(e[s]=e[s].replace(b,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},i.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},i.__cache={};var n=0;return i.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},i.StoreData=function(e,t,n){var r=i.GetUniqueElementId(e);i.__cache[r]||(i.__cache[r]={}),i.__cache[r][t]=n},i.GetData=function(e,t){var n=i.GetUniqueElementId(e);return t?i.__cache[n]&&null!=i.__cache[n][t]?i.__cache[n][t]:o(e).data(t):i.__cache[n]},i.RemoveData=function(e){var t=i.GetUniqueElementId(e);null!=i.__cache[t]&&delete i.__cache[t],e.removeAttribute("data-select2-id")},i}),e.define("select2/results",["jquery","./utils"],function(h,f){function r(e,t,n){this.$element=e,this.data=n,this.options=t,r.__super__.constructor.call(this)}return f.Extend(r,f.Observable),r.prototype.render=function(){var e=h('
    ');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},r.prototype.clear=function(){this.$results.empty()},r.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h(''),r=this.options.get("translations").get(e.message);n.append(t(r(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},r.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},r.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},r.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var r=n-1;0===e.length&&(r=0);var i=t.eq(r);i.trigger("mouseenter");var o=l.$results.offset().top,s=i.offset().top,a=l.$results.scrollTop()+(s-o);0===r?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger("mouseenter");var i=l.$results.offset().top+l.$results.outerHeight(!1),o=r.offset().top+r.outerHeight(!1),s=l.$results.scrollTop()+o-i;0===n?l.$results.scrollTop(0):ithis.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},r.prototype.template=function(e,t){var n=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),i=n(e,t);null==i?t.style.display="none":"string"==typeof i?t.innerHTML=r(i):h(t).append(i)},r}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,r,i){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return r.Extend(o,r.Observable),o.prototype.render=function(){var e=n('');return this._tabindex=0,null!=r.GetData(this.$element[0],"old-tabindex")?this._tabindex=r.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,r=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",r),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&r.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html(''),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",r).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",r),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("")},i.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),r=this.display(t,n);n.empty().append(r);var i=t.title||t.text;i?n.attr("title",i):n.removeAttr("title")}else this.clear()},i}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('
      '),e},n.prototype.bind=function(e,t){var r=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){r.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!r.isDisabled()){var t=i(this).parent(),n=l.GetData(t[0],"data");r.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return i('
    • ×
    • ')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n×');a.StoreData(r[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(r)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(r,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=r('');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),t.on("open",function(){r.$search.attr("aria-controls",i),r.$search.trigger("focus")}),t.on("close",function(){r.$search.val(""),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.trigger("focus")}),t.on("enable",function(){r.$search.prop("disabled",!1),r._transferTabIndex()}),t.on("disable",function(){r.$search.prop("disabled",!0)}),t.on("focus",function(e){r.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){r.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){r._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===r.$search.val()){var t=r.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("select",function(){r._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var r=this;this._checkIfMaximumSelected(function(){e.call(r,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var r=this;this.current(function(e){var t=null!=e?e.length:0;0=r.maximumSelectionLength?r.trigger("results:message",{message:"maximumSelected",args:{maximum:r.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),t.on("open",function(){r.$search.attr("tabindex",0),r.$search.attr("aria-controls",i),r.$search.trigger("focus"),window.setTimeout(function(){r.$search.trigger("focus")},0)}),t.on("close",function(){r.$search.attr("tabindex",-1),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.val(""),r.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||r.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(r.showSearch(e)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,r){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,r)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),r=t.length-1;0<=r;r--){var i=t[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,r){this.lastParams={},e.call(this,t,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("query",function(e){r.lastParams=e,r.loading=!0}),t.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('
    • '),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("open",function(){r._showDropdown(),r._attachPositioningHandler(t),r._bindContainerResultHandlers(t)}),t.on("close",function(){r._hideDropdown(),r._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(""),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,r="scroll.select2."+t.id,i="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(r,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(r+" "+i+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,r="resize.select2."+t.id,i="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+r+" "+i)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),r=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=i.top,o.bottom=i.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ai.bottom+s,d={left:i.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(r="below"),u||!c||t?!c&&u&&t&&(r="below"):r="above",("above"==r||t&&"below"!==r)&&(d.top=o.top-h.top-s),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,r){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,r)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,r=0;r');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("jquery-mousewheel",["jquery"],function(e){return e}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,o,t,s){if(null==i.fn.select2){var a=["open","close","destroy"];i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new o(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,r)}),-1getOffset()/3600; +} + +/** + * Return timezoned and formatted time + * + * @param int $timestamp Optional timestamp. If omitted, function will use time() + * @param string $timezone Optional timezone (eg "Europe/Paris"). Default is UTC + * @param string $format Optional format as what PHP's date() needs. Default it 'U' (epoch) + * @return string Timezoned and formatted time + */ +function yourls_tzp_timezoned_timestamp($timestamp = false, $timezone = 'UTC') { + $timestamp = $timestamp ? $timestamp : time(); + $offset = yourls_tzp_timezoned_offset($timezone); + return $timestamp + $offset * 3600; +} + +/** + * Get (string)key from array, or return false if not defined + * + * @param array $array Array + * @param string $key Key + * @return string Value of (string)$array[$key], or false + */ +function yourls_tzp_get_value( $array, $key, $default ) { + return isset ( $array[$key] ) ? (string)($array[$key]) : $default ; +} + +/** + * Read timezone options from the DB, and return all keys or specified key + * + * @param string $key Key of timezone option array + * @return array|mixed Array of options, or value for specified key if exists (false otherwise) + */ +function yourls_tzp_read_options( $key = false, $default = false ) { + $options = (array)yourls_get_option( 'timezone' ); + + if( $key !== false ) { + $options = array_key_exists($key, $options) ? $options[$key] : $default ; + } + + return $options; +}