diff --git a/.editorconfig b/.editorconfig index 7b393707d..74505eb26 100644 --- a/.editorconfig +++ b/.editorconfig @@ -15,3 +15,6 @@ indent_size = 2 [*.md] trim_trailing_whitespace = false + +[{.version,.editorconfig}] +insert_final_newline = false \ No newline at end of file diff --git a/.version b/.version index a603bb50a..2dfd55a4a 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.7.5 +2.7.6-rc-2 \ No newline at end of file diff --git a/css/cloudinary.css b/css/cloudinary.css index 97ce746a1..b2f632ec1 100644 --- a/css/cloudinary.css +++ b/css/cloudinary.css @@ -1 +1 @@ -.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{background-color:#333;border-radius:4px;color:#fff;font-size:14px;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;height:16px;width:16px}.tippy-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.tippy-content{padding:5px 9px;position:relative;z-index:1}@font-face{font-family:cloudinary;font-style:normal;font-weight:500;src:url(../css/fonts/cloudinary.7e6e75b25255a2b3b6e7ced1092c210c.eot);src:url(../css/fonts/cloudinary.7e6e75b25255a2b3b6e7ced1092c210c.eot#iefix) format("embedded-opentype"),url(../css/fonts/cloudinary.34cb260ad722325c597cdc3a3e7584d8.woff) format("woff"),url(../css/fonts/cloudinary.c2afda9d25532c03cd41beb20a1ce439.ttf) format("truetype"),url(../css/cloudinary.svg#cloudinary) format("svg")}.dashicons-cloudinary{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.dashicons-cloudinary:before{content:"";font-family:cloudinary,monospace!important}.dashicons-cloudinary.success{color:#558b2f}.dashicons-cloudinary.error{color:#dd2c00}.dashicons-cloudinary.error:before{content:""}.dashicons-cloudinary.uploading{color:#fd9d2c}.dashicons-cloudinary.uploading:before{content:""}.dashicons-cloudinary.info{color:#0071ba}.dashicons-cloudinary.downloading:before{content:""}.dashicons-cloudinary.syncing:before{content:""}.column-cld_status{width:5.5em}.column-cld_status .dashicons-cloudinary{display:inline-block}.column-cld_status .dashicons-cloudinary:before{font-size:1.8rem}.form-field .error-notice,.form-table .error-notice{color:#dd2c00;display:none}.form-field input.cld-field:invalid,.form-table input.cld-field:invalid{border-color:#dd2c00}.form-field input.cld-field:invalid+.error-notice,.form-table input.cld-field:invalid+.error-notice{display:inline-block}.cloudinary-welcome{background-image:url(../css/logo.svg);background-position:top 12px right 20px;background-repeat:no-repeat;background-size:153px}.cloudinary-stats{display:inline-block;margin-left:25px}.cloudinary-stat{cursor:help}.cloudinary-percent{color:#0071ba;font-size:.8em;vertical-align:top}.settings-image{max-width:100%;padding-top:5px}.settings-tabs>li{display:inline-block}.settings-tabs>li a{padding:.6em}.settings-tabs>li a.active{background-color:#fff}.settings-tab-section{max-width:1030px;padding:20px 0 0;position:relative}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard{align-content:flex-start;align-items:flex-start;display:flex;margin-top:40px}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard-description{margin:0 auto 0 0;width:55%}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard-content{margin:0 auto;width:35%}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard-content .dashicons{color:#9ea3a8}.settings-tab-section.cloudinary-welcome .settings-tab-section-card{margin-top:0}.settings-tab-section-fields .field-heading th{color:#23282d;display:block;font-size:1.1em;margin:1em 0;width:auto}.settings-tab-section-fields .field-heading td{display:none;visibility:hidden}.settings-tab-section-fields .regular-textarea{height:60px;width:100%}.settings-tab-section-fields .dashicons{text-decoration:none;vertical-align:middle}.settings-tab-section-fields a .dashicons{color:#5f5f5f}.settings-tab-section-fields-dashboard-error{color:#5f5f5f;font-size:1.2em}.settings-tab-section-fields-dashboard-error.expanded{margin-bottom:25px;padding-top:40px}.settings-tab-section-fields-dashboard-error .dashicons{color:#ac0000}.settings-tab-section-fields-dashboard-error .button{font-size:1.1em;height:40px;line-height:40px;padding-left:40px;padding-right:40px}.settings-tab-section-fields-dashboard-success{color:#23282d;font-size:1.2em}.settings-tab-section-fields-dashboard-success.expanded{margin-bottom:25px;padding-top:40px}.settings-tab-section-fields-dashboard-success .dashicons{color:#4fb651}.settings-tab-section-fields-dashboard-success .button{font-size:1.1em;height:40px;line-height:40px;padding-left:40px;padding-right:40px}.settings-tab-section-fields-dashboard-success .description{color:#5f5f5f;font-weight:400;margin-top:12px}.settings-tab-section-card{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px 0 rgba(0,0,0,.07);box-sizing:border-box;margin-top:12px;padding:20px 23px}.settings-tab-section-card .dashicons{font-size:1.4em}.settings-tab-section-card h2{font-size:1.8em;font-weight:400;margin-top:0}.settings-tab-section-card.pull-right{float:right;padding:12px;position:relative;width:450px;z-index:10}.settings-tab-section-card.pull-right img.settings-image{border:1px solid #979797;box-shadow:0 2px 4px 0 rgba(0,0,0,.5);margin-top:12px}.settings-tab-section-card.pull-right h3,.settings-tab-section-card.pull-right h4{margin-top:0}.settings-tab-section .field-row-cloudinary_url,.settings-tab-section .field-row-signup{display:block}.settings-tab-section .field-row-cloudinary_url td,.settings-tab-section .field-row-cloudinary_url th,.settings-tab-section .field-row-signup td,.settings-tab-section .field-row-signup th{display:block;padding:10px 0 0;width:auto}.settings-tab-section .field-row-cloudinary_url td .sign-up,.settings-tab-section .field-row-cloudinary_url th .sign-up,.settings-tab-section .field-row-signup td .sign-up,.settings-tab-section .field-row-signup th .sign-up{vertical-align:baseline}.settings-tab-section.connect .form-table{display:inline-block;max-width:580px;width:auto}.settings-valid{color:#558b2f;font-size:30px}.settings-valid-field{border-color:#558b2f!important}.settings-invalid-field{border-color:#dd2c00!important}.settings-alert{box-shadow:0 1px 1px rgba(0,0,0,.04);display:inline-block;padding:5px 7px}.settings-alert-info{background-color:#e9faff;border:1px solid #ccd0d4;border-left:4px solid #00a0d2}.settings-alert-warning{background-color:#fff5e9;border:1px solid #f6e7b6;border-left:4px solid #e3be38}.settings-alert-error{background-color:#ffe9e9;border:1px solid #d4cccc;border-left:4px solid #d20000}.field-radio input[type=radio].cld-field{margin:0 5px 0 0}.field-radio label{margin-right:10px}.settings-tab-section h2{margin:0}.cloudinary-collapsible{background-color:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0,0,0,.04);box-sizing:border-box;margin:20px 0;padding:10px;width:95%}.cloudinary-collapsible__toggle{cursor:pointer;display:flex;justify-content:space-between}.cloudinary-collapsible__toggle h2{margin:0!important}.cloudinary-collapsible__toggle button{background-color:inherit;border:none;cursor:pointer;margin:0;padding:0;width:auto}.cloudinary-deactivation .more{display:none}.cloudinary-deactivation input[type=radio]:checked~.more{color:#32373c;display:block;line-height:2;margin-left:2em;margin-top:.5em}.cloudinary-deactivation input[type=checkbox]~label{margin-left:.25em}.cloudinary-deactivation .modal-footer{background-color:#fcfcfc;border-top:1px solid #ddd;bottom:0;margin:0 -15px;padding:1em;position:absolute;width:calc(100% - 2em)}.cloudinary-deactivation .modal-footer .button-link{float:right}.cloudinary-deactivation .modal-footer .button-link:hover{background:transparent}.cloudinary-deactivation textarea{resize:none}.cloudinary-deactivation p{display:flex}.sync .spinner{display:inline-block;float:none;margin:0 5px 0 0;visibility:visible}.sync-media,.sync-media-progress{display:none}.sync-media-progress-outer{background-color:#e5e5e5;height:20px;margin:20px 0 10px;position:relative;width:500px}.sync-media-progress-outer .progress-bar{background-color:#558b2f;height:20px;transition:width .25s;width:0}.sync-media-progress-notice{color:#dd2c00}.sync-media-resource{display:inline-block;width:100px}.sync-media-error{color:#dd2c00}.sync-count{font-weight:700}.sync-details{margin-top:10px}.sync .button.start-sync,.sync .button.stop-sync{display:none;padding:0 16px}.sync .button.start-sync .dashicons,.sync .button.stop-sync .dashicons{line-height:2.2}.sync .progress-text{display:inline-block;font-weight:700;padding:12px 4px 12px 12px}.sync .completed{display:none;max-width:300px}.sync-status-disabled{color:#dd2c00}.sync-status-enabled{color:#558b2f}.sync-status-button.button{vertical-align:baseline}.cloudinary-widget{height:100%}.cloudinary-widget-wrapper{background-image:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3Bpbm5lciIgdmlld0JveD0iLTQgLTQgMTUxIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCiAgICAgIEBrZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhGRjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OEZGOyB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZGFzaCB7CiAgICAgICAwJSB7IHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgIDUwJSB7CiAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgIH0KICAgICAgIDEwMCUgeyAgIHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgfQogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhmZjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OGZmOyB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBkYXNoIHsKICAgICAgIDAlIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsgfQogICAgICAgNTAlIHsKICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgfQogICAgICAgMTAwJSB7ICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsKICAgICAgIH0KICAgICAgfQogICAgICAucGF0aCB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMjgwOwogICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjoKICAgICAgICAgIGRhc2ggMnMgZWFzZS1pbi1vdXQgaW5maW5pdGUsIGNvbG9ycyA4cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246CiAgICAgICAgICBkYXNoIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLCBjb2xvcnMgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KICAgIF1dPjwvc3R5bGU+CiAgPHBhdGggY2xhc3M9InBhdGgiIGQ9Ik0xMjEuNjYzIDkwLjYzOGMtMS43OTYgMC05OS4zMy0uNDk4LTEwMS40NzQtMS40NzhDOC42ODUgODMuODc3IDEuMjUgNzIuMTk2IDEuMjUgNTkuMzk2YzAtMTYuNjU2IDEyLjc5Ny0zMC42MSAyOS4wNTItMzIuMzIzIDcuNDktMTUuNzA2IDIzLjE4Ni0yNS43MDcgNDAuNzE0LTI1LjcwNyAyMC45OCAwIDM5LjIxNSAxNC43NTIgNDMuOTQ1IDM0LjkwNyAxNS4wOS4yNDUgMjcuMjkgMTIuNjMgMjcuMjkgMjcuODIyIDAgMTEuOTY4LTcuNzM4IDIyLjU1LTE5LjI1NiAyNi4zMyIgc3Ryb2tlLXdpZHRoPSI5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgo8L3N2Zz4K);background-position:50%;background-repeat:no-repeat;background-size:150px;height:100%;overflow:hidden}.attachment-actions .button.edit-attachment,.attachment-info .edit-attachment{display:none}.global-transformations-preview{max-width:600px;position:relative}.global-transformations-spinner{display:none}.global-transformations-button.button-primary{display:none;position:absolute;z-index:100}.global-transformations-url{margin-bottom:5px;margin-top:5px}.global-transformations-url-transformation{color:#51a3ff;max-width:100px;overflow:hidden;text-overflow:ellipsis}.global-transformations-url-file{color:#f2d864}.global-transformations-url-link{background-color:#262c35;border-radius:6px;color:#fff;display:block;overflow:hidden;padding:16px;text-decoration:none;text-overflow:ellipsis}.global-transformations-url-link:hover{color:#888;text-decoration:underline}.cld-tax-order-list-item{background-color:#fff;border:1px solid #efefef;margin:0 0 -1px;padding:4px}.cld-tax-order-list-item.no-items{color:#888;display:none;text-align:center}.cld-tax-order-list-item.no-items:last-child{display:block}.cld-tax-order-list-item.ui-sortable-helper{box-shadow:0 2px 5px rgba(0,0,0,.2)}.cld-tax-order-list-item-placeholder{background-color:#efefef;height:45px;margin:0}.cld-tax-order-list-item-handle{color:#999;cursor:grab;margin-right:4px}.cld-tax-order-list-type{display:inline-block;margin-right:8px}.cld-tax-order-list-type input{margin-right:4px!important}.cloudinary-media-library{margin-left:-20px;position:relative}@media screen and (max-width:782px){.cloudinary-media-library{margin-left:-10px}}.cld-pagenav{color:#555;line-height:2.4em;margin-top:5px;text-align:right}.cld-pagenav-text{margin:0 2em}.cld-delete{color:#dd2c00;cursor:pointer;float:right}.cld-apply-action{float:right}.cld-table thead tr th.cld-table-th{line-height:1.8em}.cld-loading{background-image:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3Bpbm5lciIgdmlld0JveD0iLTQgLTQgMTUxIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCiAgICAgIEBrZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhGRjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OEZGOyB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZGFzaCB7CiAgICAgICAwJSB7IHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgIDUwJSB7CiAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgIH0KICAgICAgIDEwMCUgeyAgIHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgfQogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhmZjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OGZmOyB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBkYXNoIHsKICAgICAgIDAlIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsgfQogICAgICAgNTAlIHsKICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgfQogICAgICAgMTAwJSB7ICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsKICAgICAgIH0KICAgICAgfQogICAgICAucGF0aCB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMjgwOwogICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjoKICAgICAgICAgIGRhc2ggMnMgZWFzZS1pbi1vdXQgaW5maW5pdGUsIGNvbG9ycyA4cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246CiAgICAgICAgICBkYXNoIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLCBjb2xvcnMgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KICAgIF1dPjwvc3R5bGU+CiAgPHBhdGggY2xhc3M9InBhdGgiIGQ9Ik0xMjEuNjYzIDkwLjYzOGMtMS43OTYgMC05OS4zMy0uNDk4LTEwMS40NzQtMS40NzhDOC42ODUgODMuODc3IDEuMjUgNzIuMTk2IDEuMjUgNTkuMzk2YzAtMTYuNjU2IDEyLjc5Ny0zMC42MSAyOS4wNTItMzIuMzIzIDcuNDktMTUuNzA2IDIzLjE4Ni0yNS43MDcgNDAuNzE0LTI1LjcwNyAyMC45OCAwIDM5LjIxNSAxNC43NTIgNDMuOTQ1IDM0LjkwNyAxNS4wOS4yNDUgMjcuMjkgMTIuNjMgMjcuMjkgMjcuODIyIDAgMTEuOTY4LTcuNzM4IDIyLjU1LTE5LjI1NiAyNi4zMyIgc3Ryb2tlLXdpZHRoPSI5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgo8L3N2Zz4K);background-position:50%;background-repeat:no-repeat;background-size:50px 50px;height:100px;width:auto}.cld-loading.tree-branch{background-position:25px;background-size:50px 50px}.cld-syncing{background:url(../css/loading.svg) no-repeat 50%;display:inline-block;height:20px;margin-left:12px;padding:4px;width:30px}.cld-footer{bottom:0;color:#555d66;left:0;padding:0;position:absolute;right:0}@media only screen and (min-width:783px){.cld-footer{margin-left:36px}}@media only screen and (min-width:960px){.cld-footer{margin-left:160px}}.cld-footer .cld-notice-box.is-success{background-color:#fff;border:0;color:#555;margin:0;padding:0}.cld-footer .cld-notice-box.is-success .cld-stars{margin-left:12px;text-decoration:none}.cld-footer .cld-notice-box.is-success .cld-stars .dashicons{color:#fd9d2c;position:inherit}.cld-footer .notice-dismiss:before{content:"";font-size:1.4rem;padding:6px 0 0}.cld-tooltip{font-size:1rem;margin-left:2px;margin-top:1px}.cld-notice-box{box-shadow:0 0 2px rgba(0,0,0,.1);margin-bottom:12px;margin-right:20px;position:relative}.cld-notice-box .cld-notice{padding:1rem 2.2rem .75rem 1.2rem}.cld-notice-box .cld-notice img.cld-ui-icon{height:100%}.cld-notice-box.is-dismissible{padding-right:38px}.cld-notice-box.has-icon{padding-left:38px}.cld-notice-box.is-created,.cld-notice-box.is-success,.cld-notice-box.is-updated{background-color:#ebf5ec;border-left:4px solid #42ad4f}.cld-notice-box.is-created .dashicons,.cld-notice-box.is-success .dashicons,.cld-notice-box.is-updated .dashicons{color:#2a0}.cld-notice-box.is-error{background-color:#f8e8e7;border-left:4px solid #cb3435}.cld-notice-box.is-error .dashicons{color:#dd2c00}.cld-notice-box.is-warning{background-color:#fff7e5;border-left:4px solid #f2ad4c}.cld-notice-box.is-warning .dashicons{color:#fd9d2c}.cld-notice-box.is-info{background-color:#e4f4f8;border-left:4px solid #2a95c3}.cld-notice-box.is-info .dashicons{color:#3273ab}.cld-notice-box.is-neutral{background-color:#fff;border-left:4px solid #ccd0d4}.cld-notice-box.is-neutral .dashicons{color:#90a0b3}.cld-notice-box.dismissed{overflow:hidden;transition:height .3s ease-out}.cld-notice-box .cld-ui-icon,.cld-notice-box .dashicons{left:19px;position:absolute;top:14px}.cld-ui-collapse{align-self:center;cursor:pointer;padding:0 .45rem}.cld-ui-title.collapsible{cursor:pointer}.cld-ui-conditional .closed,.cld-ui-wrap .closed{display:none}.cld-ui-wrap .cld-row{clear:both;margin:0 -1.75em}.cld-ui-wrap .cld-column{box-sizing:border-box;float:left;padding:0 1.75em;width:100%}@media only screen and (min-width:783px){.cld-ui-wrap .cld-column.column-45{width:45%}.cld-ui-wrap .cld-column.column-55{width:55%}}.cld-ui-wrap .cld-row:after{clear:both;content:"";display:table}.cld-image-preview,.cld-video-preview{background-color:hsla(0,0%,84.7%,.5);border-radius:5px;padding:7px}.cld-image-preview-wrapper,.cld-video-preview-wrapper{position:relative}.cld-image-preview .cld-ui-title,.cld-video-preview .cld-ui-title{font-weight:400;margin:0 0 .4rem}.cld-image-preview img,.cld-video-preview img{width:100%}.cld-page-header{align-items:center;margin-bottom:1em;padding:1.2rem}.cld-page-header,.cld-page-tabs{background-color:#fff;display:flex;margin-left:-20px}.cld-page-tabs{border-bottom:1px solid #e5e5e5;border-top:1px solid #e5e5e5;flex-wrap:wrap;margin-top:-1em;padding:0 1rem}.cld-page-tabs-tab{list-style:none;margin-bottom:0;text-indent:0}.cld-page-tabs-tab a{color:#000001;display:block;font-weight:500;padding:1rem 2rem;text-align:center;text-decoration:none;white-space:nowrap}.cld-page-tabs-tab.is-active a{border-bottom:2px solid #3273ab;color:#3273ab}.cld-group .cld-group .cld-group{padding-left:4px}.cld-group hr{border-top:1px solid #e5e5e5;clear:both;margin:1.5rem 0}.cld-group .cld-group .cld-group hr{display:none}.cld-group-heading{display:flex;justify-content:space-between}.cld-group-heading h3{font-size:.9rem}.cld-group-heading h3 .description{font-size:.7rem;font-weight:400;margin-left:.7em}.cld-input{display:block;margin-bottom:1.4rem}.cld-input-label{display:block;font-weight:700}.cld-input .regular-number,.cld-input .regular-text{border:1px solid #d0d0d0;border-radius:3px;padding:.1rem .5rem;width:100%}.cld-input .regular-number-small,.cld-input .regular-text-small{width:40%}.cld-input .prefixed{margin-left:6px;width:40%}.cld-input .suffixed{margin-right:6px;width:40%}.cld-input .regular-number{width:100px}.cld-input .regular-select{appearance:none;border:1px solid #d0d0d0;border-radius:3px;display:block;margin-top:.6rem;padding:.1rem .5rem;width:100%}.cld-input-on-off{align-items:center;display:inline-flex}.cld-input-on-off .description{margin:0}.cld-input-on-off .description.left{margin-left:0;margin-right:.4rem}.cld-input-on-off-control{display:inline-block;height:20px;margin-right:.4rem;position:relative;width:40px}.cld-input-on-off-control.disabled{opacity:.4}.cld-input-on-off-control input{height:0;opacity:0;width:0}.cld-input-on-off-control-slider{background-color:#90a0b3;border-radius:34px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:background-color .3s}input:checked+.cld-input-on-off-control-slider{background-color:#2a0!important}input:checked.partial+.cld-input-on-off-control-slider{background-color:#fd9d2c!important}input:checked.delete+.cld-input-on-off-control-slider{background-color:#dd2c00!important}.cld-input-on-off-control-slider:before{background-color:#fff;border-radius:50%;bottom:2px;content:"";display:block;height:16px;left:2px;position:absolute;transition:transform .2s;width:16px}input:checked+.cld-input-on-off-control-slider:before{transform:translateX(20px)}.mini input:checked+.cld-input-on-off-control-slider:before{transform:translateX(10px)}.cld-input-on-off-control.mini{height:10px;width:20px}.mini .cld-input-on-off-control-slider:before{bottom:1px;height:8px;left:1px;width:8px}.cld-input-icon-toggle{align-items:center;display:inline-flex}.cld-input-icon-toggle .description{margin:0 0 0 .4rem}.cld-input-icon-toggle .description.left{margin-left:0;margin-right:.4rem}.cld-input-icon-toggle-control{display:inline-block;position:relative}.cld-input-icon-toggle-control input{height:0;opacity:0;position:absolute;width:0}.cld-input-icon-toggle-control-slider .icon-on{display:none;visibility:hidden}.cld-input-icon-toggle-control-slider .icon-off,input:checked+.cld-input-icon-toggle-control-slider .icon-on{display:inline-block;visibility:visible}input:checked+.cld-input-icon-toggle-control-slider .icon-off{display:none;visibility:hidden}.cld-input-checkbox-label,.cld-input-radio-label{display:block;margin-bottom:.4rem}.cld-input-checkbox-label.list-inline,.cld-input-radio-label.list-inline{display:inline-block;margin-right:.4rem}.cld-info-box,.cld-panel,.cld-panel-short,.cld-submit,.cld-switch-cloud{background-color:#fff;border:1px solid #e5e5e5;margin-right:1rem;max-width:870px}.cld-info-box.full-width,.cld-panel-short.full-width,.cld-panel.full-width,.cld-submit.full-width,.cld-switch-cloud.full-width{max-width:100%}.cld-submit,.cld-switch-cloud{border-top:0;padding:1.2rem 1.75rem}.cld-info-box,.cld-panel,.cld-panel-short{margin-top:1rem;padding:2rem 1.75rem}.cld-info-box-inner,.cld-panel-inner,.cld-panel-short-inner{background-color:hsla(0,0%,86.3%,.2);border:1px solid #e5e5e5;margin:1em 0;padding:1.3rem}.cld-info-box-inner h2,.cld-panel-inner h2,.cld-panel-short-inner h2{color:#3273ab}.cld-info-box .cld-input-label,.cld-panel-short .cld-input-label,.cld-panel .cld-input-label{margin-bottom:.6rem}.cld-info-box.has-heading,.cld-panel-short.has-heading,.cld-panel.has-heading{border-top:0;margin-top:0}.cld-info-box-heading,.cld-panel-heading,.cld-panel-short-heading{display:flex;padding:.4rem 1.75rem .2rem;position:relative}.cld-info-box-heading.full-width,.cld-panel-heading.full-width,.cld-panel-short-heading.full-width{max-width:100%}.cld-info-box-heading img,.cld-panel-heading img,.cld-panel-short-heading img{margin-right:.6rem}.cld-info-box-heading.collapsible,.cld-panel-heading.collapsible,.cld-panel-short-heading.collapsible{cursor:pointer}.cld-info-box ul,.cld-panel-short ul,.cld-panel ul{list-style:initial;padding:0 3em}.cld-info-box .cld-plan,.cld-panel-short .cld-plan,.cld-panel .cld-plan{color:#3273ab;font-size:1.5em;font-weight:700}.cld-info-box .stat-boxes,.cld-panel-short .stat-boxes,.cld-panel .stat-boxes{border:1px solid #e5e5e5;font-size:1.2em}.cld-info-box .stat-boxes .box,.cld-panel-short .stat-boxes .box,.cld-panel .stat-boxes .box{border-bottom:1px solid #e5e5e5;padding:2rem;text-align:center}.cld-info-box .stat-boxes .box:last-of-type,.cld-panel-short .stat-boxes .box:last-of-type,.cld-panel .stat-boxes .box:last-of-type{border-bottom:none}.cld-info-box .stat-boxes .box .cld-ui-icon,.cld-panel-short .stat-boxes .box .cld-ui-icon,.cld-panel .stat-boxes .box .cld-ui-icon{height:35px;width:35px}.cld-info-box .stat-boxes .icon,.cld-panel-short .stat-boxes .icon,.cld-panel .stat-boxes .icon{height:50px;margin-right:.5em;width:50px}.cld-info-box .stat-boxes h3,.cld-panel-short .stat-boxes h3,.cld-panel .stat-boxes h3{margin-bottom:1.5rem;margin-top:2.4rem}.cld-info-box .stat-boxes .limit,.cld-panel-short .stat-boxes .limit,.cld-panel .stat-boxes .limit{font-size:2em;font-weight:700;margin-right:.5em;white-space:nowrap}.cld-info-box .stat-boxes .usage,.cld-panel-short .stat-boxes .usage,.cld-panel .stat-boxes .usage{color:#3273ab;font-size:1.5em;font-weight:400}@media only screen and (min-width:783px){.cld-info-box .stat-boxes,.cld-panel-short .stat-boxes,.cld-panel .stat-boxes{display:flex;flex-wrap:nowrap;font-size:1em}.cld-info-box .stat-boxes .box,.cld-panel-short .stat-boxes .box,.cld-panel .stat-boxes .box{border-bottom:none;border-right:1px solid #e5e5e5;flex-grow:1}.cld-info-box .stat-boxes .box:last-of-type,.cld-panel-short .stat-boxes .box:last-of-type,.cld-panel .stat-boxes .box:last-of-type{border-right:none}}@media only screen and (min-width:1200px){.cld-info-box .stat-boxes,.cld-panel-short .stat-boxes,.cld-panel .stat-boxes{font-size:1.2em}}.cld-info-box .img-connection-string,.cld-panel-short .img-connection-string,.cld-panel .img-connection-string{max-width:607px;width:100%}.cld-info-box .connection-string,.cld-panel-short .connection-string,.cld-panel .connection-string{max-width:40em;width:100%}.cld-info-box .media-status-box,.cld-info-box .stat-boxes,.cld-panel-short .media-status-box,.cld-panel-short .stat-boxes,.cld-panel .media-status-box,.cld-panel .stat-boxes{border:1px solid #e5e5e5}.cld-info-box .media-status-box,.cld-panel-short .media-status-box,.cld-panel .media-status-box{padding:2rem;text-align:center}.cld-info-box .media-status-box .status,.cld-panel-short .media-status-box .status,.cld-panel .media-status-box .status{font-size:2rem;font-weight:700;margin-right:.5em}.cld-info-box .media-status-box .cld-ui-icon,.cld-panel-short .media-status-box .cld-ui-icon,.cld-panel .media-status-box .cld-ui-icon{height:35px;width:35px}.cld-info-box .notification,.cld-panel-short .notification,.cld-panel .notification{display:inline-flex;font-weight:700;padding:1.5rem}.cld-info-box .notification-success,.cld-panel-short .notification-success,.cld-panel .notification-success{background-color:rgba(32,184,50,.2);border:2px solid #20b832}.cld-info-box .notification-success:before,.cld-panel-short .notification-success:before,.cld-panel .notification-success:before{color:#20b832}.cld-info-box .notification-syncing,.cld-panel-short .notification-syncing,.cld-panel .notification-syncing{background-color:rgba(50,115,171,.2);border:2px solid #3273ab;color:#444;text-decoration:none}.cld-info-box .notification-syncing:before,.cld-panel-short .notification-syncing:before,.cld-panel .notification-syncing:before{-webkit-animation:spin 1s infinite running;-moz-animation:spin 1s linear infinite;animation:spin 1s linear infinite;color:#3273ab}@keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.cld-info-box .notification:before,.cld-panel-short .notification:before,.cld-panel .notification:before{margin-right:.5em}.cld-info-box{display:flex;flex-direction:column}@media only screen and (min-width:783px){.cld-info-box{flex-direction:row}}.cld-info-box a.button,.cld-info-box img{align-self:center}.cld-info-box .cld-ui-body{margin:0 1.2rem}.cld-panel-short{display:inline-block;min-width:270px;width:auto}.cld-gallery-settings{box-sizing:border-box;display:flex;flex-wrap:wrap;padding:1rem 0;width:100%}@media only screen and (min-width:960px){.cld-gallery-settings{margin-left:-1rem;margin-right:-1rem}}.cld-gallery-settings__column{box-sizing:border-box;width:100%}@media only screen and (min-width:960px){.cld-gallery-settings__column{padding-left:1rem;padding-right:1rem;width:50%}}.components-base-control__field select{display:block;margin:1rem 0}.components-range-control__wrapper{margin:0!important}.components-range-control__root{flex-direction:row-reverse;margin:1rem 0}.components-input-control.components-number-control.components-range-control__number{margin-left:0!important;margin-right:16px}.components-panel{border:0!important}.components-panel__body:first-child{border-top:0!important}.components-panel__body:last-child{border-bottom:0!important}.components-textarea-control__input{display:block;margin:.5rem 0;width:100%}.tippy-box[data-theme~=cloudinary]{background-color:rgba(0,0,0,.8);color:#fff;font-size:.8em}table .cld-input{margin-bottom:0}tr .file-size.small{color:#a8a8a8;font-size:.8em;font-style:italic;letter-spacing:.4px;margin-left:6px;margin-right:6px}td.tree{color:#212529;line-height:1.5;padding-top:0;position:relative}td.tree ul.striped>:nth-child(odd){background-color:#f6f7f7}td.tree ul.striped>:nth-child(2n){background-color:#fff}td.tree .success{color:#20b832}td+td.tree{padding-top:0}td.tree .cld-input{margin-bottom:0;vertical-align:text-bottom}td.tree .cld-search{font-size:.9em;height:26px;margin-right:12px;min-height:20px;padding:4px 6px;vertical-align:initial}td.tree .file-size{color:#a8a8a8;font-size:.8em;font-style:italic;letter-spacing:.4px;margin-left:6px}td.tree .fa-folder,td.tree .fa-folder-open{color:#007bff}td.tree .fa-html5{color:#f21f10}td.tree ul{list-style:none;margin:0;padding-left:5px}td.tree ul li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:0;padding-bottom:5px;padding-left:25px;padding-top:5px;position:relative}td.tree ul li:before{height:1px;margin:auto;top:14px;width:20px}td.tree ul li:after,td.tree ul li:before{background-color:#666;content:"";left:0;position:absolute}td.tree ul li:after{bottom:0;height:100%;top:0;width:1px}td.tree ul li:after:nth-of-type(odd){background-color:#666}td.tree ul li:last-child:after{height:14px}td.tree ul a{cursor:pointer}td.tree ul a:hover{text-decoration:none} \ No newline at end of file +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{background-color:#333;border-radius:4px;color:#fff;font-size:14px;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;height:16px;width:16px}.tippy-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.tippy-content{padding:5px 9px;position:relative;z-index:1}@font-face{font-family:cloudinary;font-style:normal;font-weight:500;src:url(../css/fonts/cloudinary.7e6e75b25255a2b3b6e7ced1092c210c.eot);src:url(../css/fonts/cloudinary.7e6e75b25255a2b3b6e7ced1092c210c.eot#iefix) format("embedded-opentype"),url(../css/fonts/cloudinary.34cb260ad722325c597cdc3a3e7584d8.woff) format("woff"),url(../css/fonts/cloudinary.c2afda9d25532c03cd41beb20a1ce439.ttf) format("truetype"),url(../css/images/cloudinary.svg#cloudinary) format("svg")}.dashicons-cloudinary{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.dashicons-cloudinary:before{content:"";font-family:cloudinary,monospace!important}.dashicons-cloudinary.success{color:#558b2f}.dashicons-cloudinary.error{color:#dd2c00}.dashicons-cloudinary.error:before{content:""}.dashicons-cloudinary.uploading{color:#fd9d2c}.dashicons-cloudinary.uploading:before{content:""}.dashicons-cloudinary.info{color:#0071ba}.dashicons-cloudinary.downloading:before{content:""}.dashicons-cloudinary.syncing:before{content:""}.column-cld_status{width:5.5em}.column-cld_status .dashicons-cloudinary{display:inline-block}.column-cld_status .dashicons-cloudinary:before{font-size:1.8rem}.form-field .error-notice,.form-table .error-notice{color:#dd2c00;display:none}.form-field input.cld-field:invalid,.form-table input.cld-field:invalid{border-color:#dd2c00}.form-field input.cld-field:invalid+.error-notice,.form-table input.cld-field:invalid+.error-notice{display:inline-block}.cloudinary-welcome{background-image:url(../css/images/logo.svg);background-position:top 12px right 20px;background-repeat:no-repeat;background-size:153px}.cloudinary-stats{display:inline-block;margin-left:25px}.cloudinary-stat{cursor:help}.cloudinary-percent{color:#0071ba;font-size:.8em;vertical-align:top}.settings-image{max-width:100%;padding-top:5px}.settings-tabs>li{display:inline-block}.settings-tabs>li a{padding:.6em}.settings-tabs>li a.active{background-color:#fff}.settings-tab-section{max-width:1030px;padding:20px 0 0;position:relative}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard{align-content:flex-start;align-items:flex-start;display:flex;margin-top:40px}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard-description{margin:0 auto 0 0;width:55%}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard-content{margin:0 auto;width:35%}.settings-tab-section.cloudinary-welcome .settings-tab-section-fields-dashboard-content .dashicons{color:#9ea3a8}.settings-tab-section.cloudinary-welcome .settings-tab-section-card{margin-top:0}.settings-tab-section-fields .field-heading th{color:#23282d;display:block;font-size:1.1em;margin:1em 0;width:auto}.settings-tab-section-fields .field-heading td{display:none;visibility:hidden}.settings-tab-section-fields .regular-textarea{height:60px;width:100%}.settings-tab-section-fields .dashicons{text-decoration:none;vertical-align:middle}.settings-tab-section-fields a .dashicons{color:#5f5f5f}.settings-tab-section-fields-dashboard-error{color:#5f5f5f;font-size:1.2em}.settings-tab-section-fields-dashboard-error.expanded{margin-bottom:25px;padding-top:40px}.settings-tab-section-fields-dashboard-error .dashicons{color:#ac0000}.settings-tab-section-fields-dashboard-error .button{font-size:1.1em;height:40px;line-height:40px;padding-left:40px;padding-right:40px}.settings-tab-section-fields-dashboard-success{color:#23282d;font-size:1.2em}.settings-tab-section-fields-dashboard-success.expanded{margin-bottom:25px;padding-top:40px}.settings-tab-section-fields-dashboard-success .dashicons{color:#4fb651}.settings-tab-section-fields-dashboard-success .button{font-size:1.1em;height:40px;line-height:40px;padding-left:40px;padding-right:40px}.settings-tab-section-fields-dashboard-success .description{color:#5f5f5f;font-weight:400;margin-top:12px}.settings-tab-section-card{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px 0 rgba(0,0,0,.07);box-sizing:border-box;margin-top:12px;padding:20px 23px}.settings-tab-section-card .dashicons{font-size:1.4em}.settings-tab-section-card h2{font-size:1.8em;font-weight:400;margin-top:0}.settings-tab-section-card.pull-right{float:right;padding:12px;position:relative;width:450px;z-index:10}.settings-tab-section-card.pull-right img.settings-image{border:1px solid #979797;box-shadow:0 2px 4px 0 rgba(0,0,0,.5);margin-top:12px}.settings-tab-section-card.pull-right h3,.settings-tab-section-card.pull-right h4{margin-top:0}.settings-tab-section .field-row-cloudinary_url,.settings-tab-section .field-row-signup{display:block}.settings-tab-section .field-row-cloudinary_url td,.settings-tab-section .field-row-cloudinary_url th,.settings-tab-section .field-row-signup td,.settings-tab-section .field-row-signup th{display:block;padding:10px 0 0;width:auto}.settings-tab-section .field-row-cloudinary_url td .sign-up,.settings-tab-section .field-row-cloudinary_url th .sign-up,.settings-tab-section .field-row-signup td .sign-up,.settings-tab-section .field-row-signup th .sign-up{vertical-align:baseline}.settings-tab-section.connect .form-table{display:inline-block;max-width:580px;width:auto}.settings-valid{color:#558b2f;font-size:30px}.settings-valid-field{border-color:#558b2f!important}.settings-invalid-field{border-color:#dd2c00!important}.settings-alert{box-shadow:0 1px 1px rgba(0,0,0,.04);display:inline-block;padding:5px 7px}.settings-alert-info{background-color:#e9faff;border:1px solid #ccd0d4;border-left:4px solid #00a0d2}.settings-alert-warning{background-color:#fff5e9;border:1px solid #f6e7b6;border-left:4px solid #e3be38}.settings-alert-error{background-color:#ffe9e9;border:1px solid #d4cccc;border-left:4px solid #d20000}.field-radio input[type=radio].cld-field{margin:0 5px 0 0}.field-radio label{margin-right:10px}.settings-tab-section h2{margin:0}.cloudinary-collapsible{background-color:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0,0,0,.04);box-sizing:border-box;margin:20px 0;padding:10px;width:95%}.cloudinary-collapsible__toggle{cursor:pointer;display:flex;justify-content:space-between}.cloudinary-collapsible__toggle h2{margin:0!important}.cloudinary-collapsible__toggle button{background-color:inherit;border:none;cursor:pointer;margin:0;padding:0;width:auto}.cloudinary-deactivation .more{display:none}.cloudinary-deactivation input[type=radio]:checked~.more{color:#32373c;display:block;line-height:2;margin-left:2em;margin-top:.5em}.cloudinary-deactivation input[type=checkbox]~label{margin-left:.25em}.cloudinary-deactivation .modal-footer{background-color:#fcfcfc;border-top:1px solid #ddd;bottom:0;margin:0 -15px;padding:1em;position:absolute;width:calc(100% - 2em)}.cloudinary-deactivation .modal-footer .button-link{float:right}.cloudinary-deactivation .modal-footer .button-link:hover{background:transparent}.cloudinary-deactivation textarea{resize:none}.cloudinary-deactivation p{display:flex}.sync .spinner{display:inline-block;float:none;margin:0 5px 0 0;visibility:visible}.sync-media,.sync-media-progress{display:none}.sync-media-progress-outer{background-color:#e5e5e5;height:20px;margin:20px 0 10px;position:relative;width:500px}.sync-media-progress-outer .progress-bar{background-color:#558b2f;height:20px;transition:width .25s;width:0}.sync-media-progress-notice{color:#dd2c00}.sync-media-resource{display:inline-block;width:100px}.sync-media-error{color:#dd2c00}.sync-count{font-weight:700}.sync-details{margin-top:10px}.sync .button.start-sync,.sync .button.stop-sync{display:none;padding:0 16px}.sync .button.start-sync .dashicons,.sync .button.stop-sync .dashicons{line-height:2.2}.sync .progress-text{display:inline-block;font-weight:700;padding:12px 4px 12px 12px}.sync .completed{display:none;max-width:300px}.sync-status-disabled{color:#dd2c00}.sync-status-enabled{color:#558b2f}.sync-status-button.button{vertical-align:baseline}.cloudinary-widget{height:100%}.cloudinary-widget-wrapper{background-image:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3Bpbm5lciIgdmlld0JveD0iLTQgLTQgMTUxIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCiAgICAgIEBrZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhGRjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OEZGOyB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZGFzaCB7CiAgICAgICAwJSB7IHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgIDUwJSB7CiAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgIH0KICAgICAgIDEwMCUgeyAgIHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgfQogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhmZjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OGZmOyB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBkYXNoIHsKICAgICAgIDAlIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsgfQogICAgICAgNTAlIHsKICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgfQogICAgICAgMTAwJSB7ICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsKICAgICAgIH0KICAgICAgfQogICAgICAucGF0aCB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMjgwOwogICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjoKICAgICAgICAgIGRhc2ggMnMgZWFzZS1pbi1vdXQgaW5maW5pdGUsIGNvbG9ycyA4cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246CiAgICAgICAgICBkYXNoIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLCBjb2xvcnMgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KICAgIF1dPjwvc3R5bGU+CiAgPHBhdGggY2xhc3M9InBhdGgiIGQ9Ik0xMjEuNjYzIDkwLjYzOGMtMS43OTYgMC05OS4zMy0uNDk4LTEwMS40NzQtMS40NzhDOC42ODUgODMuODc3IDEuMjUgNzIuMTk2IDEuMjUgNTkuMzk2YzAtMTYuNjU2IDEyLjc5Ny0zMC42MSAyOS4wNTItMzIuMzIzIDcuNDktMTUuNzA2IDIzLjE4Ni0yNS43MDcgNDAuNzE0LTI1LjcwNyAyMC45OCAwIDM5LjIxNSAxNC43NTIgNDMuOTQ1IDM0LjkwNyAxNS4wOS4yNDUgMjcuMjkgMTIuNjMgMjcuMjkgMjcuODIyIDAgMTEuOTY4LTcuNzM4IDIyLjU1LTE5LjI1NiAyNi4zMyIgc3Ryb2tlLXdpZHRoPSI5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgo8L3N2Zz4K);background-position:50%;background-repeat:no-repeat;background-size:150px;height:100%;overflow:hidden}.attachment-actions .button.edit-attachment,.attachment-info .edit-attachment{display:none}.global-transformations-preview{max-width:600px;position:relative}.global-transformations-spinner{display:none}.global-transformations-button.button-primary{display:none;position:absolute;z-index:100}.global-transformations-url{margin-bottom:5px;margin-top:5px}.global-transformations-url-transformation{color:#51a3ff;max-width:100px;overflow:hidden;text-overflow:ellipsis}.global-transformations-url-file{color:#f2d864}.global-transformations-url-link{background-color:#262c35;border-radius:6px;color:#fff;display:block;overflow:hidden;padding:16px;text-decoration:none;text-overflow:ellipsis}.global-transformations-url-link:hover{color:#888;text-decoration:underline}.cld-tax-order-list-item{background-color:#fff;border:1px solid #efefef;margin:0 0 -1px;padding:4px}.cld-tax-order-list-item.no-items{color:#888;display:none;text-align:center}.cld-tax-order-list-item.no-items:last-child{display:block}.cld-tax-order-list-item.ui-sortable-helper{box-shadow:0 2px 5px rgba(0,0,0,.2)}.cld-tax-order-list-item-placeholder{background-color:#efefef;height:45px;margin:0}.cld-tax-order-list-item-handle{color:#999;cursor:grab;margin-right:4px}.cld-tax-order-list-type{display:inline-block;margin-right:8px}.cld-tax-order-list-type input{margin-right:4px!important}.cloudinary-media-library{margin-left:-20px;position:relative}@media screen and (max-width:782px){.cloudinary-media-library{margin-left:-10px}}.cld-pagenav{color:#555;line-height:2.4em;margin-top:5px}.cld-pagenav-text{margin:0 2em}.cld-delete{color:#dd2c00;cursor:pointer;float:right}.cld-apply-action{float:right}.cld-table thead tr th.cld-table-th{line-height:1.8em}.cld-loading{background-image:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3Bpbm5lciIgdmlld0JveD0iLTQgLTQgMTUxIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCiAgICAgIEBrZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhGRjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OEZGOyB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZGFzaCB7CiAgICAgICAwJSB7IHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgIDUwJSB7CiAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgIH0KICAgICAgIDEwMCUgeyAgIHN0cm9rZS1kYXNob2Zmc2V0OiA1NjA7IH0KICAgICAgfQogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgY29sb3JzIHsKICAgICAgICAwJSB7IHN0cm9rZTogIzAwNzhmZjsgfQogICAgICAgICAgNTAlIHsgc3Ryb2tlOiAjMGUyZjVhOyB9CiAgICAgICAgICAxMDAlIHsgc3Ryb2tlOiAjMDA3OGZmOyB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBkYXNoIHsKICAgICAgIDAlIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsgfQogICAgICAgNTAlIHsKICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgfQogICAgICAgMTAwJSB7ICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDU2MDsKICAgICAgIH0KICAgICAgfQogICAgICAucGF0aCB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMjgwOwogICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjoKICAgICAgICAgIGRhc2ggMnMgZWFzZS1pbi1vdXQgaW5maW5pdGUsIGNvbG9ycyA4cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246CiAgICAgICAgICBkYXNoIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLCBjb2xvcnMgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KICAgIF1dPjwvc3R5bGU+CiAgPHBhdGggY2xhc3M9InBhdGgiIGQ9Ik0xMjEuNjYzIDkwLjYzOGMtMS43OTYgMC05OS4zMy0uNDk4LTEwMS40NzQtMS40NzhDOC42ODUgODMuODc3IDEuMjUgNzIuMTk2IDEuMjUgNTkuMzk2YzAtMTYuNjU2IDEyLjc5Ny0zMC42MSAyOS4wNTItMzIuMzIzIDcuNDktMTUuNzA2IDIzLjE4Ni0yNS43MDcgNDAuNzE0LTI1LjcwNyAyMC45OCAwIDM5LjIxNSAxNC43NTIgNDMuOTQ1IDM0LjkwNyAxNS4wOS4yNDUgMjcuMjkgMTIuNjMgMjcuMjkgMjcuODIyIDAgMTEuOTY4LTcuNzM4IDIyLjU1LTE5LjI1NiAyNi4zMyIgc3Ryb2tlLXdpZHRoPSI5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgo8L3N2Zz4K);background-position:50%;background-repeat:no-repeat;background-size:50px 50px;height:100px;width:auto}.cld-loading.tree-branch{background-position:25px;background-size:50px 50px}.cld-syncing{background:url(../css/images/loading.svg) no-repeat 50%;display:inline-block;height:20px;margin-left:12px;padding:4px;width:30px}.cld-footer{bottom:0;color:#555d66;left:0;padding:0;position:absolute;right:0}@media only screen and (min-width:783px){.cld-footer{margin-left:36px}}@media only screen and (min-width:960px){.cld-footer{margin-left:160px}}.cld-footer .cld-notice-box.is-success{background-color:#fff;border:0;color:#555;margin:0;padding:0}.cld-footer .cld-notice-box.is-success .cld-stars{margin-left:12px;text-decoration:none}.cld-footer .cld-notice-box.is-success .cld-stars .dashicons{color:#fd9d2c;position:inherit}.cld-footer .notice-dismiss:before{content:"";font-size:1.4rem;padding:6px 0 0}.cld-tooltip{font-size:1rem;margin-left:2px;margin-top:1px}.cld-notice-box{box-shadow:0 0 2px rgba(0,0,0,.1);margin-bottom:12px;margin-right:20px;position:relative}.cld-notice-box .cld-notice{padding:1rem 2.2rem .75rem 1.2rem}.cld-notice-box .cld-notice img.cld-ui-icon{height:100%}.cld-notice-box.is-dismissible{padding-right:38px}.cld-notice-box.has-icon{padding-left:38px}.cld-notice-box.is-created,.cld-notice-box.is-success,.cld-notice-box.is-updated{background-color:#ebf5ec;border-left:4px solid #42ad4f}.cld-notice-box.is-created .dashicons,.cld-notice-box.is-success .dashicons,.cld-notice-box.is-updated .dashicons{color:#2a0}.cld-notice-box.is-error{background-color:#f8e8e7;border-left:4px solid #cb3435}.cld-notice-box.is-error .dashicons{color:#dd2c00}.cld-notice-box.is-warning{background-color:#fff7e5;border-left:4px solid #f2ad4c}.cld-notice-box.is-warning .dashicons{color:#fd9d2c}.cld-notice-box.is-info{background-color:#e4f4f8;border-left:4px solid #2a95c3}.cld-notice-box.is-info .dashicons{color:#3273ab}.cld-notice-box.is-neutral{background-color:#fff;border-left:4px solid #ccd0d4}.cld-notice-box.is-neutral .dashicons{color:#90a0b3}.cld-notice-box.dismissed{overflow:hidden;transition:height .3s ease-out}.cld-notice-box .cld-ui-icon,.cld-notice-box .dashicons{left:19px;position:absolute;top:14px}.cld-ui-collapse{align-self:center;cursor:pointer;padding:0 .45rem}.cld-ui-title.collapsible{cursor:pointer}.cld-ui-conditional .closed,.cld-ui-wrap .closed{display:none}.cld-ui-wrap .cld-row{clear:both;margin:0 -1.75em}.cld-ui-wrap .cld-column{box-sizing:border-box;float:left;padding:0 1.75em;width:100%}@media only screen and (min-width:783px){.cld-ui-wrap .cld-column.column-45{width:45%}.cld-ui-wrap .cld-column.column-55{width:55%}}.cld-ui-wrap .cld-row:after{clear:both;content:"";display:table}.cld-image-preview,.cld-video-preview{background-color:hsla(0,0%,84.7%,.5);border-radius:5px;padding:7px}.cld-image-preview-wrapper,.cld-video-preview-wrapper{position:relative}.cld-image-preview .cld-ui-title,.cld-video-preview .cld-ui-title{font-weight:400;margin:0 0 .4rem}.cld-image-preview img,.cld-video-preview img{width:100%}.cld-page-header{align-items:center;margin-bottom:1em;padding:1.2rem}.cld-page-header,.cld-page-tabs{background-color:#fff;display:flex;margin-left:-20px}.cld-page-tabs{border-bottom:1px solid #e5e5e5;border-top:1px solid #e5e5e5;flex-wrap:wrap;margin-top:-1em;padding:0 1rem}.cld-page-tabs-tab{list-style:none;margin-bottom:0;text-indent:0}.cld-page-tabs-tab a{color:#000001;display:block;font-weight:500;padding:1rem 2rem;text-align:center;text-decoration:none;white-space:nowrap}.cld-page-tabs-tab.is-active a{border-bottom:2px solid #3273ab;color:#3273ab}.cld-group .cld-group .cld-group{padding-left:4px}.cld-group hr{border-top:1px solid #e5e5e5;clear:both;margin:1.5rem 0}.cld-group .cld-group .cld-group hr{display:none}.cld-group-heading{display:flex;justify-content:space-between}.cld-group-heading h3{font-size:.9rem}.cld-group-heading h3 .description{font-size:.7rem;font-weight:400;margin-left:.7em}.cld-input{display:block;margin-bottom:1.4rem}.cld-input-label{display:block;font-weight:700}.cld-input .regular-number,.cld-input .regular-text{border:1px solid #d0d0d0;border-radius:3px;padding:.1rem .5rem;width:100%}.cld-input .regular-number-small,.cld-input .regular-text-small{width:40%}.cld-input .prefixed{margin-left:6px;width:40%}.cld-input .suffixed{margin-right:6px;width:40%}.cld-input .regular-number{width:100px}.cld-input .regular-select{appearance:none;border:1px solid #d0d0d0;border-radius:3px;display:block;margin-top:.6rem;padding:.1rem .5rem;width:100%}.cld-input-on-off{align-items:center;display:inline-flex}.cld-input-on-off .description{margin:0}.cld-input-on-off .description.left{margin-left:0;margin-right:.4rem}.cld-input-on-off-control{display:inline-block;height:20px;margin-right:.4rem;position:relative;width:40px}.cld-input-on-off-control.disabled{opacity:.4}.cld-input-on-off-control input{height:0;opacity:0;width:0}.cld-input-on-off-control-slider{background-color:#90a0b3;border-radius:34px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:background-color .3s}input:checked+.cld-input-on-off-control-slider{background-color:#2a0!important}input:checked.partial+.cld-input-on-off-control-slider{background-color:#fd9d2c!important}input:checked.delete+.cld-input-on-off-control-slider{background-color:#dd2c00!important}.cld-input-on-off-control-slider:before{background-color:#fff;border-radius:50%;bottom:2px;content:"";display:block;height:16px;left:2px;position:absolute;transition:transform .2s;width:16px}input:checked+.cld-input-on-off-control-slider:before{transform:translateX(20px)}.mini input:checked+.cld-input-on-off-control-slider:before{transform:translateX(10px)}.cld-input-on-off-control.mini{height:10px;width:20px}.mini .cld-input-on-off-control-slider:before{bottom:1px;height:8px;left:1px;width:8px}.cld-input-icon-toggle{align-items:center;display:inline-flex}.cld-input-icon-toggle .description{margin:0 0 0 .4rem}.cld-input-icon-toggle .description.left{margin-left:0;margin-right:.4rem}.cld-input-icon-toggle-control{display:inline-block;position:relative}.cld-input-icon-toggle-control input{height:0;opacity:0;position:absolute;width:0}.cld-input-icon-toggle-control-slider .icon-on{display:none;visibility:hidden}.cld-input-icon-toggle-control-slider .icon-off,input:checked+.cld-input-icon-toggle-control-slider .icon-on{display:inline-block;visibility:visible}input:checked+.cld-input-icon-toggle-control-slider .icon-off{display:none;visibility:hidden}.cld-input-checkbox-label,.cld-input-radio-label{display:block;margin-bottom:.4rem}.cld-input-checkbox-label.list-inline,.cld-input-radio-label.list-inline{display:inline-block;margin-right:.4rem}.cld-info-box,.cld-panel,.cld-panel-short,.cld-submit,.cld-switch-cloud{background-color:#fff;border:1px solid #e5e5e5;margin-right:1rem;max-width:870px}.cld-info-box.full-width,.cld-panel-short.full-width,.cld-panel.full-width,.cld-submit.full-width,.cld-switch-cloud.full-width{max-width:100%}.cld-submit,.cld-switch-cloud{border-top:0;padding:1.2rem 1.75rem}.cld-info-box,.cld-panel,.cld-panel-short{margin-top:1rem;padding:2rem 1.75rem}.cld-info-box-inner,.cld-panel-inner,.cld-panel-short-inner{background-color:hsla(0,0%,86.3%,.2);border:1px solid #e5e5e5;margin:1em 0;padding:1.3rem}.cld-info-box-inner h2,.cld-panel-inner h2,.cld-panel-short-inner h2{color:#3273ab}.cld-info-box .cld-input-label,.cld-panel-short .cld-input-label,.cld-panel .cld-input-label{margin-bottom:.6rem}.cld-info-box.has-heading,.cld-panel-short.has-heading,.cld-panel.has-heading{border-top:0;margin-top:0}.cld-info-box-heading,.cld-panel-heading,.cld-panel-short-heading{display:flex;padding:.4rem 1.75rem .2rem;position:relative}.cld-info-box-heading.full-width,.cld-panel-heading.full-width,.cld-panel-short-heading.full-width{max-width:100%}.cld-info-box-heading img,.cld-panel-heading img,.cld-panel-short-heading img{margin-right:.6rem}.cld-info-box-heading.collapsible,.cld-panel-heading.collapsible,.cld-panel-short-heading.collapsible{cursor:pointer}.cld-info-box ul,.cld-panel-short ul,.cld-panel ul{list-style:initial;padding:0 3em}.cld-info-box .cld-plan,.cld-panel-short .cld-plan,.cld-panel .cld-plan{color:#3273ab;font-size:1.5em;font-weight:700}.cld-info-box .stat-boxes,.cld-panel-short .stat-boxes,.cld-panel .stat-boxes{border:1px solid #e5e5e5;font-size:1.2em}.cld-info-box .stat-boxes .box,.cld-panel-short .stat-boxes .box,.cld-panel .stat-boxes .box{border-bottom:1px solid #e5e5e5;padding:2rem;text-align:center}.cld-info-box .stat-boxes .box:last-of-type,.cld-panel-short .stat-boxes .box:last-of-type,.cld-panel .stat-boxes .box:last-of-type{border-bottom:none}.cld-info-box .stat-boxes .box .cld-ui-icon,.cld-panel-short .stat-boxes .box .cld-ui-icon,.cld-panel .stat-boxes .box .cld-ui-icon{height:35px;width:35px}.cld-info-box .stat-boxes .icon,.cld-panel-short .stat-boxes .icon,.cld-panel .stat-boxes .icon{height:50px;margin-right:.5em;width:50px}.cld-info-box .stat-boxes h3,.cld-panel-short .stat-boxes h3,.cld-panel .stat-boxes h3{margin-bottom:1.5rem;margin-top:2.4rem}.cld-info-box .stat-boxes .limit,.cld-panel-short .stat-boxes .limit,.cld-panel .stat-boxes .limit{font-size:2em;font-weight:700;margin-right:.5em;white-space:nowrap}.cld-info-box .stat-boxes .usage,.cld-panel-short .stat-boxes .usage,.cld-panel .stat-boxes .usage{color:#3273ab;font-size:1.5em;font-weight:400}@media only screen and (min-width:783px){.cld-info-box .stat-boxes,.cld-panel-short .stat-boxes,.cld-panel .stat-boxes{display:flex;flex-wrap:nowrap;font-size:1em}.cld-info-box .stat-boxes .box,.cld-panel-short .stat-boxes .box,.cld-panel .stat-boxes .box{border-bottom:none;border-right:1px solid #e5e5e5;flex-grow:1}.cld-info-box .stat-boxes .box:last-of-type,.cld-panel-short .stat-boxes .box:last-of-type,.cld-panel .stat-boxes .box:last-of-type{border-right:none}}@media only screen and (min-width:1200px){.cld-info-box .stat-boxes,.cld-panel-short .stat-boxes,.cld-panel .stat-boxes{font-size:1.2em}}.cld-info-box .img-connection-string,.cld-panel-short .img-connection-string,.cld-panel .img-connection-string{max-width:607px;width:100%}.cld-info-box .connection-string,.cld-panel-short .connection-string,.cld-panel .connection-string{max-width:40em;width:100%}.cld-info-box .media-status-box,.cld-info-box .stat-boxes,.cld-panel-short .media-status-box,.cld-panel-short .stat-boxes,.cld-panel .media-status-box,.cld-panel .stat-boxes{border:1px solid #e5e5e5}.cld-info-box .media-status-box,.cld-panel-short .media-status-box,.cld-panel .media-status-box{padding:2rem;text-align:center}.cld-info-box .media-status-box .status,.cld-panel-short .media-status-box .status,.cld-panel .media-status-box .status{font-size:2rem;font-weight:700;margin-right:.5em}.cld-info-box .media-status-box .cld-ui-icon,.cld-panel-short .media-status-box .cld-ui-icon,.cld-panel .media-status-box .cld-ui-icon{height:35px;width:35px}.cld-info-box .notification,.cld-panel-short .notification,.cld-panel .notification{display:inline-flex;font-weight:700;padding:1.5rem}.cld-info-box .notification-success,.cld-panel-short .notification-success,.cld-panel .notification-success{background-color:rgba(32,184,50,.2);border:2px solid #20b832}.cld-info-box .notification-success:before,.cld-panel-short .notification-success:before,.cld-panel .notification-success:before{color:#20b832}.cld-info-box .notification-syncing,.cld-panel-short .notification-syncing,.cld-panel .notification-syncing{background-color:rgba(50,115,171,.2);border:2px solid #3273ab;color:#444;text-decoration:none}.cld-info-box .notification-syncing:before,.cld-panel-short .notification-syncing:before,.cld-panel .notification-syncing:before{-webkit-animation:spin 1s infinite running;-moz-animation:spin 1s linear infinite;animation:spin 1s linear infinite;color:#3273ab}@keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.cld-info-box .notification:before,.cld-panel-short .notification:before,.cld-panel .notification:before{margin-right:.5em}.cld-info-box{display:flex;flex-direction:column}@media only screen and (min-width:783px){.cld-info-box{flex-direction:row}}.cld-info-box a.button,.cld-info-box img{align-self:center}.cld-info-box .cld-ui-body{margin:0 1.2rem}.cld-panel-short{display:inline-block;min-width:270px;width:auto}.cld-gallery-settings{box-sizing:border-box;display:flex;flex-wrap:wrap;padding:1rem 0;width:100%}@media only screen and (min-width:960px){.cld-gallery-settings{margin-left:-1rem;margin-right:-1rem}}.cld-gallery-settings__column{box-sizing:border-box;width:100%}@media only screen and (min-width:960px){.cld-gallery-settings__column{padding-left:1rem;padding-right:1rem;width:50%}}.components-base-control__field select{display:block;margin:1rem 0}.components-range-control__wrapper{margin:0!important}.components-range-control__root{flex-direction:row-reverse;margin:1rem 0}.components-input-control.components-number-control.components-range-control__number{margin-left:0!important;margin-right:16px}.components-panel{border:0!important}.components-panel__body:first-child{border-top:0!important}.components-panel__body:last-child{border-bottom:0!important}.components-textarea-control__input{display:block;margin:.5rem 0;width:100%}.tippy-box[data-theme~=cloudinary]{background-color:rgba(0,0,0,.8);color:#fff;font-size:.8em}table .cld-input{margin-bottom:0}tr .file-size.small{color:#a8a8a8;font-size:.8em;font-style:italic;letter-spacing:.4px;margin-left:6px;margin-right:6px}td.tree{color:#212529;line-height:1.5;padding-top:0;position:relative}td.tree ul.striped>:nth-child(odd){background-color:#f6f7f7}td.tree ul.striped>:nth-child(2n){background-color:#fff}td.tree .success{color:#20b832}td+td.tree{padding-top:0}td.tree .cld-input{margin-bottom:0;vertical-align:text-bottom}td.tree .cld-search{font-size:.9em;height:26px;margin-right:12px;min-height:20px;padding:4px 6px;vertical-align:initial;width:300px}td.tree .file-size{color:#a8a8a8;font-size:.8em;font-style:italic;letter-spacing:.4px;margin-left:6px}td.tree .fa-folder,td.tree .fa-folder-open{color:#007bff}td.tree .fa-html5{color:#f21f10}td.tree ul{list-style:none;margin:0;padding-left:5px}td.tree ul li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:0;padding-bottom:5px;padding-left:25px;padding-top:5px;position:relative}td.tree ul li:before{height:1px;margin:auto;top:14px;width:20px}td.tree ul li:after,td.tree ul li:before{background-color:#666;content:"";left:0;position:absolute}td.tree ul li:after{bottom:0;height:100%;top:0;width:1px}td.tree ul li:after:nth-of-type(odd){background-color:#666}td.tree ul li:last-child:after{height:14px}td.tree ul a{cursor:pointer}td.tree ul a:hover{text-decoration:none} \ No newline at end of file diff --git a/css/fonts/cloudinary.0bf34bba6c50ef8a00885c94fc39bb81.ttf b/css/fonts/cloudinary.0bf34bba6c50ef8a00885c94fc39bb81.ttf deleted file mode 100644 index 166b4542d..000000000 Binary files a/css/fonts/cloudinary.0bf34bba6c50ef8a00885c94fc39bb81.ttf and /dev/null differ diff --git a/css/fonts/cloudinary.130b5d626b226659422cfb0e20ce30c1.woff b/css/fonts/cloudinary.130b5d626b226659422cfb0e20ce30c1.woff deleted file mode 100644 index 2e398fcd5..000000000 Binary files a/css/fonts/cloudinary.130b5d626b226659422cfb0e20ce30c1.woff and /dev/null differ diff --git a/css/fonts/cloudinary.7b8dc57b5dd3c69880043780bb9bb133.eot b/css/fonts/cloudinary.7b8dc57b5dd3c69880043780bb9bb133.eot deleted file mode 100644 index b5d83bc15..000000000 Binary files a/css/fonts/cloudinary.7b8dc57b5dd3c69880043780bb9bb133.eot and /dev/null differ diff --git a/css/gallery-rtl.css b/css/gallery-rtl.css deleted file mode 100644 index 5ada5f147..000000000 --- a/css/gallery-rtl.css +++ /dev/null @@ -1 +0,0 @@ -:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-20:#005a87}.components-animate__appear{animation:components-animate__appear-animation .1s cubic-bezier(0,0,.2,1) 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-animate__appear{animation-duration:1ms}}.components-animate__appear.is-from-top,.components-animate__appear.is-from-top.is-from-left{transform-origin:top right}.components-animate__appear.is-from-top.is-from-right{transform-origin:top left}.components-animate__appear.is-from-bottom,.components-animate__appear.is-from-bottom.is-from-left{transform-origin:bottom right}.components-animate__appear.is-from-bottom.is-from-right{transform-origin:bottom left}@keyframes components-animate__appear-animation{0%{transform:translateY(-2em) scaleY(0) scaleX(0)}to{transform:translateY(0) scaleY(1) scaleX(1)}}.components-animate__slide-in{animation:components-animate__slide-in-animation .1s cubic-bezier(0,0,.2,1);animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-animate__slide-in{animation-duration:1ms}}.components-animate__slide-in.is-from-left{transform:translateX(-100%)}.components-animate__slide-in.is-from-right{transform:translateX(100%)}@keyframes components-animate__slide-in-animation{to{transform:translateX(0)}}.components-animate__loading{animation:components-animate__loading 1.6s ease-in-out infinite}@keyframes components-animate__loading{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.components-autocomplete__popover .components-popover__content>div{padding:16px}.components-autocomplete__result.components-button{display:flex;height:auto;min-height:36px;text-align:right;width:100%}.components-autocomplete__result.components-button.is-selected{box-shadow:0 0 0 2px #007cba;box-shadow:0 0 0 2px var(--wp-admin-theme-color)}.components-button-group{display:inline-block}.components-button-group .components-button{border-radius:0;display:inline-flex;color:#1e1e1e;box-shadow:inset 0 0 0 1px #1e1e1e}.components-button-group .components-button+.components-button{margin-right:-1px}.components-button-group .components-button:first-child{border-radius:0 2px 2px 0}.components-button-group .components-button:last-child{border-radius:2px 0 0 2px}.components-button-group .components-button.is-primary,.components-button-group .components-button:focus{position:relative;z-index:1}.components-button-group .components-button.is-primary{box-shadow:inset 0 0 0 1px #1e1e1e}.components-button{display:inline-flex;text-decoration:none;font-size:13px;margin:0;border:0;cursor:pointer;-webkit-appearance:none;background:none;transition:box-shadow .1s linear;height:36px;align-items:center;box-sizing:border-box;padding:6px 12px;border-radius:2px;color:#1e1e1e}@media (prefers-reduced-motion:reduce){.components-button{transition-duration:0s}}.components-button:hover,.components-button[aria-expanded=true]{color:#007cba;color:var(--wp-admin-theme-color)}.components-button[aria-disabled=true]:hover{color:initial}.components-button:focus:not(:disabled){box-shadow:0 0 0 1.5px #007cba;box-shadow:0 0 0 1.5px var(--wp-admin-theme-color);outline:1px solid transparent}.components-button.is-primary{white-space:nowrap;background:#007cba;background:var(--wp-admin-theme-color);color:#fff;text-decoration:none;text-shadow:none}.components-button.is-primary:hover:not(:disabled){background:#006ba1;background:var(--wp-admin-theme-color-darker-10);color:#fff}.components-button.is-primary:active:not(:disabled){background:#005a87;background:var(--wp-admin-theme-color-darker-20);border-color:#005a87;border-color:var(--wp-admin-theme-color-darker-20);color:#fff}.components-button.is-primary:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 1.5px #007cba;box-shadow:inset 0 0 0 1px #fff,0 0 0 1.5px var(--wp-admin-theme-color);outline:1px solid transparent}.components-button.is-primary:disabled,.components-button.is-primary:disabled:active:enabled,.components-button.is-primary[aria-disabled=true],.components-button.is-primary[aria-disabled=true]:active:enabled,.components-button.is-primary[aria-disabled=true]:enabled{color:hsla(0,0%,100%,.4);background:#007cba;background:var(--wp-admin-theme-color);border-color:#007cba;border-color:var(--wp-admin-theme-color);opacity:1}.components-button.is-primary:disabled:active:enabled:focus:enabled,.components-button.is-primary:disabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:active:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:focus:enabled{box-shadow:0 0 0 1px #fff,0 0 0 3px #007cba;box-shadow:0 0 0 1px #fff,0 0 0 3px var(--wp-admin-theme-color)}.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled=true]{color:#fff;background-size:100px 100%;background-image:linear-gradient(45deg,#007cba 28%,#005a87 0,#005a87 72%,#007cba 0);background-image:linear-gradient(45deg,var(--wp-admin-theme-color) 28%,var(--wp-admin-theme-color-darker-20) 0,var(--wp-admin-theme-color-darker-20) 72%,var(--wp-admin-theme-color) 0);border-color:#007cba;border-color:var(--wp-admin-theme-color)}.components-button.is-secondary:active:not(:disabled),.components-button.is-tertiary:active:not(:disabled){background:#ddd;color:#006ba1;color:var(--wp-admin-theme-color-darker-10);box-shadow:none}.components-button.is-secondary:hover:not(:disabled),.components-button.is-tertiary:hover:not(:disabled){color:#006ba1;color:var(--wp-admin-theme-color-darker-10);box-shadow:inset 0 0 0 1px #006ba1;box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color-darker-10)}.components-button.is-secondary:disabled,.components-button.is-secondary[aria-disabled=true],.components-button.is-secondary[aria-disabled=true]:hover,.components-button.is-tertiary:disabled,.components-button.is-tertiary[aria-disabled=true],.components-button.is-tertiary[aria-disabled=true]:hover{color:#828282;background:#eaeaea;transform:none;opacity:1;box-shadow:none}.components-button.is-secondary{box-shadow:inset 0 0 0 1px #007cba;box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);outline:1px solid transparent}.components-button.is-secondary,.components-button.is-tertiary{white-space:nowrap;color:#007cba;color:var(--wp-admin-theme-color);background:transparent}.components-button.is-tertiary{padding:6px;outline:1px dotted transparent}.components-button.is-tertiary .dashicon{display:inline-block;flex:0 0 auto}.components-button.is-destructive{color:#cc1818;box-shadow:inset 0 0 0 1px #cc1818}.components-button.is-destructive:hover:not(:disabled){color:#710d0d;box-shadow:inset 0 0 0 1px #710d0d}.components-button.is-destructive:focus:not(:disabled){color:#007cba;color:var(--wp-admin-theme-color)}.components-button.is-destructive:active:not(:disabled){background:#ccc}.components-button.is-link{margin:0;padding:0;box-shadow:none;border:0;border-radius:0;background:none;outline:none;text-align:right;color:#0073aa;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;height:auto}@media (prefers-reduced-motion:reduce){.components-button.is-link{transition-duration:0s}}.components-button.is-link:active:not(:disabled),.components-button.is-link:hover:not(:disabled){color:#00a0d2;box-shadow:none}.components-button.is-link:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 1.5px 1px rgba(30,140,190,.8)}.components-button.is-link.is-destructive{color:#cc1818}.components-button.is-link.is-destructive:active:not(:disabled),.components-button.is-link.is-destructive:hover:not(:disabled){color:#710d0d;background:none}.components-button.is-link.is-destructive:focus:not(:disabled){color:#007cba;color:var(--wp-admin-theme-color)}.components-button:not([aria-disabled=true]):active{color:inherit}.components-button:disabled,.components-button[aria-disabled=true]{cursor:default;opacity:.3}.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{animation:components-button__busy-animation 2.5s linear infinite;opacity:1;background-size:100px 100%;background-image:linear-gradient(45deg,#fafafa 28%,#e0e0e0 0,#e0e0e0 72%,#fafafa 0)}.components-button.is-small{height:24px;line-height:22px;padding:0 8px;font-size:11px}.components-button.is-small.has-icon:not(.has-text){padding:0 8px;width:24px}.components-button.has-icon{padding:6px;min-width:36px;justify-content:center}.components-button.has-icon .dashicon{display:inline-block;flex:0 0 auto}.components-button.has-icon.has-text{justify-content:left}.components-button.has-icon.has-text svg{margin-left:8px}.components-button.is-pressed{color:#fff;background:#1e1e1e}.components-button.is-pressed:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 1.5px #007cba;box-shadow:inset 0 0 0 1px #fff,0 0 0 1.5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-button.is-pressed:hover:not(:disabled){color:#fff;background:#1e1e1e}.components-button svg{fill:currentColor;outline:none}.components-button .components-visually-hidden{height:auto}@keyframes components-button__busy-animation{0%{background-position:200px 0}}.components-checkbox-control__input[type=checkbox]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;font-size:16px;line-height:normal;border:1px solid #1e1e1e;transition:none;border-radius:2px;background:#fff;color:#1e1e1e;clear:none;cursor:pointer;display:inline-block;line-height:0;margin:0 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:top;width:24px;height:24px;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:border-color .1s ease-in-out}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{font-size:13px;line-height:normal}}.components-checkbox-control__input[type=checkbox]:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{color:rgba(30,30,30,.62)}.components-checkbox-control__input[type=checkbox]::-moz-placeholder{opacity:1;color:rgba(30,30,30,.62)}.components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{color:rgba(30,30,30,.62)}.is-dark-theme .components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{color:hsla(0,0%,100%,.65)}.is-dark-theme .components-checkbox-control__input[type=checkbox]::-moz-placeholder{opacity:1;color:hsla(0,0%,100%,.65)}.is-dark-theme .components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{color:hsla(0,0%,100%,.65)}.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{margin:-3px -5px;color:#fff}@media (min-width:782px){.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{margin:-4px -5px 0 0}}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]{background:#007cba;background:var(--wp-admin-theme-color);border-color:#007cba;border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{content:"\f460";float:right;display:inline-block;vertical-align:middle;width:16px;font:normal 30px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (min-width:782px){.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{float:none;font-size:21px}}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{height:20px;width:20px}}@media (prefers-reduced-motion:reduce){.components-checkbox-control__input[type=checkbox]{transition-duration:0s}}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 3.5px #007cba;box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-checkbox-control__input[type=checkbox]:checked{background:#007cba;background:var(--wp-admin-theme-color);border-color:#007cba;border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before{content:none}.components-checkbox-control__input-container{position:relative;display:inline-block;margin-left:12px;vertical-align:middle;width:24px;height:24px}@media (min-width:600px){.components-checkbox-control__input-container{width:20px;height:20px}}svg.components-checkbox-control__checked{fill:#fff;cursor:pointer;position:absolute;right:0;top:0;width:24px;height:24px;-webkit-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}@media (min-width:600px){svg.components-checkbox-control__checked{right:-2px;top:-2px}}.components-circular-option-picker{display:inline-block;width:100%;margin-left:-10px}.components-circular-option-picker .components-circular-option-picker__custom-clear-wrapper{display:flex;justify-content:flex-end}.components-circular-option-picker .components-circular-option-picker__swatches{margin-left:-16px}.components-circular-option-picker__option-wrapper{display:inline-block;height:28px;width:28px;margin-left:16px;margin-bottom:12px;vertical-align:top;transform:scale(1);transition:transform .1s ease}@media (prefers-reduced-motion:reduce){.components-circular-option-picker__option-wrapper{transition-duration:0s}}.components-circular-option-picker__option-wrapper:hover{transform:scale(1.2)}.components-circular-option-picker__option-wrapper>div{height:100%;width:100%}.components-circular-option-picker__option-wrapper:before{content:"";position:absolute;top:1px;right:1px;bottom:1px;left:1px;border-radius:50%;z-index:-1;background:url("data:image/svg+xml;charset=utf-8,%3Csvg width='28' height='28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 8V6H4v2h2zm2 0V6h2v2H8zm2 8H8v-2h2v2zm2 0v-2h2v2h-2zm0 2v-2h-2v2H8v2h2v-2h2zm2 0v2h-2v-2h2zm2 0h-2v-2h2v2z' fill='%23555D65'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M18 18h2v-2h-2v-2h2v-2h-2v-2h2V8h-2v2h-2V8h-2v2h2v2h-2v2h2v2h2v2zm-2-4v-2h2v2h-2z' fill='%23555D65'/%3E%3Cpath d='M18 18v2h-2v-2h2z' fill='%23555D65'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8 10V8H6v2H4v2h2v2H4v2h2v2H4v2h2v2H4v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2v2h-2V4h-2v2h-2V4h-2v2h-2V4h-2v2h2v2h-2v2H8zm0 2v-2H6v2h2zm2 0v-2h2v2h-2zm0 2v-2H8v2H6v2h2v2H6v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h-2v2h-2V6h-2v2h-2v2h2v2h-2v2h-2z' fill='%23555D65'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M4 0H2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2H8V0H6v2H4V0zm0 4V2H2v2h2zm2 0V2h2v2H6zm0 2V4H4v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2H8v2H6z' fill='%23555D65'/%3E%3C/svg%3E")}.components-circular-option-picker__option{display:inline-block;vertical-align:top;height:100%;width:100%;border:none;border-radius:50%;background:transparent;box-shadow:inset 0 0 0 14px;transition:box-shadow .1s ease;cursor:pointer}@media (prefers-reduced-motion:reduce){.components-circular-option-picker__option{transition-duration:0s}}.components-circular-option-picker__option:hover{box-shadow:inset 0 0 0 14px!important}.components-circular-option-picker__option.is-pressed{box-shadow:inset 0 0 0 4px;position:relative;z-index:1;overflow:visible}.components-circular-option-picker__option.is-pressed+svg{position:absolute;right:2px;top:2px;border-radius:50%;z-index:2;pointer-events:none}.components-circular-option-picker__option:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.2);border:1px solid transparent}.components-circular-option-picker__option:focus:after{content:"";border:2px solid #757575;width:32px;height:32px;position:absolute;top:-2px;right:-2px;border-radius:50%;box-shadow:inset 0 0 0 2px #fff}.components-circular-option-picker__option.components-button:focus{background-color:transparent;box-shadow:inset 0 0 0 14px;outline:none}.components-circular-option-picker__button-action .components-circular-option-picker__option{color:#fff;background:#fff}.components-circular-option-picker__dropdown-link-action{margin-left:16px}.components-circular-option-picker__dropdown-link-action .components-button{line-height:22px}.components-color-edit__color-option-main-area{display:flex;align-items:center}.components-color-edit__color-option-main-area .components-circular-option-picker__option-wrapper{margin:8px}.components-color-edit__color-option.is-hover{background:#e0e0e0}.components-color-edit__cancel-button{float:left}.components-color-edit__color-option-color-name{width:100%}.components-color-edit__label-and-insert-container{display:flex;align-items:center;justify-content:space-between}.components-color-edit__insert-button{margin-top:-8px}.components-color-edit__hidden-control{position:relative;right:-9999px}.components-color-edit__color-option-color-name-input .components-base-control__field{margin-bottom:0;margin-left:8px}.components-color-edit__slug-input{margin-right:8px}.component-color-indicator{width:25px;height:16px;margin-right:.8rem;border:1px solid #dadada;display:inline-block}.component-color-indicator+.component-color-indicator{margin-right:.5rem}.components-color-picker{width:100%}.components-color-picker *{box-sizing:border-box}.components-color-picker__saturation{width:100%;padding-bottom:55%;position:relative}.components-color-picker__body{padding:16px 16px 12px}.components-color-picker__controls{display:flex}.components-color-picker__alpha-pointer,.components-color-picker__hue-pointer,.components-color-picker__saturation-pointer{padding:0;position:absolute;cursor:pointer;box-shadow:none;border:none}.components-color-picker__swatch{margin-left:8px;width:32px;height:32px;border-radius:50%;position:relative;overflow:hidden;background-image:linear-gradient(-45deg,#ddd 25%,transparent 0),linear-gradient(45deg,#ddd 25%,transparent 0),linear-gradient(-45deg,transparent 75%,#ddd 0),linear-gradient(45deg,transparent 75%,#ddd 0);background-size:10px 10px;background-position:100% 0,100% 5px,5px -5px,-5px 0}.is-alpha-disabled .components-color-picker__swatch{width:12px;height:12px;margin-top:0}.components-color-picker__active{border-radius:50%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);z-index:2}.components-color-picker__active,.components-color-picker__saturation-black,.components-color-picker__saturation-color,.components-color-picker__saturation-white{position:absolute;top:0;right:0;left:0;bottom:0}.components-color-picker__saturation-color{overflow:visible}.components-color-picker__saturation-white{background:linear-gradient(-90deg,#fff,hsla(0,0%,100%,0))}.components-color-picker__saturation-black{background:linear-gradient(0deg,#000,transparent)}.components-button.components-color-picker__saturation-pointer{width:14px;height:14px;padding:0;border-radius:50%;background-color:transparent;transform:translate(50%,-50%);box-shadow:0 0 0 1px #fff,inset 0 0 0 1px #000,0 0 0 2px #000}.components-button.components-color-picker__saturation-pointer:focus:not(:disabled){box-shadow:0 0 0 2px #fff,inset 0 0 0 1px #000,0 0 0 3px #000}.components-color-picker__toggles{flex:1}.components-color-picker__alpha{background-image:linear-gradient(-45deg,#ddd 25%,transparent 0),linear-gradient(45deg,#ddd 25%,transparent 0),linear-gradient(-45deg,transparent 75%,#ddd 0),linear-gradient(45deg,transparent 75%,#ddd 0);background-size:10px 10px;background-position:100% 0,100% 5px,5px -5px,-5px 0}.components-color-picker__alpha-gradient,.components-color-picker__hue-gradient{position:absolute;top:0;right:0;left:0;bottom:0}.components-color-picker__alpha,.components-color-picker__hue{height:12px;position:relative}.is-alpha-enabled .components-color-picker__hue{margin-bottom:8px}.components-color-picker__alpha-bar,.components-color-picker__hue-bar{position:relative;margin:0 3px;height:100%;padding:0 2px}.components-color-picker__hue-gradient{background:linear-gradient(-90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.components-color-picker__alpha-pointer,.components-color-picker__hue-pointer{right:0;width:14px;height:14px;border-radius:50%;box-shadow:0 1px 4px 0 rgba(0,0,0,.37);background:#fff;transform:translate(7px,-1px)}.components-color-picker__hue-pointer,.components-color-picker__saturation-pointer{transition:box-shadow .1s linear}@media (prefers-reduced-motion:reduce){.components-color-picker__hue-pointer,.components-color-picker__saturation-pointer{transition-duration:0s}}.components-color-picker__saturation-pointer:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #007cba,0 0 5px 0 #007cba,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color),0 0 5px 0 var(--wp-admin-theme-color),inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4)}.components-color-picker__alpha-pointer:focus,.components-color-picker__hue-pointer:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 2px #007cba,0 0 3px 0 #007cba;box-shadow:0 0 0 2px var(--wp-admin-theme-color),0 0 3px 0 var(--wp-admin-theme-color);outline:2px solid transparent;outline-offset:-2px}.components-color-picker__inputs-wrapper{margin:0 -4px;padding-top:16px;display:flex;align-items:flex-end;min-width:255px}.components-color-picker__inputs-wrapper fieldset{flex:1;border:none;margin:0;padding:0}.components-color-picker__inputs-wrapper .components-color-picker__inputs-fields .components-text-control__input[type=number]{padding:6px 3px;margin:0}.components-color-picker__inputs-field{width:100%}.components-color-picker__inputs-fields{display:flex;direction:rtl;flex-grow:1;margin-left:4px}.components-color-picker__inputs-fields .components-base-control+.components-base-control{margin-top:0}.components-color-picker__inputs-fields .components-base-control__field{margin:0 2px}.components-color-picker__inputs-toggle{height:30px;padding:0 5px}.components-combobox-control{width:100%}input.components-combobox-control__input[type=text]{width:100%;border:none;box-shadow:none;padding:2px;margin:0;line-height:inherit;min-height:auto}input.components-combobox-control__input[type=text]:focus{outline:none;box-shadow:none}.components-combobox-control__suggestions-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid #757575;font-size:16px;line-height:normal;display:flex;flex-wrap:wrap;align-items:flex-start;width:100%;margin:0 0 8px;padding:4px}@media (prefers-reduced-motion:reduce){.components-combobox-control__suggestions-container{transition-duration:0s}}@media (min-width:600px){.components-combobox-control__suggestions-container{font-size:13px;line-height:normal}}.components-combobox-control__suggestions-container:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-combobox-control__suggestions-container::-webkit-input-placeholder{color:rgba(30,30,30,.62)}.components-combobox-control__suggestions-container::-moz-placeholder{opacity:1;color:rgba(30,30,30,.62)}.components-combobox-control__suggestions-container:-ms-input-placeholder{color:rgba(30,30,30,.62)}.is-dark-theme .components-combobox-control__suggestions-container::-webkit-input-placeholder{color:hsla(0,0%,100%,.65)}.is-dark-theme .components-combobox-control__suggestions-container::-moz-placeholder{opacity:1;color:hsla(0,0%,100%,.65)}.is-dark-theme .components-combobox-control__suggestions-container:-ms-input-placeholder{color:hsla(0,0%,100%,.65)}.components-combobox-control__suggestions-container:focus-within{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-combobox-control__reset.components-button{display:flex;height:24px;min-width:24px;padding:0}.components-custom-gradient-picker__gradient-bar:not(.has-gradient){opacity:.4}.components-custom-gradient-picker__gradient-bar{margin-top:12px;width:100%;height:36px;border-radius:36px;margin-bottom:12px;padding-right:6px;padding-left:30px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__markers-container{position:relative}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point{border-radius:50%;background:#fff;padding:2px;top:6px;min-width:24px;width:24px;height:24px;position:relative;color:#1e1e1e}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point svg{height:100%;width:100%}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button{border:2px solid transparent;box-shadow:inset 0 0 0 1.5px #fff;border-radius:50%;height:24px;width:24px;padding:0;position:absolute;top:6px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button.is-active,.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #1e1e1e}.components-custom-gradient-picker__color-picker-popover .components-custom-gradient-picker__remove-control-point{margin-right:auto;margin-left:auto;display:block;margin-bottom:8px}.components-custom-gradient-picker__inserter{width:100%}.components-custom-gradient-picker__liner-gradient-indicator{display:inline-block;flex:0 auto;width:20px;height:20px}.components-custom-gradient-picker .components-custom-gradient-picker__ui-line{margin-bottom:16px}.components-custom-gradient-picker .components-custom-gradient-picker__ui-line .components-base-control.components-angle-picker,.components-custom-gradient-picker .components-custom-gradient-picker__ui-line .components-base-control.components-custom-gradient-picker__type-picker{margin-bottom:0}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar{border:none}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar>div+div{margin-right:1px}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar button.is-pressed>svg{background:#fff;border:1px solid #949494;border-radius:2px}.components-custom-select-control{position:relative}.components-custom-select-control__label{display:block;margin-bottom:8px}.components-custom-select-control__button{border:1px solid #757575;border-radius:2px;min-height:30px;min-width:130px;position:relative;text-align:right}.components-custom-select-control__button.components-custom-select-control__button{padding-left:24px}.components-custom-select-control__button:focus:not(:disabled){border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-custom-select-control__button .components-custom-select-control__button-icon{height:100%;padding:0;position:absolute;left:0;top:0}.components-custom-select-control__menu{background-color:#fff;max-height:400px;min-width:100%;overflow:auto;padding:0;position:absolute;z-index:1000000}.components-custom-select-control__menu:focus{border:1px solid #1e1e1e;border-radius:2px;outline:none;transition:none}.components-custom-select-control__item{align-items:center;display:flex;list-style-type:none;padding:10px 25px 10px 5px;cursor:default}.components-custom-select-control__item.is-highlighted{background:#ddd}.components-custom-select-control__item-icon{margin-right:-20px;margin-left:0}.PresetDateRangePicker_panel{padding:0 22px 11px}.PresetDateRangePicker_button{position:relative;height:100%;text-align:center;background:100% 0;border:2px solid #00a699;color:#00a699;padding:4px 12px;margin-left:8px;font:inherit;font-weight:700;line-height:normal;overflow:visible;box-sizing:border-box;cursor:pointer}.PresetDateRangePicker_button:active{outline:0}.PresetDateRangePicker_button__selected{color:#fff;background:#00a699}.SingleDatePickerInput{display:inline-block;background-color:#fff}.SingleDatePickerInput__withBorder{border-radius:2px;border:1px solid #dbdbdb}.SingleDatePickerInput__rtl{direction:ltr}.SingleDatePickerInput__disabled{background-color:#f2f2f2}.SingleDatePickerInput__block{display:block}.SingleDatePickerInput__showClearDate{padding-left:30px}.SingleDatePickerInput_clearDate{background:100% 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;padding:10px;margin:0 5px 0 10px;position:absolute;left:0;top:50%;transform:translateY(-50%)}.SingleDatePickerInput_clearDate__default:focus,.SingleDatePickerInput_clearDate__default:hover{background:#dbdbdb;border-radius:50%}.SingleDatePickerInput_clearDate__small{padding:6px}.SingleDatePickerInput_clearDate__hide{visibility:hidden}.SingleDatePickerInput_clearDate_svg{fill:#82888a;height:12px;width:15px;vertical-align:middle}.SingleDatePickerInput_clearDate_svg__small{height:9px}.SingleDatePickerInput_calendarIcon{background:100% 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;display:inline-block;vertical-align:middle;padding:10px;margin:0 10px 0 5px}.SingleDatePickerInput_calendarIcon_svg{fill:#82888a;height:15px;width:14px;vertical-align:middle}.SingleDatePicker{position:relative;display:inline-block}.SingleDatePicker__block{display:block}.SingleDatePicker_picker{z-index:1;background-color:#fff;position:absolute}.SingleDatePicker_picker__rtl{direction:ltr}.SingleDatePicker_picker__directionLeft{right:0}.SingleDatePicker_picker__directionRight{left:0}.SingleDatePicker_picker__portal{background-color:rgba(0,0,0,.3);position:fixed;top:0;right:0;height:100%;width:100%}.SingleDatePicker_picker__fullScreenPortal{background-color:#fff}.SingleDatePicker_closeButton{background:100% 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;position:absolute;top:0;left:0;padding:15px;z-index:2}.SingleDatePicker_closeButton:focus,.SingleDatePicker_closeButton:hover{color:#b0b3b4;text-decoration:none}.SingleDatePicker_closeButton_svg{height:15px;width:15px;fill:#cacccd}.DayPickerKeyboardShortcuts_buttonReset{background:100% 0;border:0;border-radius:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;cursor:pointer;font-size:14px}.DayPickerKeyboardShortcuts_buttonReset:active{outline:0}.DayPickerKeyboardShortcuts_show{width:22px;position:absolute;z-index:2}.DayPickerKeyboardShortcuts_show__bottomRight{border-top:26px solid transparent;border-left:33px solid #00a699;bottom:0;left:0}.DayPickerKeyboardShortcuts_show__bottomRight:hover{border-left:33px solid #008489}.DayPickerKeyboardShortcuts_show__topRight{border-bottom:26px solid transparent;border-left:33px solid #00a699;top:0;left:0}.DayPickerKeyboardShortcuts_show__topRight:hover{border-left:33px solid #008489}.DayPickerKeyboardShortcuts_show__topLeft{border-bottom:26px solid transparent;border-right:33px solid #00a699;top:0;right:0}.DayPickerKeyboardShortcuts_show__topLeft:hover{border-right:33px solid #008489}.DayPickerKeyboardShortcuts_showSpan{color:#fff;position:absolute}.DayPickerKeyboardShortcuts_showSpan__bottomRight{bottom:0;left:-28px}.DayPickerKeyboardShortcuts_showSpan__topRight{top:1px;left:-28px}.DayPickerKeyboardShortcuts_showSpan__topLeft{top:1px;right:-28px}.DayPickerKeyboardShortcuts_panel{overflow:auto;background:#fff;border:1px solid #dbdbdb;border-radius:2px;position:absolute;top:0;bottom:0;left:0;right:0;z-index:2;padding:22px;margin:33px}.DayPickerKeyboardShortcuts_title{font-size:16px;font-weight:700;margin:0}.DayPickerKeyboardShortcuts_list{list-style:none;padding:0;font-size:14px}.DayPickerKeyboardShortcuts_close{position:absolute;left:22px;top:22px;z-index:2}.DayPickerKeyboardShortcuts_close:active{outline:0}.DayPickerKeyboardShortcuts_closeSvg{height:15px;width:15px;fill:#cacccd}.DayPickerKeyboardShortcuts_closeSvg:focus,.DayPickerKeyboardShortcuts_closeSvg:hover{fill:#82888a}.CalendarDay{box-sizing:border-box;cursor:pointer;font-size:14px;text-align:center}.CalendarDay:active{outline:0}.CalendarDay__defaultCursor{cursor:default}.CalendarDay__default{border:1px solid #e4e7e7;color:#484848;background:#fff}.CalendarDay__default:hover{background:#e4e7e7;border:1px double #e4e7e7;color:inherit}.CalendarDay__hovered_offset{background:#f4f5f5;border:1px double #e4e7e7;color:inherit}.CalendarDay__outside{border:0;background:#fff;color:#484848}.CalendarDay__outside:hover{border:0}.CalendarDay__blocked_minimum_nights{background:#fff;border:1px solid #eceeee;color:#cacccd}.CalendarDay__blocked_minimum_nights:active,.CalendarDay__blocked_minimum_nights:hover{background:#fff;color:#cacccd}.CalendarDay__highlighted_calendar{background:#ffe8bc;color:#484848}.CalendarDay__highlighted_calendar:active,.CalendarDay__highlighted_calendar:hover{background:#ffce71;color:#484848}.CalendarDay__selected_span{background:#66e2da;border:1px solid #33dacd;color:#fff}.CalendarDay__selected_span:active,.CalendarDay__selected_span:hover{background:#33dacd;border:1px solid #33dacd;color:#fff}.CalendarDay__last_in_range{border-left:#00a699}.CalendarDay__selected,.CalendarDay__selected:active,.CalendarDay__selected:hover{background:#00a699;border:1px solid #00a699;color:#fff}.CalendarDay__hovered_span,.CalendarDay__hovered_span:hover{background:#b2f1ec;border:1px solid #80e8e0;color:#007a87}.CalendarDay__hovered_span:active{background:#80e8e0;border:1px solid #80e8e0;color:#007a87}.CalendarDay__blocked_calendar,.CalendarDay__blocked_calendar:active,.CalendarDay__blocked_calendar:hover{background:#cacccd;border:1px solid #cacccd;color:#82888a}.CalendarDay__blocked_out_of_range,.CalendarDay__blocked_out_of_range:active,.CalendarDay__blocked_out_of_range:hover{background:#fff;border:1px solid #e4e7e7;color:#cacccd}.CalendarMonth{background:#fff;text-align:center;vertical-align:top;-webkit-user-select:none;-ms-user-select:none;user-select:none}.CalendarMonth_table{border-collapse:collapse;border-spacing:0}.CalendarMonth_verticalSpacing{border-collapse:separate}.CalendarMonth_caption{color:#484848;font-size:18px;text-align:center;padding-top:22px;padding-bottom:37px;caption-side:top}.CalendarMonth_caption__verticalScrollable{padding-top:12px;padding-bottom:7px}.CalendarMonthGrid{background:#fff;text-align:right;z-index:0}.CalendarMonthGrid__animating{z-index:1}.CalendarMonthGrid__horizontal{position:absolute;right:9px}.CalendarMonthGrid__vertical{margin:0 auto}.CalendarMonthGrid__vertical_scrollable{margin:0 auto;overflow-y:scroll}.CalendarMonthGrid_month__horizontal{display:inline-block;vertical-align:top;min-height:100%}.CalendarMonthGrid_month__hideForAnimation{position:absolute;z-index:-1;opacity:0;pointer-events:none}.CalendarMonthGrid_month__hidden{visibility:hidden}.DayPickerNavigation{position:relative;z-index:2}.DayPickerNavigation__horizontal{height:0}.DayPickerNavigation__verticalDefault{position:absolute;width:100%;height:52px;bottom:0;right:0}.DayPickerNavigation__verticalScrollableDefault{position:relative}.DayPickerNavigation_button{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;border:0;padding:0;margin:0}.DayPickerNavigation_button__default{border:1px solid #e4e7e7;background-color:#fff;color:#757575}.DayPickerNavigation_button__default:focus,.DayPickerNavigation_button__default:hover{border:1px solid #c4c4c4}.DayPickerNavigation_button__default:active{background:#f2f2f2}.DayPickerNavigation_button__horizontalDefault{position:absolute;top:18px;line-height:.78;border-radius:3px;padding:6px 9px}.DayPickerNavigation_leftButton__horizontalDefault{right:22px}.DayPickerNavigation_rightButton__horizontalDefault{left:22px}.DayPickerNavigation_button__verticalDefault{padding:5px;background:#fff;box-shadow:0 0 5px 2px rgba(0,0,0,.1);position:relative;display:inline-block;height:100%;width:50%}.DayPickerNavigation_nextButton__verticalDefault{border-right:0}.DayPickerNavigation_nextButton__verticalScrollableDefault{width:100%}.DayPickerNavigation_svg__horizontal{height:19px;width:19px;fill:#82888a;display:block}.DayPickerNavigation_svg__vertical{height:42px;width:42px;fill:#484848;display:block}.DayPicker{position:relative;text-align:right}.DayPicker,.DayPicker__horizontal{background:#fff}.DayPicker__verticalScrollable{height:100%}.DayPicker__hidden{visibility:hidden}.DayPicker__withBorder{box-shadow:0 2px 6px rgba(0,0,0,.05),0 0 0 1px rgba(0,0,0,.07);border-radius:3px}.DayPicker_portal__horizontal{box-shadow:none;position:absolute;right:50%;top:50%}.DayPicker_portal__vertical{position:static}.DayPicker_focusRegion{outline:0}.DayPicker_calendarInfo__horizontal,.DayPicker_wrapper__horizontal{display:inline-block;vertical-align:top}.DayPicker_weekHeaders{position:relative}.DayPicker_weekHeaders__horizontal{margin-right:9px}.DayPicker_weekHeader{color:#757575;position:absolute;top:62px;z-index:2;text-align:right}.DayPicker_weekHeader__vertical{right:50%}.DayPicker_weekHeader__verticalScrollable{top:0;display:table-row;border-bottom:1px solid #dbdbdb;background:#fff;margin-right:0;right:0;width:100%;text-align:center}.DayPicker_weekHeader_ul{list-style:none;margin:1px 0;padding-right:0;padding-left:0;font-size:14px}.DayPicker_weekHeader_li{display:inline-block;text-align:center}.DayPicker_transitionContainer{position:relative;overflow:hidden;border-radius:3px}.DayPicker_transitionContainer__horizontal{transition:height .2s ease-in-out}.DayPicker_transitionContainer__vertical{width:100%}.DayPicker_transitionContainer__verticalScrollable{padding-top:20px;height:100%;position:absolute;top:0;bottom:0;left:0;right:0;overflow-y:scroll}.DateInput{margin:0;padding:0;background:#fff;position:relative;display:inline-block;width:130px;vertical-align:middle}.DateInput__small{width:97px}.DateInput__block{width:100%}.DateInput__disabled{background:#f2f2f2;color:#dbdbdb}.DateInput_input{font-weight:200;font-size:19px;line-height:24px;color:#484848;background-color:#fff;width:100%;padding:11px 11px 9px;border:0;border-bottom:2px solid transparent;border-radius:0}.DateInput_input__small{font-size:15px;line-height:18px;letter-spacing:.2px;padding:7px 7px 5px}.DateInput_input__regular{font-weight:auto}.DateInput_input__readOnly{-webkit-user-select:none;-ms-user-select:none;user-select:none}.DateInput_input__focused{outline:0;background:#fff;border:0;border-bottom:2px solid #008489}.DateInput_input__disabled{background:#f2f2f2;font-style:italic}.DateInput_screenReaderMessage{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.DateInput_fang{position:absolute;width:20px;height:10px;right:22px;z-index:2}.DateInput_fangShape{fill:#fff}.DateInput_fangStroke{stroke:#dbdbdb;fill:transparent}.DateRangePickerInput{background-color:#fff;display:inline-block}.DateRangePickerInput__disabled{background:#f2f2f2}.DateRangePickerInput__withBorder{border-radius:2px;border:1px solid #dbdbdb}.DateRangePickerInput__rtl{direction:ltr}.DateRangePickerInput__block{display:block}.DateRangePickerInput__showClearDates{padding-left:30px}.DateRangePickerInput_arrow{display:inline-block;vertical-align:middle;color:#484848}.DateRangePickerInput_arrow_svg{vertical-align:middle;fill:#484848;height:24px;width:24px}.DateRangePickerInput_clearDates{background:100% 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;padding:10px;margin:0 5px 0 10px;position:absolute;left:0;top:50%;transform:translateY(-50%)}.DateRangePickerInput_clearDates__small{padding:6px}.DateRangePickerInput_clearDates_default:focus,.DateRangePickerInput_clearDates_default:hover{background:#dbdbdb;border-radius:50%}.DateRangePickerInput_clearDates__hide{visibility:hidden}.DateRangePickerInput_clearDates_svg{fill:#82888a;height:12px;width:15px;vertical-align:middle}.DateRangePickerInput_clearDates_svg__small{height:9px}.DateRangePickerInput_calendarIcon{background:100% 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;display:inline-block;vertical-align:middle;padding:10px;margin:0 10px 0 5px}.DateRangePickerInput_calendarIcon_svg{fill:#82888a;height:15px;width:14px;vertical-align:middle}.DateRangePicker{position:relative;display:inline-block}.DateRangePicker__block{display:block}.DateRangePicker_picker{z-index:1;background-color:#fff;position:absolute}.DateRangePicker_picker__rtl{direction:ltr}.DateRangePicker_picker__directionLeft{right:0}.DateRangePicker_picker__directionRight{left:0}.DateRangePicker_picker__portal{background-color:rgba(0,0,0,.3);position:fixed;top:0;right:0;height:100%;width:100%}.DateRangePicker_picker__fullScreenPortal{background-color:#fff}.DateRangePicker_closeButton{background:100% 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;position:absolute;top:0;left:0;padding:15px;z-index:2}.DateRangePicker_closeButton:focus,.DateRangePicker_closeButton:hover{color:#b0b3b4;text-decoration:none}.DateRangePicker_closeButton_svg{height:15px;width:15px;fill:#cacccd}.components-datetime{padding:0}.components-datetime .components-datetime__calendar-help{padding:16px}.components-datetime .components-datetime__calendar-help h4{margin:0}.components-datetime .components-datetime__buttons{display:flex;justify-content:space-between}.components-datetime .components-datetime__date-help-toggle{display:block;margin-right:auto}.components-datetime fieldset{border:0;padding:0;margin:0}.components-datetime input,.components-datetime select{box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid #757575}@media (prefers-reduced-motion:reduce){.components-datetime input,.components-datetime select{transition-duration:0s}}.components-datetime .components-button,.components-datetime input[type=number],.components-datetime select{height:30px;margin-top:0;margin-bottom:0}.components-datetime__date{min-height:236px;border-top:1px solid #ddd}.components-datetime__date .DayPickerNavigation_leftButton__horizontalDefault{right:0}.components-datetime__date .CalendarMonth_caption{font-size:13px}.components-datetime__date .CalendarMonth_table{border-collapse:separate;border-spacing:2px}.components-datetime__date .CalendarDay{font-size:13px;border:none;border-radius:50%;text-align:center}.components-datetime__date .CalendarDay:focus{box-shadow:inset 0 0 0 1.5px #007cba,inset 0 0 0 2.5px #fff;box-shadow:inset 0 0 0 1.5px var(--wp-admin-theme-color),inset 0 0 0 2.5px #fff;outline:2px solid transparent}.components-datetime__date .CalendarDay__selected{background:#007cba;background:var(--wp-admin-theme-color);border:2px solid transparent}.components-datetime__date .CalendarDay__selected:hover{background:#005a87;background:var(--wp-admin-theme-color-darker-20)}.components-datetime__date .CalendarDay__selected:focus{box-shadow:inset 0 0 0 1px #fff}.components-datetime__date .DayPickerNavigation_button__horizontalDefault{padding:2px 8px;top:20px}.components-datetime__date .DayPickerNavigation_button__horizontalDefault:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-datetime__date .DayPicker_weekHeader{top:50px}.components-datetime__date .DayPicker_weekHeader .DayPicker_weekHeader_ul{margin:1px 0;padding-right:0;padding-left:0}.components-datetime__date.is-description-visible .DayPicker{visibility:hidden}.components-datetime__time{padding-bottom:16px}.components-datetime__time fieldset{position:relative;margin-bottom:.5em}.components-datetime__time fieldset+fieldset{margin-bottom:0}.components-datetime__time .components-datetime__time-field-am-pm fieldset{margin-top:0}.components-datetime__time .components-datetime__time-wrapper{display:flex}.components-datetime__time .components-datetime__time-wrapper .components-datetime__time-separator{display:inline-block;padding:0 0 0 3px}.components-datetime__time .components-datetime__time-wrapper .components-datetime__time-field-time{direction:rtl}.components-datetime__time .components-datetime__time-wrapper .components-datetime__time-field select{margin-left:4px}.components-datetime__time .components-datetime__time-wrapper .components-datetime__time-field select:focus{position:relative;z-index:1}.components-datetime__time .components-datetime__time-wrapper .components-datetime__time-field input[type=number]{padding:2px;margin-left:4px;text-align:center;-moz-appearance:textfield}.components-datetime__time .components-datetime__time-wrapper .components-datetime__time-field input[type=number]:focus{position:relative;z-index:1}.components-datetime__time .components-datetime__time-wrapper .components-datetime__time-field input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.components-datetime__time.is-12-hour .components-datetime__time-field-day input{margin:-4px 0 0!important;border-radius:0 2px 2px 0!important}.components-datetime__time.is-12-hour .components-datetime__time-field-year input{border-radius:2px 0 0 2px!important}.components-datetime__timezone{line-height:30px;margin-right:4px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.components-datetime__time-legend{font-weight:600;margin-top:.5em}.components-datetime__time-legend.invisible{position:absolute;top:-999em;right:-999em}.components-datetime__time-field-day-input,.components-datetime__time-field-hours-input,.components-datetime__time-field-minutes-input{width:35px}.components-datetime__time-field-year-input{width:55px}.components-datetime__time-field-month-select{max-width:145px}.components-popover .components-datetime__date{padding-right:4px}.block-editor-dimension-control .components-base-control__field{display:flex;align-items:center}.block-editor-dimension-control .components-base-control__label{display:flex;align-items:center;margin-left:1em;margin-bottom:0}.block-editor-dimension-control .components-base-control__label .dashicon{margin-left:.5em}.block-editor-dimension-control.is-manual .components-base-control__label{width:10em}.components-disabled{position:relative;pointer-events:none}.components-disabled:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0}.components-disabled *{pointer-events:none}body.is-dragging-components-draggable{cursor:move;cursor:grabbing!important}.components-draggable__invisible-drag-image{position:fixed;right:-1000px;height:50px;width:50px}.components-draggable__clone{position:fixed;padding:0;background:transparent;pointer-events:none;z-index:1000000000}.components-drop-zone{position:absolute;top:0;left:0;bottom:0;right:0;z-index:40;visibility:hidden;opacity:0;transition:opacity .3s,background-color .3s,visibility 0s .3s;border:2px solid #007cba;border:2px solid var(--wp-admin-theme-color);border-radius:2px}@media (prefers-reduced-motion:reduce){.components-drop-zone{transition-duration:0s}}.components-drop-zone.is-active{opacity:1;visibility:visible;transition:opacity .3s,background-color .3s}@media (prefers-reduced-motion:reduce){.components-drop-zone.is-active{transition-duration:0s}}.components-drop-zone.is-dragging-over-element{background-color:#007cba;background-color:var(--wp-admin-theme-color)}.components-drop-zone__content{position:absolute;top:50%;right:0;left:0;z-index:50;transform:translateY(-50%);width:100%;text-align:center;color:#fff;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.components-drop-zone__content{transition-duration:0s}}.components-drop-zone.is-dragging-over-element .components-drop-zone__content{transform:translateY(-50%) scale(1.05)}.components-drop-zone__content-icon,.components-drop-zone__content-text{display:block}.components-drop-zone__content-icon{margin:0 auto;line-height:0;fill:currentColor}.components-drop-zone__content-text{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.components-drop-zone__provider{height:100%}.components-dropdown{display:inline-block}.components-dropdown__content .components-popover__content>div{padding:12px}.components-dropdown-menu__popover .components-popover__content{width:200px}.components-dropdown-menu__menu{width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.4}.components-dropdown-menu__menu .components-dropdown-menu__menu-item,.components-dropdown-menu__menu .components-menu-item{width:100%;padding:6px;outline:none;cursor:pointer}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator,.components-dropdown-menu__menu .components-menu-item.has-separator{margin-top:6px;position:relative;overflow:visible}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator:before,.components-dropdown-menu__menu .components-menu-item.has-separator:before{display:block;content:"";box-sizing:content-box;background-color:#ddd;position:absolute;top:-3px;right:0;left:0;height:1px}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active svg,.components-dropdown-menu__menu .components-menu-item.is-active svg{color:#fff;background:#1e1e1e;box-shadow:0 0 0 1px #1e1e1e;border-radius:1px}.components-dropdown-menu__menu .components-dropdown-menu__menu-item>svg,.components-dropdown-menu__menu .components-menu-item>svg{border-radius:2px;width:24px;height:24px}.components-dropdown-menu__menu .components-menu-item__button,.components-dropdown-menu__menu .components-menu-item__button.components-button{min-height:36px;height:auto;text-align:right;padding-right:8px;padding-left:8px}.components-dropdown-menu__menu .components-menu-item__button.components-button .components-menu-item__info-wrapper,.components-dropdown-menu__menu .components-menu-item__button .components-menu-item__info-wrapper{max-width:calc(100% - 32px)}.components-dropdown-menu__menu .components-menu-group{padding:12px;margin:0 -12px}.components-dropdown-menu__menu .components-menu-group:first-child{margin-top:-12px}.components-dropdown-menu__menu .components-menu-group:last-child{margin-bottom:-12px}.components-dropdown-menu__menu .components-menu-group+.components-menu-group{margin-top:0;border-top:1px solid #ccc;padding:12px}.is-alternate .components-dropdown-menu__menu .components-menu-group+.components-menu-group{border-color:#1e1e1e}.components-font-size-picker__controls{max-width:248px;display:flex;flex-wrap:wrap;align-items:center;margin-bottom:24px}.components-font-size-picker__controls .components-font-size-picker__number{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid #757575;font-size:16px;line-height:normal;display:inline-block;font-weight:500;height:30px;margin:8px 0 0 8px;width:54px}@media (prefers-reduced-motion:reduce){.components-font-size-picker__controls .components-font-size-picker__number{transition-duration:0s}}@media (min-width:600px){.components-font-size-picker__controls .components-font-size-picker__number{font-size:13px;line-height:normal}}.components-font-size-picker__controls .components-font-size-picker__number:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-font-size-picker__controls .components-font-size-picker__number::-webkit-input-placeholder{color:rgba(30,30,30,.62)}.components-font-size-picker__controls .components-font-size-picker__number::-moz-placeholder{opacity:1;color:rgba(30,30,30,.62)}.components-font-size-picker__controls .components-font-size-picker__number:-ms-input-placeholder{color:rgba(30,30,30,.62)}.is-dark-theme .components-font-size-picker__controls .components-font-size-picker__number::-webkit-input-placeholder{color:hsla(0,0%,100%,.65)}.is-dark-theme .components-font-size-picker__controls .components-font-size-picker__number::-moz-placeholder{opacity:1;color:hsla(0,0%,100%,.65)}.is-dark-theme .components-font-size-picker__controls .components-font-size-picker__number:-ms-input-placeholder{color:hsla(0,0%,100%,.65)}.components-font-size-picker__controls .components-font-size-picker__number[value=""]+.components-button{cursor:default;opacity:.3;pointer-events:none}.components-font-size-picker__controls .components-font-size-picker__number-container{display:flex;flex-direction:column}.components-font-size-picker__controls .components-font-size-picker__select{margin-left:8px}.components-font-size-picker__controls .components-color-palette__clear{height:30px;margin-top:26px}.components-font-size-picker__custom-input .components-range-control__slider+.dashicon{width:30px;height:30px}.components-font-size-picker{border:0;padding:0;margin:0}.components-form-toggle{position:relative;display:inline-block}.components-form-toggle .components-form-toggle__track{content:"";display:inline-block;box-sizing:border-box;vertical-align:top;background-color:#fff;border:1px solid #1e1e1e;width:36px;height:18px;border-radius:9px;transition:background .2s ease}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__track{transition-duration:0s}}.components-form-toggle .components-form-toggle__thumb{display:block;position:absolute;box-sizing:border-box;top:3px;right:3px;width:12px;height:12px;border-radius:50%;transition:transform .1s ease;background-color:#1e1e1e;border:5px solid #1e1e1e}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__thumb{transition-duration:0s}}.components-form-toggle.is-checked .components-form-toggle__track{background-color:#007cba;background-color:var(--wp-admin-theme-color);border:9px solid transparent}.components-form-toggle .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 3.5px #007cba;box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--wp-admin-theme-color);outline:2px solid transparent;outline-offset:2px}.components-form-toggle.is-checked .components-form-toggle__thumb{background-color:#fff;border-width:0;transform:translateX(-18px)}.components-disabled .components-form-toggle{opacity:.3}.components-form-toggle input.components-form-toggle__input[type=checkbox]{position:absolute;top:0;right:0;width:100%;height:100%;opacity:0;margin:0;padding:0;z-index:1;border:none}.components-form-toggle input.components-form-toggle__input[type=checkbox]:checked{background:none}.components-form-toggle input.components-form-toggle__input[type=checkbox]:before{content:""}.components-form-token-field__input-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid #757575;font-size:16px;line-height:normal;display:flex;flex-wrap:wrap;align-items:flex-start;width:100%;margin:0 0 8px;padding:4px;cursor:text}@media (prefers-reduced-motion:reduce){.components-form-token-field__input-container{transition-duration:0s}}@media (min-width:600px){.components-form-token-field__input-container{font-size:13px;line-height:normal}}.components-form-token-field__input-container:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-form-token-field__input-container::-webkit-input-placeholder{color:rgba(30,30,30,.62)}.components-form-token-field__input-container::-moz-placeholder{opacity:1;color:rgba(30,30,30,.62)}.components-form-token-field__input-container:-ms-input-placeholder{color:rgba(30,30,30,.62)}.is-dark-theme .components-form-token-field__input-container::-webkit-input-placeholder{color:hsla(0,0%,100%,.65)}.is-dark-theme .components-form-token-field__input-container::-moz-placeholder{opacity:1;color:hsla(0,0%,100%,.65)}.is-dark-theme .components-form-token-field__input-container:-ms-input-placeholder{color:hsla(0,0%,100%,.65)}.components-form-token-field__input-container.is-disabled{background:#ddd;border-color:#ddd}.components-form-token-field__input-container.is-active{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-form-token-field__input-container input[type=text].components-form-token-field__input{display:inline-block;width:100%;max-width:100%;margin-right:4px;padding:0;min-height:24px;background:inherit;border:0;color:#1e1e1e;box-shadow:none}.components-form-token-field.is-active .components-form-token-field__input-container input[type=text].components-form-token-field__input,.components-form-token-field__input-container input[type=text].components-form-token-field__input:focus{outline:none;box-shadow:none}.components-form-token-field__input-container .components-form-token-field__token+input[type=text].components-form-token-field__input{width:auto}.components-form-token-field__label{display:inline-block;margin-bottom:4px}.components-form-token-field__help{font-size:12px;font-style:normal;color:#757575}.components-form-token-field__token{font-size:13px;display:flex;margin:2px 0 2px 4px;color:#1e1e1e;max-width:100%}.components-form-token-field__token.is-success .components-form-token-field__remove-token,.components-form-token-field__token.is-success .components-form-token-field__token-text{background:#4ab866}.components-form-token-field__token.is-error .components-form-token-field__remove-token,.components-form-token-field__token.is-error .components-form-token-field__token-text{background:#cc1818}.components-form-token-field__token.is-validating .components-form-token-field__remove-token,.components-form-token-field__token.is-validating .components-form-token-field__token-text{color:#757575}.components-form-token-field__token.is-borderless{position:relative;padding:0 0 0 16px}.components-form-token-field__token.is-borderless .components-form-token-field__token-text{background:transparent;color:#007cba;color:var(--wp-admin-theme-color)}.components-form-token-field__token.is-borderless .components-form-token-field__remove-token{background:transparent;color:#757575;position:absolute;top:1px;left:0}.components-form-token-field__token.is-borderless.is-success .components-form-token-field__token-text{color:#4ab866}.components-form-token-field__token.is-borderless.is-error .components-form-token-field__token-text{color:#cc1818;border-radius:0 4px 4px 0;padding:0 6px 0 4px}.components-form-token-field__token.is-borderless.is-validating .components-form-token-field__token-text{color:#1e1e1e}.components-form-token-field__token.is-disabled .components-form-token-field__remove-token{cursor:default}.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{display:inline-block;line-height:24px;height:auto;background:#ddd;transition:all .2s cubic-bezier(.4,1,.4,1)}@media (prefers-reduced-motion:reduce){.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{transition-duration:0s;animation-duration:1ms}}.components-form-token-field__token-text{border-radius:0 12px 12px 0;padding:0 8px 0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.components-form-token-field__remove-token.components-button{cursor:pointer;border-radius:12px 0 0 12px;padding:0 2px;color:#757575;line-height:10px;overflow:initial}.components-form-token-field__remove-token.components-button:hover{color:#1e1e1e}.components-form-token-field__suggestions-list{flex:1 0 100%;min-width:100%;max-height:9em;overflow-y:auto;transition:all .15s ease-in-out;list-style:none;border-top:1px solid #757575;margin:4px -4px -4px;padding:0}@media (prefers-reduced-motion:reduce){.components-form-token-field__suggestions-list{transition-duration:0s}}.components-form-token-field__suggestion{color:#757575;display:block;font-size:13px;padding:4px 8px;margin:0;cursor:pointer}.components-form-token-field__suggestion.is-selected{background:#007cba;background:var(--wp-admin-theme-color);color:#fff}.components-form-token-field__suggestion-match{text-decoration:underline}@media (min-width:600px){.components-guide{width:600px}}.components-guide .components-modal__header{background:none;border-bottom:none;width:100%;padding:0;margin:0}.components-guide .components-modal__header .components-button{align-self:flex-start;margin:8px 0 0 8px;position:static}.components-guide .components-modal__header .components-button:hover svg{fill:#fff}.components-guide__container{display:flex;flex-direction:column;justify-content:space-between;margin-top:-60px;min-height:100%}.components-guide__page{display:flex;flex-direction:column;justify-content:center;position:relative}@media (min-width:600px){.components-guide__page{min-height:300px}}.components-guide__footer{align-content:center;display:flex;height:30px;justify-content:center;margin:0 0 24px;padding:0 32px;position:relative;width:100%}@media (max-width:600px){.components-guide__footer{position:absolute;bottom:0}}.components-guide__page-control{margin:8px 0;text-align:center}.components-guide__page-control li{display:inline-block}.components-guide__page-control .components-button{height:30px;min-width:20px}.components-guide .components-modal__content{padding:0}.components-modal__frame.components-guide{border:none;min-width:312px;height:80vh;max-height:575px}@media (max-width:600px){.components-modal__frame.components-guide{bottom:5%;right:16px;left:16px;top:5%;margin:0 auto}}.components-button.components-guide__back-button,.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{height:30px;position:absolute}.components-button.components-guide__back-button,.components-button.components-guide__forward-button{font-size:13px;padding:4px 2px}.components-button.components-guide__back-button.has-text svg,.components-button.components-guide__forward-button.has-text svg{margin:0}.components-button.components-guide__back-button:hover,.components-button.components-guide__forward-button:hover{text-decoration:underline}.components-button.components-guide__back-button{right:32px}.components-button.components-guide__forward-button{left:32px;color:#1386bf;font-weight:700}.components-button.components-guide__finish-button{left:32px}.components-button.components-guide__inline-finish-button{display:none}.components-navigate-regions.is-focusing-regions [role=region]{position:relative}.components-navigate-regions.is-focusing-regions [role=region]:focus:after{content:"";position:absolute;top:0;bottom:0;right:0;left:0;pointer-events:none;outline:4px solid transparent;box-shadow:inset 0 0 0 4px #007cba;box-shadow:inset 0 0 0 4px var(--wp-admin-theme-color)}@supports (outline-offset:1px){.components-navigate-regions.is-focusing-regions [role=region]:focus:after{content:none}.components-navigate-regions.is-focusing-regions [role=region]:focus{outline-style:solid;outline-color:#007cba;outline-color:var(--wp-admin-theme-color);outline-width:4px;outline-offset:-4px}}.components-menu-group+.components-menu-group{margin-top:8px;padding-top:8px;border-top:1px solid #1e1e1e}.components-menu-group__label{padding:0 8px;margin-top:4px;margin-bottom:12px;color:#757575;text-transform:uppercase;font-size:11px;font-weight:500}.components-menu-item__button,.components-menu-item__button.components-button{width:100%}.components-menu-item__button.components-button .components-menu-items__item-icon,.components-menu-item__button .components-menu-items__item-icon{margin-left:-2px;margin-right:auto;display:inline-block;flex:0 0 auto}.components-menu-item__button.components-button .components-menu-item__shortcut+.components-menu-items__item-icon,.components-menu-item__button .components-menu-item__shortcut+.components-menu-items__item-icon{margin-right:8px}.components-menu-item__button .block-editor-block-icon,.components-menu-item__button.components-button .block-editor-block-icon{margin-right:-2px;margin-left:8px}.components-menu-item__info-wrapper{display:flex;flex-direction:column}.components-menu-item__info{margin-top:4px;font-size:12px;color:#757575}.components-menu-item__shortcut{-ms-grid-row-align:center;align-self:center;margin-left:0;margin-right:auto;padding-right:12px;color:currentColor;display:none}@media (min-width:480px){.components-menu-item__shortcut{display:inline}}.components-menu-items-choice.components-button svg,.components-menu-items-choice svg{margin-left:12px}.components-menu-items-choice.components-button.has-icon,.components-menu-items-choice.has-icon{padding-right:12px}.components-modal__screen-overlay{position:fixed;top:0;left:0;bottom:0;right:0;background-color:rgba(0,0,0,.7);z-index:100000;animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-modal__screen-overlay{animation-duration:1ms}}.components-modal__frame{position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;margin:0;border:1px solid #ddd;background:#fff;box-shadow:0 3px 30px rgba(0,0,0,.2);overflow:auto}@media (min-width:600px){.components-modal__frame{top:50%;left:auto;bottom:auto;right:50%;min-width:360px;max-width:calc(100% - 32px);max-height:calc(100% - 120px);transform:translate(50%,-50%);animation:components-modal__appear-animation .1s ease-out;animation-fill-mode:forwards}}@media (min-width:600px) and (prefers-reduced-motion:reduce){.components-modal__frame{animation-duration:1ms}}@keyframes components-modal__appear-animation{0%{margin-top:32px}to{margin-top:0}}.components-modal__header{box-sizing:border-box;border-bottom:1px solid #ddd;padding:0 24px;display:flex;flex-direction:row;justify-content:space-between;background:#fff;align-items:center;height:60px;z-index:10;position:relative;position:-webkit-sticky;position:sticky;top:0;margin:0 -24px 24px}@supports (-ms-ime-align:auto){.components-modal__header{position:fixed;width:100%}}.components-modal__header .components-modal__header-heading{font-size:1rem;font-weight:600}.components-modal__header h1{line-height:1;margin:0}.components-modal__header .components-button{position:relative;right:8px}.components-modal__header-heading-container{align-items:center;flex-grow:1;display:flex;flex-direction:row;justify-content:left}.components-modal__header-icon-container{display:inline-block}.components-modal__header-icon-container svg{max-width:36px;max-height:36px;padding:8px}.components-modal__content{box-sizing:border-box;height:100%;padding:0 24px 24px}@supports (-ms-ime-align:auto){.components-modal__content{padding-top:60px}}.components-notice{display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;background-color:#fff;border-right:4px solid #007cba;border-right:4px solid var(--wp-admin-theme-color);margin:5px 15px 2px;padding:8px 12px;align-items:center}.components-notice.is-dismissible{padding-left:36px;position:relative}.components-notice.is-success{border-right-color:#4ab866;background-color:#eff9f1}.components-notice.is-warning{border-right-color:#f0b849;background-color:#fef8ee}.components-notice.is-error{border-right-color:#cc1818;background-color:#f4a2a2}.components-notice__content{flex-grow:1;margin:4px 0 4px 25px}.components-notice__action.components-button,.components-notice__action.components-button.is-link{margin-right:12px}.components-notice__action.components-button.is-secondary{vertical-align:initial}.components-notice__dismiss{color:#757575;align-self:flex-start;flex-shrink:0}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):focus,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):active,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{color:#1e1e1e;background-color:transparent}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{box-shadow:none}.components-notice-list{max-width:100vw;box-sizing:border-box;z-index:29}.components-notice-list .components-notice__content{margin-top:12px;margin-bottom:12px;line-height:2}.components-notice-list .components-notice__action.components-button{display:block;margin-right:0;margin-top:8px}.components-panel{background:#fff;border:1px solid #e0e0e0}.components-panel>.components-panel__body:first-child,.components-panel>.components-panel__header:first-child{margin-top:-1px}.components-panel>.components-panel__body:last-child,.components-panel>.components-panel__header:last-child{border-bottom-width:0}.components-panel+.components-panel{margin-top:-1px}.components-panel__body{border-top:1px solid #e0e0e0;border-bottom:1px solid #e0e0e0}.components-panel__body h3{margin:0 0 .5em}.components-panel__body.is-opened{padding:16px}.components-panel__header{display:flex;justify-content:space-between;align-items:center;padding:0 16px;height:48px;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.components-panel__header h2{margin:0;font-size:inherit;color:inherit}.components-panel__body+.components-panel__body,.components-panel__body+.components-panel__header,.components-panel__header+.components-panel__body,.components-panel__header+.components-panel__header{margin-top:-1px}.components-panel__body>.components-panel__body-title{display:block;padding:0;font-size:inherit;margin-top:0;margin-bottom:0;transition:background .1s ease-in-out}@media (prefers-reduced-motion:reduce){.components-panel__body>.components-panel__body-title{transition-duration:0s}}.components-panel__body.is-opened>.components-panel__body-title{margin:-16px -16px 5px}.components-panel__body>.components-panel__body-title:hover{background:#f0f0f0;border:none}.components-panel__body-toggle.components-button{position:relative;padding:16px;outline:none;width:100%;font-weight:500;text-align:right;color:#1e1e1e;border:none;box-shadow:none;transition:background .1s ease-in-out;height:auto}@media (prefers-reduced-motion:reduce){.components-panel__body-toggle.components-button{transition-duration:0s}}.components-panel__body-toggle.components-button:focus{box-shadow:inset 0 0 0 1.5px #007cba;box-shadow:inset 0 0 0 1.5px var(--wp-admin-theme-color);border-radius:0}.components-panel__body-toggle.components-button .components-panel__arrow{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:#1e1e1e;fill:currentColor;transition:color .1s ease-in-out}@media (prefers-reduced-motion:reduce){.components-panel__body-toggle.components-button .components-panel__arrow{transition-duration:0s}}body.rtl .components-panel__body-toggle.components-button .dashicons-arrow-right{transform:scaleX(-1);-ms-filter:fliph;filter:FlipH;margin-top:-10px}.components-panel__icon{color:#757575;margin:-2px 6px -2px 0}.components-panel__body-toggle-icon{margin-left:-5px}.components-panel__color-title{float:right;height:19px}.components-panel__row{display:flex;justify-content:space-between;align-items:center;margin-top:8px;min-height:36px}.components-panel__row select{min-width:0}.components-panel__row label{margin-left:12px;flex-shrink:0;max-width:75%}.components-panel__row:empty,.components-panel__row:first-of-type{margin-top:0}.components-panel .circle-picker{padding-bottom:20px}.components-placeholder.components-placeholder{box-sizing:border-box;position:relative;padding:1em;min-height:200px;width:100%;text-align:right;margin:0;color:#1e1e1e;-moz-font-smoothing:subpixel-antialiased;-webkit-font-smoothing:subpixel-antialiased;border-radius:2px;background-color:#fff;box-shadow:inset 0 0 0 1px #1e1e1e;outline:1px solid transparent}@supports ((position:-webkit-sticky) or (position:sticky)){.components-placeholder.components-placeholder{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}}.components-placeholder.components-placeholder .components-base-control__label{font-size:13px}.components-placeholder__error,.components-placeholder__fieldset,.components-placeholder__instructions,.components-placeholder__label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__label{display:flex;font-weight:600;margin-bottom:16px;align-items:center}.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{fill:currentColor;margin-left:1ch}.components-placeholder__fieldset,.components-placeholder__fieldset form{display:flex;flex-direction:row;width:100%;flex-wrap:wrap}.components-placeholder__fieldset form p,.components-placeholder__fieldset p{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__fieldset.is-column-layout,.components-placeholder__fieldset.is-column-layout form{flex-direction:column}.components-placeholder__input[type=url]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid #757575;font-size:16px;line-height:normal;margin:0 0 0 8px;flex:1 1 auto}@media (prefers-reduced-motion:reduce){.components-placeholder__input[type=url]{transition-duration:0s}}@media (min-width:600px){.components-placeholder__input[type=url]{font-size:13px;line-height:normal}}.components-placeholder__input[type=url]:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-placeholder__input[type=url]::-webkit-input-placeholder{color:rgba(30,30,30,.62)}.components-placeholder__input[type=url]::-moz-placeholder{opacity:1;color:rgba(30,30,30,.62)}.components-placeholder__input[type=url]:-ms-input-placeholder{color:rgba(30,30,30,.62)}.is-dark-theme .components-placeholder__input[type=url]::-webkit-input-placeholder{color:hsla(0,0%,100%,.65)}.is-dark-theme .components-placeholder__input[type=url]::-moz-placeholder{opacity:1;color:hsla(0,0%,100%,.65)}.is-dark-theme .components-placeholder__input[type=url]:-ms-input-placeholder{color:hsla(0,0%,100%,.65)}.components-placeholder__instructions{margin-bottom:1em}.components-placeholder__error{margin-top:1em;width:100%}.components-placeholder__preview img{margin:3%;width:50%}.components-placeholder__fieldset .components-button{margin-left:12px;margin-bottom:12px}.components-placeholder__fieldset .components-button:last-child{margin-bottom:0;margin-left:0}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link{margin-right:10px;margin-left:10px}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link:last-child{margin-left:0}.components-placeholder.is-large .components-placeholder__label{font-size:18pt;font-weight:400}.components-placeholder.is-medium .components-placeholder__instructions,.components-placeholder.is-small .components-placeholder__instructions{display:none}.components-placeholder.is-medium .components-placeholder__fieldset,.components-placeholder.is-medium .components-placeholder__fieldset form,.components-placeholder.is-small .components-placeholder__fieldset,.components-placeholder.is-small .components-placeholder__fieldset form{flex-direction:column}.components-placeholder.is-medium .components-placeholder__fieldset .components-button,.components-placeholder.is-small .components-placeholder__fieldset .components-button{margin-left:auto}.components-placeholder.is-small .components-button{padding:0 8px 2px}.components-popover{position:fixed;z-index:1000000;top:0;left:0;opacity:0}.components-popover.is-expanded,.components-popover[data-x-axis][data-y-axis]{opacity:1}.components-popover.is-expanded{top:0;left:0;right:0;bottom:0;z-index:1000000!important}.components-popover:not(.is-without-arrow){margin-left:2px}.components-popover:not(.is-without-arrow):before{border:8px solid #ccc}.components-popover:not(.is-without-arrow).is-alternate:before{border-color:#1e1e1e}.components-popover:not(.is-without-arrow):after{border:8px solid #fff}.components-popover:not(.is-without-arrow):after,.components-popover:not(.is-without-arrow):before{content:"";position:absolute;height:0;width:0;line-height:0}.components-popover:not(.is-without-arrow)[data-y-axis=top]{margin-top:-8px}.components-popover:not(.is-without-arrow)[data-y-axis=top]:before{bottom:-8px}.components-popover:not(.is-without-arrow)[data-y-axis=top]:after{bottom:-6px}.components-popover:not(.is-without-arrow)[data-y-axis=top]:after,.components-popover:not(.is-without-arrow)[data-y-axis=top]:before{border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-style:solid;margin-left:-10px}.components-popover:not(.is-without-arrow)[data-y-axis=bottom]{margin-top:8px}.components-popover:not(.is-without-arrow)[data-y-axis=bottom]:before{top:-8px}.components-popover:not(.is-without-arrow)[data-y-axis=bottom]:after{top:-6px}.components-popover:not(.is-without-arrow)[data-y-axis=bottom]:after,.components-popover:not(.is-without-arrow)[data-y-axis=bottom]:before{border-bottom-style:solid;border-left-color:transparent;border-right-color:transparent;border-top:none;margin-left:-10px}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=left]{margin-left:-8px}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=left]:before{right:-8px}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=left]:after{right:-6px}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=left]:after,.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=left]:before{border-bottom-color:transparent;border-left-style:solid;border-right:none;border-top-color:transparent}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=right]{margin-left:8px}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=right]:before{left:-8px}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=right]:after{left:-6px}.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=right]:after,.components-popover:not(.is-without-arrow)[data-y-axis=middle][data-x-axis=right]:before{border-bottom-color:transparent;border-left:none;border-right-style:solid;border-top-color:transparent}.components-popover[data-y-axis=top]{bottom:100%}.components-popover[data-y-axis=bottom]{top:100%}.components-popover[data-y-axis=middle]{align-items:center;display:flex}.components-popover.is-from-top{margin-top:12px}.components-popover.is-from-bottom{margin-top:-12px}.components-popover.is-from-left:not(.is-from-top):not(.is-from-bottom){margin-left:12px}.components-popover.is-from-right:not(.is-from-top):not(.is-from-bottom){margin-right:12px}.components-popover__content{height:100%;background:#fff;border:1px solid #ccc;box-shadow:0 2px 6px rgba(0,0,0,.05);border-radius:2px}.is-alternate .components-popover__content{border:1px solid #1e1e1e;box-shadow:none}.components-popover .components-popover__content{position:absolute;height:auto;overflow-y:auto;min-width:260px}.components-popover.is-expanded .components-popover__content{position:static;height:calc(100% - 48px);overflow-y:visible;min-width:auto;border:none;border-top:1px solid #1e1e1e}.components-popover[data-y-axis=top] .components-popover__content{bottom:100%}.components-popover[data-x-axis=center] .components-popover__content{left:50%;transform:translateX(-50%)}.components-popover[data-x-axis=right] .components-popover__content{position:absolute;left:100%}.components-popover:not([data-y-axis=middle])[data-x-axis=right] .components-popover__content{margin-left:-25px}.components-popover[data-x-axis=left] .components-popover__content{position:absolute;right:100%}.components-popover:not([data-y-axis=middle])[data-x-axis=left] .components-popover__content{margin-right:-25px}.components-popover__header{align-items:center;background:#fff;display:flex;height:48px;justify-content:space-between;padding:0 8px 0 16px}.components-popover__header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.components-popover__close.components-button{z-index:5}.components-radio-control{display:flex;flex-direction:column}.components-radio-control .components-base-control__help{margin-top:0}.components-radio-control .components-base-control__field{margin-bottom:0}.components-radio-control__option:not(:last-child){margin-bottom:4px}.components-radio-control__input[type=radio]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;font-size:16px;line-height:normal;border:1px solid #1e1e1e;transition:none;border-radius:50%;margin-top:0;margin-left:6px}@media (prefers-reduced-motion:reduce){.components-radio-control__input[type=radio]{transition-duration:0s}}@media (min-width:600px){.components-radio-control__input[type=radio]{font-size:13px;line-height:normal}}.components-radio-control__input[type=radio]:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-radio-control__input[type=radio]::-webkit-input-placeholder{color:rgba(30,30,30,.62)}.components-radio-control__input[type=radio]::-moz-placeholder{opacity:1;color:rgba(30,30,30,.62)}.components-radio-control__input[type=radio]:-ms-input-placeholder{color:rgba(30,30,30,.62)}.is-dark-theme .components-radio-control__input[type=radio]::-webkit-input-placeholder{color:hsla(0,0%,100%,.65)}.is-dark-theme .components-radio-control__input[type=radio]::-moz-placeholder{opacity:1;color:hsla(0,0%,100%,.65)}.is-dark-theme .components-radio-control__input[type=radio]:-ms-input-placeholder{color:hsla(0,0%,100%,.65)}.components-radio-control__input[type=radio]:checked:before{width:7px;height:7px;margin:8px 8px 0 0;background-color:#fff;border:3px solid #fff}@media (min-width:782px){.components-radio-control__input[type=radio]:checked:before{width:6px;height:6px;margin:4px 4px 0 0}}.components-radio-control__input[type=radio]:focus{box-shadow:0 0 0 2px #fff,0 0 0 3.5px #007cba;box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-radio-control__input[type=radio]:checked{background:#007cba;background:var(--wp-admin-theme-color);border-color:#007cba;border-color:var(--wp-admin-theme-color)}.components-resizable-box__handle{display:none;width:23px;height:23px;z-index:2}.components-resizable-box__container.has-show-handle .components-resizable-box__handle{display:block}.components-resizable-box__handle:after{width:15px;height:15px;border:2px solid #fff;border-radius:50%;top:calc(50% - 8px);left:calc(50% - 8px)}.components-resizable-box__handle:after,.components-resizable-box__side-handle:before{display:block;content:"";background:#007cba;background:var(--wp-admin-theme-color);cursor:inherit;position:absolute}.components-resizable-box__side-handle:before{width:7px;height:7px;border:2px solid #fff;top:calc(50% - 4px);left:calc(50% - 4px);transition:transform .1s ease-in;opacity:0}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle:before{transition-duration:0s}}.is-dark-theme .components-resizable-box__handle:after,.is-dark-theme .components-resizable-box__side-handle:before{border-color:#ddd}.components-resizable-box__corner-handle,.components-resizable-box__side-handle{z-index:2}.components-resizable-box__side-handle.components-resizable-box__handle-bottom,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:before,.components-resizable-box__side-handle.components-resizable-box__handle-top,.components-resizable-box__side-handle.components-resizable-box__handle-top:before{width:100%;right:0;border-right:0;border-left:0}.components-resizable-box__side-handle.components-resizable-box__handle-left,.components-resizable-box__side-handle.components-resizable-box__handle-left:before,.components-resizable-box__side-handle.components-resizable-box__handle-right,.components-resizable-box__side-handle.components-resizable-box__handle-right:before{height:100%;top:0;border-top:0;border-bottom:0}.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:components-resizable-box__top-bottom-animation .1s ease-out 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation-duration:1ms}}.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation:components-resizable-box__left-right-animation .1s ease-out 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation-duration:1ms}}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:none}}}@keyframes components-resizable-box__top-bottom-animation{0%{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}@keyframes components-resizable-box__left-right-animation{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}.components-resizable-box__handle-right{right:-11.5px}.components-resizable-box__handle-left{left:-11.5px}.components-resizable-box__handle-top{top:-11.5px}.components-resizable-box__handle-bottom{bottom:-11.5px}.components-responsive-wrapper{position:relative;max-width:100%}.components-responsive-wrapper,.components-responsive-wrapper>span{display:block}.components-responsive-wrapper__content{position:absolute;top:0;left:0;bottom:0;right:0;width:100%;height:100%;margin:auto}.components-sandbox{overflow:hidden}iframe.components-sandbox{width:100%}body.lockscroll,html.lockscroll{overflow:hidden}.components-select-control__input{background:#fff;height:36px;line-height:36px;margin:1px;outline:0;width:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)!important}@media (min-width:782px){.components-select-control__input{height:28px;line-height:28px}}@media (max-width:782px){.components-base-control .components-base-control__field .components-select-control__input{font-size:16px}}.components-snackbar{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;background-color:#1e1e1e;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.3);color:#fff;padding:16px 24px;width:100%;max-width:600px;box-sizing:border-box;cursor:pointer}@media (min-width:600px){.components-snackbar{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}}.components-snackbar:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #007cba;box-shadow:0 0 0 1px #fff,0 0 0 3px var(--wp-admin-theme-color)}.components-snackbar__action.components-button{margin-right:32px;color:#fff;height:auto;flex-shrink:0;line-height:1.4;padding:0}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary){text-decoration:underline;background-color:transparent}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):focus{color:#fff;box-shadow:none;outline:1px dotted #fff}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{color:#007cba;color:var(--wp-admin-theme-color)}.components-snackbar__content{display:flex;align-items:baseline;justify-content:space-between;line-height:1.4}.components-snackbar-list{position:absolute;z-index:100000;width:100%;box-sizing:border-box}.components-snackbar-list__notice-container{position:relative;padding-top:8px}.components-spinner{display:inline-block;background-color:#949494;width:18px;height:18px;opacity:.7;margin:5px 11px 0;border-radius:100%;position:relative}.components-spinner:before{content:"";position:absolute;background-color:#fff;top:3px;right:3px;width:4px;height:4px;border-radius:100%;transform-origin:6px 6px;animation:components-spinner__animation 1s linear infinite}@keyframes components-spinner__animation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}.components-tab-panel__tabs{display:flex;align-items:stretch}.components-tab-panel__tabs-item{background:transparent;border:none;box-shadow:none;border-radius:0;cursor:pointer;height:48px;padding:3px 16px;margin-right:0;font-weight:500;transition:box-shadow .1s linear;box-sizing:border-box}.components-tab-panel__tabs-item:after{content:attr(data-label);display:block;height:0;overflow:hidden;speak:none;visibility:hidden}.components-tab-panel__tabs-item:focus:not(:disabled){box-shadow:inset 0 1.5px #007cba;box-shadow:inset 0 1.5px var(--wp-admin-theme-color)}.components-tab-panel__tabs-item.is-active{box-shadow:inset 0 0 0 1.5px transparent,inset 0 -4px 0 0 #007cba;box-shadow:inset 0 0 0 1.5px transparent,inset 0 -4px 0 0 var(--wp-admin-theme-color);position:relative}.components-tab-panel__tabs-item.is-active:before{content:"";position:absolute;top:0;bottom:1px;left:0;right:0;border-bottom:4px solid transparent}.components-tab-panel__tabs-item:focus{box-shadow:inset 0 0 0 1.5px #007cba;box-shadow:inset 0 0 0 1.5px var(--wp-admin-theme-color)}.components-tab-panel__tabs-item.is-active:focus{box-shadow:inset 0 0 0 1.5px #007cba,inset 0 -4px 0 0 #007cba;box-shadow:inset 0 0 0 1.5px var(--wp-admin-theme-color),inset 0 -4px 0 0 var(--wp-admin-theme-color)}.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid #757575;font-size:16px;line-height:normal}@media (prefers-reduced-motion:reduce){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{transition-duration:0s}}@media (min-width:600px){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{font-size:13px;line-height:normal}}.components-text-control__input:focus,.components-text-control__input[type=color]:focus,.components-text-control__input[type=date]:focus,.components-text-control__input[type=datetime-local]:focus,.components-text-control__input[type=datetime]:focus,.components-text-control__input[type=email]:focus,.components-text-control__input[type=month]:focus,.components-text-control__input[type=number]:focus,.components-text-control__input[type=password]:focus,.components-text-control__input[type=tel]:focus,.components-text-control__input[type=text]:focus,.components-text-control__input[type=time]:focus,.components-text-control__input[type=url]:focus,.components-text-control__input[type=week]:focus{border-color:#007cba;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #007cba;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid transparent}.components-text-control__input::-webkit-input-placeholder,.components-text-control__input[type=color]::-webkit-input-placeholder,.components-text-control__input[type=date]::-webkit-input-placeholder,.components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.components-text-control__input[type=datetime]::-webkit-input-placeholder,.components-text-control__input[type=email]::-webkit-input-placeholder,.components-text-control__input[type=month]::-webkit-input-placeholder,.components-text-control__input[type=number]::-webkit-input-placeholder,.components-text-control__input[type=password]::-webkit-input-placeholder,.components-text-control__input[type=tel]::-webkit-input-placeholder,.components-text-control__input[type=text]::-webkit-input-placeholder,.components-text-control__input[type=time]::-webkit-input-placeholder,.components-text-control__input[type=url]::-webkit-input-placeholder,.components-text-control__input[type=week]::-webkit-input-placeholder{color:rgba(30,30,30,.62)}.components-text-control__input::-moz-placeholder,.components-text-control__input[type=color]::-moz-placeholder,.components-text-control__input[type=date]::-moz-placeholder,.components-text-control__input[type=datetime-local]::-moz-placeholder,.components-text-control__input[type=datetime]::-moz-placeholder,.components-text-control__input[type=email]::-moz-placeholder,.components-text-control__input[type=month]::-moz-placeholder,.components-text-control__input[type=number]::-moz-placeholder,.components-text-control__input[type=password]::-moz-placeholder,.components-text-control__input[type=tel]::-moz-placeholder,.components-text-control__input[type=text]::-moz-placeholder,.components-text-control__input[type=time]::-moz-placeholder,.components-text-control__input[type=url]::-moz-placeholder,.components-text-control__input[type=week]::-moz-placeholder{opacity:1;color:rgba(30,30,30,.62)}.components-text-control__input:-ms-input-placeholder,.components-text-control__input[type=color]:-ms-input-placeholder,.components-text-control__input[type=date]:-ms-input-placeholder,.components-text-control__input[type=datetime-local]:-ms-input-placeholder,.components-text-control__input[type=datetime]:-ms-input-placeholder,.components-text-control__input[type=email]:-ms-input-placeholder,.components-text-control__input[type=month]:-ms-input-placeholder,.components-text-control__input[type=number]:-ms-input-placeholder,.components-text-control__input[type=password]:-ms-input-placeholder,.components-text-control__input[type=tel]:-ms-input-placeholder,.components-text-control__input[type=text]:-ms-input-placeholder,.components-text-control__input[type=time]:-ms-input-placeholder,.components-text-control__input[type=url]:-ms-input-placeholder,.components-text-control__input[type=week]:-ms-input-placeholder{color:rgba(30,30,30,.62)}.is-dark-theme .components-text-control__input::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=color]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=date]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=datetime]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=email]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=month]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=number]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=password]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=tel]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=text]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=time]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=url]::-webkit-input-placeholder,.is-dark-theme .components-text-control__input[type=week]::-webkit-input-placeholder{color:hsla(0,0%,100%,.65)}.is-dark-theme .components-text-control__input::-moz-placeholder,.is-dark-theme .components-text-control__input[type=color]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=date]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=datetime-local]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=datetime]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=email]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=month]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=number]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=password]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=tel]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=text]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=time]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=url]::-moz-placeholder,.is-dark-theme .components-text-control__input[type=week]::-moz-placeholder{opacity:1;color:hsla(0,0%,100%,.65)}.is-dark-theme .components-text-control__input:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=color]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=date]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=datetime-local]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=datetime]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=email]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=month]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=number]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=password]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=tel]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=text]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=time]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=url]:-ms-input-placeholder,.is-dark-theme .components-text-control__input[type=week]:-ms-input-placeholder{color:hsla(0,0%,100%,.65)}.components-tip{display:flex;color:#757575}.components-tip svg{-ms-grid-row-align:center;align-self:center;fill:#f0b849;flex-shrink:0;margin-left:16px}.components-tip p{margin:0}.components-toggle-control .components-base-control__field{display:flex;margin-bottom:12px;line-height:normal;align-items:center}.components-toggle-control .components-base-control__field .components-form-toggle{margin-left:12px}.components-toggle-control .components-base-control__field .components-toggle-control__label{display:block}.components-accessible-toolbar{display:inline-flex;border:1px solid #1e1e1e;border-radius:2px;flex-shrink:0}.components-accessible-toolbar>.components-toolbar-group:last-child{border-left:none}.components-accessible-toolbar .components-button,.components-toolbar .components-button{position:relative;height:48px;z-index:1;padding-right:16px;padding-left:16px}.components-accessible-toolbar .components-button:focus:enabled,.components-toolbar .components-button:focus:enabled{box-shadow:none;outline:none}.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{content:"";position:absolute;display:block;border-radius:2px;height:32px;right:8px;left:8px;z-index:-1;animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{animation-duration:1ms}}.components-accessible-toolbar .components-button svg,.components-toolbar .components-button svg{position:relative;margin-right:auto;margin-left:auto}.components-accessible-toolbar .components-button.is-pressed,.components-accessible-toolbar .components-button.is-pressed:hover,.components-toolbar .components-button.is-pressed,.components-toolbar .components-button.is-pressed:hover{background:transparent}.components-accessible-toolbar .components-button.is-pressed:before,.components-toolbar .components-button.is-pressed:before{background:#1e1e1e}.components-accessible-toolbar .components-button:focus:before,.components-toolbar .components-button:focus:before{box-shadow:inset 0 0 0 1.5px #007cba,inset 0 0 0 4px #fff;box-shadow:inset 0 0 0 1.5px var(--wp-admin-theme-color),inset 0 0 0 4px #fff;outline:2px solid transparent}.components-accessible-toolbar .components-button.has-icon,.components-toolbar .components-button.has-icon{padding-right:8px;padding-left:8px;min-width:48px;justify-content:center}.components-accessible-toolbar .components-button.components-tab-button,.components-toolbar .components-button.components-tab-button{font-weight:500}.components-accessible-toolbar .components-button.components-tab-button span,.components-toolbar .components-button.components-tab-button span{display:inline-block;padding-right:0;padding-left:0;position:relative}@keyframes components-button__appear-animation{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.components-toolbar__control.components-button{position:relative}.components-toolbar__control.components-button[data-subscript] svg{padding:5px 0 5px 10px}.components-toolbar__control.components-button[data-subscript]:after{content:attr(data-subscript);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;line-height:12px;position:absolute;left:8px;bottom:10px}.components-toolbar__control.components-button:active:before{display:none}.components-toolbar__control.components-button:not(:disabled).is-pressed[data-subscript]:after{color:#fff}.components-toolbar-group{min-height:48px;border-left:1px solid #1e1e1e;background-color:#fff;display:inline-flex;flex-shrink:0;flex-wrap:wrap;line-height:0}.components-toolbar-group .components-toolbar-group.components-toolbar-group{border-width:0;margin:0}.components-toolbar{min-height:48px;margin:0;border:1px solid #1e1e1e;background-color:#fff;display:inline-flex;flex-shrink:0;flex-wrap:wrap}.components-toolbar .components-toolbar.components-toolbar{border-width:0;margin:0}div.components-toolbar>div{display:block;margin:0}@supports ((position:-webkit-sticky) or (position:sticky)){div.components-toolbar>div{display:flex}}div.components-toolbar>div+div.has-left-divider{margin-right:6px;position:relative;overflow:visible}div.components-toolbar>div+div.has-left-divider:before{display:inline-block;content:"";box-sizing:content-box;background-color:#ddd;position:absolute;top:8px;right:-3px;width:1px;height:20px}.components-accessible-toolbar .components-toolbar-group>.components-button.components-button.has-icon,.components-toolbar div>.components-button.components-button.has-icon{min-width:36px;padding-right:6px;padding-left:6px}.components-accessible-toolbar .components-toolbar-group>.components-button.components-button.has-icon svg,.components-toolbar div>.components-button.components-button.has-icon svg{min-width:24px}.components-accessible-toolbar .components-toolbar-group>.components-button.components-button.has-icon:before,.components-toolbar div>.components-button.components-button.has-icon:before{right:2px;left:2px}.components-accessible-toolbar .components-toolbar-group>.components-button:first-child.has-icon,.components-accessible-toolbar .components-toolbar-group>div:first-child>.components-button.has-icon,.components-toolbar div:first-child .components-button.has-icon{min-width:42px;padding-right:11px;padding-left:6px}.components-accessible-toolbar .components-toolbar-group>.components-button:first-child.has-icon:before,.components-accessible-toolbar .components-toolbar-group>div:first-child>.components-button.has-icon:before,.components-toolbar div:first-child .components-button.has-icon:before{right:8px;left:2px}.components-accessible-toolbar .components-toolbar-group>.components-button:last-of-type.has-icon,.components-accessible-toolbar .components-toolbar-group>div:last-child>.components-button.has-icon,.components-toolbar div:last-child .components-button.has-icon{min-width:42px;padding-right:6px;padding-left:11px}.components-accessible-toolbar .components-toolbar-group>.components-button:last-of-type.has-icon:before,.components-accessible-toolbar .components-toolbar-group>div:last-child>.components-button.has-icon:before,.components-toolbar div:last-child .components-button.has-icon:before{right:2px;left:8px}.components-accessible-toolbar .components-toolbar-group>.components-button:first-of-type:last-of-type.has-icon,.components-accessible-toolbar .components-toolbar-group>div:first-child:last-child>.components-button.has-icon,.components-toolbar div:first-child:last-child>.components-button.has-icon{min-width:48px;padding-right:12px;padding-left:12px}.components-accessible-toolbar .components-toolbar-group>.components-button:first-of-type:last-of-type.has-icon:before,.components-accessible-toolbar .components-toolbar-group>div:first-child:last-child>.components-button.has-icon:before,.components-toolbar div:first-child:last-child>.components-button.has-icon:before{right:8px;left:8px}.components-tooltip.components-popover{z-index:1000002}.components-tooltip.components-popover .components-popover__content{min-width:0}.components-tooltip .components-popover__content{background:#1e1e1e;border-radius:2px;border-width:0;color:#fff;white-space:nowrap;text-align:center;line-height:1.4;font-size:12px;box-shadow:none}.components-tooltip .components-popover__content>div{padding:4px 8px}.components-tooltip__shortcut{display:inline-block;margin-right:8px}.components-visually-hidden{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.components-visually-hidden:focus{background-color:#ddd;clip:auto!important;-webkit-clip-path:none;clip-path:none;color:#444;display:block;font-size:1em;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.radio-select{display:flex;align-items:center;cursor:pointer;margin:12px 0;border:none;background:none}.radio-select:focus{outline:none;color:#007cba}.radio-select--active{color:#007cba}.radio-select--active g{fill:#007cba!important}.radio-select__label{margin-right:7px;font-size:14px}.components-placeholder__fieldset{justify-content:start}.colorpalette-color-label{display:flex;margin:8px 0;align-items:center}.wp-block-cloudinary-gallery .block-editor-media-placeholder .components-placeholder__label{display:none}.wp-block-cloudinary-gallery .block-editor-media-placeholder{margin-top:11px;margin-bottom:11px;padding:11px}.wp-block-cloudinary-gallery .block-editor-media-placeholder .components-button{margin-bottom:0} \ No newline at end of file diff --git a/css/bandwidth.svg b/css/images/bandwidth.svg similarity index 100% rename from css/bandwidth.svg rename to css/images/bandwidth.svg diff --git a/css/circle.svg b/css/images/circle.svg similarity index 100% rename from css/circle.svg rename to css/images/circle.svg diff --git a/css/cloud.svg b/css/images/cloud.svg similarity index 100% rename from css/cloud.svg rename to css/images/cloud.svg diff --git a/css/cloudinary.svg b/css/images/cloudinary.svg similarity index 100% rename from css/cloudinary.svg rename to css/images/cloudinary.svg diff --git a/css/connection-string.png b/css/images/connection-string.png similarity index 100% rename from css/connection-string.png rename to css/images/connection-string.png diff --git a/css/crop.svg b/css/images/crop.svg similarity index 100% rename from css/crop.svg rename to css/images/crop.svg diff --git a/css/gallery.svg b/css/images/gallery.svg similarity index 100% rename from css/gallery.svg rename to css/images/gallery.svg diff --git a/css/image.svg b/css/images/image.svg similarity index 100% rename from css/image.svg rename to css/images/image.svg diff --git a/css/learn.svg b/css/images/learn.svg similarity index 100% rename from css/learn.svg rename to css/images/learn.svg diff --git a/css/loading.svg b/css/images/loading.svg similarity index 100% rename from css/loading.svg rename to css/images/loading.svg diff --git a/css/src/logo-icon.svg b/css/images/logo-icon.svg similarity index 100% rename from css/src/logo-icon.svg rename to css/images/logo-icon.svg diff --git a/css/logo.svg b/css/images/logo.svg similarity index 100% rename from css/logo.svg rename to css/images/logo.svg diff --git a/css/sample.webp b/css/images/sample.webp similarity index 100% rename from css/sample.webp rename to css/images/sample.webp diff --git a/css/transformation.svg b/css/images/transformation.svg similarity index 100% rename from css/transformation.svg rename to css/images/transformation.svg diff --git a/css/upload.svg b/css/images/upload.svg similarity index 100% rename from css/upload.svg rename to css/images/upload.svg diff --git a/css/video.svg b/css/images/video.svg similarity index 100% rename from css/video.svg rename to css/images/video.svg diff --git a/gruntfile.js b/gruntfile.js index 0b65aff72..6088d16d7 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -79,8 +79,57 @@ module.exports = function ( grunt ) { }, }, }, + + addtextdomain: { + options: { + textdomain: 'cloudinary', + }, + update_all_domains: { + options: { + updateDomains: true, + }, + src: [ + '*.php', + '**/*.php', + '!.git/**/*', + '!bin/**/*', + '!node_modules/**/*', + '!tests/**/*', + '!build/**/*', + '!vendor/**/*', + ], + }, + }, + + makepot: { + target: { + options: { + domainPath: '/languages', + exclude: [ + '.git/*', + 'bin/*', + 'node_modules/*', + 'tests/*', + 'build/*', + 'vendor/*', + ], + mainFile: 'cloudinary.php', + potFilename: 'cloudinary.pot', + potHeaders: { + poedit: true, + 'x-poedit-keywordslist': true, + 'Report-Msgid-Bugs-To': + 'https://github.com/cloudinary/cloudinary_wordpress', + }, + type: 'wp-plugin', + updateTimestamp: true, + }, + }, + }, } ); + grunt.registerTask( 'i18n', [ 'addtextdomain', 'makepot' ] ); + grunt.registerTask( 'package', [ 'clean', 'copy', 'replace', 'compress' ] ); grunt.registerTask( 'deploy', [ 'package', 'wp_deploy:default' ] ); diff --git a/js/cloudinary.js b/js/cloudinary.js index 99caacb48..e63cb72ee 100644 --- a/js/cloudinary.js +++ b/js/cloudinary.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t,n){var r;!function(){"use strict";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function o(e){return s(l(e),arguments)}function a(e,t){return o.apply(null,[e].concat(t||[]))}function s(e,t){var n,r,a,s,c,l,u,d,p,f=1,h=e.length,m="";for(r=0;r=0),s.type){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,s.width?parseInt(s.width):0);break;case"e":n=s.precision?parseFloat(n).toExponential(s.precision):parseFloat(n).toExponential();break;case"f":n=s.precision?parseFloat(n).toFixed(s.precision):parseFloat(n);break;case"g":n=s.precision?String(Number(n.toPrecision(s.precision))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=s.precision?n.substring(0,s.precision):n;break;case"t":n=String(!!n),n=s.precision?n.substring(0,s.precision):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=s.precision?n.substring(0,s.precision):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=s.precision?n.substring(0,s.precision):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}i.json.test(s.type)?m+=n:(!i.number.test(s.type)||d&&!s.sign?p="":(p=d?"+":"-",n=n.toString().replace(i.sign,"")),l=s.pad_char?"0"===s.pad_char?"0":s.pad_char.charAt(1):" ",u=s.width-(p+n).length,c=s.width&&u>0?l.repeat(u):"",m+=s.align?p+n+c:"0"===l?p+c+n:c+p+n)}return m}var c=Object.create(null);function l(e){if(c[e])return c[e];for(var t,n=e,r=[],o=0;n;){if(null!==(t=i.text.exec(n)))r.push(t[0]);else if(null!==(t=i.modulo.exec(n)))r.push("%");else{if(null===(t=i.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(t[2]){o|=1;var a=[],s=t[2],l=[];if(null===(l=i.key.exec(s)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(a.push(l[1]);""!==(s=s.substring(l[0].length));)if(null!==(l=i.key_access.exec(s)))a.push(l[1]);else{if(null===(l=i.index_access.exec(s)))throw new SyntaxError("[sprintf] failed to parse named argument key");a.push(l[1])}t[2]=a}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");r.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}n=n.substring(t[0].length)}return c[e]=r}t.sprintf=o,t.vsprintf=a,"undefined"!=typeof window&&(window.sprintf=o,window.vsprintf=a,void 0===(r=function(){return{sprintf:o,vsprintf:a}}.call(t,n,t,e))||(e.exports=r))}()},function(e,t,n){e.exports=n(11)},function(e,t){!function(){const e=function(){const e=jQuery("#field-video_player").val(),t=jQuery("#field-video_controls").prop("checked"),n=jQuery('#field-video_autoplay_mode option[value="off"]');"cld"!==e||t?n.prop("disabled",!1):(n.prop("disabled",!0),n.prop("selected")&&n.next().prop("selected",!0))};e(),jQuery(document).on("change","#field-video_player",e),jQuery(document).on("change","#field-video_controls",e),jQuery(document).ready((function(e){e.isFunction(e.fn.wpColorPicker)&&e(".regular-color").wpColorPicker(),e(document).on("tabs.init",(function(){const t=e(".settings-tab-trigger"),n=e(".settings-tab-section");e(this).on("click",".settings-tab-trigger",(function(r){const i=e(this),o=e(i.attr("href"));r.preventDefault(),t.removeClass("active"),n.removeClass("active"),i.addClass("active"),o.addClass("active"),e(document).trigger("settings.tabbed",i)})),e(".cld-field").not('[data-condition="false"]').each((function(){const t=e(this),n=t.data("condition");for(const r in n){let i=e("#field-"+r);const o=n[r],a=t.closest("tr");i.length||(i=e(`[id^=field-${r}-]`));let s=!1;i.on("change init",(function(e,t=!1){if(s&&t)return;let n=this.value===o||this.checked;if(Array.isArray(o)&&2===o.length)switch(o[1]){case"neq":n=this.value!==o[0];break;case"gt":n=this.value>o[0];break;case"lt":n=this.value=0&&(e.metadata.cldoverwrite="true")})),wp.media.events.on("editor:image-update",(function(e){const t=e.image.className.split(" ");e.metadata.cldoverwrite&&-1===t.indexOf("cld-overwrite")?t.push("cld-overwrite"):!e.metadata.cldoverwrite&&t.indexOf("cld-overwrite")>=0&&delete t[t.indexOf("cld-overwrite")],e.image.className=t.join(" ")}));let e=null;const t=wp.media.string.props;wp.media.string.props=function(n,r){n.cldoverwrite&&(n.classes=["cld-overwrite"],e=!0);return t(n,r)},wp.media.post=function(t,n){if("send-attachment-to-editor"===t){const t=wp.media.editor.get().state().get("selection").get(n.attachment);t.attributes.transformations&&(n.attachment.transformations=t.attributes.transformations),(n.html.indexOf("cld-overwrite")>-1||!0===e)&&(n.attachment.cldoverwrite=!0,e=null)}return wp.ajax.post(t,n)};const n=wp.media.view.MediaFrame.Select,r=wp.media.view.MediaFrame.Post,i=wp.media.view.MediaFrame.ImageDetails,o=wp.media.view.MediaFrame.VideoDetails,a=wp.media.View.extend({tagName:"div",className:"cloudinary-widget",template:wp.template("cloudinary-dam"),active:!1,toolbar:null,frame:null,ready(){const e=this.controller,t=this.model.get("selection"),n=this.model.get("library"),r=wp.media.model.Attachment;if(CLDN.mloptions.multiple=e.options.multiple,this.cid!==this.active){if(CLDN.mloptions.inline_container="#cloudinary-dam-"+e.cid,1===t.length){const e=r.get(t.models[0].id);void 0!==e.attributes.public_id&&(CLDN.mloptions.asset={resource_id:e.attributes.public_id})}else CLDN.mloptions.asset=null;try{CLDN.mloptions.folder||(CLDN.mloptions.folder={path:""});const e=t.props.attributes.type;CLDN.mloptions.folder.resource_type=Array.isArray(e)?e[0]:e}catch(e){}window.ml=cloudinary.openMediaLibrary(CLDN.mloptions,{insertHandler(i){for(let o=0;o0;a--)s/=o;return s.toFixed(2)},r.human=function(e){var t=r.calculate(e);return t.fixed+r.spacer+t.suffix},r}},e.exports?e.exports=a():(i=[],void 0===(o="function"==typeof(r=a)?r.apply(t,i):r)||(e.exports=o))},function(e,t,n){e.exports=function(e,t){var n,r,i=0;function o(){var o,a,s=n,c=arguments.length;e:for(;s;){if(s.args.length===arguments.length){for(a=0;a'+t),t=t.replace(/(?:\r\n|\r|\n|\t| )srcset=/g," data-lazy-srcset=").replace(/(?:\r\n|\r|\n|\t| )src=/g,' src="'+r+'" data-lazy-src='))),t}(e);t.firstChild;)o||!a||void 0===n||!t.firstChild.tagName||"img"!==t.firstChild.tagName.toLowerCase()&&"iframe"!==t.firstChild.tagName.toLowerCase()||n.observe(t.firstChild),e.parentNode.insertBefore(t.firstChild,e);e.parentNode.removeChild(e)}function l(){document.querySelectorAll("noscript.loading-lazy").forEach(c),void 0!==window.matchMedia&&window.matchMedia("print").addListener((function(e){e.matches&&document.querySelectorAll(i.lazyImage+"[data-lazy-src],"+i.lazyIframe+"[data-lazy-src]").forEach((function(e){s(e)}))}))}"undefined"!=typeof NodeList&&NodeList.prototype&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),"IntersectionObserver"in window&&(n=new IntersectionObserver((function(e,t){e.forEach((function(e){if(0!==e.intersectionRatio){var n=e.target;t.unobserve(n),s(n)}}))}),i)),r="requestAnimationFrame"in window?window.requestAnimationFrame:function(e){e()},/comp|inter/.test(document.readyState)?r(l):"addEventListener"in document?document.addEventListener("DOMContentLoaded",(function(){r(l)})):document.attachEvent("onreadystatechange",(function(){"complete"===document.readyState&&l()}))}()},function(e,t){const n=document.querySelector(".cloudinary-collapsible__toggle");n&&n.addEventListener("click",(function(){const e=document.querySelector(".cloudinary-collapsible__content"),t="none"===window.getComputedStyle(e,null).getPropertyValue("display"),n=document.querySelector(".cloudinary-collapsible__toggle button i");e.style.display=t?"block":"none";const r="dashicons-arrow-down-alt2",i="dashicons-arrow-up-alt2";n.classList.contains(r)?(n.classList.remove(r),n.classList.add(i)):(n.classList.remove(i),n.classList.add(r))}))},function(e,t,n){var r=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function l(e,t,n,r){var i=t&&t.prototype instanceof v?t:v,o=Object.create(i.prototype),a=new C(r||[]);return o._invoke=function(e,t,n){var r=d;return function(i,o){if(r===f)throw new Error("Generator is already running");if(r===h){if("throw"===i)throw o;return T()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=j(a,n);if(s){if(s===m)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===d)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=f;var c=u(e,t,n);if("normal"===c.type){if(r=n.done?h:p,c.arg===m)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=h,n.method="throw",n.arg=c.arg)}}}(e,n,a),o}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var d="suspendedStart",p="suspendedYield",f="executing",h="completed",m={};function v(){}function g(){}function y(){}var b={};b[o]=function(){return this};var w=Object.getPrototypeOf,_=w&&w(w(A([])));_&&_!==n&&r.call(_,o)&&(b=_);var x=y.prototype=v.prototype=Object.create(b);function O(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function E(e,t){function n(i,o,a,s){var c=u(e[i],e,o);if("throw"!==c.type){var l=c.arg,d=l.value;return d&&"object"==typeof d&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(d).then((function(e){l.value=e,a(l)}),(function(e){return n("throw",e,a,s)}))}s(c.arg)}var i;this._invoke=function(e,r){function o(){return new t((function(t,i){n(e,r,t,i)}))}return i=i?i.then(o,o):o()}}function j(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,j(e,n),"throw"===n.method))return m;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var i=u(r,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,m;var o=i.arg;return o?o.done?(n[e.resultName]=o.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,m):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function k(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function A(e){if(e){var n=e[o];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,a=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(c&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),k(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:A(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),m}},e}(e.exports);try{regeneratorRuntime=r}catch(e){Function("r","regeneratorRuntime = r")(r)}},,function(e,t,n){"use strict";n.r(t),n.d(t,"cloudinary",(function(){return $n}));n(9),n(10);var r=n(2),i=n.n(r),o=n(3),a=n.n(o);const s={sample:{image:document.getElementById("transformation-sample-image"),video:document.getElementById("transformation-sample-video")},preview:{image:document.getElementById("sample-image"),video:document.getElementById("sample-video")},fields:document.getElementsByClassName("cld-ui-input"),button:{image:document.getElementById("refresh-image-preview"),video:document.getElementById("refresh-video-preview")},spinner:{image:document.getElementById("image-loader"),video:document.getElementById("video-loader")},optimization:{image:document.getElementById("image_optimization"),video:document.getElementById("video_optimization")},error_container:document.getElementById("cld-preview-error"),activeItem:null,elements:{image:[],video:[]},_placeItem(e){null!==e&&(e.style.display="block",e.style.visibility="visible",e.style.position="absolute",e.style.top=e.parentElement.clientHeight/2-e.clientHeight/2+"px",e.style.left=e.parentElement.clientWidth/2-e.clientWidth/2+"px")},_setLoading(e){this.button[e].style.display="block",this._placeItem(this.button[e]),this.preview[e].style.opacity="0.1"},_build(e){this.sample[e].innerHTML="",this.elements[e]=[];for(const t of this.fields){if(e!==t.dataset.context||t.dataset.disabled&&"true"===t.dataset.disabled)continue;let n=t.value.trim();if(n.length){if("select-one"===t.type){if("none"===n||!1===this.optimization[e].checked)continue;n=t.dataset.meta+"_"+n}else e=t.dataset.context,t.dataset.meta&&(n=t.dataset.meta+"_"+n),t.dataset.suffix&&(n+=t.dataset.suffix),n=this._transformations(n,e,!0);n&&this.elements[e].push(n)}}let t="";this.elements[e].length&&(t="/"+this._getGlobalTransformationElements(e).replace(/ /g,"%20")),this.sample[e].textContent=t,this.sample[e].parentElement.href="https://res.cloudinary.com/demo/"+this.sample[e].parentElement.innerText.trim().replace("../","").replace(/ /g,"%20")},_clearLoading(e){this.spinner[e].style.visibility="hidden",this.activeItem=null,this.preview[e].style.opacity=1},_refresh(e,t){e&&e.preventDefault();const n=this,r=CLD_GLOBAL_TRANSFORMATIONS[t].preview_url+this._getGlobalTransformationElements(t)+CLD_GLOBAL_TRANSFORMATIONS[t].file;if(this.button[t].style.display="none",this._placeItem(this.spinner[t]),"image"===t){const e=new Image;e.onload=function(){n.preview[t].src=this.src,n._clearLoading(t),n.error_container&&(n.error_container.style.display="none"),e.remove()},e.onerror=function(){const e=n.elements[t].includes("f_mp4");n.error_container&&(n.error_container.style.display="block",e?(n.error_container.innerHTML=CLD_GLOBAL_TRANSFORMATIONS[t].warning.replace("%s","f_mp4"),n.error_container.classList.replace("settings-alert-error","settings-alert-warning")):(n.error_container.innerHTML=CLD_GLOBAL_TRANSFORMATIONS[t].error,n.error_container.classList.replace("settings-alert-warning","settings-alert-error"))),n._clearLoading(t)},e.src=r}else{const e=n._transformations(n._getGlobalTransformationElements(t),t);samplePlayer.source({publicId:"dog",transformation:e}),n._clearLoading(t)}},_getGlobalTransformationElements(e){let t=[];return t.push(this.elements[e].slice(0,2).join(",")),t.push(this.elements[e].slice(2).join(",")),t=t.filter((e=>e)).join("/"),t},_transformations(e,t,n=!1){const r=CLD_GLOBAL_TRANSFORMATIONS[t].valid_types;let i=null;const o=e.split("/"),a=[];for(let e=0;e{const r=!!n.length&&jQuery('[data-item="'+i+":"+n[0].id+'"]');r.length?r.remove():(jQuery(`.cld-tax-order-list-item:contains(${a})`).remove(),--e.startId),this.processTags(t)}))}),jQuery("body").on("change",".selectit input",(function(){const t=jQuery(this),n=t.val(),r=t.is(":checked"),i=t.parent().text().trim();!0===r?e.tags.find(`[data-item="category:${n}"]`).length||e._pushItem(`category:${n}`,i):e.tags.find(`[data-item="category:${n}"]`).remove()}))},_createItem(e,t){const n=jQuery("
  • "),r=jQuery(""),i=jQuery("");return n.addClass("cld-tax-order-list-item").attr("data-item",e),i.addClass("cld-tax-order-list-item-input").attr("type","hidden").attr("name","cld_tax_order[]").val(e),r.addClass("dashicons dashicons-menu cld-tax-order-list-item-handle"),n.append(r).append(t).append(i),n},_pushItem(e,t){const n=this._createItem(e,t);this.tags.append(n)},_sortable(){jQuery(".cld-tax-order-list").sortable({connectWith:".cld-tax-order",axis:"y",handle:".cld-tax-order-list-item-handle",placeholder:"cld-tax-order-list-item-placeholder",forcePlaceholderSize:!0,helper:"clone"})}};if(void 0!==window.CLDN&&(l._init(),jQuery("[data-wp-lists] .selectit input[checked]").each(((e,t)=>{jQuery(t).trigger("change")}))),wp.data&&wp.data.select("core/editor")){const e={};wp.data.subscribe((function(){const t=wp.data.select("core").getTaxonomies();if(t)for(const n in t){const r=wp.data.select("core/editor").getEditedPostAttribute(t[n].rest_base);e[t[n].slug]=r}}));const t=wp.element.createElement,n=n=>{class r extends n{constructor(e){super(e),this.currentItems=jQuery(".cld-tax-order-list-item").map(((e,t)=>jQuery(t).data("item"))).get()}makeItem(e){if(this.currentItems.includes(this.getId(e)))return;const t=this.makeElement(e);jQuery("#cld-tax-items").append(t)}removeItem(e){const t=jQuery(`[data-item="${this.getId(e)}"]`);t.length&&(t.remove(),this.currentItems=this.currentItems.filter((t=>t!==this.getId(e))))}findOrCreateTerm(e){return(e=super.findOrCreateTerm(e)).then((e=>this.makeItem(e))),e}onChange(t){super.onChange(t);const n=this.pickItem(t);n&&(e[this.props.slug].includes(n.id)?this.makeItem(n):this.removeItem(n))}pickItem(e){if("object"==typeof e){if(e.target){for(const t in this.state.availableTerms)if(this.state.availableTerms[t].id===parseInt(e.target.value))return this.state.availableTerms[t]}else if(Array.isArray(e)){let t=this.state.selectedTerms.filter((t=>!e.includes(t)))[0];return void 0===t&&(t=e.filter((e=>!this.state.selectedTerms.includes(e)))[0]),this.state.availableTerms.find((e=>e.name===t))}}else if("number"==typeof e){for(const t in this.state.availableTerms)if(this.state.availableTerms[t].id===e)return this.state.availableTerms[t]}else{let t;if(e.length>this.state.selectedTerms.length)for(const n in e)-1===this.state.selectedTerms.indexOf(e[n])&&(t=e[n]);else for(const n in this.state.selectedTerms)-1===e.indexOf(this.state.selectedTerms[n])&&(t=this.state.selectedTerms[n]);for(const e in this.state.availableTerms)if(this.state.availableTerms[e].name===t)return this.state.availableTerms[e]}}getId(e){return`${this.props.slug}:${e.id}`}makeElement(e){const t=jQuery("
  • "),n=jQuery(""),r=jQuery("");return t.addClass("cld-tax-order-list-item").attr("data-item",this.getId(e)),r.addClass("cld-tax-order-list-item-input").attr("type","hidden").attr("name","cld_tax_order[]").val(this.getId(e)),n.addClass("dashicons dashicons-menu cld-tax-order-list-item-handle"),t.append(n).append(e.name).append(r),t}}return e=>t(r,e)};wp.hooks.addFilter("editor.PostTaxonomyType","cld",n)}var u=l;const d={wpWrap:document.getElementById("wpwrap"),wpContent:document.getElementById("wpbody-content"),libraryWrap:document.getElementById("cloudinary-embed"),_init(){const e=this;"undefined"!=typeof CLD_ML&&(cloudinary.openMediaLibrary(CLD_ML.mloptions,{insertHandler(){alert("Import is not yet implemented.")}}),window.addEventListener("resize",(function(){e._resize()})),e._resize())},_resize(){const e=getComputedStyle(this.wpContent);this.libraryWrap.style.height=this.wpWrap.offsetHeight-parseInt(e.getPropertyValue("padding-bottom"))+"px"}};var p=d;d._init();const f={_init(){const e=this;if("undefined"!=typeof CLDIS){[...document.getElementsByClassName("cld-notice-box")].forEach((t=>{const n=t.getElementsByClassName("notice-dismiss");n.length&&n[0].addEventListener("click",(n=>{t.style.height=t.offsetHeight+"px",n.preventDefault(),setTimeout((function(){e._dismiss(t)}),5)}))}))}},_dismiss(e){const t=e.dataset.dismiss,n=parseInt(e.dataset.duration);e.classList.add("dismissed"),e.style.height="0px",setTimeout((function(){e.remove()}),400),0=0?e.ownerDocument.body:b(e)&&j(e)?e:A(C(e))}function T(e,t){var n;void 0===t&&(t=[]);var r=A(e),i=r===(null==(n=e.ownerDocument)?void 0:n.body),o=v(r),a=i?[o].concat(o.visualViewport||[],j(r)?r:[]):r,s=t.concat(a);return i?s:s.concat(T(C(a)))}function P(e){return["table","td","th"].indexOf(_(e))>=0}function S(e){return b(e)&&"fixed"!==E(e).position?e.offsetParent:null}function D(e){for(var t=v(e),n=S(e);n&&P(n)&&"static"===E(n).position;)n=S(n);return n&&("html"===_(n)||"body"===_(n)&&"static"===E(n).position)?t:n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&b(e)&&"fixed"===E(e).position)return null;for(var n=C(e);b(n)&&["html","body"].indexOf(_(n))<0;){var r=E(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||t&&"filter"===r.willChange||t&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(e)||t}var I="top",N="bottom",M="right",F="left",B="auto",R=[I,N,M,F],z="start",H="end",q="viewport",U="popper",W=R.reduce((function(e,t){return e.concat([t+"-"+z,t+"-"+H])}),[]),Q=[].concat(R,[B]).reduce((function(e,t){return e.concat([t,t+"-"+z,t+"-"+H])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function G(e){var t=new Map,n=new Set,r=[];function i(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&i(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||i(e)})),r}var $={placement:"bottom",modifiers:[],strategy:"absolute"};function J(){for(var e=arguments.length,t=new Array(e),n=0;n=0?"x":"y"}function ne(e){var t,n=e.reference,r=e.element,i=e.placement,o=i?Z(i):null,a=i?ee(i):null,s=n.x+n.width/2-r.width/2,c=n.y+n.height/2-r.height/2;switch(o){case I:t={x:s,y:n.y-r.height};break;case N:t={x:s,y:n.y+n.height};break;case M:t={x:n.x+n.width,y:c};break;case F:t={x:n.x-r.width,y:c};break;default:t={x:n.x,y:n.y}}var l=o?te(o):null;if(null!=l){var u="y"===l?"height":"width";switch(a){case z:t[l]=t[l]-(n[u]/2-r[u]/2);break;case H:t[l]=t[l]+(n[u]/2-r[u]/2)}}return t}var re={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=ne({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ie=Math.max,oe=Math.min,ae=Math.round,se={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ce(e){var t,n=e.popper,r=e.popperRect,i=e.placement,o=e.offsets,a=e.position,s=e.gpuAcceleration,c=e.adaptive,l=e.roundOffsets,u=!0===l?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:ae(ae(t*r)/r)||0,y:ae(ae(n*r)/r)||0}}(o):"function"==typeof l?l(o):o,d=u.x,p=void 0===d?0:d,f=u.y,h=void 0===f?0:f,m=o.hasOwnProperty("x"),g=o.hasOwnProperty("y"),y=F,b=I,w=window;if(c){var _=D(n),O="clientHeight",j="clientWidth";_===v(n)&&"static"!==E(_=x(n)).position&&(O="scrollHeight",j="scrollWidth"),_=_,i===I&&(b=N,h-=_[O]-r.height,h*=s?1:-1),i===F&&(y=M,p-=_[j]-r.width,p*=s?1:-1)}var L,k=Object.assign({position:a},c&&se);return s?Object.assign({},k,((L={})[b]=g?"0":"",L[y]=m?"0":"",L.transform=(w.devicePixelRatio||1)<2?"translate("+p+"px, "+h+"px)":"translate3d("+p+"px, "+h+"px, 0)",L)):Object.assign({},k,((t={})[b]=g?h+"px":"",t[y]=m?p+"px":"",t.transform="",t))}var le={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},i=t.elements[e];b(i)&&_(i)&&(Object.assign(i.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],i=t.attributes[e]||{},o=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});b(r)&&_(r)&&(Object.assign(r.style,o),Object.keys(i).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]};var ue={left:"right",right:"left",bottom:"top",top:"bottom"};function de(e){return e.replace(/left|right|bottom|top/g,(function(e){return ue[e]}))}var pe={start:"end",end:"start"};function fe(e){return e.replace(/start|end/g,(function(e){return pe[e]}))}function he(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&w(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function me(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function ve(e,t){return t===q?me(function(e){var t=v(e),n=x(e),r=t.visualViewport,i=n.clientWidth,o=n.clientHeight,a=0,s=0;return r&&(i=r.width,o=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=r.offsetLeft,s=r.offsetTop)),{width:i,height:o,x:a+O(e),y:s}}(e)):b(t)?function(e){var t=m(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):me(function(e){var t,n=x(e),r=g(e),i=null==(t=e.ownerDocument)?void 0:t.body,o=ie(n.scrollWidth,n.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=ie(n.scrollHeight,n.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-r.scrollLeft+O(e),c=-r.scrollTop;return"rtl"===E(i||n).direction&&(s+=ie(n.clientWidth,i?i.clientWidth:0)-o),{width:o,height:a,x:s,y:c}}(x(e)))}function ge(e,t,n){var r="clippingParents"===t?function(e){var t=T(C(e)),n=["absolute","fixed"].indexOf(E(e).position)>=0&&b(e)?D(e):e;return y(n)?t.filter((function(e){return y(e)&&he(e,n)&&"body"!==_(e)})):[]}(e):[].concat(t),i=[].concat(r,[n]),o=i[0],a=i.reduce((function(t,n){var r=ve(e,n);return t.top=ie(r.top,t.top),t.right=oe(r.right,t.right),t.bottom=oe(r.bottom,t.bottom),t.left=ie(r.left,t.left),t}),ve(e,o));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function ye(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function be(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function we(e,t){void 0===t&&(t={});var n=t,r=n.placement,i=void 0===r?e.placement:r,o=n.boundary,a=void 0===o?"clippingParents":o,s=n.rootBoundary,c=void 0===s?q:s,l=n.elementContext,u=void 0===l?U:l,d=n.altBoundary,p=void 0!==d&&d,f=n.padding,h=void 0===f?0:f,v=ye("number"!=typeof h?h:be(h,R)),g=u===U?"reference":U,b=e.elements.reference,w=e.rects.popper,_=e.elements[p?g:u],O=ge(y(_)?_:_.contextElement||x(e.elements.popper),a,c),E=m(b),j=ne({reference:E,element:w,strategy:"absolute",placement:i}),L=me(Object.assign({},w,j)),k=u===U?L:E,C={top:O.top-k.top+v.top,bottom:k.bottom-O.bottom+v.bottom,left:O.left-k.left+v.left,right:k.right-O.right+v.right},A=e.modifiersData.offset;if(u===U&&A){var T=A[i];Object.keys(C).forEach((function(e){var t=[M,N].indexOf(e)>=0?1:-1,n=[I,N].indexOf(e)>=0?"y":"x";C[e]+=T[n]*t}))}return C}function _e(e,t,n){return ie(e,oe(t,n))}function xe(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Oe(e){return[I,M,N,F].some((function(t){return e[t]>=0}))}var Ee=X({defaultModifiers:[K,re,{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,i=void 0===r||r,o=n.adaptive,a=void 0===o||o,s=n.roundOffsets,c=void 0===s||s,l={placement:Z(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,ce(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,ce(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},le,{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,i=n.offset,o=void 0===i?[0,0]:i,a=Q.reduce((function(e,n){return e[n]=function(e,t,n){var r=Z(e),i=[F,I].indexOf(r)>=0?-1:1,o="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=o[0],s=o[1];return a=a||0,s=(s||0)*i,[F,M].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,o),e}),{}),s=a[t.placement],c=s.x,l=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[r]=a}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var i=n.mainAxis,o=void 0===i||i,a=n.altAxis,s=void 0===a||a,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,p=n.altBoundary,f=n.flipVariations,h=void 0===f||f,m=n.allowedAutoPlacements,v=t.options.placement,g=Z(v),y=c||(g===v||!h?[de(v)]:function(e){if(Z(e)===B)return[];var t=de(e);return[fe(e),t,fe(t)]}(v)),b=[v].concat(y).reduce((function(e,n){return e.concat(Z(n)===B?function(e,t){void 0===t&&(t={});var n=t,r=n.placement,i=n.boundary,o=n.rootBoundary,a=n.padding,s=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?Q:c,u=ee(r),d=u?s?W:W.filter((function(e){return ee(e)===u})):R,p=d.filter((function(e){return l.indexOf(e)>=0}));0===p.length&&(p=d);var f=p.reduce((function(t,n){return t[n]=we(e,{placement:n,boundary:i,rootBoundary:o,padding:a})[Z(n)],t}),{});return Object.keys(f).sort((function(e,t){return f[e]-f[t]}))}(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),w=t.rects.reference,_=t.rects.popper,x=new Map,O=!0,E=b[0],j=0;j=0,T=A?"width":"height",P=we(t,{placement:L,boundary:u,rootBoundary:d,altBoundary:p,padding:l}),S=A?C?M:F:C?N:I;w[T]>_[T]&&(S=de(S));var D=de(S),H=[];if(o&&H.push(P[k]<=0),s&&H.push(P[S]<=0,P[D]<=0),H.every((function(e){return e}))){E=L,O=!1;break}x.set(L,H)}if(O)for(var q=function(e){var t=b.find((function(t){var n=x.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},U=h?3:1;U>0;U--){if("break"===q(U))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,i=n.mainAxis,o=void 0===i||i,a=n.altAxis,s=void 0!==a&&a,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,p=n.tether,f=void 0===p||p,h=n.tetherOffset,m=void 0===h?0:h,v=we(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),g=Z(t.placement),y=ee(t.placement),b=!y,w=te(g),_="x"===w?"y":"x",x=t.modifiersData.popperOffsets,O=t.rects.reference,E=t.rects.popper,j="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,L={x:0,y:0};if(x){if(o||s){var C="y"===w?I:F,A="y"===w?N:M,T="y"===w?"height":"width",P=x[w],S=x[w]+v[C],B=x[w]-v[A],R=f?-E[T]/2:0,H=y===z?O[T]:E[T],q=y===z?-E[T]:-O[T],U=t.elements.arrow,W=f&&U?k(U):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},V=Q[C],G=Q[A],$=_e(0,O[T],W[T]),J=b?O[T]/2-R-$-V-j:H-$-V-j,X=b?-O[T]/2+R+$+G+j:q+$+G+j,Y=t.elements.arrow&&D(t.elements.arrow),K=Y?"y"===w?Y.clientTop||0:Y.clientLeft||0:0,ne=t.modifiersData.offset?t.modifiersData.offset[t.placement][w]:0,re=x[w]+J-ne-K,ae=x[w]+X-ne;if(o){var se=_e(f?oe(S,re):S,P,f?ie(B,ae):B);x[w]=se,L[w]=se-P}if(s){var ce="x"===w?I:F,le="x"===w?N:M,ue=x[_],de=ue+v[ce],pe=ue-v[le],fe=_e(f?oe(de,re):de,ue,f?ie(pe,ae):pe);x[_]=fe,L[_]=fe-ue}}t.modifiersData[r]=L}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,i=e.options,o=n.elements.arrow,a=n.modifiersData.popperOffsets,s=Z(n.placement),c=te(s),l=[F,M].indexOf(s)>=0?"height":"width";if(o&&a){var u=function(e,t){return ye("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:be(e,R))}(i.padding,n),d=k(o),p="y"===c?I:F,f="y"===c?N:M,h=n.rects.reference[l]+n.rects.reference[c]-a[c]-n.rects.popper[l],m=a[c]-n.rects.reference[c],v=D(o),g=v?"y"===c?v.clientHeight||0:v.clientWidth||0:0,y=h/2-m/2,b=u[p],w=g-d[l]-u[f],_=g/2-d[l]/2+y,x=_e(b,_,w),O=c;n.modifiersData[r]=((t={})[O]=x,t.centerOffset=x-_,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&he(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,i=t.rects.popper,o=t.modifiersData.preventOverflow,a=we(t,{elementContext:"reference"}),s=we(t,{altBoundary:!0}),c=xe(a,r),l=xe(s,i,o),u=Oe(c),d=Oe(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}}]}),je="tippy-content",Le="tippy-backdrop",ke="tippy-arrow",Ce="tippy-svg-arrow",Ae={passive:!0,capture:!0};function Te(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function Pe(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function Se(e,t){return"function"==typeof e?e.apply(void 0,t):e}function De(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function Ie(e){return[].concat(e)}function Ne(e,t){-1===e.indexOf(t)&&e.push(t)}function Me(e){return e.split("-")[0]}function Fe(e){return[].slice.call(e)}function Be(){return document.createElement("div")}function Re(e){return["Element","Fragment"].some((function(t){return Pe(e,t)}))}function ze(e){return Pe(e,"MouseEvent")}function He(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function qe(e){return Re(e)?[e]:function(e){return Pe(e,"NodeList")}(e)?Fe(e):Array.isArray(e)?e:Fe(document.querySelectorAll(e))}function Ue(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function We(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function Qe(e){var t,n=Ie(e)[0];return(null==n||null==(t=n.ownerDocument)?void 0:t.body)?n.ownerDocument:document}function Ve(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}var Ge={isTouch:!1},$e=0;function Je(){Ge.isTouch||(Ge.isTouch=!0,window.performance&&document.addEventListener("mousemove",Xe))}function Xe(){var e=performance.now();e-$e<20&&(Ge.isTouch=!1,document.removeEventListener("mousemove",Xe)),$e=e}function Ye(){var e=document.activeElement;if(He(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var Ke="undefined"!=typeof window&&"undefined"!=typeof document?navigator.userAgent:"",Ze=/MSIE |Trident\//.test(Ke);var et={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},tt=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},et,{},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),nt=Object.keys(tt);function rt(e){var t=(e.plugins||[]).reduce((function(t,n){var r=n.name,i=n.defaultValue;return r&&(t[r]=void 0!==e[r]?e[r]:i),t}),{});return Object.assign({},e,{},t)}function it(e,t){var n=Object.assign({},t,{content:Se(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(rt(Object.assign({},tt,{plugins:t}))):nt).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},tt.aria,{},n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function ot(e,t){e.innerHTML=t}function at(e){var t=Be();return!0===e?t.className=ke:(t.className=Ce,Re(e)?t.appendChild(e):ot(t,e)),t}function st(e,t){Re(t.content)?(ot(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?ot(e,t.content):e.textContent=t.content)}function ct(e){var t=e.firstElementChild,n=Fe(t.children);return{box:t,content:n.find((function(e){return e.classList.contains(je)})),arrow:n.find((function(e){return e.classList.contains(ke)||e.classList.contains(Ce)})),backdrop:n.find((function(e){return e.classList.contains(Le)}))}}function lt(e){var t=Be(),n=Be();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=Be();function i(n,r){var i=ct(t),o=i.box,a=i.content,s=i.arrow;r.theme?o.setAttribute("data-theme",r.theme):o.removeAttribute("data-theme"),"string"==typeof r.animation?o.setAttribute("data-animation",r.animation):o.removeAttribute("data-animation"),r.inertia?o.setAttribute("data-inertia",""):o.removeAttribute("data-inertia"),o.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?o.setAttribute("role",r.role):o.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||st(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(o.removeChild(s),o.appendChild(at(r.arrow))):o.appendChild(at(r.arrow)):s&&o.removeChild(s)}return r.className=je,r.setAttribute("data-state","hidden"),st(r,e.props),t.appendChild(n),n.appendChild(r),i(e.props,e.props),{popper:t,onUpdate:i}}lt.$$tippy=!0;var ut=1,dt=[],pt=[];function ft(e,t){var n,r,i,o,a,s,c,l,u,d=it(e,Object.assign({},tt,{},rt((n=t,Object.keys(n).reduce((function(e,t){return void 0!==n[t]&&(e[t]=n[t]),e}),{}))))),p=!1,f=!1,h=!1,m=!1,v=[],g=De($,d.interactiveDebounce),y=ut++,b=(u=d.plugins).filter((function(e,t){return u.indexOf(e)===t})),w={id:y,reference:e,popper:Be(),popperInstance:null,props:d,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:b,clearDelayTimeouts:function(){clearTimeout(r),clearTimeout(i),cancelAnimationFrame(o)},setProps:function(t){0;if(w.state.isDestroyed)return;I("onBeforeUpdate",[w,t]),V();var n=w.props,r=it(e,Object.assign({},w.props,{},t,{ignoreAttributes:!0}));w.props=r,Q(),n.interactiveDebounce!==r.interactiveDebounce&&(F(),g=De($,r.interactiveDebounce));n.triggerTarget&&!r.triggerTarget?Ie(n.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");M(),D(),O&&O(n,r);w.popperInstance&&(K(),ee().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));I("onAfterUpdate",[w,t])},setContent:function(e){w.setProps({content:e})},show:function(){0;var e=w.state.isVisible,t=w.state.isDestroyed,n=!w.state.isEnabled,r=Ge.isTouch&&!w.props.touch,i=Te(w.props.duration,0,tt.duration);if(e||t||n||r)return;if(A().hasAttribute("disabled"))return;if(I("onShow",[w],!1),!1===w.props.onShow(w))return;w.state.isVisible=!0,C()&&(x.style.visibility="visible");D(),H(),w.state.isMounted||(x.style.transition="none");if(C()){var o=P(),a=o.box,s=o.content;Ue([a,s],0)}c=function(){var e;if(w.state.isVisible&&!m){if(m=!0,x.offsetHeight,x.style.transition=w.props.moveTransition,C()&&w.props.animation){var t=P(),n=t.box,r=t.content;Ue([n,r],i),We([n,r],"visible")}N(),M(),Ne(pt,w),null==(e=w.popperInstance)||e.forceUpdate(),w.state.isMounted=!0,I("onMount",[w]),w.props.animation&&C()&&function(e,t){U(e,t)}(i,(function(){w.state.isShown=!0,I("onShown",[w])}))}},function(){var e,t=w.props.appendTo,n=A();e=w.props.interactive&&t===tt.appendTo||"parent"===t?n.parentNode:Se(t,[n]);e.contains(x)||e.appendChild(x);K(),!1}()},hide:function(){0;var e=!w.state.isVisible,t=w.state.isDestroyed,n=!w.state.isEnabled,r=Te(w.props.duration,1,tt.duration);if(e||t||n)return;if(I("onHide",[w],!1),!1===w.props.onHide(w))return;w.state.isVisible=!1,w.state.isShown=!1,m=!1,p=!1,C()&&(x.style.visibility="hidden");if(F(),q(),D(),C()){var i=P(),o=i.box,a=i.content;w.props.animation&&(Ue([o,a],r),We([o,a],"hidden"))}N(),M(),w.props.animation?C()&&function(e,t){U(e,(function(){!w.state.isVisible&&x.parentNode&&x.parentNode.contains(x)&&t()}))}(r,w.unmount):w.unmount()},hideWithInteractivity:function(e){0;T().addEventListener("mousemove",g),Ne(dt,g),g(e)},enable:function(){w.state.isEnabled=!0},disable:function(){w.hide(),w.state.isEnabled=!1},unmount:function(){0;w.state.isVisible&&w.hide();if(!w.state.isMounted)return;Z(),ee().forEach((function(e){e._tippy.unmount()})),x.parentNode&&x.parentNode.removeChild(x);pt=pt.filter((function(e){return e!==w})),w.state.isMounted=!1,I("onHidden",[w])},destroy:function(){0;if(w.state.isDestroyed)return;w.clearDelayTimeouts(),w.unmount(),V(),delete e._tippy,w.state.isDestroyed=!0,I("onDestroy",[w])}};if(!d.render)return w;var _=d.render(w),x=_.popper,O=_.onUpdate;x.setAttribute("data-tippy-root",""),x.id="tippy-"+w.id,w.popper=x,e._tippy=w,x._tippy=w;var E=b.map((function(e){return e.fn(w)})),j=e.hasAttribute("aria-expanded");return Q(),M(),D(),I("onCreate",[w]),d.showOnCreate&&te(),x.addEventListener("mouseenter",(function(){w.props.interactive&&w.state.isVisible&&w.clearDelayTimeouts()})),x.addEventListener("mouseleave",(function(e){w.props.interactive&&w.props.trigger.indexOf("mouseenter")>=0&&(T().addEventListener("mousemove",g),g(e))})),w;function L(){var e=w.props.touch;return Array.isArray(e)?e:[e,0]}function k(){return"hold"===L()[0]}function C(){var e;return!!(null==(e=w.props.render)?void 0:e.$$tippy)}function A(){return l||e}function T(){var e=A().parentNode;return e?Qe(e):document}function P(){return ct(x)}function S(e){return w.state.isMounted&&!w.state.isVisible||Ge.isTouch||a&&"focus"===a.type?0:Te(w.props.delay,e?0:1,tt.delay)}function D(){x.style.pointerEvents=w.props.interactive&&w.state.isVisible?"":"none",x.style.zIndex=""+w.props.zIndex}function I(e,t,n){var r;(void 0===n&&(n=!0),E.forEach((function(n){n[e]&&n[e].apply(void 0,t)})),n)&&(r=w.props)[e].apply(r,t)}function N(){var t=w.props.aria;if(t.content){var n="aria-"+t.content,r=x.id;Ie(w.props.triggerTarget||e).forEach((function(e){var t=e.getAttribute(n);if(w.state.isVisible)e.setAttribute(n,t?t+" "+r:r);else{var i=t&&t.replace(r,"").trim();i?e.setAttribute(n,i):e.removeAttribute(n)}}))}}function M(){!j&&w.props.aria.expanded&&Ie(w.props.triggerTarget||e).forEach((function(e){w.props.interactive?e.setAttribute("aria-expanded",w.state.isVisible&&e===A()?"true":"false"):e.removeAttribute("aria-expanded")}))}function F(){T().removeEventListener("mousemove",g),dt=dt.filter((function(e){return e!==g}))}function B(e){if(!(Ge.isTouch&&(h||"mousedown"===e.type)||w.props.interactive&&x.contains(e.target))){if(A().contains(e.target)){if(Ge.isTouch)return;if(w.state.isVisible&&w.props.trigger.indexOf("click")>=0)return}else I("onClickOutside",[w,e]);!0===w.props.hideOnClick&&(w.clearDelayTimeouts(),w.hide(),f=!0,setTimeout((function(){f=!1})),w.state.isMounted||q())}}function R(){h=!0}function z(){h=!1}function H(){var e=T();e.addEventListener("mousedown",B,!0),e.addEventListener("touchend",B,Ae),e.addEventListener("touchstart",z,Ae),e.addEventListener("touchmove",R,Ae)}function q(){var e=T();e.removeEventListener("mousedown",B,!0),e.removeEventListener("touchend",B,Ae),e.removeEventListener("touchstart",z,Ae),e.removeEventListener("touchmove",R,Ae)}function U(e,t){var n=P().box;function r(e){e.target===n&&(Ve(n,"remove",r),t())}if(0===e)return t();Ve(n,"remove",s),Ve(n,"add",r),s=r}function W(t,n,r){void 0===r&&(r=!1),Ie(w.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),v.push({node:e,eventType:t,handler:n,options:r})}))}function Q(){var e;k()&&(W("touchstart",G,{passive:!0}),W("touchend",J,{passive:!0})),(e=w.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(W(e,G),e){case"mouseenter":W("mouseleave",J);break;case"focus":W(Ze?"focusout":"blur",X);break;case"focusin":W("focusout",X)}}))}function V(){v.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,i=e.options;t.removeEventListener(n,r,i)})),v=[]}function G(e){var t,n=!1;if(w.state.isEnabled&&!Y(e)&&!f){var r="focus"===(null==(t=a)?void 0:t.type);a=e,l=e.currentTarget,M(),!w.state.isVisible&&ze(e)&&dt.forEach((function(t){return t(e)})),"click"===e.type&&(w.props.trigger.indexOf("mouseenter")<0||p)&&!1!==w.props.hideOnClick&&w.state.isVisible?n=!0:te(e),"click"===e.type&&(p=!n),n&&!r&&ne(e)}}function $(e){var t=e.target,n=A().contains(t)||x.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,i=e.popperState,o=e.props.interactiveBorder,a=Me(i.placement),s=i.modifiersData.offset;if(!s)return!0;var c="bottom"===a?s.top.y:0,l="top"===a?s.bottom.y:0,u="right"===a?s.left.x:0,d="left"===a?s.right.x:0,p=t.top-r+c>o,f=r-t.bottom-l>o,h=t.left-n+u>o,m=n-t.right-d>o;return p||f||h||m}))}(ee().concat(x).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:d}:null})).filter(Boolean),e)&&(F(),ne(e))}function J(e){Y(e)||w.props.trigger.indexOf("click")>=0&&p||(w.props.interactive?w.hideWithInteractivity(e):ne(e))}function X(e){w.props.trigger.indexOf("focusin")<0&&e.target!==A()||w.props.interactive&&e.relatedTarget&&x.contains(e.relatedTarget)||ne(e)}function Y(e){return!!Ge.isTouch&&k()!==e.type.indexOf("touch")>=0}function K(){Z();var t=w.props,n=t.popperOptions,r=t.placement,i=t.offset,o=t.getReferenceClientRect,a=t.moveTransition,s=C()?ct(x).arrow:null,l=o?{getBoundingClientRect:o,contextElement:o.contextElement||A()}:e,u=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!a}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(C()){var n=P().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];C()&&s&&u.push({name:"arrow",options:{element:s,padding:3}}),u.push.apply(u,(null==n?void 0:n.modifiers)||[]),w.popperInstance=Ee(l,x,Object.assign({},n,{placement:r,onFirstUpdate:c,modifiers:u}))}function Z(){w.popperInstance&&(w.popperInstance.destroy(),w.popperInstance=null)}function ee(){return Fe(x.querySelectorAll("[data-tippy-root]"))}function te(e){w.clearDelayTimeouts(),e&&I("onTrigger",[w,e]),H();var t=S(!0),n=L(),i=n[0],o=n[1];Ge.isTouch&&"hold"===i&&o&&(t=o),t?r=setTimeout((function(){w.show()}),t):w.show()}function ne(e){if(w.clearDelayTimeouts(),I("onUntrigger",[w,e]),w.state.isVisible){if(!(w.props.trigger.indexOf("mouseenter")>=0&&w.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&p)){var t=S(!1);t?i=setTimeout((function(){w.state.isVisible&&w.hide()}),t):o=requestAnimationFrame((function(){w.hide()}))}}else q()}}function ht(e,t){void 0===t&&(t={});var n=tt.plugins.concat(t.plugins||[]);document.addEventListener("touchstart",Je,Ae),window.addEventListener("blur",Ye);var r=Object.assign({},t,{plugins:n}),i=qe(e).reduce((function(e,t){var n=t&&ft(t,r);return n&&e.push(n),e}),[]);return Re(e)?i[0]:i}ht.defaultProps=tt,ht.setDefaultProps=function(e){Object.keys(e).forEach((function(t){tt[t]=e[t]}))},ht.currentInput=Ge;Object.assign({},le,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}});ht.setDefaultProps({render:lt});var mt=ht,vt=n(4),gt=n.n(vt);var yt={controlled:null,bind(e){this.controlled=e,this.controlled.forEach((e=>{this._master(e)})),this._init()},_init(){this.controlled.forEach((e=>{this._checkUp(e)}))},_master(e){const t=JSON.parse(e.dataset.master);e.dataset.size&&(e.filesize=parseInt(e.dataset.size,10)),e.masters=t.map((t=>{const n=document.getElementById(t),r=document.getElementById(t+"_size_wrapper");return r&&(n.filesize=0,n.sizespan=r),this._addChild(n,e),n})),this._bindEvents(e),e.masters.forEach((e=>{this._bindEvents(e)}))},_bindEvents(e){e.eventBound||(e.addEventListener("click",(t=>{const n=t.target;n.elements&&(this._checkDown(n),this._evaluateSize(n)),n.masters&&this._checkUp(e)})),e.eventBound=!0)},_addChild(e,t){const n=e.elements?e.elements:[];-1===n.indexOf(t)&&(n.push(t),e.elements=n)},_removeChild(e,t){const n=e.elements.indexOf(t);-1{t.checked!==e.checked&&(t.checked=e.checked,t.disabled&&(t.checked=!1),t.dispatchEvent(new Event("change")))})),e.elements.forEach((t=>{this._checkDown(t),t.elements||this._checkUp(t,e)})))},_checkUp(e,t){e.masters&&[...e.masters].forEach((e=>{e!==t&&this._evaluateCheckStatus(e),this._checkUp(e),this._evaluateSize(e)}))},_evaluateCheckStatus(e){let t=0,n=e.classList.contains("partial");n&&(e.classList.remove("partial"),n=!1),e.elements.forEach((r=>{null!==r.parentNode?(t+=r.checked,r.classList.contains("partial")&&(n=!0)):this._removeChild(e,r)}));let r="some";t===e.elements.length?r="on":0===t?r="off":n=!0,n&&e.classList.add("partial");const i="off"!==r;e.checked===i&&e.value===r||(e.value=r,e.checked=i,e.dispatchEvent(new Event("change")))},_evaluateSize(e){if(e.sizespan&&e.elements){e.filesize=0,e.elements.forEach((t=>{t.checked&&(e.filesize+=t.filesize)}));let t=null;0=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var _t,xt,Ot,Et,jt=n(5),Lt=n.n(jt);n(0),Lt()(console.error);_t={"(":9,"!":8,"*":7,"/":7,"%":7,"+":6,"-":6,"<":5,"<=":5,">":5,">=":5,"==":4,"!=":4,"&&":3,"||":2,"?":1,"?:":1},xt=["(","?"],Ot={")":["("],":":["?","?:"]},Et=/<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;var kt={"!":function(e){return!e},"*":function(e,t){return e*t},"/":function(e,t){return e/t},"%":function(e,t){return e%t},"+":function(e,t){return e+t},"-":function(e,t){return e-t},"<":function(e,t){return e":function(e,t){return e>t},">=":function(e,t){return e>=t},"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},"&&":function(e,t){return e&&t},"||":function(e,t){return e||t},"?:":function(e,t,n){if(e)throw t;return n}};function Ct(e){var t=function(e){for(var t,n,r,i,o=[],a=[];t=e.match(Et);){for(n=t[0],(r=e.substr(0,t.index).trim())&&o.push(r);i=a.pop();){if(Ot[n]){if(Ot[n][0]===i){n=Ot[n][1]||n;break}}else if(xt.indexOf(i)>=0||_t[i]<_t[n]){a.push(i);break}o.push(i)}Ot[n]||a.push(n),e=e.substr(t.index+n.length)}return(e=e.trim())&&o.push(e),o.concat(a.reverse())}(e);return function(e){return function(e,t){var n,r,i,o,a,s,c=[];for(n=0;n3&&void 0!==arguments[3]?arguments[3]:10,a=e[t];if(Mt(n)&&Nt(r))if("function"==typeof i)if("number"==typeof o){var s={callback:i,priority:o,namespace:r};if(a[n]){var c,l=a[n].handlers;for(c=l.length;c>0&&!(o>=l[c-1].priority);c--);c===l.length?l[c]=s:l.splice(c,0,s),a.__current.forEach((function(e){e.name===n&&e.currentIndex>=c&&e.currentIndex++}))}else a[n]={handlers:[s],runs:0};"hookAdded"!==n&&e.doAction("hookAdded",n,r,i,o)}else console.error("If specified, the hook priority must be a number.");else console.error("The hook callback must be a function.")}};var Bt=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(r,i){var o=e[t];if(Mt(r)&&(n||Nt(i))){if(!o[r])return 0;var a=0;if(n)a=o[r].handlers.length,o[r]={runs:o[r].runs,handlers:[]};else for(var s=o[r].handlers,c=function(e){s[e].namespace===i&&(s.splice(e,1),a++,o.__current.forEach((function(t){t.name===r&&t.currentIndex>=e&&t.currentIndex--})))},l=s.length-1;l>=0;l--)c(l);return"hookRemoved"!==r&&e.doAction("hookRemoved",r,i),a}}};var Rt=function(e,t){return function(n,r){var i=e[t];return void 0!==r?n in i&&i[n].handlers.some((function(e){return e.namespace===r})):n in i}};function zt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2]&&arguments[2];return function(r){var i=e[t];i[r]||(i[r]={handlers:[],runs:0}),i[r].runs++;var o=i[r].handlers;for(var a=arguments.length,s=new Array(a>1?a-1:0),c=1;c1&&void 0!==arguments[1]?arguments[1]:"default";r.data[t]=St(St(St({},Dt),r.data[t]),e),r.data[t][""]=St(St({},Dt[""]),r.data[t][""])},s=function(e,t){a(e,t),o()},c=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0;return r.data[e]||a(void 0,e),r.dcnpgettext(e,t,n,i,o)},l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return e},u=function(e,t,r){var i=c(r,t,e);return n?(i=n.applyFilters("i18n.gettext_with_context",i,e,t,r),n.applyFilters("i18n.gettext_with_context_"+l(r),i,e,t,r)):i};if(e&&s(e,t),n){var d=function(e){It.test(e)&&o()};n.addAction("hookAdded","core/i18n",d),n.addAction("hookRemoved","core/i18n",d)}return{getLocaleData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return r.data[e]},setLocaleData:s,resetLocaleData:function(e,t){r.data={},r.pluralForms={},s(e,t)},subscribe:function(e){return i.add(e),function(){return i.delete(e)}},__:function(e,t){var r=c(t,void 0,e);return n?(r=n.applyFilters("i18n.gettext",r,e,t),n.applyFilters("i18n.gettext_"+l(t),r,e,t)):r},_x:u,_n:function(e,t,r,i){var o=c(i,void 0,e,t,r);return n?(o=n.applyFilters("i18n.ngettext",o,e,t,r,i),n.applyFilters("i18n.ngettext_"+l(i),o,e,t,r,i)):o},_nx:function(e,t,r,i,o){var a=c(o,i,e,t,r);return n?(a=n.applyFilters("i18n.ngettext_with_context",a,e,t,r,i,o),n.applyFilters("i18n.ngettext_with_context_"+l(o),a,e,t,r,i,o)):a},isRTL:function(){return"rtl"===u("ltr","text direction")},hasTranslation:function(e,t,i){var o,a,s=t?t+""+e:e,c=!(null===(o=r.data)||void 0===o||null===(a=o[null!=i?i:"default"])||void 0===a||!a[s]);return n&&(c=n.applyFilters("i18n.has_translation",c,e,t,i),c=n.applyFilters("i18n.has_translation_"+l(i),c,e,t,i)),c}}}(void 0,void 0,Gt)),Jt=($t.getLocaleData.bind($t),$t.setLocaleData.bind($t),$t.resetLocaleData.bind($t),$t.subscribe.bind($t),$t.__.bind($t));$t._x.bind($t),$t._n.bind($t),$t._nx.bind($t),$t.isRTL.bind($t),$t.hasTranslation.bind($t);function Xt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yt(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function vn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;if(!t||!Object.keys(t).length)return e;var n=e,r=e.indexOf("?");return-1!==r&&(t=Object.assign(hn(e),t),n=n.substr(0,r)),n+"?"+gn(t)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wn(e){for(var t=1;t]+)>; rel="next"/);return t?{next:t[1]}:{}}(e.headers.get("link")).next},On=function(e){var t=!!e.path&&-1!==e.path.indexOf("per_page=-1"),n=!!e.url&&-1!==e.url.indexOf("per_page=-1");return t||n},En=function(){var e,t=(e=un.a.mark((function e(t,n){var r,i,o,a,s,c;return un.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.parse){e.next=2;break}return e.abrupt("return",n(t));case 2:if(On(t)){e.next=4;break}return e.abrupt("return",n(t));case 4:return e.next=6,Wn(wn(wn({},(u={per_page:100},d=void 0,p=void 0,d=(l=t).path,p=l.url,wn(wn({},wt(l,["path","url"])),{},{url:p&&yn(p,u),path:d&&yn(d,u)}))),{},{parse:!1}));case 6:return r=e.sent,e.next=9,_n(r);case 9:if(i=e.sent,Array.isArray(i)){e.next=12;break}return e.abrupt("return",i);case 12:if(o=xn(r)){e.next=15;break}return e.abrupt("return",i);case 15:a=[].concat(i);case 16:if(!o){e.next=27;break}return e.next=19,Wn(wn(wn({},t),{},{path:void 0,url:o,parse:!1}));case 19:return s=e.sent,e.next=22,_n(s);case 22:c=e.sent,a=a.concat(c),o=xn(s),e.next=16;break;case 27:return e.abrupt("return",a);case 28:case"end":return e.stop()}var l,u,d,p}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){cn(o,r,i,a,s,"next",e)}function s(e){cn(o,r,i,a,s,"throw",e)}a(void 0)}))});return function(e,n){return t.apply(this,arguments)}}();function jn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ln(e){for(var t=1;t1&&void 0!==arguments[1])||arguments[1];return t?204===e.status?null:e.json?e.json():Promise.reject(e):e},Tn=function(e){var t={code:"invalid_json",message:Jt("The response is not a valid JSON response.")};if(!e||!e.json)throw t;return e.json().catch((function(){throw t}))},Pn=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Promise.resolve(An(e,t)).catch((function(e){return Sn(e,t)}))};function Sn(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t)throw e;return Tn(e).then((function(e){var t={code:"unknown_error",message:Jt("An unknown error occurred.")};throw e||t}))}function Dn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function In(e){for(var t=1;t=500&&t.status<600&&n?r(n).catch((function(){return!1!==e.parse?Promise.reject({code:"post_process",message:Jt("Media upload failed. If this is a photo or a large image, please scale it down and try again.")}):Promise.reject(t)})):Sn(t,e.parse)})).then((function(t){return Pn(t,e.parse)}))};function Mn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Fn(e){for(var t=1;t=200&&e.status<300)return e;throw e},qn=function(e){var t=e.url,n=e.path,r=e.data,i=e.parse,o=void 0===i||i,a=wt(e,["url","path","data","parse"]),s=e.body,c=e.headers;return c=Fn(Fn({},Bn),c),r&&(s=JSON.stringify(r),c["Content-Type"]="application/json"),window.fetch(t||n||window.location.href,Fn(Fn(Fn({},Rn),a),{},{body:s,headers:c})).then((function(e){return Promise.resolve(e).then(Hn).catch((function(e){return Sn(e,o)})).then((function(e){return Pn(e,o)}))}),(function(){throw{code:"fetch_error",message:Jt("You are probably offline.")}}))};function Un(e){return zn.reduceRight((function(e,t){return function(n){return t(n,e)}}),qn)(e).catch((function(t){return"rest_cookie_invalid_nonce"!==t.code?Promise.reject(t):window.fetch(Un.nonceEndpoint).then(Hn).then((function(e){return e.text()})).then((function(t){return Un.nonceMiddleware.nonce=t,Un(e)}))}))}Un.use=function(e){zn.unshift(e)},Un.setFetchHandler=function(e){qn=e},Un.createNonceMiddleware=Kt,Un.createPreloadingMiddleware=sn,Un.createRootURLMiddleware=on,Un.fetchAllMiddleware=En,Un.mediaUploadMiddleware=Nn;var Wn=Un;var Qn={cachePoints:{},spinners:{},init(e){if("undefined"!=typeof CLDCACHE){Wn.use(Wn.createNonceMiddleware(CLDCACHE.nonce));e.querySelectorAll("[data-cache-point]").forEach((e=>this._bind(e)))}},getCachePoint(e){return this.cachePoints["_"+e]?this.cachePoints["_"+e]:null},setCachePoint(e,t){const n=document.createElement("div"),r=this._getRow(),i=document.createElement("td");i.colSpan=2,i.className="cld-loading",r.appendChild(i);const o=document.getElementById(t.dataset.slug),a=document.getElementById(t.dataset.slug+"_search"),s=document.getElementById(t.dataset.slug+"_reload"),c=document.getElementById(t.dataset.browser),l=document.getElementById(t.dataset.apply);c.addEventListener("change",(t=>{this._handleManager(e)})),window.addEventListener("CacheToggle",(e=>{e.detail.cachePoint===t&&this._cacheChange(t,e.detail)})),l.addEventListener("click",(e=>{this._applyChanges(t)})),s.addEventListener("click",(t=>{this._load(e)})),a.addEventListener("keydown",(t=>{13===t.which&&(t.preventDefault(),t.stopPropagation(),this._load(e))})),n.className="cld-pagenav",l.cacheChanges={disable:[],enable:[],delete:[]},t.master=o,t.search=a,t.controller=c,t.viewer=t.parentNode.parentNode,t.loader=r,t.table=t.parentNode,t.apply=l,t.paginate=n,t.currentPage=1,t.viewer.appendChild(n),this.cachePoints["_"+e]=t},close(e){e.classList.add("closed")},open(e){e.classList.remove("closed")},isOpen(e){const t=this.getCachePoint(e);let n=!1;return t&&(n=t.controller.checked&&t.master.checked),n},_bind(e){const t=e.dataset.cachePoint;this.setCachePoint(t,e),this._handleManager(t)},_handleManager(e){const t=this.getCachePoint(e);t&&(this.isOpen(e)?(this.open(t.viewer),t.loaded||this._load(e)):(this.close(t.viewer),t.controller.checked=!1))},_load(e){const t=this.getCachePoint(e);this._clearChildren(t),t.appendChild(t.loader),this.open(t.loader),Wn({path:CLDCACHE.fetch_url,data:{ID:e,page:t.currentPage,search:t.search.value},method:"POST"}).then((e=>{t.removeChild(t.loader),this._buildList(t,e.items),this._buildNav(t,e);const n=t.querySelectorAll("[data-master]");yt.bind(n),t.loaded=!0}))},_cacheChange(e,t){const n=t.checked?t.states.on:t.states.off,r=t.checked?t.states.off:t.states.on;this._removeFromList(e,t.item.ID,r)||this._addToList(e,t.item.ID,n),this._evaluateApply(e)},_evaluateApply(e){this.close(e.apply);const t=e.apply.cacheChanges;let n=!1;for(const e in t)t[e].length&&(n=!0);n&&this.open(e.apply)},_applyChanges(e){const t=e.apply.cacheChanges;e.apply.disabled="disabled";for(const n in t)t[n].length&&this._set_state(e,n,t[n])},_set_state(e,t,n){this._showSpinners(n),Wn({path:CLDCACHE.update_url,data:{state:t,ids:n},method:"POST"}).then((n=>{this._hideSpinners(n),n.forEach((n=>{this.close(e.apply),this._removeFromList(e,n,t),this._evaluateApply(e),e.apply.disabled=""})),"delete"===t&&this._load(e.dataset.cachePoint)}))},_purgeCache(e){Wn({path:CLDCACHE.purge_url,data:{cachePoint:e.dataset.cachePoint},method:"POST"}).then((()=>{this._load(e.dataset.cachePoint)}))},_showSpinners(e){e.forEach((e=>{this.spinners["spinner_"+e].style.visibility="visible"}))},_hideSpinners(e){e.forEach((e=>{this.spinners["spinner_"+e].style.visibility="hidden"}))},_removeFromList(e,t,n){const r=this._getListIndex(e,t,n);let i=!1;return-1e.apply.cacheChanges[n].indexOf(t),_noCache(e){const t=this._getNote(wp.i18n.__("No files cached.","cloudinary"));e.viewer.appendChild(t),this.close(e.table)},_clearChildren(e){for(;e.children.length;){const t=e.lastChild;t.children.length&&this._clearChildren(t),e.removeChild(t)}},_buildList(e,t){t.forEach((t=>{if(t.note)return void e.appendChild(this._getNote(t.note));const n=this._getRow(t.ID),r=this._getStateSwitch(e,t,{on:"enable",off:"disable"}),i=this._getFile(e,t,n);n.appendChild(i),n.appendChild(r),e.appendChild(n)}))},_buildNav(e,t){e.paginate.innerHTML="";const n=document.createElement("button"),r=document.createElement("button");if(t.items.length){const t=document.createElement("button");t.type="button",t.className="button",t.innerText=wp.i18n.__("Purge cache point","cloudinary"),t.style.float="left",e.paginate.appendChild(t),t.addEventListener("click",(t=>{confirm(wp.i18n.__("Purge entire cache point?","cloudinary"))&&this._purgeCache(e)}))}n.type="button",n.innerHTML="‹",n.className="button cld-pagenav-prev",1===t.current_page?n.disabled=!0:n.addEventListener("click",(n=>{e.currentPage=t.current_page-1,this._load(e.dataset.cachePoint)})),r.type="button",r.innerHTML="›",r.className="button cld-pagenav-next",t.current_page===t.total_pages||0===t.total_pages?r.disabled=!0:r.addEventListener("click",(n=>{e.currentPage=t.current_page+1,this._load(e.dataset.cachePoint)}));const i=document.createElement("span");i.innerText=t.nav_text,i.className="cld-pagenav-text",e.paginate.appendChild(n),e.paginate.appendChild(i),e.paginate.appendChild(r)},_getNote(e){const t=this._getRow(),n=document.createElement("td");return n.colSpan=2,n.innerText=e,t.appendChild(n),t},_getRow(e){const t=document.createElement("tr");return e&&(t.id="row_"+e),t},_getFile(e,t){const n=document.createElement("td"),r=document.createElement("label"),i=this._getDeleter(e,n,t);r.innerText=t.short_url,r.htmlFor=t.key,n.appendChild(i),n.appendChild(r);const o=document.createElement("span"),a="spinner_"+t.ID;return o.className="spinner",o.id=a,n.appendChild(o),this.spinners[a]=o,n},_getDeleter(e,t,n){const r=document.createElement("input"),i=[e.dataset.slug+"_deleter"],o=this._getListIndex(e,n.ID,"delete");return r.type="checkbox",r.value=n.ID,r.id=n.key,r.dataset.master=JSON.stringify(i),-1{t.style.opacity=1,t.style.textDecoration="",r.checked&&(t.style.opacity=.8,t.style.textDecoration="line-through");const o=new CustomEvent("CacheToggle",{detail:{checked:r.checked,states:{on:"delete",off:n.active?"enable":"disable"},item:n,cachePoint:e}});window.dispatchEvent(o)})),r},_getStateSwitch(e,t,n){const r=document.createElement("td"),i=document.createElement("label"),o=document.createElement("input"),a=document.createElement("span"),s=[e.dataset.slug+"_selector"],c=this._getListIndex(e,t.ID,"disable");return r.style.textAlign="right",i.className="cld-input-on-off-control mini",o.type="checkbox",o.value=t.ID,o.checked=!(-1{const i=new CustomEvent("CacheToggle",{detail:{checked:o.checked,states:n,item:t,cachePoint:e}});window.dispatchEvent(i)})),r.appendChild(i),r}};const Vn={bindings:{},parent_check_data:{},check_parents:{},_init(e){const t=e.querySelectorAll("[data-condition]"),n=e.querySelectorAll("[data-toggle]"),r=e.querySelectorAll("[data-for]"),i=e.querySelectorAll("[data-tooltip]"),o=e.querySelectorAll("[data-bind-trigger]"),a=e.querySelectorAll("[data-master]"),s=e.querySelectorAll("[data-file]"),c=e.querySelectorAll("[data-auto-suffix]"),l={};yt.bind(a),c.forEach((e=>this._autoSuffix(e))),o.forEach((e=>this._trigger(e))),n.forEach((e=>this._toggle(e))),t.forEach((e=>this._bind(e))),r.forEach((e=>this._alias(e))),s.forEach((e=>this._files(e,l))),mt(i,{theme:"cloudinary",arrow:!1,placement:"bottom-start",aria:{content:"auto",expanded:"auto"},content:t=>e.getElementById(t.getAttribute("data-tooltip")).innerHTML}),[...o].forEach((e=>{e.dispatchEvent(new Event("input"))})),Qn.init(e)},_autoSuffix(e){const t=e.dataset.autoSuffix;let n="";const r=[...t.split(";")].map((e=>0===e.indexOf("*")?(n=e.replace("*",""),n):e));e.addEventListener("change",(()=>{const t=e.value.replace(" ",""),i=t.replace(/[^0-9]/g,""),o=t.replace(/[0-9]/g,"").toLowerCase();i&&(-1===r.indexOf(o)?e.value=i+n:e.value=i+o)})),e.dispatchEvent(new Event("change"))},_files(e,t){const n=e.dataset.parent;n&&(this.check_parents[n]=document.getElementById(n),this.parent_check_data[n]||(this.parent_check_data[n]=this.check_parents[n].value?JSON.parse(this.check_parents[n].value):[]),e.addEventListener("change",(()=>{const r=this.parent_check_data[n].indexOf(e.value);e.checked?this.parent_check_data[n].push(e.value):this.parent_check_data[n].splice(r,1),t[n]&&clearTimeout(t[n]),t[n]=setTimeout((()=>{this._compileParent(n)}),10)})))},_compileParent(e){this.check_parents[e].value=JSON.stringify(this.parent_check_data[e]),this.check_parents[e].dispatchEvent(new Event("change"))},_bind(e){e.condition=JSON.parse(e.dataset.condition);for(const t in e.condition)this.bindings[t]&&this.bindings[t].elements.push(e)},_trigger(e){const t=e.dataset.bindTrigger,n=this;n.bindings[t]={input:e,value:e.value,checked:!0,elements:[]},e.addEventListener("change",(function(t){e.dispatchEvent(new Event("input"))})),e.addEventListener("input",(function(){n.bindings[t].value=e.value,"checkbox"!==e.type&&"radio"!==e.type||(n.bindings[t].checked=e.checked);for(const r in n.bindings[t].elements)n.toggle(n.bindings[t].elements[r],e)}))},_alias(e){e.addEventListener("click",(function(){document.getElementById(e.dataset.for).dispatchEvent(new Event("click"))}))},_toggle(e){const t=this;e.addEventListener("click",(function(n){n.stopPropagation();const r=document.querySelector('[data-wrap="'+e.dataset.toggle+'"]'),i=r.classList.contains("open")?"closed":"open";t.toggle(r,e,i)}))},toggle(e,t,n){if(!n){n="open";for(const t in e.condition){let r=this.bindings[t].value;const i=e.condition[t];"boolean"==typeof i&&(r=this.bindings[t].checked),i!==r&&(n="closed")}}const r=e.getElementsByClassName("cld-ui-input");"closed"===n?(e.classList.remove("open"),e.classList.add("closed"),t&&t.classList.contains("dashicons")&&(t.classList.remove("dashicons-arrow-up-alt2"),t.classList.add("dashicons-arrow-down-alt2")),[...r].forEach((function(e){e.dataset.disabled=!0}))):(e.classList.remove("closed"),e.classList.add("open"),t&&t.classList.contains("dashicons")&&(t.classList.remove("dashicons-arrow-down-alt2"),t.classList.add("dashicons-arrow-up-alt2")),[...r].forEach((function(e){e.dataset.disabled=!1})))}};window.addEventListener("load",Vn._init(document));var Gn=Vn;window.$=window.jQuery;const $n={UI:Gn,Settings:i.a,Widget:a.a,GlobalTransformations:c,TermsOrder:u,MediaLibrary:p,Notices:h}}]); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=14)}([function(e,t,n){var r;!function(){"use strict";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function o(e){return s(l(e),arguments)}function a(e,t){return o.apply(null,[e].concat(t||[]))}function s(e,t){var n,r,a,s,c,l,u,d,p,f=1,h=e.length,m="";for(r=0;r=0),s.type){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,s.width?parseInt(s.width):0);break;case"e":n=s.precision?parseFloat(n).toExponential(s.precision):parseFloat(n).toExponential();break;case"f":n=s.precision?parseFloat(n).toFixed(s.precision):parseFloat(n);break;case"g":n=s.precision?String(Number(n.toPrecision(s.precision))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=s.precision?n.substring(0,s.precision):n;break;case"t":n=String(!!n),n=s.precision?n.substring(0,s.precision):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=s.precision?n.substring(0,s.precision):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=s.precision?n.substring(0,s.precision):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}i.json.test(s.type)?m+=n:(!i.number.test(s.type)||d&&!s.sign?p="":(p=d?"+":"-",n=n.toString().replace(i.sign,"")),l=s.pad_char?"0"===s.pad_char?"0":s.pad_char.charAt(1):" ",u=s.width-(p+n).length,c=s.width&&u>0?l.repeat(u):"",m+=s.align?p+n+c:"0"===l?p+c+n:c+p+n)}return m}var c=Object.create(null);function l(e){if(c[e])return c[e];for(var t,n=e,r=[],o=0;n;){if(null!==(t=i.text.exec(n)))r.push(t[0]);else if(null!==(t=i.modulo.exec(n)))r.push("%");else{if(null===(t=i.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(t[2]){o|=1;var a=[],s=t[2],l=[];if(null===(l=i.key.exec(s)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(a.push(l[1]);""!==(s=s.substring(l[0].length));)if(null!==(l=i.key_access.exec(s)))a.push(l[1]);else{if(null===(l=i.index_access.exec(s)))throw new SyntaxError("[sprintf] failed to parse named argument key");a.push(l[1])}t[2]=a}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");r.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}n=n.substring(t[0].length)}return c[e]=r}t.sprintf=o,t.vsprintf=a,"undefined"!=typeof window&&(window.sprintf=o,window.vsprintf=a,void 0===(r=function(){return{sprintf:o,vsprintf:a}}.call(t,n,t,e))||(e.exports=r))}()},function(e,t,n){e.exports=function(e,t){var n,r,i=0;function o(){var o,a,s=n,c=arguments.length;e:for(;s;){if(s.args.length===arguments.length){for(a=0;ao[0];break;case"lt":n=this.value=0&&(e.metadata.cldoverwrite="true")})),wp.media.events.on("editor:image-update",(function(e){const t=e.image.className.split(" ");e.metadata.cldoverwrite&&-1===t.indexOf("cld-overwrite")?t.push("cld-overwrite"):!e.metadata.cldoverwrite&&t.indexOf("cld-overwrite")>=0&&delete t[t.indexOf("cld-overwrite")],e.image.className=t.join(" ")}));let e=null;const t=wp.media.string.props;wp.media.string.props=function(n,r){n.cldoverwrite&&(n.classes=["cld-overwrite"],e=!0);return t(n,r)},wp.media.post=function(t,n){if("send-attachment-to-editor"===t){const t=wp.media.editor.get().state().get("selection").get(n.attachment);t.attributes.transformations&&(n.attachment.transformations=t.attributes.transformations),(n.html.indexOf("cld-overwrite")>-1||!0===e)&&(n.attachment.cldoverwrite=!0,e=null)}return wp.ajax.post(t,n)};const n=wp.media.view.MediaFrame.Select,r=wp.media.view.MediaFrame.Post,i=wp.media.view.MediaFrame.ImageDetails,o=wp.media.view.MediaFrame.VideoDetails,a=wp.media.View.extend({tagName:"div",className:"cloudinary-widget",template:wp.template("cloudinary-dam"),active:!1,toolbar:null,frame:null,ready(){const e=this.controller,t=this.model.get("selection"),n=this.model.get("library"),r=wp.media.model.Attachment;if(CLDN.mloptions.multiple=e.options.multiple,this.cid!==this.active){if(CLDN.mloptions.inline_container="#cloudinary-dam-"+e.cid,1===t.length){const e=r.get(t.models[0].id);void 0!==e.attributes.public_id&&(CLDN.mloptions.asset={resource_id:e.attributes.public_id})}else CLDN.mloptions.asset=null;try{CLDN.mloptions.folder||(CLDN.mloptions.folder={path:""});const e=t.props.attributes.type;CLDN.mloptions.folder.resource_type=Array.isArray(e)?e[0]:e}catch(e){}window.ml=cloudinary.openMediaLibrary(CLDN.mloptions,{insertHandler(i){for(let o=0;o0;a--)s/=o;return s.toFixed(2)},r.human=function(e){var t=r.calculate(e);return t.fixed+r.spacer+t.suffix},r}},e.exports?e.exports=a():(i=[],void 0===(o="function"==typeof(r=a)?r.apply(t,i):r)||(e.exports=o))},,,,function(e,t){!function(e,t){"use strict";var n,r,i={rootMargin:"256px 0px",threshold:.01,lazyImage:'img[loading="lazy"]',lazyIframe:'iframe[loading="lazy"]'},o="loading"in HTMLImageElement.prototype&&"loading"in HTMLIFrameElement.prototype,a="onscroll"in window;function s(e){var t,n,r=[];"picture"===e.parentNode.tagName.toLowerCase()&&((n=(t=e.parentNode).querySelector("source[data-lazy-remove]"))&&t.removeChild(n),r=Array.prototype.slice.call(e.parentNode.querySelectorAll("source"))),r.push(e),r.forEach((function(e){e.hasAttribute("data-lazy-srcset")&&(e.setAttribute("srcset",e.getAttribute("data-lazy-srcset")),e.removeAttribute("data-lazy-srcset"))})),e.setAttribute("src",e.getAttribute("data-lazy-src")),e.removeAttribute("data-lazy-src")}function c(e){var t=document.createElement("div");for(t.innerHTML=function(e){var t=e.textContent||e.innerHTML,r="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 "+((t.match(/width=['"](\d+)['"]/)||!1)[1]||1)+" "+((t.match(/height=['"](\d+)['"]/)||!1)[1]||1)+"%27%3E%3C/svg%3E";return!o&&a&&(void 0===n?t=t.replace(/(?:\r\n|\r|\n|\t| )src=/g,' lazyload="1" src='):("picture"===e.parentNode.tagName.toLowerCase()&&(t=''+t),t=t.replace(/(?:\r\n|\r|\n|\t| )srcset=/g," data-lazy-srcset=").replace(/(?:\r\n|\r|\n|\t| )src=/g,' src="'+r+'" data-lazy-src='))),t}(e);t.firstChild;)o||!a||void 0===n||!t.firstChild.tagName||"img"!==t.firstChild.tagName.toLowerCase()&&"iframe"!==t.firstChild.tagName.toLowerCase()||n.observe(t.firstChild),e.parentNode.insertBefore(t.firstChild,e);e.parentNode.removeChild(e)}function l(){document.querySelectorAll("noscript.loading-lazy").forEach(c),void 0!==window.matchMedia&&window.matchMedia("print").addListener((function(e){e.matches&&document.querySelectorAll(i.lazyImage+"[data-lazy-src],"+i.lazyIframe+"[data-lazy-src]").forEach((function(e){s(e)}))}))}"undefined"!=typeof NodeList&&NodeList.prototype&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),"IntersectionObserver"in window&&(n=new IntersectionObserver((function(e,t){e.forEach((function(e){if(0!==e.intersectionRatio){var n=e.target;t.unobserve(n),s(n)}}))}),i)),r="requestAnimationFrame"in window?window.requestAnimationFrame:function(e){e()},/comp|inter/.test(document.readyState)?r(l):"addEventListener"in document?document.addEventListener("DOMContentLoaded",(function(){r(l)})):document.attachEvent("onreadystatechange",(function(){"complete"===document.readyState&&l()}))}()},function(e,t){const n=document.querySelector(".cloudinary-collapsible__toggle");n&&n.addEventListener("click",(function(){const e=document.querySelector(".cloudinary-collapsible__content"),t="none"===window.getComputedStyle(e,null).getPropertyValue("display"),n=document.querySelector(".cloudinary-collapsible__toggle button i");e.style.display=t?"block":"none";const r="dashicons-arrow-down-alt2",i="dashicons-arrow-up-alt2";n.classList.contains(r)?(n.classList.remove(r),n.classList.add(i)):(n.classList.remove(i),n.classList.add(r))}))},function(e,t,n){var r=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function l(e,t,n,r){var i=t&&t.prototype instanceof g?t:g,o=Object.create(i.prototype),a=new C(r||[]);return o._invoke=function(e,t,n){var r=d;return function(i,o){if(r===f)throw new Error("Generator is already running");if(r===h){if("throw"===i)throw o;return P()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=j(a,n);if(s){if(s===m)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===d)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=f;var c=u(e,t,n);if("normal"===c.type){if(r=n.done?h:p,c.arg===m)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=h,n.method="throw",n.arg=c.arg)}}}(e,n,a),o}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var d="suspendedStart",p="suspendedYield",f="executing",h="completed",m={};function g(){}function v(){}function y(){}var b={};b[o]=function(){return this};var w=Object.getPrototypeOf,_=w&&w(w(A([])));_&&_!==n&&r.call(_,o)&&(b=_);var x=y.prototype=g.prototype=Object.create(b);function O(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function E(e,t){function n(i,o,a,s){var c=u(e[i],e,o);if("throw"!==c.type){var l=c.arg,d=l.value;return d&&"object"==typeof d&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(d).then((function(e){l.value=e,a(l)}),(function(e){return n("throw",e,a,s)}))}s(c.arg)}var i;this._invoke=function(e,r){function o(){return new t((function(t,i){n(e,r,t,i)}))}return i=i?i.then(o,o):o()}}function j(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,j(e,n),"throw"===n.method))return m;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var i=u(r,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,m;var o=i.arg;return o?o.done?(n[e.resultName]=o.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,m):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function k(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function A(e){if(e){var n=e[o];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,a=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(c&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),k(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:A(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),m}},e}(e.exports);try{regeneratorRuntime=r}catch(e){Function("r","regeneratorRuntime = r")(r)}},,,function(e,t,n){"use strict";n.r(t),n.d(t,"cloudinary",(function(){return ar}));n(9),n(10);var r=n(3),i=n.n(r),o=n(4),a=n.n(o);const s={sample:{image:document.getElementById("transformation-sample-image"),video:document.getElementById("transformation-sample-video")},preview:{image:document.getElementById("sample-image"),video:document.getElementById("sample-video")},fields:document.getElementsByClassName("cld-ui-input"),button:{image:document.getElementById("refresh-image-preview"),video:document.getElementById("refresh-video-preview")},spinner:{image:document.getElementById("image-loader"),video:document.getElementById("video-loader")},optimization:{image:document.getElementById("image_optimization"),video:document.getElementById("video_optimization")},error_container:document.getElementById("cld-preview-error"),activeItem:null,elements:{image:[],video:[]},_placeItem(e){null!==e&&(e.style.display="block",e.style.visibility="visible",e.style.position="absolute",e.style.top=e.parentElement.clientHeight/2-e.clientHeight/2+"px",e.style.left=e.parentElement.clientWidth/2-e.clientWidth/2+"px")},_setLoading(e){this.button[e].style.display="block",this._placeItem(this.button[e]),this.preview[e].style.opacity="0.1"},_build(e){this.sample[e].innerHTML="",this.elements[e]=[];for(const t of this.fields){if(e!==t.dataset.context||t.dataset.disabled&&"true"===t.dataset.disabled)continue;let n=t.value.trim();if(n.length){if("select-one"===t.type){if("none"===n||!1===this.optimization[e].checked)continue;n=t.dataset.meta+"_"+n}else e=t.dataset.context,t.dataset.meta&&(n=t.dataset.meta+"_"+n),t.dataset.suffix&&(n+=t.dataset.suffix),n=this._transformations(n,e,!0);n&&this.elements[e].push(n)}}let t="";this.elements[e].length&&(t="/"+this._getGlobalTransformationElements(e).replace(/ /g,"%20")),this.sample[e].textContent=t,this.sample[e].parentElement.href="https://res.cloudinary.com/demo/"+this.sample[e].parentElement.innerText.trim().replace("../","").replace(/ /g,"%20")},_clearLoading(e){this.spinner[e].style.visibility="hidden",this.activeItem=null,this.preview[e].style.opacity=1},_refresh(e,t){e&&e.preventDefault();const n=this,r=CLD_GLOBAL_TRANSFORMATIONS[t].preview_url+this._getGlobalTransformationElements(t)+CLD_GLOBAL_TRANSFORMATIONS[t].file;if(this.button[t].style.display="none",this._placeItem(this.spinner[t]),"image"===t){const e=new Image;e.onload=function(){n.preview[t].src=this.src,n._clearLoading(t),n.error_container&&(n.error_container.style.display="none"),e.remove()},e.onerror=function(){const e=n.elements[t].includes("f_mp4");n.error_container&&(n.error_container.style.display="block",e?(n.error_container.innerHTML=CLD_GLOBAL_TRANSFORMATIONS[t].warning.replace("%s","f_mp4"),n.error_container.classList.replace("settings-alert-error","settings-alert-warning")):(n.error_container.innerHTML=CLD_GLOBAL_TRANSFORMATIONS[t].error,n.error_container.classList.replace("settings-alert-warning","settings-alert-error"))),n._clearLoading(t)},e.src=r}else{const e=n._transformations(n._getGlobalTransformationElements(t),t);samplePlayer.source({publicId:"dog",transformation:e}),n._clearLoading(t)}},_getGlobalTransformationElements(e){let t=[];return t.push(this.elements[e].slice(0,2).join(",")),t.push(this.elements[e].slice(2).join(",")),t=t.filter((e=>e)).join("/"),t},_transformations(e,t,n=!1){const r=CLD_GLOBAL_TRANSFORMATIONS[t].valid_types;let i=null;const o=e.split("/"),a=[];for(let e=0;e{const r=!!n.length&&jQuery('[data-item="'+i+":"+n[0].id+'"]');r.length?r.remove():(jQuery(`.cld-tax-order-list-item:contains(${a})`).remove(),--e.startId),this.processTags(t)}))}),jQuery("body").on("change",".selectit input",(function(){const t=jQuery(this),n=t.val(),r=t.is(":checked"),i=t.parent().text().trim();!0===r?e.tags.find(`[data-item="category:${n}"]`).length||e._pushItem(`category:${n}`,i):e.tags.find(`[data-item="category:${n}"]`).remove()}))},_createItem(e,t){const n=jQuery("
  • "),r=jQuery(""),i=jQuery("");return n.addClass("cld-tax-order-list-item").attr("data-item",e),i.addClass("cld-tax-order-list-item-input").attr("type","hidden").attr("name","cld_tax_order[]").val(e),r.addClass("dashicons dashicons-menu cld-tax-order-list-item-handle"),n.append(r).append(t).append(i),n},_pushItem(e,t){const n=this._createItem(e,t);this.tags.append(n)},_sortable(){jQuery(".cld-tax-order-list").sortable({connectWith:".cld-tax-order",axis:"y",handle:".cld-tax-order-list-item-handle",placeholder:"cld-tax-order-list-item-placeholder",forcePlaceholderSize:!0,helper:"clone"})}};if(void 0!==window.CLDN&&(l._init(),jQuery("[data-wp-lists] .selectit input[checked]").each(((e,t)=>{jQuery(t).trigger("change")}))),wp.data&&wp.data.select("core/editor")){const e={};wp.data.subscribe((function(){const t=wp.data.select("core").getTaxonomies();if(t)for(const n in t){const r=wp.data.select("core/editor").getEditedPostAttribute(t[n].rest_base);e[t[n].slug]=r}}));const t=wp.element.createElement,n=n=>{class r extends n{constructor(e){super(e),this.currentItems=jQuery(".cld-tax-order-list-item").map(((e,t)=>jQuery(t).data("item"))).get()}makeItem(e){if(this.currentItems.includes(this.getId(e)))return;const t=this.makeElement(e);jQuery("#cld-tax-items").append(t)}removeItem(e){const t=jQuery(`[data-item="${this.getId(e)}"]`);t.length&&(t.remove(),this.currentItems=this.currentItems.filter((t=>t!==this.getId(e))))}findOrCreateTerm(e){return(e=super.findOrCreateTerm(e)).then((e=>this.makeItem(e))),e}onChange(t){super.onChange(t);const n=this.pickItem(t);n&&(e[this.props.slug].includes(n.id)?this.makeItem(n):this.removeItem(n))}pickItem(e){if("object"==typeof e){if(e.target){for(const t in this.state.availableTerms)if(this.state.availableTerms[t].id===parseInt(e.target.value))return this.state.availableTerms[t]}else if(Array.isArray(e)){let t=this.state.selectedTerms.filter((t=>!e.includes(t)))[0];return void 0===t&&(t=e.filter((e=>!this.state.selectedTerms.includes(e)))[0]),this.state.availableTerms.find((e=>e.name===t))}}else if("number"==typeof e){for(const t in this.state.availableTerms)if(this.state.availableTerms[t].id===e)return this.state.availableTerms[t]}else{let t;if(e.length>this.state.selectedTerms.length)for(const n in e)-1===this.state.selectedTerms.indexOf(e[n])&&(t=e[n]);else for(const n in this.state.selectedTerms)-1===e.indexOf(this.state.selectedTerms[n])&&(t=this.state.selectedTerms[n]);for(const e in this.state.availableTerms)if(this.state.availableTerms[e].name===t)return this.state.availableTerms[e]}}getId(e){return`${this.props.slug}:${e.id}`}makeElement(e){const t=jQuery("
  • "),n=jQuery(""),r=jQuery("");return t.addClass("cld-tax-order-list-item").attr("data-item",this.getId(e)),r.addClass("cld-tax-order-list-item-input").attr("type","hidden").attr("name","cld_tax_order[]").val(this.getId(e)),n.addClass("dashicons dashicons-menu cld-tax-order-list-item-handle"),t.append(n).append(e.name).append(r),t}}return e=>t(r,e)};wp.hooks.addFilter("editor.PostTaxonomyType","cld",n)}var u=l;const d={wpWrap:document.getElementById("wpwrap"),wpContent:document.getElementById("wpbody-content"),libraryWrap:document.getElementById("cloudinary-embed"),_init(){const e=this;"undefined"!=typeof CLD_ML&&(cloudinary.openMediaLibrary(CLD_ML.mloptions,{insertHandler(){alert("Import is not yet implemented.")}}),window.addEventListener("resize",(function(){e._resize()})),e._resize())},_resize(){const e=getComputedStyle(this.wpContent);this.libraryWrap.style.height=this.wpWrap.offsetHeight-parseInt(e.getPropertyValue("padding-bottom"))+"px"}};var p=d;d._init();const f={_init(){const e=this;if("undefined"!=typeof CLDIS){[...document.getElementsByClassName("cld-notice-box")].forEach((t=>{const n=t.getElementsByClassName("notice-dismiss");n.length&&n[0].addEventListener("click",(n=>{t.style.height=t.offsetHeight+"px",n.preventDefault(),setTimeout((function(){e._dismiss(t)}),5)}))}))}},_dismiss(e){const t=e.dataset.dismiss,n=parseInt(e.dataset.duration);e.classList.add("dismissed"),e.style.height="0px",setTimeout((function(){e.remove()}),400),0=0?e.ownerDocument.body:b(e)&&j(e)?e:A(C(e))}function P(e,t){var n;void 0===t&&(t=[]);var r=A(e),i=r===(null==(n=e.ownerDocument)?void 0:n.body),o=g(r),a=i?[o].concat(o.visualViewport||[],j(r)?r:[]):r,s=t.concat(a);return i?s:s.concat(P(C(a)))}function T(e){return["table","td","th"].indexOf(_(e))>=0}function S(e){return b(e)&&"fixed"!==E(e).position?e.offsetParent:null}function D(e){for(var t=g(e),n=S(e);n&&T(n)&&"static"===E(n).position;)n=S(n);return n&&("html"===_(n)||"body"===_(n)&&"static"===E(n).position)?t:n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&b(e)&&"fixed"===E(e).position)return null;for(var n=C(e);b(n)&&["html","body"].indexOf(_(n))<0;){var r=E(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||t&&"filter"===r.willChange||t&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(e)||t}var I="top",N="bottom",M="right",F="left",B="auto",R=[I,N,M,F],z="start",H="end",q="viewport",U="popper",W=R.reduce((function(e,t){return e.concat([t+"-"+z,t+"-"+H])}),[]),Q=[].concat(R,[B]).reduce((function(e,t){return e.concat([t,t+"-"+z,t+"-"+H])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function G(e){var t=new Map,n=new Set,r=[];function i(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&i(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||i(e)})),r}var $={placement:"bottom",modifiers:[],strategy:"absolute"};function J(){for(var e=arguments.length,t=new Array(e),n=0;n=0?"x":"y"}function ne(e){var t,n=e.reference,r=e.element,i=e.placement,o=i?Z(i):null,a=i?ee(i):null,s=n.x+n.width/2-r.width/2,c=n.y+n.height/2-r.height/2;switch(o){case I:t={x:s,y:n.y-r.height};break;case N:t={x:s,y:n.y+n.height};break;case M:t={x:n.x+n.width,y:c};break;case F:t={x:n.x-r.width,y:c};break;default:t={x:n.x,y:n.y}}var l=o?te(o):null;if(null!=l){var u="y"===l?"height":"width";switch(a){case z:t[l]=t[l]-(n[u]/2-r[u]/2);break;case H:t[l]=t[l]+(n[u]/2-r[u]/2)}}return t}var re={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=ne({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ie=Math.max,oe=Math.min,ae=Math.round,se={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ce(e){var t,n=e.popper,r=e.popperRect,i=e.placement,o=e.offsets,a=e.position,s=e.gpuAcceleration,c=e.adaptive,l=e.roundOffsets,u=!0===l?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:ae(ae(t*r)/r)||0,y:ae(ae(n*r)/r)||0}}(o):"function"==typeof l?l(o):o,d=u.x,p=void 0===d?0:d,f=u.y,h=void 0===f?0:f,m=o.hasOwnProperty("x"),v=o.hasOwnProperty("y"),y=F,b=I,w=window;if(c){var _=D(n),O="clientHeight",j="clientWidth";_===g(n)&&"static"!==E(_=x(n)).position&&(O="scrollHeight",j="scrollWidth"),_=_,i===I&&(b=N,h-=_[O]-r.height,h*=s?1:-1),i===F&&(y=M,p-=_[j]-r.width,p*=s?1:-1)}var L,k=Object.assign({position:a},c&&se);return s?Object.assign({},k,((L={})[b]=v?"0":"",L[y]=m?"0":"",L.transform=(w.devicePixelRatio||1)<2?"translate("+p+"px, "+h+"px)":"translate3d("+p+"px, "+h+"px, 0)",L)):Object.assign({},k,((t={})[b]=v?h+"px":"",t[y]=m?p+"px":"",t.transform="",t))}var le={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},i=t.elements[e];b(i)&&_(i)&&(Object.assign(i.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],i=t.attributes[e]||{},o=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});b(r)&&_(r)&&(Object.assign(r.style,o),Object.keys(i).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]};var ue={left:"right",right:"left",bottom:"top",top:"bottom"};function de(e){return e.replace(/left|right|bottom|top/g,(function(e){return ue[e]}))}var pe={start:"end",end:"start"};function fe(e){return e.replace(/start|end/g,(function(e){return pe[e]}))}function he(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&w(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function me(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function ge(e,t){return t===q?me(function(e){var t=g(e),n=x(e),r=t.visualViewport,i=n.clientWidth,o=n.clientHeight,a=0,s=0;return r&&(i=r.width,o=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=r.offsetLeft,s=r.offsetTop)),{width:i,height:o,x:a+O(e),y:s}}(e)):b(t)?function(e){var t=m(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):me(function(e){var t,n=x(e),r=v(e),i=null==(t=e.ownerDocument)?void 0:t.body,o=ie(n.scrollWidth,n.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=ie(n.scrollHeight,n.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-r.scrollLeft+O(e),c=-r.scrollTop;return"rtl"===E(i||n).direction&&(s+=ie(n.clientWidth,i?i.clientWidth:0)-o),{width:o,height:a,x:s,y:c}}(x(e)))}function ve(e,t,n){var r="clippingParents"===t?function(e){var t=P(C(e)),n=["absolute","fixed"].indexOf(E(e).position)>=0&&b(e)?D(e):e;return y(n)?t.filter((function(e){return y(e)&&he(e,n)&&"body"!==_(e)})):[]}(e):[].concat(t),i=[].concat(r,[n]),o=i[0],a=i.reduce((function(t,n){var r=ge(e,n);return t.top=ie(r.top,t.top),t.right=oe(r.right,t.right),t.bottom=oe(r.bottom,t.bottom),t.left=ie(r.left,t.left),t}),ge(e,o));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function ye(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function be(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function we(e,t){void 0===t&&(t={});var n=t,r=n.placement,i=void 0===r?e.placement:r,o=n.boundary,a=void 0===o?"clippingParents":o,s=n.rootBoundary,c=void 0===s?q:s,l=n.elementContext,u=void 0===l?U:l,d=n.altBoundary,p=void 0!==d&&d,f=n.padding,h=void 0===f?0:f,g=ye("number"!=typeof h?h:be(h,R)),v=u===U?"reference":U,b=e.elements.reference,w=e.rects.popper,_=e.elements[p?v:u],O=ve(y(_)?_:_.contextElement||x(e.elements.popper),a,c),E=m(b),j=ne({reference:E,element:w,strategy:"absolute",placement:i}),L=me(Object.assign({},w,j)),k=u===U?L:E,C={top:O.top-k.top+g.top,bottom:k.bottom-O.bottom+g.bottom,left:O.left-k.left+g.left,right:k.right-O.right+g.right},A=e.modifiersData.offset;if(u===U&&A){var P=A[i];Object.keys(C).forEach((function(e){var t=[M,N].indexOf(e)>=0?1:-1,n=[I,N].indexOf(e)>=0?"y":"x";C[e]+=P[n]*t}))}return C}function _e(e,t,n){return ie(e,oe(t,n))}function xe(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Oe(e){return[I,M,N,F].some((function(t){return e[t]>=0}))}var Ee=X({defaultModifiers:[K,re,{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,i=void 0===r||r,o=n.adaptive,a=void 0===o||o,s=n.roundOffsets,c=void 0===s||s,l={placement:Z(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,ce(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,ce(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},le,{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,i=n.offset,o=void 0===i?[0,0]:i,a=Q.reduce((function(e,n){return e[n]=function(e,t,n){var r=Z(e),i=[F,I].indexOf(r)>=0?-1:1,o="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=o[0],s=o[1];return a=a||0,s=(s||0)*i,[F,M].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,o),e}),{}),s=a[t.placement],c=s.x,l=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[r]=a}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var i=n.mainAxis,o=void 0===i||i,a=n.altAxis,s=void 0===a||a,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,p=n.altBoundary,f=n.flipVariations,h=void 0===f||f,m=n.allowedAutoPlacements,g=t.options.placement,v=Z(g),y=c||(v===g||!h?[de(g)]:function(e){if(Z(e)===B)return[];var t=de(e);return[fe(e),t,fe(t)]}(g)),b=[g].concat(y).reduce((function(e,n){return e.concat(Z(n)===B?function(e,t){void 0===t&&(t={});var n=t,r=n.placement,i=n.boundary,o=n.rootBoundary,a=n.padding,s=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?Q:c,u=ee(r),d=u?s?W:W.filter((function(e){return ee(e)===u})):R,p=d.filter((function(e){return l.indexOf(e)>=0}));0===p.length&&(p=d);var f=p.reduce((function(t,n){return t[n]=we(e,{placement:n,boundary:i,rootBoundary:o,padding:a})[Z(n)],t}),{});return Object.keys(f).sort((function(e,t){return f[e]-f[t]}))}(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),w=t.rects.reference,_=t.rects.popper,x=new Map,O=!0,E=b[0],j=0;j=0,P=A?"width":"height",T=we(t,{placement:L,boundary:u,rootBoundary:d,altBoundary:p,padding:l}),S=A?C?M:F:C?N:I;w[P]>_[P]&&(S=de(S));var D=de(S),H=[];if(o&&H.push(T[k]<=0),s&&H.push(T[S]<=0,T[D]<=0),H.every((function(e){return e}))){E=L,O=!1;break}x.set(L,H)}if(O)for(var q=function(e){var t=b.find((function(t){var n=x.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},U=h?3:1;U>0;U--){if("break"===q(U))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,i=n.mainAxis,o=void 0===i||i,a=n.altAxis,s=void 0!==a&&a,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,p=n.tether,f=void 0===p||p,h=n.tetherOffset,m=void 0===h?0:h,g=we(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),v=Z(t.placement),y=ee(t.placement),b=!y,w=te(v),_="x"===w?"y":"x",x=t.modifiersData.popperOffsets,O=t.rects.reference,E=t.rects.popper,j="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,L={x:0,y:0};if(x){if(o||s){var C="y"===w?I:F,A="y"===w?N:M,P="y"===w?"height":"width",T=x[w],S=x[w]+g[C],B=x[w]-g[A],R=f?-E[P]/2:0,H=y===z?O[P]:E[P],q=y===z?-E[P]:-O[P],U=t.elements.arrow,W=f&&U?k(U):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},V=Q[C],G=Q[A],$=_e(0,O[P],W[P]),J=b?O[P]/2-R-$-V-j:H-$-V-j,X=b?-O[P]/2+R+$+G+j:q+$+G+j,Y=t.elements.arrow&&D(t.elements.arrow),K=Y?"y"===w?Y.clientTop||0:Y.clientLeft||0:0,ne=t.modifiersData.offset?t.modifiersData.offset[t.placement][w]:0,re=x[w]+J-ne-K,ae=x[w]+X-ne;if(o){var se=_e(f?oe(S,re):S,T,f?ie(B,ae):B);x[w]=se,L[w]=se-T}if(s){var ce="x"===w?I:F,le="x"===w?N:M,ue=x[_],de=ue+g[ce],pe=ue-g[le],fe=_e(f?oe(de,re):de,ue,f?ie(pe,ae):pe);x[_]=fe,L[_]=fe-ue}}t.modifiersData[r]=L}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,i=e.options,o=n.elements.arrow,a=n.modifiersData.popperOffsets,s=Z(n.placement),c=te(s),l=[F,M].indexOf(s)>=0?"height":"width";if(o&&a){var u=function(e,t){return ye("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:be(e,R))}(i.padding,n),d=k(o),p="y"===c?I:F,f="y"===c?N:M,h=n.rects.reference[l]+n.rects.reference[c]-a[c]-n.rects.popper[l],m=a[c]-n.rects.reference[c],g=D(o),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,y=h/2-m/2,b=u[p],w=v-d[l]-u[f],_=v/2-d[l]/2+y,x=_e(b,_,w),O=c;n.modifiersData[r]=((t={})[O]=x,t.centerOffset=x-_,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&he(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,i=t.rects.popper,o=t.modifiersData.preventOverflow,a=we(t,{elementContext:"reference"}),s=we(t,{altBoundary:!0}),c=xe(a,r),l=xe(s,i,o),u=Oe(c),d=Oe(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}}]}),je="tippy-content",Le="tippy-backdrop",ke="tippy-arrow",Ce="tippy-svg-arrow",Ae={passive:!0,capture:!0};function Pe(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function Te(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function Se(e,t){return"function"==typeof e?e.apply(void 0,t):e}function De(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function Ie(e){return[].concat(e)}function Ne(e,t){-1===e.indexOf(t)&&e.push(t)}function Me(e){return e.split("-")[0]}function Fe(e){return[].slice.call(e)}function Be(){return document.createElement("div")}function Re(e){return["Element","Fragment"].some((function(t){return Te(e,t)}))}function ze(e){return Te(e,"MouseEvent")}function He(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function qe(e){return Re(e)?[e]:function(e){return Te(e,"NodeList")}(e)?Fe(e):Array.isArray(e)?e:Fe(document.querySelectorAll(e))}function Ue(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function We(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function Qe(e){var t,n=Ie(e)[0];return(null==n||null==(t=n.ownerDocument)?void 0:t.body)?n.ownerDocument:document}function Ve(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}var Ge={isTouch:!1},$e=0;function Je(){Ge.isTouch||(Ge.isTouch=!0,window.performance&&document.addEventListener("mousemove",Xe))}function Xe(){var e=performance.now();e-$e<20&&(Ge.isTouch=!1,document.removeEventListener("mousemove",Xe)),$e=e}function Ye(){var e=document.activeElement;if(He(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var Ke="undefined"!=typeof window&&"undefined"!=typeof document?navigator.userAgent:"",Ze=/MSIE |Trident\//.test(Ke);var et={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},tt=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},et,{},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),nt=Object.keys(tt);function rt(e){var t=(e.plugins||[]).reduce((function(t,n){var r=n.name,i=n.defaultValue;return r&&(t[r]=void 0!==e[r]?e[r]:i),t}),{});return Object.assign({},e,{},t)}function it(e,t){var n=Object.assign({},t,{content:Se(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(rt(Object.assign({},tt,{plugins:t}))):nt).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},tt.aria,{},n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function ot(e,t){e.innerHTML=t}function at(e){var t=Be();return!0===e?t.className=ke:(t.className=Ce,Re(e)?t.appendChild(e):ot(t,e)),t}function st(e,t){Re(t.content)?(ot(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?ot(e,t.content):e.textContent=t.content)}function ct(e){var t=e.firstElementChild,n=Fe(t.children);return{box:t,content:n.find((function(e){return e.classList.contains(je)})),arrow:n.find((function(e){return e.classList.contains(ke)||e.classList.contains(Ce)})),backdrop:n.find((function(e){return e.classList.contains(Le)}))}}function lt(e){var t=Be(),n=Be();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=Be();function i(n,r){var i=ct(t),o=i.box,a=i.content,s=i.arrow;r.theme?o.setAttribute("data-theme",r.theme):o.removeAttribute("data-theme"),"string"==typeof r.animation?o.setAttribute("data-animation",r.animation):o.removeAttribute("data-animation"),r.inertia?o.setAttribute("data-inertia",""):o.removeAttribute("data-inertia"),o.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?o.setAttribute("role",r.role):o.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||st(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(o.removeChild(s),o.appendChild(at(r.arrow))):o.appendChild(at(r.arrow)):s&&o.removeChild(s)}return r.className=je,r.setAttribute("data-state","hidden"),st(r,e.props),t.appendChild(n),n.appendChild(r),i(e.props,e.props),{popper:t,onUpdate:i}}lt.$$tippy=!0;var ut=1,dt=[],pt=[];function ft(e,t){var n,r,i,o,a,s,c,l,u,d=it(e,Object.assign({},tt,{},rt((n=t,Object.keys(n).reduce((function(e,t){return void 0!==n[t]&&(e[t]=n[t]),e}),{}))))),p=!1,f=!1,h=!1,m=!1,g=[],v=De($,d.interactiveDebounce),y=ut++,b=(u=d.plugins).filter((function(e,t){return u.indexOf(e)===t})),w={id:y,reference:e,popper:Be(),popperInstance:null,props:d,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:b,clearDelayTimeouts:function(){clearTimeout(r),clearTimeout(i),cancelAnimationFrame(o)},setProps:function(t){0;if(w.state.isDestroyed)return;I("onBeforeUpdate",[w,t]),V();var n=w.props,r=it(e,Object.assign({},w.props,{},t,{ignoreAttributes:!0}));w.props=r,Q(),n.interactiveDebounce!==r.interactiveDebounce&&(F(),v=De($,r.interactiveDebounce));n.triggerTarget&&!r.triggerTarget?Ie(n.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");M(),D(),O&&O(n,r);w.popperInstance&&(K(),ee().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));I("onAfterUpdate",[w,t])},setContent:function(e){w.setProps({content:e})},show:function(){0;var e=w.state.isVisible,t=w.state.isDestroyed,n=!w.state.isEnabled,r=Ge.isTouch&&!w.props.touch,i=Pe(w.props.duration,0,tt.duration);if(e||t||n||r)return;if(A().hasAttribute("disabled"))return;if(I("onShow",[w],!1),!1===w.props.onShow(w))return;w.state.isVisible=!0,C()&&(x.style.visibility="visible");D(),H(),w.state.isMounted||(x.style.transition="none");if(C()){var o=T(),a=o.box,s=o.content;Ue([a,s],0)}c=function(){var e;if(w.state.isVisible&&!m){if(m=!0,x.offsetHeight,x.style.transition=w.props.moveTransition,C()&&w.props.animation){var t=T(),n=t.box,r=t.content;Ue([n,r],i),We([n,r],"visible")}N(),M(),Ne(pt,w),null==(e=w.popperInstance)||e.forceUpdate(),w.state.isMounted=!0,I("onMount",[w]),w.props.animation&&C()&&function(e,t){U(e,t)}(i,(function(){w.state.isShown=!0,I("onShown",[w])}))}},function(){var e,t=w.props.appendTo,n=A();e=w.props.interactive&&t===tt.appendTo||"parent"===t?n.parentNode:Se(t,[n]);e.contains(x)||e.appendChild(x);K(),!1}()},hide:function(){0;var e=!w.state.isVisible,t=w.state.isDestroyed,n=!w.state.isEnabled,r=Pe(w.props.duration,1,tt.duration);if(e||t||n)return;if(I("onHide",[w],!1),!1===w.props.onHide(w))return;w.state.isVisible=!1,w.state.isShown=!1,m=!1,p=!1,C()&&(x.style.visibility="hidden");if(F(),q(),D(),C()){var i=T(),o=i.box,a=i.content;w.props.animation&&(Ue([o,a],r),We([o,a],"hidden"))}N(),M(),w.props.animation?C()&&function(e,t){U(e,(function(){!w.state.isVisible&&x.parentNode&&x.parentNode.contains(x)&&t()}))}(r,w.unmount):w.unmount()},hideWithInteractivity:function(e){0;P().addEventListener("mousemove",v),Ne(dt,v),v(e)},enable:function(){w.state.isEnabled=!0},disable:function(){w.hide(),w.state.isEnabled=!1},unmount:function(){0;w.state.isVisible&&w.hide();if(!w.state.isMounted)return;Z(),ee().forEach((function(e){e._tippy.unmount()})),x.parentNode&&x.parentNode.removeChild(x);pt=pt.filter((function(e){return e!==w})),w.state.isMounted=!1,I("onHidden",[w])},destroy:function(){0;if(w.state.isDestroyed)return;w.clearDelayTimeouts(),w.unmount(),V(),delete e._tippy,w.state.isDestroyed=!0,I("onDestroy",[w])}};if(!d.render)return w;var _=d.render(w),x=_.popper,O=_.onUpdate;x.setAttribute("data-tippy-root",""),x.id="tippy-"+w.id,w.popper=x,e._tippy=w,x._tippy=w;var E=b.map((function(e){return e.fn(w)})),j=e.hasAttribute("aria-expanded");return Q(),M(),D(),I("onCreate",[w]),d.showOnCreate&&te(),x.addEventListener("mouseenter",(function(){w.props.interactive&&w.state.isVisible&&w.clearDelayTimeouts()})),x.addEventListener("mouseleave",(function(e){w.props.interactive&&w.props.trigger.indexOf("mouseenter")>=0&&(P().addEventListener("mousemove",v),v(e))})),w;function L(){var e=w.props.touch;return Array.isArray(e)?e:[e,0]}function k(){return"hold"===L()[0]}function C(){var e;return!!(null==(e=w.props.render)?void 0:e.$$tippy)}function A(){return l||e}function P(){var e=A().parentNode;return e?Qe(e):document}function T(){return ct(x)}function S(e){return w.state.isMounted&&!w.state.isVisible||Ge.isTouch||a&&"focus"===a.type?0:Pe(w.props.delay,e?0:1,tt.delay)}function D(){x.style.pointerEvents=w.props.interactive&&w.state.isVisible?"":"none",x.style.zIndex=""+w.props.zIndex}function I(e,t,n){var r;(void 0===n&&(n=!0),E.forEach((function(n){n[e]&&n[e].apply(void 0,t)})),n)&&(r=w.props)[e].apply(r,t)}function N(){var t=w.props.aria;if(t.content){var n="aria-"+t.content,r=x.id;Ie(w.props.triggerTarget||e).forEach((function(e){var t=e.getAttribute(n);if(w.state.isVisible)e.setAttribute(n,t?t+" "+r:r);else{var i=t&&t.replace(r,"").trim();i?e.setAttribute(n,i):e.removeAttribute(n)}}))}}function M(){!j&&w.props.aria.expanded&&Ie(w.props.triggerTarget||e).forEach((function(e){w.props.interactive?e.setAttribute("aria-expanded",w.state.isVisible&&e===A()?"true":"false"):e.removeAttribute("aria-expanded")}))}function F(){P().removeEventListener("mousemove",v),dt=dt.filter((function(e){return e!==v}))}function B(e){if(!(Ge.isTouch&&(h||"mousedown"===e.type)||w.props.interactive&&x.contains(e.target))){if(A().contains(e.target)){if(Ge.isTouch)return;if(w.state.isVisible&&w.props.trigger.indexOf("click")>=0)return}else I("onClickOutside",[w,e]);!0===w.props.hideOnClick&&(w.clearDelayTimeouts(),w.hide(),f=!0,setTimeout((function(){f=!1})),w.state.isMounted||q())}}function R(){h=!0}function z(){h=!1}function H(){var e=P();e.addEventListener("mousedown",B,!0),e.addEventListener("touchend",B,Ae),e.addEventListener("touchstart",z,Ae),e.addEventListener("touchmove",R,Ae)}function q(){var e=P();e.removeEventListener("mousedown",B,!0),e.removeEventListener("touchend",B,Ae),e.removeEventListener("touchstart",z,Ae),e.removeEventListener("touchmove",R,Ae)}function U(e,t){var n=T().box;function r(e){e.target===n&&(Ve(n,"remove",r),t())}if(0===e)return t();Ve(n,"remove",s),Ve(n,"add",r),s=r}function W(t,n,r){void 0===r&&(r=!1),Ie(w.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),g.push({node:e,eventType:t,handler:n,options:r})}))}function Q(){var e;k()&&(W("touchstart",G,{passive:!0}),W("touchend",J,{passive:!0})),(e=w.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(W(e,G),e){case"mouseenter":W("mouseleave",J);break;case"focus":W(Ze?"focusout":"blur",X);break;case"focusin":W("focusout",X)}}))}function V(){g.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,i=e.options;t.removeEventListener(n,r,i)})),g=[]}function G(e){var t,n=!1;if(w.state.isEnabled&&!Y(e)&&!f){var r="focus"===(null==(t=a)?void 0:t.type);a=e,l=e.currentTarget,M(),!w.state.isVisible&&ze(e)&&dt.forEach((function(t){return t(e)})),"click"===e.type&&(w.props.trigger.indexOf("mouseenter")<0||p)&&!1!==w.props.hideOnClick&&w.state.isVisible?n=!0:te(e),"click"===e.type&&(p=!n),n&&!r&&ne(e)}}function $(e){var t=e.target,n=A().contains(t)||x.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,i=e.popperState,o=e.props.interactiveBorder,a=Me(i.placement),s=i.modifiersData.offset;if(!s)return!0;var c="bottom"===a?s.top.y:0,l="top"===a?s.bottom.y:0,u="right"===a?s.left.x:0,d="left"===a?s.right.x:0,p=t.top-r+c>o,f=r-t.bottom-l>o,h=t.left-n+u>o,m=n-t.right-d>o;return p||f||h||m}))}(ee().concat(x).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:d}:null})).filter(Boolean),e)&&(F(),ne(e))}function J(e){Y(e)||w.props.trigger.indexOf("click")>=0&&p||(w.props.interactive?w.hideWithInteractivity(e):ne(e))}function X(e){w.props.trigger.indexOf("focusin")<0&&e.target!==A()||w.props.interactive&&e.relatedTarget&&x.contains(e.relatedTarget)||ne(e)}function Y(e){return!!Ge.isTouch&&k()!==e.type.indexOf("touch")>=0}function K(){Z();var t=w.props,n=t.popperOptions,r=t.placement,i=t.offset,o=t.getReferenceClientRect,a=t.moveTransition,s=C()?ct(x).arrow:null,l=o?{getBoundingClientRect:o,contextElement:o.contextElement||A()}:e,u=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!a}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(C()){var n=T().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];C()&&s&&u.push({name:"arrow",options:{element:s,padding:3}}),u.push.apply(u,(null==n?void 0:n.modifiers)||[]),w.popperInstance=Ee(l,x,Object.assign({},n,{placement:r,onFirstUpdate:c,modifiers:u}))}function Z(){w.popperInstance&&(w.popperInstance.destroy(),w.popperInstance=null)}function ee(){return Fe(x.querySelectorAll("[data-tippy-root]"))}function te(e){w.clearDelayTimeouts(),e&&I("onTrigger",[w,e]),H();var t=S(!0),n=L(),i=n[0],o=n[1];Ge.isTouch&&"hold"===i&&o&&(t=o),t?r=setTimeout((function(){w.show()}),t):w.show()}function ne(e){if(w.clearDelayTimeouts(),I("onUntrigger",[w,e]),w.state.isVisible){if(!(w.props.trigger.indexOf("mouseenter")>=0&&w.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&p)){var t=S(!1);t?i=setTimeout((function(){w.state.isVisible&&w.hide()}),t):o=requestAnimationFrame((function(){w.hide()}))}}else q()}}function ht(e,t){void 0===t&&(t={});var n=tt.plugins.concat(t.plugins||[]);document.addEventListener("touchstart",Je,Ae),window.addEventListener("blur",Ye);var r=Object.assign({},t,{plugins:n}),i=qe(e).reduce((function(e,t){var n=t&&ft(t,r);return n&&e.push(n),e}),[]);return Re(e)?i[0]:i}ht.defaultProps=tt,ht.setDefaultProps=function(e){Object.keys(e).forEach((function(t){tt[t]=e[t]}))},ht.currentInput=Ge;Object.assign({},le,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}});ht.setDefaultProps({render:lt});var mt=ht,gt=n(5),vt=n.n(gt);var yt={controlled:null,bind(e){this.controlled=e,this.controlled.forEach((e=>{this._master(e)})),this._init()},_init(){this.controlled.forEach((e=>{this._checkUp(e)}))},_master(e){const t=JSON.parse(e.dataset.master);e.dataset.size&&(e.filesize=parseInt(e.dataset.size,10)),e.masters=t.map((t=>{const n=document.getElementById(t),r=document.getElementById(t+"_size_wrapper");return r&&(n.filesize=0,n.sizespan=r),this._addChild(n,e),n})),this._bindEvents(e),e.masters.forEach((e=>{this._bindEvents(e)}))},_bindEvents(e){e.eventBound||(e.addEventListener("click",(t=>{const n=t.target;n.elements&&(this._checkDown(n),this._evaluateSize(n)),n.masters&&this._checkUp(e)})),e.eventBound=!0)},_addChild(e,t){const n=e.elements?e.elements:[];-1===n.indexOf(t)&&(n.push(t),e.elements=n)},_removeChild(e,t){const n=e.elements.indexOf(t);-1{t.checked!==e.checked&&(t.checked=e.checked,t.disabled&&(t.checked=!1),t.dispatchEvent(new Event("change")))})),e.elements.forEach((t=>{this._checkDown(t),t.elements||this._checkUp(t,e)})))},_checkUp(e,t){e.masters&&[...e.masters].forEach((e=>{e!==t&&this._evaluateCheckStatus(e),this._checkUp(e),this._evaluateSize(e)}))},_evaluateCheckStatus(e){let t=0,n=e.classList.contains("partial");n&&(e.classList.remove("partial"),n=!1),e.elements.forEach((r=>{null!==r.parentNode?(t+=r.checked,r.classList.contains("partial")&&(n=!0)):this._removeChild(e,r)}));let r="some";t===e.elements.length?r="on":0===t?r="off":n=!0,n&&e.classList.add("partial");const i="off"!==r;e.checked===i&&e.value===r||(e.value=r,e.checked=i,e.dispatchEvent(new Event("change")))},_evaluateSize(e){if(e.sizespan&&e.elements){e.filesize=0,e.elements.forEach((t=>{t.checked&&(e.filesize+=t.filesize)}));let t=null;0=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var _t,xt,Ot,Et,jt=n(1),Lt=n.n(jt);n(0),Lt()(console.error);_t={"(":9,"!":8,"*":7,"/":7,"%":7,"+":6,"-":6,"<":5,"<=":5,">":5,">=":5,"==":4,"!=":4,"&&":3,"||":2,"?":1,"?:":1},xt=["(","?"],Ot={")":["("],":":["?","?:"]},Et=/<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;var kt={"!":function(e){return!e},"*":function(e,t){return e*t},"/":function(e,t){return e/t},"%":function(e,t){return e%t},"+":function(e,t){return e+t},"-":function(e,t){return e-t},"<":function(e,t){return e":function(e,t){return e>t},">=":function(e,t){return e>=t},"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},"&&":function(e,t){return e&&t},"||":function(e,t){return e||t},"?:":function(e,t,n){if(e)throw t;return n}};function Ct(e){var t=function(e){for(var t,n,r,i,o=[],a=[];t=e.match(Et);){for(n=t[0],(r=e.substr(0,t.index).trim())&&o.push(r);i=a.pop();){if(Ot[n]){if(Ot[n][0]===i){n=Ot[n][1]||n;break}}else if(xt.indexOf(i)>=0||_t[i]<_t[n]){a.push(i);break}o.push(i)}Ot[n]||a.push(n),e=e.substr(t.index+n.length)}return(e=e.trim())&&o.push(e),o.concat(a.reverse())}(e);return function(e){return function(e,t){var n,r,i,o,a,s,c=[];for(n=0;n3&&void 0!==arguments[3]?arguments[3]:10,a=e[t];if(Mt(n)&&Nt(r))if("function"==typeof i)if("number"==typeof o){var s={callback:i,priority:o,namespace:r};if(a[n]){var c,l=a[n].handlers;for(c=l.length;c>0&&!(o>=l[c-1].priority);c--);c===l.length?l[c]=s:l.splice(c,0,s),a.__current.forEach((function(e){e.name===n&&e.currentIndex>=c&&e.currentIndex++}))}else a[n]={handlers:[s],runs:0};"hookAdded"!==n&&e.doAction("hookAdded",n,r,i,o)}else console.error("If specified, the hook priority must be a number.");else console.error("The hook callback must be a function.")}};var Bt=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(r,i){var o=e[t];if(Mt(r)&&(n||Nt(i))){if(!o[r])return 0;var a=0;if(n)a=o[r].handlers.length,o[r]={runs:o[r].runs,handlers:[]};else for(var s=o[r].handlers,c=function(e){s[e].namespace===i&&(s.splice(e,1),a++,o.__current.forEach((function(t){t.name===r&&t.currentIndex>=e&&t.currentIndex--})))},l=s.length-1;l>=0;l--)c(l);return"hookRemoved"!==r&&e.doAction("hookRemoved",r,i),a}}};var Rt=function(e,t){return function(n,r){var i=e[t];return void 0!==r?n in i&&i[n].handlers.some((function(e){return e.namespace===r})):n in i}};function zt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2]&&arguments[2];return function(r){var i=e[t];i[r]||(i[r]={handlers:[],runs:0}),i[r].runs++;var o=i[r].handlers;for(var a=arguments.length,s=new Array(a>1?a-1:0),c=1;c1&&void 0!==arguments[1]?arguments[1]:"default";r.data[t]=St(St(St({},Dt),r.data[t]),e),r.data[t][""]=St(St({},Dt[""]),r.data[t][""])},s=function(e,t){a(e,t),o()},c=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0;return r.data[e]||a(void 0,e),r.dcnpgettext(e,t,n,i,o)},l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return e},u=function(e,t,r){var i=c(r,t,e);return n?(i=n.applyFilters("i18n.gettext_with_context",i,e,t,r),n.applyFilters("i18n.gettext_with_context_"+l(r),i,e,t,r)):i};if(e&&s(e,t),n){var d=function(e){It.test(e)&&o()};n.addAction("hookAdded","core/i18n",d),n.addAction("hookRemoved","core/i18n",d)}return{getLocaleData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return r.data[e]},setLocaleData:s,resetLocaleData:function(e,t){r.data={},r.pluralForms={},s(e,t)},subscribe:function(e){return i.add(e),function(){return i.delete(e)}},__:function(e,t){var r=c(t,void 0,e);return n?(r=n.applyFilters("i18n.gettext",r,e,t),n.applyFilters("i18n.gettext_"+l(t),r,e,t)):r},_x:u,_n:function(e,t,r,i){var o=c(i,void 0,e,t,r);return n?(o=n.applyFilters("i18n.ngettext",o,e,t,r,i),n.applyFilters("i18n.ngettext_"+l(i),o,e,t,r,i)):o},_nx:function(e,t,r,i,o){var a=c(o,i,e,t,r);return n?(a=n.applyFilters("i18n.ngettext_with_context",a,e,t,r,i,o),n.applyFilters("i18n.ngettext_with_context_"+l(o),a,e,t,r,i,o)):a},isRTL:function(){return"rtl"===u("ltr","text direction")},hasTranslation:function(e,t,i){var o,a,s=t?t+""+e:e,c=!(null===(o=r.data)||void 0===o||null===(a=o[null!=i?i:"default"])||void 0===a||!a[s]);return n&&(c=n.applyFilters("i18n.has_translation",c,e,t,i),c=n.applyFilters("i18n.has_translation_"+l(i),c,e,t,i)),c}}}(void 0,void 0,Gt)),Jt=($t.getLocaleData.bind($t),$t.setLocaleData.bind($t),$t.resetLocaleData.bind($t),$t.subscribe.bind($t),$t.__.bind($t));$t._x.bind($t),$t._n.bind($t),$t._nx.bind($t),$t.isRTL.bind($t),$t.hasTranslation.bind($t);function Xt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yt(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;if(!t||!Object.keys(t).length)return e;var n=e,r=e.indexOf("?");return-1!==r&&(t=Object.assign(hn(e),t),n=n.substr(0,r)),n+"?"+vn(t)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wn(e){for(var t=1;t]+)>; rel="next"/);return t?{next:t[1]}:{}}(e.headers.get("link")).next},On=function(e){var t=!!e.path&&-1!==e.path.indexOf("per_page=-1"),n=!!e.url&&-1!==e.url.indexOf("per_page=-1");return t||n},En=function(){var e,t=(e=un.a.mark((function e(t,n){var r,i,o,a,s,c;return un.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.parse){e.next=2;break}return e.abrupt("return",n(t));case 2:if(On(t)){e.next=4;break}return e.abrupt("return",n(t));case 4:return e.next=6,Wn(wn(wn({},(u={per_page:100},d=void 0,p=void 0,d=(l=t).path,p=l.url,wn(wn({},wt(l,["path","url"])),{},{url:p&&yn(p,u),path:d&&yn(d,u)}))),{},{parse:!1}));case 6:return r=e.sent,e.next=9,_n(r);case 9:if(i=e.sent,Array.isArray(i)){e.next=12;break}return e.abrupt("return",i);case 12:if(o=xn(r)){e.next=15;break}return e.abrupt("return",i);case 15:a=[].concat(i);case 16:if(!o){e.next=27;break}return e.next=19,Wn(wn(wn({},t),{},{path:void 0,url:o,parse:!1}));case 19:return s=e.sent,e.next=22,_n(s);case 22:c=e.sent,a=a.concat(c),o=xn(s),e.next=16;break;case 27:return e.abrupt("return",a);case 28:case"end":return e.stop()}var l,u,d,p}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){cn(o,r,i,a,s,"next",e)}function s(e){cn(o,r,i,a,s,"throw",e)}a(void 0)}))});return function(e,n){return t.apply(this,arguments)}}();function jn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ln(e){for(var t=1;t1&&void 0!==arguments[1])||arguments[1];return t?204===e.status?null:e.json?e.json():Promise.reject(e):e},Pn=function(e){var t={code:"invalid_json",message:Jt("The response is not a valid JSON response.")};if(!e||!e.json)throw t;return e.json().catch((function(){throw t}))},Tn=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Promise.resolve(An(e,t)).catch((function(e){return Sn(e,t)}))};function Sn(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t)throw e;return Pn(e).then((function(e){var t={code:"unknown_error",message:Jt("An unknown error occurred.")};throw e||t}))}function Dn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function In(e){for(var t=1;t=500&&t.status<600&&n?r(n).catch((function(){return!1!==e.parse?Promise.reject({code:"post_process",message:Jt("Media upload failed. If this is a photo or a large image, please scale it down and try again.")}):Promise.reject(t)})):Sn(t,e.parse)})).then((function(t){return Tn(t,e.parse)}))};function Mn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Fn(e){for(var t=1;t=200&&e.status<300)return e;throw e},qn=function(e){var t=e.url,n=e.path,r=e.data,i=e.parse,o=void 0===i||i,a=wt(e,["url","path","data","parse"]),s=e.body,c=e.headers;return c=Fn(Fn({},Bn),c),r&&(s=JSON.stringify(r),c["Content-Type"]="application/json"),window.fetch(t||n||window.location.href,Fn(Fn(Fn({},Rn),a),{},{body:s,headers:c})).then((function(e){return Promise.resolve(e).then(Hn).catch((function(e){return Sn(e,o)})).then((function(e){return Tn(e,o)}))}),(function(){throw{code:"fetch_error",message:Jt("You are probably offline.")}}))};function Un(e){return zn.reduceRight((function(e,t){return function(n){return t(n,e)}}),qn)(e).catch((function(t){return"rest_cookie_invalid_nonce"!==t.code?Promise.reject(t):window.fetch(Un.nonceEndpoint).then(Hn).then((function(e){return e.text()})).then((function(t){return Un.nonceMiddleware.nonce=t,Un(e)}))}))}Un.use=function(e){zn.unshift(e)},Un.setFetchHandler=function(e){qn=e},Un.createNonceMiddleware=Kt,Un.createPreloadingMiddleware=sn,Un.createRootURLMiddleware=on,Un.fetchAllMiddleware=En,Un.mediaUploadMiddleware=Nn;var Wn=Un;Lt()(console.error);function Qn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Vn(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"default";Jn.data[t]=Vn(Vn(Vn({},Zn),Jn.data[t]),e),Jn.data[t][""]=Vn(Vn({},Zn[""]),Jn.data[t][""])},Yn=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0;return Jn.data[e]||Xn(void 0,e),Jn.dcnpgettext(e,t,n,r,i)},Kn=function(e,t,n){return Yn(n,t,e)},Gn&&Xn(Gn,$n),{setLocaleData:Xn,__:function(e,t){return Yn(t,void 0,e)},_x:Kn,_n:function(e,t,n,r){return Yn(r,void 0,e,t,n)},_nx:function(e,t,n,r,i){return Yn(i,r,e,t,n)},isRTL:function(){return"rtl"===Kn("ltr","text direction")}}),tr=(er.setLocaleData.bind(er),er.__.bind(er));er._x.bind(er),er._n.bind(er),er._nx.bind(er),er.isRTL.bind(er);var nr={cachePoints:{},spinners:{},init(e){if("undefined"!=typeof CLDCACHE){Wn.use(Wn.createNonceMiddleware(CLDCACHE.nonce));e.querySelectorAll("[data-cache-point]").forEach((e=>this._bind(e)));const t=document.getElementById("cld_purge_all");t&&(t.disabled="disabled",t.style.width="100px",t.style.transition="width 0.5s",t.addEventListener("click",(()=>{t.dataset.purging||confirm(wp.i18n.__("Purge entire cache?","cloudinary"))&&this._purgeAll(t,!1)})),this._watchPurge(t),setInterval((()=>{this._watchPurge(t)}),5e3))}},getCachePoint(e){return this.cachePoints["_"+e]?this.cachePoints["_"+e]:null},setCachePoint(e,t){const n=document.createElement("div"),r=this._getRow(),i=document.createElement("td");i.colSpan=2,i.className="cld-loading",r.appendChild(i);const o=document.getElementById(t.dataset.slug),a=document.getElementById(t.dataset.slug+"_search"),s=document.getElementById(t.dataset.slug+"_reload"),c=document.getElementById(t.dataset.browser),l=document.getElementById(t.dataset.apply);l.style.float="right",l.style.marginLeft="6px",c.addEventListener("change",(t=>{this._handleManager(e)})),window.addEventListener("CacheToggle",(e=>{e.detail.cachePoint===t&&this._cacheChange(t,e.detail)})),l.addEventListener("click",(e=>{this._applyChanges(t)})),s.addEventListener("click",(t=>{this._load(e)})),a.addEventListener("keydown",(t=>{13===t.which&&(t.preventDefault(),t.stopPropagation(),this._load(e))})),n.className="cld-pagenav",l.cacheChanges={disable:[],enable:[],delete:[]},t.master=o,t.search=a,t.controller=c,t.viewer=t.parentNode.parentNode,t.loader=r,t.table=t.parentNode,t.apply=l,t.paginate=n,t.currentPage=1,t.viewer.appendChild(n),this.cachePoints["_"+e]=t},close(e){e.classList.add("closed")},open(e){e.classList.remove("closed")},isOpen(e){const t=this.getCachePoint(e);let n=!1;return t&&(n=t.controller.checked&&t.master.checked),n},_bind(e){const t=e.dataset.cachePoint;this.setCachePoint(t,e),this._handleManager(t)},_handleManager(e){const t=this.getCachePoint(e);t&&(this.isOpen(e)?(this.open(t.viewer),t.loaded||this._load(e)):(this.close(t.viewer),t.controller.checked=!1))},_load(e){const t=this.getCachePoint(e);let n="100px";t.clientHeight&&(n=t.clientHeight-16+"px"),this._clearChildren(t),t.appendChild(t.loader),this.open(t.loader),t.loader.firstChild.style.height=n,Wn({path:CLDCACHE.fetch_url,data:{ID:e,page:t.currentPage,search:t.search.value},method:"POST"}).then((e=>{t.removeChild(t.loader),this._buildList(t,e.items),this._buildNav(t,e);const n=t.querySelectorAll("[data-master]");yt.bind(n),t.loaded=!0}))},_cacheChange(e,t){const n=t.checked?t.states.on:t.states.off,r=t.checked?t.states.off:t.states.on;this._removeFromList(e,t.item.ID,r)||this._addToList(e,t.item.ID,n),this._evaluateApply(e)},_evaluateApply(e){e.apply.disabled="disabled";const t=e.apply.cacheChanges;let n=!1;for(const e in t)t[e].length&&(n=!0);n&&(e.apply.disabled="")},_applyChanges(e){const t=e.apply.cacheChanges;e.apply.disabled="disabled";for(const n in t)t[n].length&&this._set_state(e,n,t[n])},_watchPurge(e){e.dataset.purging||e.dataset.updating||(e.dataset.updating=!0,Wn({path:CLDCACHE.purge_all,data:{count:!0},method:"POST"}).then((t=>{e.dataset.updating="",0t.percent?(e.disabled="",this._purgeAll(e,!0)):0{e.innerText=tr("Purging cache","cloudinary")+" "+Math.round(t.percent,2)+"%",e.style.backgroundImage="linear-gradient(90deg, #2a0 "+t.percent+"%, #787878 "+t.percent+"%)",100>t.percent?this._purgeAction(e,!0,n):n?n():(e.innerText=wp.i18n.__("Purge complete.","cloudinary"),setTimeout((()=>{e.dataset.purging="",e.style.backgroundImage="",e.style.minHeight="",e.style.border="",e.style.width="100px",e.disabled="disabled",e.innerText=e.dataset.title}),2e3))}))},_set_state(e,t,n){this._showSpinners(n),Wn({path:CLDCACHE.update_url,data:{state:t,ids:n},method:"POST"}).then((n=>{this._hideSpinners(n),n.forEach((n=>{this._removeFromList(e,n,t),this._evaluateApply(e),e.apply.disabled="disabled"})),"delete"===t&&this._load(e.dataset.cachePoint)}))},_showSpinners(e){e.forEach((e=>{this.spinners["spinner_"+e].style.visibility="visible"}))},_hideSpinners(e){e.forEach((e=>{this.spinners["spinner_"+e].style.visibility="hidden"}))},_removeFromList(e,t,n){const r=this._getListIndex(e,t,n);let i=!1;return-1e.apply.cacheChanges[n].indexOf(t),_noCache(e){const t=this._getNote(wp.i18n.__("No files cached.","cloudinary"));e.viewer.appendChild(t),this.close(e.table)},_clearChildren(e){for(;e.children.length;){const t=e.lastChild;t.children.length&&this._clearChildren(t),e.removeChild(t)}},_buildList(e,t){t.forEach((t=>{if(t.note)return void e.appendChild(this._getNote(t.note));const n=this._getRow(t.ID),r=this._getStateSwitch(e,t,{on:"enable",off:"disable"}),i=this._getFile(e,t,n);n.appendChild(i),n.appendChild(r),e.appendChild(n)}))},_buildNav(e,t){e.paginate.innerHTML="";const n=document.createElement("button"),r=document.createElement("button");n.type="button",n.innerHTML="‹",n.className="button cld-pagenav-prev",1===t.current_page?n.disabled=!0:n.addEventListener("click",(n=>{e.currentPage=t.current_page-1,this._load(e.dataset.cachePoint)})),r.type="button",r.innerHTML="›",r.className="button cld-pagenav-next",t.current_page===t.total_pages||0===t.total_pages?r.disabled=!0:r.addEventListener("click",(n=>{e.currentPage=t.current_page+1,this._load(e.dataset.cachePoint)}));const i=document.createElement("span");if(i.innerText=t.nav_text,i.className="cld-pagenav-text",e.paginate.appendChild(n),e.paginate.appendChild(i),e.paginate.appendChild(r),e.paginate.appendChild(e.apply),e.apply.classList.remove("closed"),e.apply.disabled="disabled",t.items.length){const t=document.createElement("button");t.type="button",t.className="button",t.innerText=wp.i18n.__("Purge cache point","cloudinary"),t.style.float="right",e.paginate.appendChild(t),t.addEventListener("click",(n=>{if(confirm(wp.i18n.__("Purge entire cache point?","cloudinary"))){t.dataset.parent=e.dataset.cachePoint;const n=this;t.classList.add("button-primary"),this._purgeAll(t,!1,(function(){n._load(e.dataset.cachePoint)}))}}))}},_getNote(e){const t=this._getRow(),n=document.createElement("td");return n.colSpan=2,n.innerText=e,t.appendChild(n),t},_getRow(e){const t=document.createElement("tr");return e&&(t.id="row_"+e),t},_getFile(e,t){const n=document.createElement("td"),r=document.createElement("label"),i=this._getDeleter(e,n,t);r.innerText=t.short_url,r.htmlFor=t.key,n.appendChild(i),n.appendChild(r);const o=document.createElement("span"),a="spinner_"+t.ID;return o.className="spinner",o.id=a,n.appendChild(o),this.spinners[a]=o,n},_getDeleter(e,t,n){const r=document.createElement("input"),i=[e.dataset.slug+"_deleter"],o=this._getListIndex(e,n.ID,"delete");return r.type="checkbox",r.value=n.ID,r.id=n.key,r.dataset.master=JSON.stringify(i),-1{t.style.opacity=1,t.style.textDecoration="",r.checked&&(t.style.opacity=.8,t.style.textDecoration="line-through");const o=new CustomEvent("CacheToggle",{detail:{checked:r.checked,states:{on:"delete",off:n.active?"enable":"disable"},item:n,cachePoint:e}});window.dispatchEvent(o)})),r},_getStateSwitch(e,t,n){const r=document.createElement("td"),i=document.createElement("label"),o=document.createElement("input"),a=document.createElement("span"),s=(e.dataset.slug,this._getListIndex(e,t.ID,"disable"));return r.style.textAlign="right",i.className="cld-input-on-off-control mini",o.type="checkbox",o.value=t.ID,o.checked=!(-1{const i=new CustomEvent("CacheToggle",{detail:{checked:o.checked,states:n,item:t,cachePoint:e}});window.dispatchEvent(i)})),r.appendChild(i),r}};const rr={bindings:{},parent_check_data:{},check_parents:{},_init(e){const t=e.querySelectorAll("[data-condition]"),n=e.querySelectorAll("[data-toggle]"),r=e.querySelectorAll("[data-for]"),i=e.querySelectorAll("[data-tooltip]"),o=e.querySelectorAll("[data-bind-trigger]"),a=e.querySelectorAll("[data-master]"),s=e.querySelectorAll("[data-file]"),c=e.querySelectorAll("[data-auto-suffix]"),l={};yt.bind(a),c.forEach((e=>this._autoSuffix(e))),o.forEach((e=>this._trigger(e))),n.forEach((e=>this._toggle(e))),t.forEach((e=>this._bind(e))),r.forEach((e=>this._alias(e))),s.forEach((e=>this._files(e,l))),mt(i,{theme:"cloudinary",arrow:!1,placement:"bottom-start",aria:{content:"auto",expanded:"auto"},content:e=>document.getElementById(e.dataset.tooltip).innerHTML}),[...o].forEach((e=>{e.dispatchEvent(new Event("input"))})),nr.init(e)},_autoSuffix(e){const t=e.dataset.autoSuffix;let n="";const r=[...t.split(";")].map((e=>0===e.indexOf("*")?(n=e.replace("*",""),n):e));e.addEventListener("change",(()=>{const t=e.value.replace(" ",""),i=t.replace(/[^0-9]/g,""),o=t.replace(/[0-9]/g,"").toLowerCase();i&&(-1===r.indexOf(o)?e.value=i+n:e.value=i+o)})),e.dispatchEvent(new Event("change"))},_files(e,t){const n=e.dataset.parent;n&&(this.check_parents[n]=document.getElementById(n),this.parent_check_data[n]||(this.parent_check_data[n]=this.check_parents[n].value?JSON.parse(this.check_parents[n].value):[]),e.addEventListener("change",(()=>{const r=this.parent_check_data[n].indexOf(e.value);e.checked?this.parent_check_data[n].push(e.value):this.parent_check_data[n].splice(r,1),t[n]&&clearTimeout(t[n]),t[n]=setTimeout((()=>{this._compileParent(n)}),10)})))},_compileParent(e){this.check_parents[e].value=JSON.stringify(this.parent_check_data[e]),this.check_parents[e].dispatchEvent(new Event("change"))},_bind(e){e.condition=JSON.parse(e.dataset.condition);for(const t in e.condition)this.bindings[t]&&this.bindings[t].elements.push(e)},_trigger(e){const t=e.dataset.bindTrigger,n=this;n.bindings[t]={input:e,value:e.value,checked:!0,elements:[]},e.addEventListener("change",(function(t){e.dispatchEvent(new Event("input"))})),e.addEventListener("input",(function(){if(n.bindings[t].value=e.value,"checkbox"===e.type&&(n.bindings[t].checked=e.checked),"radio"!==e.type||!1!==e.checked)for(const r in n.bindings[t].elements)n.toggle(n.bindings[t].elements[r],e)}))},_alias(e){e.addEventListener("click",(function(){document.getElementById(e.dataset.for).dispatchEvent(new Event("click"))}))},_toggle(e){const t=this;e.addEventListener("click",(function(n){n.stopPropagation();const r=document.querySelector('[data-wrap="'+e.dataset.toggle+'"]'),i=r.classList.contains("open")?"closed":"open";t.toggle(r,e,i)}))},toggle(e,t,n){if(!n){n="open";for(const t in e.condition){let r=this.bindings[t].value;const i=e.condition[t];"boolean"==typeof i&&(r=this.bindings[t].checked),i!==r&&(n="closed")}}const r=e.getElementsByClassName("cld-ui-input");"closed"===n?(e.classList.remove("open"),e.classList.add("closed"),t&&t.classList.contains("dashicons")&&(t.classList.remove("dashicons-arrow-up-alt2"),t.classList.add("dashicons-arrow-down-alt2")),[...r].forEach((function(e){e.dataset.disabled=!0}))):(e.classList.remove("closed"),e.classList.add("open"),t&&t.classList.contains("dashicons")&&(t.classList.remove("dashicons-arrow-down-alt2"),t.classList.add("dashicons-arrow-up-alt2")),[...r].forEach((function(e){e.dataset.disabled=!1})))}},ir=document.getElementById("cloudinary-settings-page");ir&&window.addEventListener("load",rr._init(ir));var or=rr;n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p;window.$=window.jQuery;const ar={UI:or,Settings:i.a,Widget:a.a,GlobalTransformations:c,TermsOrder:u,MediaLibrary:p,Notices:h}}]); \ No newline at end of file diff --git a/js/gallery-block.asset.php b/js/gallery-block.asset.php index ad52a0de6..fd77fbe52 100644 --- a/js/gallery-block.asset.php +++ b/js/gallery-block.asset.php @@ -1 +1 @@ - array('react', 'react-dom', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-components/build-style/style.css', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '9327c7730d65905612d47f796c42693c'); \ No newline at end of file + array('react', 'react-dom', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-components/build-style/style.css', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '14121b76ae7717c7bd4bb8a27e2f588a'); \ No newline at end of file diff --git a/js/gallery-block.deps.json b/js/gallery-block.deps.json deleted file mode 100644 index 3eda691ad..000000000 --- a/js/gallery-block.deps.json +++ /dev/null @@ -1 +0,0 @@ -["react","wp-block-editor","wp-blocks","wp-components","wp-components/build-style/style.css","wp-data","wp-element","wp-i18n","wp-polyfill"] \ No newline at end of file diff --git a/js/lazy-load.asset.php b/js/lazy-load.asset.php index 506a6dd72..77aa2f4d8 100644 --- a/js/lazy-load.asset.php +++ b/js/lazy-load.asset.php @@ -1 +1 @@ - array('wp-polyfill'), 'version' => '4f54b160de748912ea5ea5d8ce80f326'); \ No newline at end of file + array('wp-polyfill'), 'version' => '2066c513c2febad170efa70639490842'); \ No newline at end of file diff --git a/js/lazy-load.js b/js/lazy-load.js index a59921968..4014c3dff 100644 --- a/js/lazy-load.js +++ b/js/lazy-load.js @@ -1 +1 @@ -!function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=2)}([function(e,t){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);oMath.ceil(e)?e:t,t},_build:function(){var e=this;this.images.forEach((function(t){e.buildSize(t)}))},_shouldRebuild:function(e){var t=this.scaleSize(e.originalWidth,e.width,this.config.pixel_step),o=e.getBoundingClientRect(),r="auto"!==this.density?this._getDensity():1;return o.tope.naturalWidth/r||!e.cld_loaded)},_shouldPlacehold:function(e){var t=this.scaleSize(e.originalWidth,e.width,this.config.pixel_step),o=e.getBoundingClientRect(),r="auto"!==this.density?this._getDensity():1;return!e.cld_loaded&&o.top<2*this.lazyThreshold&&(t>e.naturalWidth/r||!e.cld_placehold)},getResponsiveSteps:function(e){return Math.ceil(e.dataset.breakpoints?e.originalWidth/e.dataset.breakpoints:this.responsiveStep)},getQuality:function(){var e="q_auto";switch(navigator&&navigator.connection?navigator.connection.effectiveType:"none"){case"none":break;case"4g":e="q_auto:good";break;case"3g":e="q_auto:eco";break;case"2g":case"slow-2g":e="q_auto:low";break;default:e="q_auto:best"}return e},scaleSize:function(e,t,o){var r=e-o*Math.floor((e-t)/o);return(r>e||this.config.max_widthe.length)&&(t=e.length);for(var o=0,r=new Array(t);oMath.ceil(e)?e:t,t},_build:function(){var e=this;this.images.forEach((function(t){e.buildSize(t)}))},_shouldRebuild:function(e){var t=this.scaleSize(e.originalWidth,e.width,this.config.pixel_step),o=e.getBoundingClientRect(),r="auto"!==this.density?this._getDensity():1;return o.tope.naturalWidth/r||!e.cld_loaded)},_shouldPlacehold:function(e){var t=this.scaleSize(e.originalWidth,e.width,this.config.pixel_step),o=e.getBoundingClientRect(),r="auto"!==this.density?this._getDensity():1;return e.dataset.placeholder&&!e.cld_loaded&&o.top<2*this.lazyThreshold&&(t>e.naturalWidth/r||!e.cld_placehold)},getResponsiveSteps:function(e){return Math.ceil(e.dataset.breakpoints?e.originalWidth/e.dataset.breakpoints:this.responsiveStep)},getQuality:function(){var e="q_auto";switch(navigator&&navigator.connection?navigator.connection.effectiveType:"none"){case"none":break;case"4g":e="q_auto:good";break;case"3g":e="q_auto:eco";break;case"2g":case"slow-2g":e="q_auto:low";break;default:e="q_auto:best"}return e},scaleSize:function(e,t,o){var r=e-o*Math.floor((e-t)/o);return(r>e||this.config.max_width=a.version)return}if(!Color.fn.hasOwnProperty("to_s")){Color.fn.to_s=function(o){"hex"===(o=o||"hex")&&this._alpha<1&&(o="rgba");var t="";return"hex"===o?t=this.toString():this.error||(t=this.toCSS(o).replace(/\(\s+/,"(").replace(/\s+\)/,")")),t},window.wpColorPickerAlpha=a;var e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==";o.widget("a8c.iris",o.a8c.iris,{alphaOptions:{alphaEnabled:!1},_getColor:function(o){return o===t&&(o=this._color),this.alphaOptions.alphaEnabled?(o=o.to_s(this.alphaOptions.alphaColorType),this.alphaOptions.alphaColorWithSpace||(o=o.replace(/\s+/g,"")),o):o.toString()},_create:function(){try{this.alphaOptions=this.element.wpColorPicker("instance").alphaOptions}catch(o){}o.extend({},this.alphaOptions,{alphaEnabled:!1,alphaCustomWidth:130,alphaReset:!1,alphaColorType:"hex",alphaColorWithSpace:!1}),this._super()},_addInputListeners:function(o){var t=this,a=function(a){var r=o.val(),e=new Color(r),i=(r=r.replace(/^(#|(rgb|hsl)a?)/,""),t.alphaOptions.alphaColorType);o.removeClass("iris-error"),e.error?""!==r&&o.addClass("iris-error"):"hex"===i&&"keyup"===a.type&&r.match(/^[0-9a-fA-F]{3}$/)||e.toIEOctoHex()!==t._color.toIEOctoHex()&&t._setOption("color",t._getColor(e))};o.on("change",a).on("keyup",t._debounce(a,100)),t.options.hide&&o.one("focus",(function(){t.show()}))},_initControls:function(){if(this._super(),this.alphaOptions.alphaEnabled){var t=this,a=t.controls.strip.clone(!1,!1),r=a.find(".iris-slider-offset"),e={stripAlpha:a,stripAlphaSlider:r};a.addClass("iris-strip-alpha"),r.addClass("iris-slider-offset-alpha"),a.appendTo(t.picker.find(".iris-picker-inner")),o.each(e,(function(o,a){t.controls[o]=a})),t.controls.stripAlphaSlider.slider({orientation:"vertical",min:0,max:100,step:1,value:parseInt(100*t._color._alpha),slide:function(o,a){t.active="strip",t._color._alpha=parseFloat(a.value/100),t._change.apply(t,arguments)}})}},_dimensions:function(o){if(this._super(o),this.alphaOptions.alphaEnabled){var t,a,r,e,i,l=this,n=l.options,s=l.controls.square,p=l.picker.find(".iris-strip");for(t=Math.round(l.picker.outerWidth(!0)-(n.border?22:0)),a=Math.round(s.outerWidth()),r=Math.round((t-a)/2),e=Math.round(r/2),i=Math.round(a+2*r+2*e);i>t;)r=Math.round(r-2),e=Math.round(e-1),i=Math.round(a+2*r+2*e);s.css("margin","0"),p.width(r).css("margin-left",e+"px")}},_change:function(){var t=this,a=t.active;if(t._super(),t.alphaOptions.alphaEnabled){var r=t.controls,i=parseInt(100*t._color._alpha),l=t._color.toRgb(),n=["rgb("+l.r+","+l.g+","+l.b+") 0%","rgba("+l.r+","+l.g+","+l.b+", 0) 100%"];t.picker.closest(".wp-picker-container").find(".wp-color-result");t.options.color=t._getColor(),r.stripAlpha.css({background:"linear-gradient(to bottom, "+n.join(", ")+"), url("+e+")"}),a&&r.stripAlphaSlider.slider("value",i),t._color.error||t.element.removeClass("iris-error").val(t.options.color),t.picker.find(".iris-palette-container").on("click.palette",".iris-palette",(function(){var a=o(this).data("color");t.alphaOptions.alphaReset&&(t._color._alpha=1,a=t._getColor()),t._setOption("color",a)}))}},_paintDimension:function(o,t){var a=this,r=!1;a.alphaOptions.alphaEnabled&&"strip"===t&&(r=a._color,a._color=new Color(r.toString()),a.hue=a._color.h()),a._super(o,t),r&&(a._color=r)},_setOption:function(o,t){var a=this;if("color"!==o||!a.alphaOptions.alphaEnabled)return a._super(o,t);t=""+t,newColor=new Color(t).setHSpace(a.options.mode),newColor.error||a._getColor(newColor)===a._getColor()||(a._color=newColor,a.options.color=a._getColor(),a.active="external",a._change())},color:function(o){return!0===o?this._color.clone():o===t?this._getColor():void this.option("color",o)}}),o.widget("wp.wpColorPicker",o.wp.wpColorPicker,{alphaOptions:{alphaEnabled:!1},_getAlphaOptions:function(){var t=this.element,a=t.data("type")||this.options.type,r=t.data("defaultColor")||t.val(),e={alphaEnabled:t.data("alphaEnabled")||!1,alphaCustomWidth:130,alphaReset:!1,alphaColorType:"rgb",alphaColorWithSpace:!1};return e.alphaEnabled&&(e.alphaEnabled=t.is("input")&&"full"===a),e.alphaEnabled?(e.alphaColorWithSpace=r&&r.match(/\s/),o.each(e,(function(o,a){var i=t.data(o)||a;switch(o){case"alphaCustomWidth":i=i?parseInt(i,10):0,i=isNaN(i)?a:i;break;case"alphaColorType":i.match(/^(hex|(rgb|hsl)a?)$/)||(i=r&&r.match(/^#/)?"hex":r&&r.match(/^hsla?/)?"hsl":a);break;default:i=!!i}e[o]=i})),e):e},_create:function(){o.support.iris&&(this.alphaOptions=this._getAlphaOptions(),this._super())},_addListeners:function(){if(!this.alphaOptions.alphaEnabled)return this._super();var t=this,a=t.element,r=t.toggler.is("a");this.alphaOptions.defaultWidth=a.width(),this.alphaOptions.alphaCustomWidth&&a.width(parseInt(this.alphaOptions.defaultWidth+this.alphaOptions.alphaCustomWidth,10)),t.toggler.css({position:"relative","background-image":"url("+e+")"}),r?t.toggler.html(''):t.toggler.append(''),t.colorAlpha=t.toggler.find("span.color-alpha").css({width:"30px",height:"100%",position:"absolute",top:0,"background-color":a.val()}),"ltr"===t.colorAlpha.css("direction")?t.colorAlpha.css({"border-bottom-left-radius":"2px","border-top-left-radius":"2px",left:0}):t.colorAlpha.css({"border-bottom-right-radius":"2px","border-top-right-radius":"2px",right:0}),a.iris({change:function(a,r){t.colorAlpha.css({"background-color":r.color.to_s(t.alphaOptions.alphaColorType)}),o.isFunction(t.options.change)&&t.options.change.call(this,a,r)}}),t.wrap.on("click.wpcolorpicker",(function(o){o.stopPropagation()})),t.toggler.click((function(){t.toggler.hasClass("wp-picker-open")?t.close():t.open()})),a.change((function(e){var i=o(this).val();(a.hasClass("iris-error")||""===i||i.match(/^(#|(rgb|hsl)a?)$/))&&(r&&t.toggler.removeAttr("style"),t.colorAlpha.css("background-color",""),o.isFunction(t.options.clear)&&t.options.clear.call(this,e))})),t.button.click((function(e){o(this).hasClass("wp-picker-default")?a.val(t.options.defaultColor).change():o(this).hasClass("wp-picker-clear")&&(a.val(""),r&&t.toggler.removeAttr("style"),t.colorAlpha.css("background-color",""),o.isFunction(t.options.clear)&&t.options.clear.call(this,e),a.trigger("change"))}))}})}}(jQuery)}}); \ No newline at end of file diff --git a/js/wp-color-picker-alpha.min.js b/js/wp-color-picker-alpha.min.js deleted file mode 100644 index 1aeb1f2b8..000000000 --- a/js/wp-color-picker-alpha.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/**! - * wp-color-picker-alpha - * - * Overwrite Automattic Iris for enabled Alpha Channel in wpColorPicker - * Only run in input and is defined data alpha in true - * - * Version: 3.0.0 - * https://github.com/kallookoo/wp-color-picker-alpha - * Licensed under the GPLv2 license or later. - */ -!function(e,a){var l,o={version:300};if("wpColorPickerAlpha"in window&&"version"in window.wpColorPickerAlpha){var t=parseInt(window.wpColorPickerAlpha.version,10);if(!isNaN(t)&&o.version<=t)return}Color.fn.hasOwnProperty("to_s")||(Color.fn.to_s=function(o){"hex"===(o=o||"hex")&&this._alpha<1&&(o="rgba");var a="";return"hex"===o?a=this.toString():this.error||(a=this.toCSS(o).replace(/\(\s+/,"(").replace(/\s+\)/,")")),a},window.wpColorPickerAlpha=o,l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==",e.widget("a8c.iris",e.a8c.iris,{alphaOptions:{alphaEnabled:!1},_getColor:function(o){return o===a&&(o=this._color),this.alphaOptions.alphaEnabled?(o=o.to_s(this.alphaOptions.alphaColorType),this.alphaOptions.alphaColorWithSpace||(o=o.replace(/\s+/g,"")),o):o.toString()},_create:function(){try{this.alphaOptions=this.element.wpColorPicker("instance").alphaOptions}catch(o){}e.extend({},this.alphaOptions,{alphaEnabled:!1,alphaCustomWidth:130,alphaReset:!1,alphaColorType:"hex",alphaColorWithSpace:!1}),this._super()},_addInputListeners:function(i){function o(o){var a=i.val(),t=new Color(a),a=a.replace(/^(#|(rgb|hsl)a?)/,""),r=l.alphaOptions.alphaColorType;i.removeClass("iris-error"),t.error?""!==a&&i.addClass("iris-error"):"hex"===r&&"keyup"===o.type&&a.match(/^[0-9a-fA-F]{3}$/)||t.toIEOctoHex()!==l._color.toIEOctoHex()&&l._setOption("color",l._getColor(t))}var l=this;i.on("change",o).on("keyup",l._debounce(o,100)),l.options.hide&&i.one("focus",function(){l.show()})},_initControls:function(){var t,o,a,r;this._super(),this.alphaOptions.alphaEnabled&&(a=(o=(t=this).controls.strip.clone(!1,!1)).find(".iris-slider-offset"),r={stripAlpha:o,stripAlphaSlider:a},o.addClass("iris-strip-alpha"),a.addClass("iris-slider-offset-alpha"),o.appendTo(t.picker.find(".iris-picker-inner")),e.each(r,function(o,a){t.controls[o]=a}),t.controls.stripAlphaSlider.slider({orientation:"vertical",min:0,max:100,step:1,value:parseInt(100*t._color._alpha),slide:function(o,a){t.active="strip",t._color._alpha=parseFloat(a.value/100),t._change.apply(t,arguments)}}))},_dimensions:function(o){if(this._super(o),this.alphaOptions.alphaEnabled){for(var a=this,t=a.options,r=a.controls.square,o=a.picker.find(".iris-strip"),i=Math.round(a.picker.outerWidth(!0)-(t.border?22:0)),l=Math.round(r.outerWidth()),e=Math.round((i-l)/2),s=Math.round(e/2),n=Math.round(l+2*e+2*s);i'):t.toggler.append(''),t.colorAlpha=t.toggler.find("span.color-alpha").css({width:"30px",height:"100%",position:"absolute",top:0,"background-color":r.val()}),"ltr"===t.colorAlpha.css("direction")?t.colorAlpha.css({"border-bottom-left-radius":"2px","border-top-left-radius":"2px",left:0}):t.colorAlpha.css({"border-bottom-right-radius":"2px","border-top-right-radius":"2px",right:0}),r.iris({change:function(o,a){t.colorAlpha.css({"background-color":a.color.to_s(t.alphaOptions.alphaColorType)}),e.isFunction(t.options.change)&&t.options.change.call(this,o,a)}}),t.wrap.on("click.wpcolorpicker",function(o){o.stopPropagation()}),t.toggler.click(function(){t.toggler.hasClass("wp-picker-open")?t.close():t.open()}),r.change(function(o){var a=e(this).val();(r.hasClass("iris-error")||""===a||a.match(/^(#|(rgb|hsl)a?)$/))&&(i&&t.toggler.removeAttr("style"),t.colorAlpha.css("background-color",""),e.isFunction(t.options.clear)&&t.options.clear.call(this,o))}),t.button.click(function(o){e(this).hasClass("wp-picker-default")?r.val(t.options.defaultColor).change():e(this).hasClass("wp-picker-clear")&&(r.val(""),i&&t.toggler.removeAttr("style"),t.colorAlpha.css("background-color",""),e.isFunction(t.options.clear)&&t.options.clear.call(this,o),r.trigger("change"))})}}))}(jQuery); \ No newline at end of file diff --git a/languages/cloudinary.pot b/languages/cloudinary.pot new file mode 100644 index 000000000..4f93cf3f8 --- /dev/null +++ b/languages/cloudinary.pot @@ -0,0 +1,1465 @@ +# Copyright (C) 2021 Cloudinary Ltd., XWP +# This file is distributed under the GPLv2+. +msgid "" +msgstr "" +"Project-Id-Version: Cloudinary STABLETAG\n" +"Report-Msgid-Bugs-To: https://github.com/cloudinary/cloudinary_wordpress\n" +"POT-Creation-Date: 2021-08-02 15:17:54+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2021-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Country: United States\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: " +"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_" +"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-Bookmarks: \n" +"X-Textdomain-Support: yes\n" +"X-Generator: grunt-wp-i18n 1.0.3\n" + +#: cloudinary.php:58 +msgid "" +"Cloudinary plugin error: Your version of PHP is too old to run this plugin. " +"You must be running PHP 5.6 or higher." +msgstr "" + +#: php/assets/class-rest-assets.php:63 php/class-cache.php:339 +msgid "The list of IDs to update." +msgstr "" + +#: php/assets/class-rest-assets.php:68 php/class-cache.php:344 +msgid "The state to update." +msgstr "" + +#: php/assets/class-rest-assets.php:267 php/cache/class-cache-point.php:583 +#. translators: The current page and total pages. +msgid "Page %1$d of %2$d" +msgstr "" + +#: php/assets/class-rest-assets.php:270 php/cache/class-cache-point.php:586 +#. translators: The number of files. +msgid "%d cached file" +msgid_plural "%d cached files" +msgstr[0] "" +msgstr[1] "" + +#: php/assets/class-rest-assets.php:281 php/cache/class-cache-point.php:597 +msgid "No items found." +msgstr "" + +#: php/assets/class-rest-assets.php:283 php/cache/class-cache-point.php:599 +msgid "No items cached." +msgstr "" + +#: php/cache/class-cache-point.php:956 php/class-assets.php:996 +msgid "Cloudinary Asset" +msgstr "" + +#: php/cache/class-cache-point.php:957 php/class-assets.php:997 +msgid "Post type to represent a non-media library asset." +msgstr "" + +#: php/class-assets.php:181 php/class-assets.php:183 +msgid "Cloudinary Cache" +msgstr "" + +#: php/class-assets.php:195 +msgid "Purge" +msgstr "" + +#: php/class-assets.php:427 +#. translators: Placeholders are the number of items. +msgid "%s cached item" +msgid_plural "%s cached items" +msgstr[0] "" +msgstr[1] "" + +#: php/class-assets.php:652 php/class-sync.php:471 +msgid "Uploading to Cloudinary" +msgstr "" + +#: php/class-assets.php:1042 php/class-assets.php:1045 php/class-cache.php:1016 +#: php/class-cache.php:1019 +msgid "Site Cache" +msgstr "" + +#: php/class-assets.php:1049 php/class-cache.php:1023 +msgid "Cache Settings" +msgstr "" + +#: php/class-assets.php:1065 php/class-cache.php:1039 +msgid "Full CDN" +msgstr "" + +#: php/class-assets.php:1066 php/class-cache.php:1040 +msgid "Deliver all assets from Cloudinary." +msgstr "" + +#: php/class-assets.php:1070 php/class-cache.php:1044 +msgid "Enable caching site assets." +msgstr "" + +#: php/class-assets.php:1157 php/class-cache.php:615 +msgid "Plugin" +msgstr "" + +#: php/class-assets.php:1174 php/class-cache.php:792 +msgid "Plugins" +msgstr "" + +#: php/class-assets.php:1191 php/class-cache.php:809 +msgid "Deliver assets from all plugin folders" +msgstr "" + +#: php/class-assets.php:1236 php/class-cache.php:652 +msgid "Theme" +msgstr "" + +#: php/class-assets.php:1252 php/class-cache.php:843 +msgid "Themes" +msgstr "" + +#: php/class-assets.php:1269 php/class-cache.php:860 +msgid "Deliver all assets from active theme." +msgstr "" + +#: php/class-assets.php:1295 php/class-cache.php:668 +msgid "WordPress Admin" +msgstr "" + +#: php/class-assets.php:1301 php/class-cache.php:675 +msgid "WordPress Includes" +msgstr "" + +#: php/class-assets.php:1309 php/class-assets.php:1325 php/class-cache.php:684 +#: php/class-cache.php:895 +msgid "WordPress" +msgstr "" + +#: php/class-assets.php:1342 php/class-cache.php:912 +msgid "Deliver all assets from WordPress core." +msgstr "" + +#: php/class-assets.php:1367 php/class-cache.php:699 +msgid "Uploads" +msgstr "" + +#: php/class-assets.php:1375 php/class-assets.php:1391 php/class-cache.php:708 +#: php/class-cache.php:947 +msgid "Content" +msgstr "" + +#: php/class-assets.php:1408 php/class-cache.php:964 +msgid "Deliver all content assets from WordPress Media Library." +msgstr "" + +#: php/class-assets.php:1430 +msgid "External" +msgstr "" + +#: php/class-assets.php:1447 +msgid "Support external media." +msgstr "" + +#: php/class-assets.php:1461 +msgid "Capture all external resources." +msgstr "" + +#: php/class-assets.php:1462 +msgid "Capture specific resources." +msgstr "" + +#: php/class-assets.php:1467 +msgid "Except the following domains" +msgstr "" + +#: php/class-assets.php:1468 php/class-assets.php:1477 +msgid "One domain per line." +msgstr "" + +#: php/class-assets.php:1476 +msgid "Only from the following domains" +msgstr "" + +#: php/class-beta.php:40 +msgid "New Delivery method" +msgstr "" + +#: php/class-beta.php:45 +msgid "New Lazy Load and Responsive Breakpoints" +msgstr "" + +#: php/class-beta.php:51 +msgid "Non-media library assets" +msgstr "" + +#: php/class-connect.php:164 +msgid "Connection to Cloudinary has been removed." +msgstr "" + +#: php/class-connect.php:184 +msgid "" +"The environment variable URL must be in this format: " +"cloudinary://API_KEY:API_SECRET@CLOUD_NAME" +msgstr "" + +#: php/class-connect.php:202 +msgid "Successfully connected to Cloudinary." +msgstr "" + +#: php/class-connect.php:245 +#. translators: Placeholder refers the error from API. +msgid "Cloudinary Error: %s" +msgstr "" + +#: php/class-connect.php:253 +#. translators: Placeholders are tags. +msgid "" +"Cloudinary Account Disabled. %1$s Upgrade your plan %3$s or %2$s submit a " +"support request %3$s for assistance." +msgstr "" + +#: php/class-connect.php:297 +#. translators: Placeholder refers to the expected URL format. +msgid "Incorrect Format. Expecting: %s" +msgstr "" + +#: php/class-connect.php:309 +msgid "CNAME is not a valid domain name." +msgstr "" + +#: php/class-connect.php:628 +msgid "upgrade your account" +msgstr "" + +#: php/class-connect.php:643 +#. translators: %1$s quota size, %2$s amount in percent, %3$s link URL, %4$s +#. link anchor text. +msgid "" +"You are %2$s of the way through your monthly quota for %1$s on your " +"Cloudinary account. If you exceed your quota, the Cloudinary plugin will be " +"deactivated until your next billing cycle and your media assets will be " +"served from your WordPress Media Library. You may wish to %4$s and increase your quota to ensure you maintain " +"full functionality." +msgstr "" + +#: php/class-connect.php:676 php/class-connect.php:865 +#: php/class-connect.php:907 +msgid "Connect" +msgstr "" + +#: php/class-connect.php:678 +msgid "your Cloudinary account with WordPress to get started." +msgstr "" + +#: php/class-connect.php:814 php/class-connect.php:815 +msgid "Getting Started" +msgstr "" + +#: php/class-connect.php:819 +msgid "About" +msgstr "" + +#: php/class-connect.php:822 +msgid "Welcome to Cloudinary." +msgstr "" + +#: php/class-connect.php:823 +msgid "" +"Cloudinary supercharges your application media! It enables you to easily " +"upload images and videos to the cloud and deliver them optimized, via a " +"lightning-fast CDN, using industry best practices. Perform smart resizing, " +"add watermarks, apply effects, and much more without leaving your WordPress " +"console or installing any software." +msgstr "" + +#: php/class-connect.php:831 +msgid "Image Delivery Settings" +msgstr "" + +#: php/class-connect.php:832 +msgid "" +"Configure how your images are shown on your site. You can apply " +"transformations to adjust the quality, format or visual appearance and " +"define other settings such as responsive images." +msgstr "" + +#: php/class-connect.php:838 +msgid "Image settings" +msgstr "" + +#: php/class-connect.php:843 +msgid "Video Settings" +msgstr "" + +#: php/class-connect.php:844 +msgid "" +"Configure how your videos are shown on your site. You can apply " +"transformations to adjust the quality, format or visual appearance and " +"define other settings such as whether to use the Cloudinary video player." +msgstr "" + +#: php/class-connect.php:850 +msgid "Video settings" +msgstr "" + +#: php/class-connect.php:855 +msgid "Learn More" +msgstr "" + +#: php/class-connect.php:856 +msgid "" +"You can upload and manage your images and videos in Cloudinary directly " +"from your WordPress interface. The plugin also supports automated " +"(single-click) migration of all media assets from your existing posts to " +"Cloudinary. Once your WordPress media is stored in Cloudinary, you can take " +"advantage of Cloudinary's transformation, optimization, and responsive " +"features as well as fast CDN delivery." +msgstr "" + +#: php/class-connect.php:861 php/class-media.php:2398 +msgid "See Examples" +msgstr "" + +#: php/class-connect.php:885 +msgid "Connect to Cloudinary!" +msgstr "" + +#: php/class-connect.php:888 +msgid "" +"You need to connect your Cloudinary account to WordPress by adding your " +"unique connection string. See below for where to find this." +msgstr "" + +#: php/class-connect.php:893 +msgid "Connection string" +msgstr "" + +#: php/class-connect.php:894 +msgid "" +"The connection string is made up of your Cloudinary Cloud name, API Key and " +"API Secret and known as the API Environment Variable. This authenticates " +"the Cloudinary WordPress plugin with your Cloudinary account." +msgstr "" + +#: php/class-connect.php:913 +msgid "Where to find my Connection string?" +msgstr "" + +#: php/class-deactivation.php:89 +msgid "I don’t get any value from the plugin." +msgstr "" + +#: php/class-deactivation.php:93 +msgid "I don’t know how to use the plugin." +msgstr "" + +#: php/class-deactivation.php:97 +msgid "This is temporary. I’ll use the plugin again soon." +msgstr "" + +#: php/class-deactivation.php:101 +msgid "I encountered technical issues with the plugin." +msgstr "" + +#: php/class-deactivation.php:106 +msgid "I use another plugin that works better for me." +msgstr "" + +#: php/class-deactivation.php:111 +msgid "Other." +msgstr "" + +#: php/class-deactivation.php:125 +#. translators: The System Report link tag. +msgid "Share a %s with Cloudinary to help improve the plugin." +msgstr "" + +#: php/class-deactivation.php:135 +#. translators: The System Report link and label. +msgid "Tell us how to improve!" +msgstr "" + +#: php/class-deactivation.php:135 +msgid "Deactivation feedback" +msgstr "" + +#: php/class-deactivation.php:140 +msgid "Please select a reason for deactivating so we can make our plugin better:" +msgstr "" + +#: php/class-deactivation.php:151 +msgid "Additional details:" +msgstr "" + +#: php/class-deactivation.php:169 +msgid "Allow Cloudinary to contact me regarding deactivation of the plugin." +msgstr "" + +#: php/class-deactivation.php:173 +msgid "Submit and deactivate" +msgstr "" + +#: php/class-deactivation.php:176 +msgid "Skip and deactivate" +msgstr "" + +#: php/class-deactivation.php:179 +msgid "Sending…" +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "Cloudinary" +msgstr "" + +#: php/class-media.php:1769 +msgid "Not Synced" +msgstr "" + +#: php/class-media.php:1778 +#. translators: variable is file size. +msgid "" +"File size exceeds the maximum of %s. This media asset will be served from " +"WordPress." +msgstr "" + +#: php/class-media.php:1784 +msgid "Synced" +msgstr "" + +#: php/class-media.php:1794 +msgid "Not syncable. This is an external media." +msgstr "" + +#: php/class-media.php:1798 +msgid "This media is Fetch type." +msgstr "" + +#: php/class-media.php:1802 +msgid "This media is Sprite type." +msgstr "" + +#: php/class-media.php:2385 +msgid "Media Settings" +msgstr "" + +#: php/class-media.php:2388 +msgid "Media Display" +msgstr "" + +#: php/class-media.php:2392 php/ui/component/class-plan-status.php:128 +msgid "Transformations" +msgstr "" + +#: php/class-media.php:2393 +msgid "" +"Cloudinary allows you to easily transform your images on-the-fly to any " +"required format, style and dimension, and also optimizes images for minimal " +"file size alongside high visual quality for an improved user experience and " +"minimal bandwidth. You can do all of this by implementing dynamic image " +"transformation and delivery URLs." +msgstr "" + +#: php/class-plugin.php:725 +msgid "Visit plugin site" +msgstr "" + +#: php/class-report.php:91 +msgid "Added to the Cloudinary Report." +msgstr "" + +#: php/class-report.php:109 +msgid "Add to Cloudinary Report" +msgstr "" + +#: php/class-report.php:154 +msgid "Cloudinary Metadata viewer" +msgstr "" + +#: php/class-report.php:189 php/class-report.php:192 +msgid "System Report" +msgstr "" + +#: php/class-report.php:195 +msgid "System information report" +msgstr "" + +#: php/class-report.php:197 +msgid "Enable report" +msgstr "" + +#: php/class-report.php:248 +msgid "" +"Enabling system information reporting will allow you to generate and " +"download a realtime snapshot report. The report will be in JSON format and " +"will include information about:" +msgstr "" + +#: php/class-report.php:251 +msgid "Current WordPress and Cloudinary configuration." +msgstr "" + +#: php/class-report.php:252 +msgid "Currently installed plugins." +msgstr "" + +#: php/class-report.php:253 +msgid "Any themes that are being used." +msgstr "" + +#: php/class-report.php:254 +msgid "" +"Any specifically selected media. These can be added to the report from the " +"WordPress Media Library." +msgstr "" + +#: php/class-report.php:255 +msgid "" +"Any specifically selected posts or pages. These can be added to the report " +"from the relevant listing pages." +msgstr "" + +#: php/class-sync.php:429 +msgid "Synchronizing asset with Cloudinary" +msgstr "" + +#: php/class-sync.php:448 +msgid "Upgrading from previous version" +msgstr "" + +#: php/class-sync.php:461 +msgid "Downloading from Cloudinary" +msgstr "" + +#: php/class-sync.php:483 +#. translators: %s folder name +msgid "Copying to folder %s." +msgstr "" + +#: php/class-sync.php:499 php/class-sync.php:519 +msgid "Updating metadata" +msgstr "" + +#: php/class-sync.php:512 +msgid "Updating breakpoints" +msgstr "" + +#: php/class-sync.php:526 +msgid "Uploading to new cloud name." +msgstr "" + +#: php/class-sync.php:670 +msgid "An attachment post was expected." +msgstr "" + +#: php/class-sync.php:1030 +msgid "Sync" +msgstr "" + +#: php/class-sync.php:1035 +msgid "Sync Settings" +msgstr "" + +#: php/class-sync.php:1038 +msgid "Sync method" +msgstr "" + +#: php/class-sync.php:1039 +msgid "" +"Auto sync: Ensures that all of your WordPress assets are automatically " +"synced with Cloudinary when they are added to the WordPress Media Library. " +"Manual sync: Assets must be synced manually using the WordPress Media " +"Library" +msgstr "" + +#: php/class-sync.php:1047 +msgid "Auto sync" +msgstr "" + +#: php/class-sync.php:1048 +msgid "Manual sync" +msgstr "" + +#: php/class-sync.php:1053 +msgid "Bulk sync all your WordPress assets to Cloudinary" +msgstr "" + +#: php/class-sync.php:1054 +msgid "" +"Manual sync is enabled. Individual assets must be synced manually using the " +"WordPress Media Library." +msgstr "" + +#: php/class-sync.php:1055 +msgid "" +"An optional one-time operation to manually synchronize all WordPress Media " +"to Cloudinary." +msgstr "" + +#: php/class-sync.php:1061 +msgid "Cloudinary folder path" +msgstr "" + +#: php/class-sync.php:1065 +msgid "e.g.: wordpress_assets/" +msgstr "" + +#: php/class-sync.php:1068 +msgid "" +"Specify the folder in your Cloudinary account where WordPress assets are " +"uploaded to. All assets uploaded to WordPress from this point on will be " +"synced to the specified folder in Cloudinary. Leave blank to use the root " +"of your Cloudinary library." +msgstr "" + +#: php/class-sync.php:1077 php/ui/component/class-plan-status.php:94 +msgid "Storage" +msgstr "" + +#: php/class-sync.php:1078 +msgid "" +"Choose where to store your assets. Assets stored in both Cloudinary and " +"WordPress will enable local WordPress delivery if the Cloudinary plugin is " +"disabled or uninstalled. Storing assets with WordPress in lower resolution " +"will save on local WordPress storage and enable low resolution local " +"WordPress delivery if the plugin is disabled. Storing assets with " +"Cloudinary only will require additional steps to enable backwards " +"compatibility." +msgstr "" + +#: php/class-sync.php:1084 +msgid "Cloudinary and WordPress" +msgstr "" + +#: php/class-sync.php:1085 +msgid "Cloudinary and WordPress (low resolution)" +msgstr "" + +#: php/class-sync.php:1086 +msgid "Cloudinary only" +msgstr "" + +#: php/connect/class-api.php:326 +msgid "No direct access to file system." +msgstr "" + +#: php/connect/class-api.php:401 +#. translators: variable is thread name and queue size. +msgid "Uploading remote url: %1$s." +msgstr "" + +#: php/connect/class-api.php:508 +msgid "Could not get VIP file content" +msgstr "" + +#: php/delivery/class-lazy-load.php:204 +msgid "Lazy Loading" +msgstr "" + +#: php/delivery/class-lazy-load.php:209 +msgid "Enable lazy loading" +msgstr "" + +#: php/delivery/class-lazy-load.php:220 +msgid "Lazy loading threshold" +msgstr "" + +#: php/delivery/class-lazy-load.php:232 +msgid "Placeholder generation" +msgstr "" + +#: php/delivery/class-lazy-load.php:239 +msgid "Blur" +msgstr "" + +#: php/delivery/class-lazy-load.php:240 +msgid "Pixelate" +msgstr "" + +#: php/delivery/class-lazy-load.php:241 +msgid "Vectorize" +msgstr "" + +#: php/delivery/class-lazy-load.php:242 +msgid "Dominant Color" +msgstr "" + +#: php/delivery/class-lazy-load.php:243 ui-definitions/settings-video.php:59 +msgid "Off" +msgstr "" + +#: php/delivery/class-lazy-load.php:248 +msgid "Use custom color" +msgstr "" + +#: php/delivery/class-lazy-load.php:254 +msgid "Animate" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:141 +msgid "Breakpoints distance" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:142 +#: php/delivery/class-responsive-breakpoints.php:158 +msgid "The distance from the original image for responsive breakpoints generation." +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:143 +#: ui-definitions/settings-image.php:139 ui-definitions/settings-image.php:146 +msgid "px" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:157 +msgid "DPR settings" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:169 +msgid "None" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:170 +#: ui-definitions/settings-image.php:51 ui-definitions/settings-image.php:70 +#: ui-definitions/settings-video.php:128 ui-definitions/settings-video.php:143 +msgid "Auto" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:171 +msgid "2X" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:172 +msgid "3X" +msgstr "" + +#: php/delivery/class-responsive-breakpoints.php:173 +msgid "4X" +msgstr "" + +#: php/media/class-filter.php:615 php/media/class-filter.php:631 +#: php/media/class-filter.php:649 php/media/class-filter.php:665 +#: php/media/class-global-transformations.php:554 +msgid "Overwrite Global Transformations" +msgstr "" + +#: php/media/class-gallery.php:331 +msgid "Gallery Settings (Beta)" +msgstr "" + +#: php/media/class-gallery.php:337 +msgid "Gallery Settings" +msgstr "" + +#: php/media/class-gallery.php:348 +msgid "Replace Gallery" +msgstr "" + +#: php/media/class-gallery.php:349 +msgid "" +"Replace the default WooCommerce gallery with the Cloudinary Gallery on " +"product pages." +msgstr "" + +#: php/media/class-gallery.php:357 +msgid "Cloudinary Gallery block defaults" +msgstr "" + +#: php/media/class-gallery.php:360 +msgid "" +"The Cloudinary Gallery is available as a new block type which can be " +"inserted to any post or page. Note, this is not available when using the " +"classic editor." +msgstr "" + +#: php/media/class-global-transformations.php:312 +msgid "Taxonomy Order" +msgstr "" + +#: php/media/class-global-transformations.php:443 +msgid "No terms added" +msgstr "" + +#: php/media/class-global-transformations.php:455 +msgid "Overwrite taxonomy" +msgstr "" + +#: php/media/class-global-transformations.php:528 +msgid "Flag on whether transformation should be overwritten for a featured image." +msgstr "" + +#: php/settings/class-setting.php:561 +msgid "Settings updated successfully" +msgstr "" + +#: php/settings/class-setting.php:1022 +#. translators: Placeholder is the slug. +msgid "Duplicate setting slug %s. This setting will not be usable." +msgstr "" + +#: php/sync/class-delete-sync.php:70 +msgid "" +"Sorry, you can’t delete an asset until it has fully synced with Cloudinary. " +"Try again once syncing is complete." +msgstr "" + +#: php/sync/class-download-sync.php:169 +msgid "Could not download the Cloudinary asset." +msgstr "" + +#: php/sync/class-push-sync.php:211 +#. translators: variable is sync type. +msgid "Sync type: %s" +msgstr "" + +#: php/sync/class-push-sync.php:252 +#. translators: variable is thread name and asset ID. +msgid "%1$s: Syncing asset %2$d" +msgstr "" + +#: php/sync/class-push-sync.php:259 +#. translators: variable is thread name. +msgid "Ending thread %s" +msgstr "" + +#: php/sync/class-storage.php:104 +msgid "" +"Please ensure all media is fully synced before changing the environment " +"variable URL." +msgstr "" + +#: php/sync/class-storage.php:109 +#. translators: Placeholders are tags. +msgid "" +"You can’t currently change your environment variable as your storage " +"setting is set to \"Cloudinary only\". Update your %1$s storage settings " +"%2$s and sync your assets to WordPress storage to enable this setting." +msgstr "" + +#: php/sync/class-storage.php:288 +msgid "Syncing" +msgstr "" + +#: php/sync/class-storage.php:291 +msgid "Removing asset copy from local storage" +msgstr "" + +#: php/sync/class-storage.php:294 +msgid "Syncing low resolution asset to local storage" +msgstr "" + +#: php/sync/class-storage.php:297 +msgid "Syncing asset to local storage" +msgstr "" + +#: php/sync/class-storage.php:320 +#. translators: Placeholders are tags. +msgid "" +"You have reached one or more of your quota limits. Your Cloudinary media " +"will soon stop being delivered. Your current storage setting is " +"\"Cloudinary only\" and this will therefore result in broken links to media " +"assets. To prevent any issues upgrade your account or change your %1$s " +"storage settings.%2$s" +msgstr "" + +#: php/sync/class-sync-queue.php:195 +msgid "Bulk sync has been disabled." +msgstr "" + +#: php/sync/class-sync-queue.php:252 +#. translators: variable is thread name and queue size. +msgid "%1$s : Queue size : %2$s." +msgstr "" + +#: php/sync/class-sync-queue.php:327 +#. translators: variable is page number. +msgid "Building Queue." +msgstr "" + +#: php/sync/class-sync-queue.php:333 +#. translators: variable is page number. +msgid "No posts" +msgstr "" + +#: php/sync/class-sync-queue.php:391 +#. translators: variable is queue type. +msgid "Stopping queue: %s." +msgstr "" + +#: php/sync/class-sync-queue.php:430 +#. translators: variable is queue type. +msgid "Queue: %s - not running." +msgstr "" + +#: php/sync/class-sync-queue.php:482 +#. translators: variable is thread name. +msgid "Starting thread %s." +msgstr "" + +#: php/sync/class-sync-queue.php:719 +msgid "Resuming Maybe" +msgstr "" + +#: php/sync/class-sync-queue.php:728 +#. translators: variable is thread name. +msgid "Thread %s Stopped." +msgstr "" + +#: php/sync/class-upload-sync.php:92 php/sync/class-upload-sync.php:128 +#: php/sync/class-upload-sync.php:129 +msgid "Push to Cloudinary" +msgstr "" + +#: php/sync/class-upload-sync.php:136 php/sync/class-upload-sync.php:137 +msgid "Re-sync to Cloudinary" +msgstr "" + +#: php/templates/connection-string.php:17 +#. translators: Link to create a Cloudinary account. +msgid "%1$sCloudinary account%2$s" +msgstr "" + +#: php/templates/connection-string.php:20 +msgid "Create here a free Cloudinary account" +msgstr "" + +#: php/templates/connection-string.php:28 +msgid "Open your Cloudinary Dashboard" +msgstr "" + +#: php/templates/connection-string.php:29 +msgid "At the top of the dashboard you will find the Account Details section" +msgstr "" + +#: php/templates/connection-string.php:30 +msgid "Copy the API Environment variable" +msgstr "" + +#: php/templates/connection-string.php:32 +msgid "Where the connection string can be found on the cloudinary.com console." +msgstr "" + +#: php/templates/taxonomy-term-transformation-fields.php:15 +#. translators: variable is context. +msgid "Global %s Transformations" +msgstr "" + +#: php/templates/taxonomy-transformation-fields.php:15 +msgid "Cloudinary Global Transformations" +msgstr "" + +#: php/templates/transformation-preview-video.php:16 +#: php/templates/transformation-preview.php:16 +#: php/ui/component/class-image-preview.php:212 +#: php/ui/component/class-video-preview.php:69 +msgid "Invalid transformations or error loading preview." +msgstr "" + +#: php/templates/transformation-preview-video.php:31 +#: php/templates/transformation-preview.php:31 +#: php/ui/component/class-image-preview.php:116 +msgid "Refresh Preview" +msgstr "" + +#: php/templates/transformation-preview.php:18 +#: php/ui/component/class-image-preview.php:214 +#. translators: %s is the transformation that breaks the preview. +msgid "Preview cannot be generated because %s transformation was used." +msgstr "" + +#: php/ui/component/class-button.php:36 +msgid "Save Changes" +msgstr "" + +#: php/ui/component/class-cache-status.php:40 +msgid "Assets cached to Cloudinary" +msgstr "" + +#: php/ui/component/class-cache-status.php:46 +msgid "Cache Point" +msgstr "" + +#: php/ui/component/class-cache-status.php:48 +msgid "Cached items" +msgstr "" + +#: php/ui/component/class-connect.php:60 +#. translators: The connected cloud name. +msgid "%s Connected to Cloudinary" +msgstr "" + +#: php/ui/component/class-folder-table.php:139 +msgid "No files cached." +msgstr "" + +#: php/ui/component/class-folder-table.php:172 +msgid "Delete selected cached items." +msgstr "" + +#: php/ui/component/class-folder-table.php:182 +msgid "Select cache items to invalidate." +msgstr "" + +#: php/ui/component/class-folder-table.php:202 +msgid "Search" +msgstr "" + +#: php/ui/component/class-folder-table.php:319 +msgid "Apply changes" +msgstr "" + +#: php/ui/component/class-media-status.php:98 +#: php/ui/component/class-sync.php:46 +msgid "All assets are synced" +msgstr "" + +#: php/ui/component/class-media-status.php:111 +msgid "Media assets are synced to Cloudinary" +msgstr "" + +#: php/ui/component/class-media-status.php:124 +#. translators: number of synced media of all. +msgid "%1$d of %2$d" +msgstr "" + +#: php/ui/component/class-plan-status.php:161 +msgid "Bandwidth" +msgstr "" + +#: php/ui/component/class-plan.php:113 +msgid "1 Credit =" +msgstr "" + +#: php/ui/component/class-plan.php:145 +msgid "Pay as you go" +msgstr "" + +#: php/ui/component/class-plan.php:149 +#. translators: The number of monthly credits. +msgid "%d Monthly Credit" +msgid_plural "%d Monthly Credits" +msgstr[0] "" +msgstr[1] "" + +#: php/ui/component/class-plan.php:164 +msgid "1,000 Transformations" +msgstr "" + +#: php/ui/component/class-plan.php:165 +msgid "1 GB Storage" +msgstr "" + +#: php/ui/component/class-plan.php:166 +msgid "1 GB Bandwidth" +msgstr "" + +#: php/ui/component/class-switch-cloud.php:38 +msgid "Switch Cloud" +msgstr "" + +#: php/ui/component/class-switch-cloud.php:49 +msgid "Connection string defined by constant." +msgstr "" + +#: php/ui/component/class-sync.php:51 +msgid "Syncing now" +msgstr "" + +#: php/ui/component/class-sync.php:84 +msgid "Sync Now" +msgstr "" + +#: php/ui/component/class-sync.php:88 +msgid "Stop Sync" +msgstr "" + +#: php/ui/component/class-system.php:69 +msgid "" +"The Cloudinary system information report is enabled. You can now download " +"the realtime report and, if required, share it privately with your " +"Cloudinary support contact." +msgstr "" + +#: php/ui/component/class-system.php:70 +msgid "This report will contain information about:" +msgstr "" + +#: php/ui/component/class-system.php:71 +msgid "Disabling reporting will cleanup your tracked items." +msgstr "" + +#: php/ui/component/class-system.php:74 +msgid "" +"Your system environment — site URL, WordPress version, PHP version, and PHP " +"loaded extensions." +msgstr "" + +#: php/ui/component/class-system.php:75 +msgid "Your theme." +msgstr "" + +#: php/ui/component/class-system.php:76 +msgid "Your active plugins." +msgstr "" + +#: php/ui/component/class-system.php:77 +msgid "Your Cloudinary settings." +msgstr "" + +#: php/ui/component/class-system.php:91 +msgid "Raw data about:" +msgstr "" + +#: php/ui/component/class-system.php:115 +msgid "Download report" +msgstr "" + +#: php/ui/component/class-system.php:147 +msgid "Edit item" +msgstr "" + +#: ui-definitions/settings-footer.php:19 +msgid "Thanks for using Cloudinary, please take a minute to rate our plugin." +msgstr "" + +#: ui-definitions/settings-header.php:14 ui-definitions/settings-header.php:23 +msgid "Cloudinary's logo" +msgstr "" + +#: ui-definitions/settings-header.php:38 +msgid "Need help?" +msgstr "" + +#: ui-definitions/settings-image.php:11 +msgid "Image - Global Settings" +msgstr "" + +#: ui-definitions/settings-image.php:27 +msgid "Image optimization" +msgstr "" + +#: ui-definitions/settings-image.php:28 +msgid "" +"Images will be delivered using Cloudinary’s automatic format and quality " +"algorithms for the best tradeoff between visual quality and file size. Use " +"Advanced Optimization options to manually tune format and quality." +msgstr "" + +#: ui-definitions/settings-image.php:29 +msgid "Optimize images on my site." +msgstr "" + +#: ui-definitions/settings-image.php:38 ui-definitions/settings-video.php:115 +msgid "Advanced optimization" +msgstr "" + +#: ui-definitions/settings-image.php:46 +msgid "Image format" +msgstr "" + +#: ui-definitions/settings-image.php:47 +msgid "" +"The image format to use for delivery. Leave as Auto to automatically " +"deliver the most optimal format based on the user's browser and device." +msgstr "" + +#: ui-definitions/settings-image.php:50 ui-definitions/settings-image.php:69 +#: ui-definitions/settings-video.php:127 ui-definitions/settings-video.php:142 +msgid "Not set" +msgstr "" + +#: ui-definitions/settings-image.php:52 +msgid "PNG" +msgstr "" + +#: ui-definitions/settings-image.php:53 +msgid "JPG" +msgstr "" + +#: ui-definitions/settings-image.php:54 +msgid "GIF" +msgstr "" + +#: ui-definitions/settings-image.php:55 +msgid "WebP" +msgstr "" + +#: ui-definitions/settings-image.php:65 +msgid "Image quality" +msgstr "" + +#: ui-definitions/settings-image.php:66 +msgid "" +"The compression quality to apply when delivering images. Leave as Auto to " +"apply an algorithm that finds the best tradeoff between visual quality and " +"file size." +msgstr "" + +#: ui-definitions/settings-image.php:71 ui-definitions/settings-video.php:144 +msgid "Auto best" +msgstr "" + +#: ui-definitions/settings-image.php:72 ui-definitions/settings-video.php:145 +msgid "Auto good" +msgstr "" + +#: ui-definitions/settings-image.php:73 ui-definitions/settings-video.php:146 +msgid "Auto eco" +msgstr "" + +#: ui-definitions/settings-image.php:74 ui-definitions/settings-video.php:147 +msgid "Auto low" +msgstr "" + +#: ui-definitions/settings-image.php:90 +msgid "Image Display" +msgstr "" + +#: ui-definitions/settings-image.php:95 ui-definitions/settings-image.php:107 +msgid "Image breakpoints" +msgstr "" + +#: ui-definitions/settings-image.php:100 +msgid "Breakpoints" +msgstr "" + +#: ui-definitions/settings-image.php:101 +msgid "" +"Automatically generate multiple sizes based on the configured breakpoints " +"to enable your images to responsively adjust to different screen sizes. " +"Note that your Cloudinary usage will increase when enabling responsive " +"images." +msgstr "" + +#: ui-definitions/settings-image.php:102 +msgid "Enable responsive images." +msgstr "" + +#: ui-definitions/settings-image.php:116 +msgid "Max breakpoints" +msgstr "" + +#: ui-definitions/settings-image.php:117 +msgid "" +"The maximum number of images to be generated when delivering responsive " +"images. For some images, the responsive algorithm may determine that the " +"ideal number of breakpoints is smaller than the value you specify." +msgstr "" + +#: ui-definitions/settings-image.php:118 +msgid "Valid values: 3-200" +msgstr "" + +#: ui-definitions/settings-image.php:128 +msgid "Byte step" +msgstr "" + +#: ui-definitions/settings-image.php:129 +msgid "The minimum number of bytes between two consecutive breakpoints." +msgstr "" + +#: ui-definitions/settings-image.php:130 +msgid "bytes" +msgstr "" + +#: ui-definitions/settings-image.php:136 +msgid "Image width limit" +msgstr "" + +#: ui-definitions/settings-image.php:137 +msgid "" +"The minimum and maximum width of an image created as a breakpoint. Leave " +"max as empty to auto detect based on largest registered size in WordPress." +msgstr "" + +#: ui-definitions/settings-image.php:138 +msgid "Max" +msgstr "" + +#: ui-definitions/settings-image.php:145 +msgid "Min" +msgstr "" + +#: ui-definitions/settings-image.php:155 ui-definitions/settings-video.php:164 +msgid "Custom transformation" +msgstr "" + +#: ui-definitions/settings-image.php:156 +msgid "" +"The set of transformations to apply to all image assets, as a URL " +"transformation string" +msgstr "" + +#: ui-definitions/settings-image.php:174 +msgid "Image preview" +msgstr "" + +#: ui-definitions/settings-pages.php:10 +msgid "Cloudinary Dashboard" +msgstr "" + +#: ui-definitions/settings-pages.php:11 +msgid "Dashboard" +msgstr "" + +#: ui-definitions/settings-pages.php:17 +msgid "Your Current Plan" +msgstr "" + +#: ui-definitions/settings-pages.php:22 +msgid "Upgrade Plan" +msgstr "" + +#: ui-definitions/settings-pages.php:29 +msgid "Your Plan Status" +msgstr "" + +#: ui-definitions/settings-pages.php:36 +msgid "Your Media Sync Status" +msgstr "" + +#: ui-definitions/settings-video.php:11 +msgid "Video - Global Settings" +msgstr "" + +#: ui-definitions/settings-video.php:27 +msgid "Video player" +msgstr "" + +#: ui-definitions/settings-video.php:28 +msgid "Which video player to use on all videos." +msgstr "" + +#: ui-definitions/settings-video.php:31 +msgid "WordPress player" +msgstr "" + +#: ui-definitions/settings-video.php:32 +msgid "Cloudinary player" +msgstr "" + +#: ui-definitions/settings-video.php:37 +msgid "Player options" +msgstr "" + +#: ui-definitions/settings-video.php:43 +msgid "Show controls" +msgstr "" + +#: ui-definitions/settings-video.php:49 +msgid " Repeat video" +msgstr "" + +#: ui-definitions/settings-video.php:55 +msgid "Autoplay" +msgstr "" + +#: ui-definitions/settings-video.php:60 +msgid "Always" +msgstr "" + +#: ui-definitions/settings-video.php:61 +msgid "On-scroll (autoplay when in view)" +msgstr "" + +#: ui-definitions/settings-video.php:65 +#. translators: Placeholders are tags. +msgid "" +"Please note that when choosing \"always\", the video will autoplay without " +"sound (muted). This is a built-in browser feature and applies to all major " +"browsers.%1$sRead more about muted autoplay%2$s" +msgstr "" + +#: ui-definitions/settings-video.php:74 +msgid "Bitrate" +msgstr "" + +#: ui-definitions/settings-video.php:75 +msgid "Enable bitrate limiter" +msgstr "" + +#: ui-definitions/settings-video.php:76 +msgid "If set, all videos will be delivered in the defined bitrate." +msgstr "" + +#: ui-definitions/settings-video.php:85 +msgid "Bitrate limit" +msgstr "" + +#: ui-definitions/settings-video.php:86 +msgid "Maximum number of bits per second in Kilobytes." +msgstr "" + +#: ui-definitions/settings-video.php:104 +msgid "Video optimization" +msgstr "" + +#: ui-definitions/settings-video.php:105 +msgid "" +"Videos will be delivered using Cloudinary’s automatic format and quality " +"algorithms for the best tradeoff between visual quality and file size. Use " +"Advanced Optimization options to manually tune format and quality." +msgstr "" + +#: ui-definitions/settings-video.php:106 +msgid "Optimize videos on my site." +msgstr "" + +#: ui-definitions/settings-video.php:123 +msgid "Video format" +msgstr "" + +#: ui-definitions/settings-video.php:124 +msgid "" +"The video format to use for delivery. Leave as Auto to automatically " +"deliver the most optimal format based on the user's browser and device." +msgstr "" + +#: ui-definitions/settings-video.php:138 +msgid "Video quality" +msgstr "" + +#: ui-definitions/settings-video.php:139 +msgid "" +"The compression quality to apply when delivering videos. Leave as Auto to " +"apply an algorithm that finds the best tradeoff between visual quality and " +"file size." +msgstr "" + +#: ui-definitions/settings-video.php:165 +msgid "" +"The set of transformations to apply to all video assets, as a URL " +"transformation string." +msgstr "" + +#: ui-definitions/settings-video.php:183 +msgid "Video preview" +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "https://cloudinary.com/documentation/wordpress_integration" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"With the Cloudinary plugin, you can upload and manage your media assets in " +"the cloud, then deliver them to your users through a fast content delivery " +"network, improving your website’s loading speed and overall user " +"experience. Apply multiple transformations and take advantage of a full " +"digital asset management solution without leaving WordPress." +msgstr "" + +#. Author of the plugin/theme +msgid "Cloudinary Ltd., XWP" +msgstr "" + +#. Author URI of the plugin/theme +msgid "https://cloudinary.com/" +msgstr "" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 29b7454d1..6de5bf542 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,10 +1,12 @@ { "name": "cloudinary", + "version": "2.7.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "cloudinary", + "version": "2.7.5", "hasInstallScript": true, "license": "GPL-2.0+", "devDependencies": { @@ -66,6 +68,7 @@ "grunt-shell": "^3.0.1", "grunt-text-replace": "^0.4.0", "grunt-wp-deploy": "^2.1.2", + "grunt-wp-i18n": "^1.0.3", "husky": "^4.3.8", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-report": "^3.0.0", @@ -18085,6 +18088,19 @@ "grunt": ">=0.4.1" } }, + "node_modules/grunt-wp-i18n": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-1.0.3.tgz", + "integrity": "sha512-CJNbEKeBeOSAPeaJ9B8iCgSwtaG63UR9/uT46a4OsIqnFhOJpeAi138JTlvjfIbnDVoBrzvdrKJe1svveLjUtA==", + "dev": true, + "dependencies": { + "grunt": "^1.0.3", + "node-wp-i18n": "^1.2.2" + }, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/grunt/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -24564,7 +24580,10 @@ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true, - "peer": true + "peer": true, + "engines": { + "node": "*" + } }, "node_modules/jsprim": { "version": "1.4.1", @@ -27997,6 +28016,88 @@ "url": "https://github.com/sponsors/antelle" } }, + "node_modules/node-wp-i18n": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/node-wp-i18n/-/node-wp-i18n-1.2.5.tgz", + "integrity": "sha512-XX6GanJ+Ta5Wc/oNkhVrV+lGrhLe0zFx2pNb2diHF/DwDnwCVRHn6NSSyoU/mgTcVf4B/jtdoQ2CzWN/Q63MhA==", + "dev": true, + "dependencies": { + "bluebird": "^3.4.1", + "gettext-parser": "^3.1.0", + "glob": "^7.0.5", + "lodash": "^4.14.2", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "tmp": "^0.2.1" + }, + "bin": { + "wpi18n": "bin/wpi18n" + } + }, + "node_modules/node-wp-i18n/node_modules/gettext-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-3.1.1.tgz", + "integrity": "sha512-vNhWcqXEtZPs5Ft1ReA34g7ByWotpcOIeJvXVy2jF3/G2U9v6W0wG4Z4hXzcU8R//jArqkgHcVCGgGqa4vxVlQ==", + "dev": true, + "dependencies": { + "encoding": "^0.1.12", + "readable-stream": "^3.2.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/node-wp-i18n/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-wp-i18n/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-wp-i18n/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-wp-i18n/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", @@ -32685,6 +32786,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "engines": { "node": ">=0.4.x" @@ -34464,6 +34566,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" @@ -34888,6 +34991,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", "dev": true, "dependencies": { "@cnakazawa/watch": "^1.0.3", @@ -36303,6 +36407,11 @@ "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, "engines": { "node": ">=0.10.0" } @@ -41086,6 +41195,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "peer": true, "bin": { @@ -55724,6 +55834,16 @@ "inquirer": "^6.0.0" } }, + "grunt-wp-i18n": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-1.0.3.tgz", + "integrity": "sha512-CJNbEKeBeOSAPeaJ9B8iCgSwtaG63UR9/uT46a4OsIqnFhOJpeAi138JTlvjfIbnDVoBrzvdrKJe1svveLjUtA==", + "dev": true, + "requires": { + "grunt": "^1.0.3", + "node-wp-i18n": "^1.2.2" + } + }, "gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -63478,6 +63598,69 @@ "dev": true, "peer": true }, + "node-wp-i18n": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/node-wp-i18n/-/node-wp-i18n-1.2.5.tgz", + "integrity": "sha512-XX6GanJ+Ta5Wc/oNkhVrV+lGrhLe0zFx2pNb2diHF/DwDnwCVRHn6NSSyoU/mgTcVf4B/jtdoQ2CzWN/Q63MhA==", + "dev": true, + "requires": { + "bluebird": "^3.4.1", + "gettext-parser": "^3.1.0", + "glob": "^7.0.5", + "lodash": "^4.14.2", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "tmp": "^0.2.1" + }, + "dependencies": { + "gettext-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-3.1.1.tgz", + "integrity": "sha512-vNhWcqXEtZPs5Ft1ReA34g7ByWotpcOIeJvXVy2jF3/G2U9v6W0wG4Z4hXzcU8R//jArqkgHcVCGgGqa4vxVlQ==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "readable-stream": "^3.2.0", + "safe-buffer": "^5.1.2" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", @@ -73897,6 +74080,5 @@ "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true } - }, - "version": "2.7.5" + } } diff --git a/package.json b/package.json index b63bbeadc..1ab20d4ac 100644 --- a/package.json +++ b/package.json @@ -15,16 +15,17 @@ }, "scripts": { "build": "wp-scripts build", + "deploy": "npm run build && grunt deploy && npm run release", + "deploy-assets": "grunt deploy-assets", "dev": "wp-scripts start", - "lint:php": "composer lint", - "lint:php:fix": "composer fix", + "i18n": "grunt i18n", + "lint": "npm-run-all lint:php lint:js lint:style", "lint:js": "wp-scripts lint-js", "lint:js:fix": "wp-scripts lint-js --fix", + "lint:php": "composer lint", + "lint:php:fix": "composer fix", "lint:style": "wp-scripts lint-style", - "lint": "npm-run-all lint:php lint:js lint:style", "package": "npm run build && grunt package", - "deploy": "npm run build && grunt deploy && npm run release", - "deploy-assets": "grunt deploy-assets", "postinstall": "composer install", "readme": "composer readme", "release": "release-it", @@ -106,6 +107,7 @@ "grunt-shell": "^3.0.1", "grunt-text-replace": "^0.4.0", "grunt-wp-deploy": "^2.1.2", + "grunt-wp-i18n": "^1.0.3", "husky": "^4.3.8", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-report": "^3.0.0", diff --git a/php/assets/class-rest-assets.php b/php/assets/class-rest-assets.php new file mode 100644 index 000000000..8661558dc --- /dev/null +++ b/php/assets/class-rest-assets.php @@ -0,0 +1,289 @@ +assets = $assets; + add_filter( 'cloudinary_api_rest_endpoints', array( $this, 'rest_endpoints' ) ); + } + + /** + * Register the endpoints. + * + * @param array $endpoints The endpoint to add to. + * + * @return array + */ + public function rest_endpoints( $endpoints ) { + + $endpoints['show_cache'] = array( + 'method' => \WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'rest_get_caches' ), + 'permission_callback' => array( $this, 'rest_can_manage_options' ), + 'args' => array(), + ); + $endpoints['disable_cache_items'] = array( + 'method' => \WP_REST_Server::CREATABLE, + 'permission_callback' => array( $this, 'rest_can_manage_options' ), + 'callback' => array( $this, 'rest_handle_state' ), + 'args' => array( + 'ids' => array( + 'type' => 'array', + 'default' => array(), + 'description' => __( 'The list of IDs to update.', 'cloudinary' ), + ), + 'state' => array( + 'type' => 'string', + 'default' => 'draft', + 'description' => __( 'The state to update.', 'cloudinary' ), + ), + ), + ); + $endpoints['purge_cache'] = array( + 'method' => \WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'rest_purge' ), + 'permission_callback' => array( $this, 'rest_can_manage_options' ), + 'args' => array(), + ); + + $endpoints['purge_all'] = array( + 'method' => \WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'rest_purge_all' ), + 'permission_callback' => array( $this, 'rest_can_manage_options' ), + 'args' => array(), + ); + + return $endpoints; + } + + /** + * Purges a cache which forces the entire point to re-evaluate cached items when requested. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_Error|WP_HTTP_Response|WP_REST_Response + */ + public function rest_purge( $request ) { + + $asset_parent = (int) $request->get_param( 'asset_parent' ); + $transient_key = '_purge_cache' . $asset_parent; + $parents = $this->assets->get_asset_parents(); + if ( empty( $parents ) ) { + return rest_ensure_response( true ); + } + + $tracker = get_transient( $transient_key ); + foreach ( $parents as $parent ) { + if ( $asset_parent && $asset_parent !== $parent->ID ) { + continue; + } + $tracker['time'] = time(); + $tracker['current_parent'] = $asset_parent; + set_transient( $transient_key, $tracker, MINUTE_IN_SECONDS ); + $this->assets->purge_parent( $parent->ID ); + } + delete_transient( $transient_key ); + + return rest_ensure_response( true ); + } + + /** + * Purges a cache which forces the entire point to re-evaluate cached items when requested. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_Error|WP_HTTP_Response|WP_REST_Response + */ + public function rest_purge_all( $request ) { + + $count = $request->get_param( 'count' ); + $asset_parent = (int) $request->get_param( 'parent' ); + $transient_key = '_purge_cache' . $asset_parent; + $query_args = array( + 'post_type' => Assets::POST_TYPE_SLUG, + 'posts_per_page' => 1, + 'paged' => 1, + 'post_status' => array( 'inherit', 'draft', 'publish' ), + 'fields' => 'ids', + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + ); + if ( ! empty( $asset_parent ) ) { + $query_args['post_parent'] = $asset_parent; + } + $query = new \WP_Query( $query_args ); + + $result = array( + 'total' => $query->found_posts, + 'pending' => $query->found_posts, + 'percent' => empty( $query->found_posts ) ? 100 : 0, + ); + $tracker = get_transient( $transient_key ); + + if ( ! empty( $tracker ) && isset( $tracker['time'] ) ) { + $result['percent'] = ( $tracker['total'] - $result['pending'] ) / $tracker['total'] * 100; + } + if ( empty( $count ) && ! empty( $query->found_posts ) ) { + if ( empty( $result['time'] ) ) { + set_transient( $transient_key, $result, MINUTE_IN_SECONDS ); + $this->assets->plugin->get_component( 'api' )->background_request( 'purge_cache', array( 'asset_parent' => $asset_parent ) ); + } + } + + return rest_ensure_response( $result ); + } + + /** + * Get cached files for an cache point. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response + */ + public function rest_get_caches( $request ) { + $url = $request->get_param( 'ID' ); + $parent = $this->assets->get_asset_parent( $url ); + $search = $request->get_param( 'search' ); + $page = $request->get_param( 'page' ); + $current_page = $page ? $page : 1; + $data = $this->get_assets( $parent->ID, $search, $current_page ); + + return rest_ensure_response( $data ); + } + + /** + * Admin permission callback. + * + * Explicitly defined to allow easier testability. + * + * @return bool + */ + public function rest_can_manage_options() { + return current_user_can( 'manage_options' ); + } + + /** + * Handle the state of a cache_point. + * Active : post_status = inherit. + * Inactive : post_status = draft. + * Deleted : delete post. + * + * @param WP_REST_Request $request Full details about the request. + * + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. + */ + public function rest_handle_state( $request ) { + $ids = $request['ids']; + $state = $request['state']; + foreach ( $ids as $id ) { + if ( Assets::POST_TYPE_SLUG !== get_post_type( $id ) ) { + continue; + } + if ( 'delete' === $state ) { + wp_delete_post( $id ); + continue; + } + + $args = array( + 'ID' => $id, + 'post_status' => 'disable' === $state ? 'draft' : 'inherit', + ); + wp_update_post( $args ); + } + + return $ids; + } + + /** + * Get assets for a cache point. + * + * @param int $id The cache point ID to get cache for. + * @param string|null $search Optional search. + * @param int $page The page or results to load. + * + * @return array + */ + public function get_assets( $id, $search = null, $page = 1 ) { + $cache_point = get_post( $id ); + if ( is_null( $cache_point ) ) { + return array(); + } + $args = array( + 'post_type' => Assets::POST_TYPE_SLUG, + 'posts_per_page' => 20, + 'paged' => $page, + 'post_parent' => $id, + 'post_status' => array( 'inherit', 'draft' ), + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + ); + if ( ! empty( $search ) ) { + $args['s'] = $search; + } + $posts = new \WP_Query( $args ); + $items = array(); + foreach ( $posts->get_posts() as $post ) { + $items[] = array( + 'ID' => $post->ID, + 'key' => $post->post_name, + 'local_url' => $post->post_title, + 'short_url' => str_replace( $cache_point->post_title, '', $post->post_title ), + 'active' => 'inherit' === $post->post_status, + ); + } + $total_items = $posts->found_posts; + $pages = ceil( $total_items / 20 ); + // translators: The current page and total pages. + $description = sprintf( __( 'Page %1$d of %2$d', 'cloudinary' ), $page, $pages ); + + // translators: The number of files. + $totals = sprintf( _n( '%d cached file', '%d cached files', $total_items, 'cloudinary' ), $total_items ); + + $return = array( + 'items' => $items, + 'total' => $total_items, + 'total_pages' => $pages, + 'current_page' => $page, + 'nav_text' => $totals . ' | ' . $description, + ); + if ( empty( $items ) ) { + if ( ! empty( $search ) ) { + $return['nav_text'] = __( 'No items found.', 'cloudinary' ); + } else { + $return['nav_text'] = __( 'No items cached.', 'cloudinary' ); + } + } + + return $return; + } +} diff --git a/php/class-assets.php b/php/class-assets.php new file mode 100644 index 000000000..052b6622c --- /dev/null +++ b/php/class-assets.php @@ -0,0 +1,1418 @@ + '_excluded_urls', + 'lock' => '_asset_lock', + ); + + /** + * Static instance of this class. + * + * @var self + */ + public static $instance; + + /** + * Assets constructor. + * + * @param Plugin $plugin Instance of the plugin. + */ + public function __construct( Plugin $plugin ) { + parent::__construct( $plugin ); + + $this->media = $plugin->get_component( 'media' ); + $this->delivery = $plugin->get_component( 'delivery' ); + $this->init(); + self::$instance = $this; + } + + /** + * Init the class. + */ + public function init() { + $this->register_post_type(); + $this->init_asset_parents(); + $this->register_hooks(); + $this->rest = new Rest_Assets( $this ); + } + + /** + * Register the hooks. + */ + protected function register_hooks() { + // Filters. + add_filter( 'cloudinary_is_local_asset_url', array( $this, 'check_asset' ), 10, 2 ); + add_filter( 'cloudinary_delivery_get_id', array( $this, 'get_asset_id_from_tag' ), 10, 2 ); + add_filter( 'cloudinary_is_media', array( $this, 'is_media' ), 10, 2 ); + add_filter( 'get_attached_file', array( $this, 'get_attached_file' ), 10, 2 ); + add_filter( 'cloudinary_sync_base_struct', array( $this, 'add_sync_type' ) ); + add_filter( 'update_post_metadata', array( $this, 'update_meta' ), 10, 4 ); + add_filter( 'add_post_metadata', array( $this, 'update_meta' ), 10, 4 ); + add_filter( 'get_post_metadata', array( $this, 'get_meta' ), 10, 3 ); + add_filter( 'delete_post_metadata', array( $this, 'delete_meta' ), 10, 4 ); + add_filter( 'intermediate_image_sizes_advanced', array( $this, 'no_sizes' ), PHP_INT_MAX, 3 ); + add_filter( 'cloudinary_can_sync_asset', array( $this, 'can_sync' ), 10, 2 ); + // Actions. + add_action( 'cloudinary_init_settings', array( $this, 'setup' ) ); + add_action( 'cloudinary_thread_queue_details_query', array( $this, 'connect_post_type' ) ); + add_action( 'cloudinary_build_queue_query', array( $this, 'connect_post_type' ) ); + add_action( 'cloudinary_string_replace', array( $this, 'add_url_replacements' ), 20 ); + add_action( 'shutdown', array( $this, 'meta_updates' ) ); + add_action( 'admin_bar_menu', array( $this, 'admin_bar_cache' ), 100 ); + } + + /** + * Add Cloudinary Beta menu to admin bar. + * + * @param \WP_Admin_Bar $admin_bar The admin bar object. + */ + public function admin_bar_cache( $admin_bar ) { + if ( ! Utils::user_can( 'clear_cache' ) || is_admin() ) { + return; + } + + $parent = array( + 'id' => 'cloudinary-cache', + 'title' => __( 'Cloudinary Cache', 'cloudinary' ), + 'meta' => array( + 'title' => __( 'Cloudinary Cache', 'cloudinary' ), + ), + ); + $admin_bar->add_menu( $parent ); + + $nonce = wp_create_nonce( 'cloudinary-cache-clear' ); + $clear = array( + 'id' => 'cloudinary-clear-cache', + 'parent' => 'cloudinary-cache', + 'title' => '{cld-cache-counter}', + 'href' => '?cloudinary-cache-clear=' . $nonce, + 'meta' => array( + 'title' => __( 'Purge', 'cloudinary' ), + 'class' => 'cloudinary-{cld-cache-status}', + ), + ); + $admin_bar->add_menu( $clear ); + } + + /** + * Sets the autosync to work on cloudinary_assets even when the autosync is disabled. + * + * @hook cloudinary_can_sync_asset + * + * @param bool $can The can sync check value. + * @param int $asset_id The asset ID. + * + * @return bool + */ + public function can_sync( $can, $asset_id ) { + if ( self::is_asset_type( $asset_id ) ) { + $can = true; + } + + return $can; + } + + /** + * Check if the post is a asset post type. + * + * @param int $post_id The ID to check. + * + * @return bool + */ + public static function is_asset_type( $post_id ) { + return self::POST_TYPE_SLUG === get_post_type( $post_id ); + } + + /** + * Filter out sizes for assets. + * + * @hook intermediate_image_sizes_advanced + * + * @param array $new_sizes The sizes to remove. + * @param array $image_meta The image meta. + * @param int|null $attachment_id The asset ID. + * + * @return array + */ + public function no_sizes( $new_sizes, $image_meta, $attachment_id = null ) { + if ( is_null( $attachment_id ) ) { + $attachment_id = $this->plugin->settings->get_param( '_currrent_attachment', 0 ); + } + if ( self::is_asset_type( $attachment_id ) ) { + $new_sizes = array(); + } + + return $new_sizes; + } + + /** + * Update our cache point meta data. + * + * @hook update_post_metadata, add_post_metadata + * + * @param null|bool $check The check to allow short circuit of get_metadata. + * @param int $object_id The object ID. + * @param string $meta_key The meta key. + * @param mixed $meta_value The meta value. + * + * @return bool|null + */ + public function update_meta( $check, $object_id, $meta_key, $meta_value ) { + + if ( self::is_asset_type( $object_id ) ) { + $meta = $this->get_meta_cache( $object_id ); + if ( ! isset( $meta[ $meta_key ] ) || $meta_value !== $meta[ $meta_key ] ) { + $meta[ $meta_key ] = $meta_value; + $this->set_meta_cache( $object_id, $meta ); + } + } + + return $check; + } + + /** + * Delete our cache point meta data. + * + * @hook delete_post_metadata + * + * @param null|bool $check The check to allow short circuit of get_metadata. + * @param int $object_id The object ID. + * @param string $meta_key The meta key. + * @param mixed $meta_value The meta value. + * + * @return bool + */ + public function delete_meta( $check, $object_id, $meta_key, $meta_value ) { + + if ( self::is_asset_type( $object_id ) ) { + $meta = $this->get_meta_cache( $object_id ); + if ( isset( $meta[ $meta_key ] ) && ( $meta[ $meta_key ] === $meta_value || empty( $meta_value ) ) ) { + unset( $meta[ $meta_key ] ); + $this->set_meta_cache( $object_id, $meta ); + } + } + + return $check; + } + + /** + * Get our cache point meta data. + * + * @hook get_post_metadata + * + * @param null|bool $check The check to allow short circuit of get_metadata. + * @param int $object_id The object ID. + * @param string $meta_key The meta key. + * + * @return mixed + */ + public function get_meta( $check, $object_id, $meta_key ) { + + if ( self::is_asset_type( $object_id ) ) { + $meta = $this->get_meta_cache( $object_id ); + $value = null; + if ( empty( $meta_key ) ) { + $value = $meta; + } elseif ( isset( $meta[ $meta_key ] ) ) { + $value[] = $meta[ $meta_key ]; + } + + if ( ! is_null( $value ) ) { + // Only return if we found meta, else allow to go into core meta. + return $value; + } + } + + return $check; + } + + /** + * Get meta data for a cache point. + * + * @param int $object_id The post ID. + * + * @return mixed + */ + protected function get_meta_cache( $object_id ) { + $meta = wp_cache_get( $object_id, 'cloudinary_asset' ); + if ( ! $meta ) { + $post = get_post( $object_id ); + $meta = json_decode( $post->post_content, true ); + wp_cache_add( $object_id, $meta, 'cloudinary_asset' ); + } + + return $meta; + } + + /** + * Set meta data for a cache point. + * + * @param int $object_id The post ID. + * @param mixed $meta The meta to set. + * + * @return bool + */ + protected function set_meta_cache( $object_id, $meta ) { + if ( ! in_array( $object_id, $this->meta_updates, true ) ) { + $this->meta_updates[] = $object_id; + } + + return wp_cache_replace( $object_id, $meta, 'cloudinary_asset' ); + } + + /** + * Compiles all metadata and preps upload at shutdown. + * + * @hook shutdown + */ + public function meta_updates() { + if ( $this->is_locked() ) { + return; + } + // Create missing assets. + if ( ! empty( $this->to_create ) ) { + foreach ( $this->to_create as $url => $parent ) { + $this->create_asset( $url, $parent ); + } + } + + foreach ( $this->meta_updates as $id ) { + + $meta = $this->get_meta_cache( $id ); + + $params = array( + 'ID' => $id, + 'post_content' => wp_json_encode( $meta ), + ); + wp_update_post( $params ); + } + } + + /** + * Set urls to be replaced. + * + * @hook cloudinary_string_replace + */ + public function add_url_replacements() { + $clear = filter_input( INPUT_GET, 'cloudinary-cache-clear', FILTER_SANITIZE_STRING ); + if ( $clear && wp_verify_nonce( $clear, 'cloudinary-cache-clear' ) ) { + $referrer = filter_input( INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_URL ); + if ( $this->asset_ids ) { + foreach ( $this->asset_ids as $asset_id ) { + wp_delete_post( $asset_id ); + } + } + wp_safe_redirect( $referrer ); + exit; + } + $total = 0; + if ( $this->asset_ids ) { + foreach ( $this->asset_ids as $url => $id ) { + $cloudinary_url = $this->media->cloudinary_url( $id ); + if ( $cloudinary_url ) { + String_Replace::replace( $url, $cloudinary_url ); + } + } + $total = count( $this->asset_ids ); + String_Replace::replace( '{cld-cache-status}', 'on' ); + } else { + String_Replace::replace( '{cld-cache-status}', 'off' ); + } + // translators: Placeholders are the number of items. + $message = sprintf( _n( '%s cached item', '%s cached items', $total, 'cloudinary' ), number_format_i18n( $total ) ); + String_Replace::replace( '{cld-cache-counter}', $message ); + } + + /** + * Connect our post type to the sync query, to allow it to be queued. + * + * @hook cloudinary_thread_queue_details_query, cloudinary_build_queue_query + * + * @param array $query The Query. + * + * @return array + */ + public function connect_post_type( $query ) { + + $query['post_type'] = array_merge( (array) $query['post_type'], (array) self::POST_TYPE_SLUG ); + + return $query; + } + + /** + * Register an asset path. + * + * @param string $path The path/URL to register. + * @param string $version The version. + */ + public static function register_asset_path( $path, $version ) { + $assets = self::$instance; + if ( $assets && ! $assets->is_locked() ) { + $asset_path = $assets->get_asset_parent( $path ); + if ( null === $asset_path ) { + $asset_parent_id = $assets->create_asset_parent( $path, $version ); + if ( is_wp_error( $asset_parent_id ) ) { + return; // Bail. + } + $asset_path = get_post( $asset_parent_id ); + } + // Check and update version if needed. + if ( $assets->media->get_post_meta( $asset_path->ID, Sync::META_KEYS['version'], true ) !== $version ) { + $assets->media->update_post_meta( $asset_path->ID, Sync::META_KEYS['version'], $version ); + } + $assets->activate_parent( $path ); + } + } + + /** + * Activate a parent asset path. + * + * @param string $url The path to activate. + */ + public function activate_parent( $url ) { + $url = $this->clean_path( $url ); + if ( isset( $this->asset_parents[ $url ] ) ) { + $this->active_parents[ $url ] = $this->asset_parents[ $url ]; + } + krsort( $this->active_parents, SORT_STRING ); + } + + /** + * Clean a path for saving as a title. + * + * @param string $path The path to clean. + * + * @return string + */ + protected function clean_path( $path ) { + $path = ltrim( $path, wp_parse_url( $path, PHP_URL_SCHEME ) . ':' ); + if ( empty( pathinfo( $path, PATHINFO_EXTENSION ) ) ) { + $path = trailingslashit( $path ); + } + + return $path; + } + + /** + * Create an asset parent. + * + * @param string $path The path to create. + * @param string $version The version. + * + * @return int|\WP_Error + */ + public function create_asset_parent( $path, $version ) { + $path = $this->clean_path( $path ); + $args = array( + 'post_title' => $path, + 'post_name' => md5( $path ), + 'post_type' => self::POST_TYPE_SLUG, + 'post_status' => 'publish', + ); + $parent_id = wp_insert_post( $args ); + if ( $parent_id ) { + $this->media->update_post_meta( $parent_id, Sync::META_KEYS['version'], $version ); + $this->media->update_post_meta( $parent_id, self::META_KEYS['excludes'], array() ); + $this->asset_parents[ $path ] = get_post( $parent_id ); + } + + return $parent_id; + } + + /** + * Purge a single asset parent. + * + * @param int $parent_id The Asset parnet to purge. + */ + public function purge_parent( $parent_id ) { + $query_args = array( + 'post_type' => self::POST_TYPE_SLUG, + 'posts_per_page' => 100, + 'post_parent' => $parent_id, + 'post_status' => array( 'inherit', 'draft' ), + 'fields' => 'ids', + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + ); + $query = new \WP_Query( $query_args ); + $previous_total = $query->found_posts; + do { + $this->lock_assets(); + $posts = $query->get_posts(); + foreach ( $posts as $post_id ) { + wp_delete_post( $post_id ); + } + + $query_args = $query->query_vars; + $query = new \WP_Query( $query_args ); + if ( $previous_total === $query->found_posts ) { + break; + } + } while ( $query->have_posts() ); + + // Clear out excludes. + wp_delete_post( $parent_id ); + } + + /** + * Lock asset creation for performing things like purging that require no changes. + */ + public function lock_assets() { + set_transient( self::META_KEYS['lock'], true, 10 ); + } + + /** + * Unlock asset creation. + */ + public function unlock_assets() { + delete_transient( self::META_KEYS['lock'] ); + } + + /** + * Check if assets are locked. + * + * @return bool + */ + public function is_locked() { + return get_transient( self::META_KEYS['lock'] ); + } + + /** + * Generate the signature for sync. + * + * @param int $asset_id The attachment/asset ID. + * + * @return string + */ + public function generate_file_signature( $asset_id ) { + $asset = get_post( $asset_id ); + + // The signature is the URL + the parents version. As the version changes, the signature is invalid, and re-synced. + return $asset->post_title . $this->media->get_post_meta( $asset->post_parent, Sync::META_KEYS['version'], true ); + } + + /** + * Upload an asset. + * + * @param int $asset_id The asset ID to upload. + * + * @return array|\WP_Error + */ + public function upload( $asset_id ) { + $connect = $this->plugin->get_component( 'connect' ); + $asset = get_post( $asset_id ); + $path = trim( wp_normalize_path( str_replace( home_url(), '', $asset->post_title ) ), '/' ); + $info = pathinfo( $path ); + $cloudinary_folder = wp_parse_url( home_url(), PHP_URL_HOST ); + $public_id = $cloudinary_folder . '/' . $info['dirname'] . '/' . $info['filename']; + $options = array( + 'unique_filename' => false, + 'overwrite' => true, + 'resource_type' => $this->media->get_resource_type( $asset_id ), + 'public_id' => $public_id, + ); + $result = $connect->api->upload( $asset_id, $options, array() ); + if ( ! is_wp_error( $result ) && isset( $result['public_id'] ) ) { + $this->media->update_post_meta( $asset_id, Sync::META_KEYS['public_id'], $result['public_id'] ); + $this->media->update_post_meta( $asset_id, Sync::META_KEYS['version'], $result['version'] ); + $this->media->sync->set_signature_item( $asset_id, 'file' ); + $this->media->sync->set_signature_item( $asset_id, 'cld_asset' ); + $this->media->sync->set_signature_item( $asset_id, 'cloud_name' ); + $this->media->sync->set_signature_item( $asset_id, 'storage' ); + $this->media->sync->set_signature_item( $asset_id, 'download' ); + $this->media->sync->set_signature_item( $asset_id, 'options' ); + } + + return $result; + } + + /** + * Register our sync type. + * + * @hook cloudinary_sync_base_struct + * + * @param array $structs The structure of all sync types. + * + * @return array + */ + public function add_sync_type( $structs ) { + $structs['cld_asset'] = array( + 'generate' => array( $this, 'generate_file_signature' ), + 'priority' => 2, + 'sync' => array( $this, 'upload' ), + 'validate' => function ( $attachment_id ) { + return Assets::POST_TYPE_SLUG === get_post_type( $attachment_id ); + }, + 'state' => 'uploading', + 'note' => __( 'Uploading to Cloudinary', 'cloudinary' ), + 'required' => true, + ); + + return $structs; + } + + /** + * Init asset parents. + */ + protected function init_asset_parents() { + + $args = array( + 'post_type' => self::POST_TYPE_SLUG, + 'post_parent' => 0, + 'posts_per_page' => 100, + 'paged' => 1, + 'post_status' => 'publish', + 'no_found_rows' => true, + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + ); + $query = new \WP_Query( $args ); + $this->asset_parents = array(); + + do { + foreach ( $query->get_posts() as $post ) { + $this->asset_parents[ $post->post_title ] = $post; + } + $args = $query->query_vars; + $args['paged'] ++; + $query = new \WP_Query( $args ); + } while ( $query->have_posts() ); + + } + + /** + * Check if the non-local URL should be added as an asset. + * + * @hook cloudinary_is_local_asset_url + * + * @param bool $is_local The is_local flag. + * @param string $url The URL to check. + * + * @return bool + */ + public function check_asset( $is_local, $url ) { + $clean_url = $this->clean_path( $url ); + foreach ( $this->active_parents as $asset_parent ) { + if ( substr( $clean_url, 0, strlen( $asset_parent->post_title ) ) === $asset_parent->post_title ) { + $excludes = $this->media->get_post_meta( $asset_parent->ID, self::META_KEYS['excludes'], true ); + if ( empty( $excludes ) ) { + $excludes = array(); + } + if ( ! in_array( $url, $excludes, true ) ) { + if ( ! $this->syncable_asset( $url ) ) { + $excludes[] = $url; + $this->media->update_post_meta( $asset_parent->ID, self::META_KEYS['excludes'], $excludes ); + break; + } + $is_local = true; + $this->found_urls[ $asset_parent->ID ][] = $url; + } + break; + } + } + + return $is_local; + } + + /** + * Check if the asset is syncable. + * + * @param string $filename The filename to check. + * + * @return bool + */ + protected function syncable_asset( $filename ) { + static $allowed_kinds = array(); + if ( empty( $allowed_kinds ) ) { + // Check with paths. + $types = wp_get_ext_types(); + $allowed_kinds = array_merge( $allowed_kinds, $types['image'], $types['audio'], $types['video'] ); + } + $type = pathinfo( $filename, PATHINFO_EXTENSION ); + + return in_array( $type, $allowed_kinds, true ); + } + + /** + * Get the asset src file. + * + * @hook get_attached_file + * + * @param string $file The file as from the filter. + * @param int $asset_id The asset ID. + * + * @return string + */ + public function get_attached_file( $file, $asset_id ) { + if ( self::is_asset_type( $asset_id ) ) { + $dirs = wp_get_upload_dir(); + $file = str_replace( trailingslashit( $dirs['basedir'] ), ABSPATH, $file ); + } + + return $file; + } + + /** + * Check to see if the post is a media item. + * + * @hook cloudinary_is_media + * + * @param bool $is_media The is_media flag. + * @param int $attachment_id The attachment ID. + * + * @return bool + */ + public function is_media( $is_media, $attachment_id ) { + if ( false === $is_media && self::is_asset_type( $attachment_id ) ) { + $is_media = true; + } + + return $is_media; + } + + /** + * Build asset ID's from found urls, and create missing items. + */ + public function build_asset_ids() { + + $names = array(); + $to_create = array(); + $this->asset_ids = array(); + + foreach ( $this->found_urls as $parent => $urls ) { + foreach ( $urls as $url ) { + $names[] = md5( $url ); + $to_create[ $url ] = $parent; + } + } + + $args = array( + 'post_type' => self::POST_TYPE_SLUG, + 'posts_per_page' => 100, + 'paged' => 1, + 'post_status' => 'inherit', + 'post_name__in' => $names, + 'no_found_rows' => true, + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + ); + + $query = new \WP_Query( $args ); + + do { + foreach ( $query->get_posts() as $post ) { + $this->asset_ids[ $post->post_title ] = $post->ID; + unset( $to_create[ $post->post_title ] ); + } + $args = $query->query_vars; + $args['paged'] ++; + $query = new \WP_Query( $args ); + } while ( $query->have_posts() ); + + // Add to the create queue. + if ( ! empty( $to_create ) ) { + $this->to_create = $to_create; + } + } + + /** + * Get all asset parents. + * + * @return \WP_Post[] + */ + public function get_asset_parents() { + $parents = array(); + if ( ! empty( $this->asset_parents ) ) { + $parents = $this->asset_parents; + } + + return $parents; + } + + /** + * Get all asset parents. + * + * @return \WP_Post[] + */ + public function get_active_asset_parents() { + $parents = array(); + if ( ! empty( $this->active_parents ) ) { + $parents = $this->active_parents; + } + + return $parents; + } + + /** + * Get an asset parent. + * + * @param string $url The URL of the parent. + * + * @return \WP_Post|null + */ + public function get_asset_parent( $url ) { + $url = $this->clean_path( $url ); + $parent = null; + if ( isset( $this->asset_parents[ $url ] ) ) { + $parent = $this->asset_parents[ $url ]; + } + + return $parent; + } + + /** + * Get an asset item. + * + * @param string $url The asset url. + * + * @return null|\WP_Post + */ + public function get_asset_id( $url ) { + return isset( $this->asset_ids[ $url ] ) ? $this->asset_ids[ $url ] : null; + } + + /** + * Create a new asset item. + * + * @param string $url The assets url. + * @param int $parent_id The asset parent ID. + * + * @return false|int|\WP_Error + */ + protected function create_asset( $url, $parent_id ) { + require_once ABSPATH . 'wp-admin/includes/image.php'; + require_once ABSPATH . 'wp-admin/includes/media.php'; + $file_path = str_replace( home_url(), untrailingslashit( ABSPATH ), $url ); + if ( ! file_exists( $file_path ) ) { + return false; + } + $hash_name = md5( $url ); + $wp_filetype = wp_check_filetype( basename( $url ), wp_get_mime_types() ); + $file_string = str_replace( ABSPATH, '', $file_path ); + $data = array( + '_wp_attached_file' => $file_string, + ); + $args = array( + 'post_title' => $url, + 'post_content' => wp_json_encode( $data ), + 'post_name' => $hash_name, + 'post_mime_type' => $wp_filetype['type'], + 'post_type' => self::POST_TYPE_SLUG, + 'post_parent' => $parent_id, + 'post_status' => 'inherit', + ); + $id = wp_insert_post( $args ); + + // Create attachment meta. + wp_generate_attachment_metadata( $id, $file_path ); + + // Init the auto sync. + $this->media->cloudinary_id( $id ); + + return $id; + } + + /** + * Try get an asset ID from an asset tag. + * + * @hook cloudinary_delivery_get_id + * + * @param int $id The ID from the filter. + * @param string $asset The asset HTML tag. + * + * @return false|int + */ + public function get_asset_id_from_tag( $id, $asset ) { + + if ( ! empty( $this->found_urls ) && $this->contains_found_url( $asset ) ) { + if ( ! empty( $id ) && ( $this->media->sync->been_synced( $id ) || $this->media->sync->can_sync( $id ) ) ) { + // Theres an ID and it can be synced or has been synced, we need to remove the urls from the to create list. + $this->clear_attachment_syncables( $id ); + } else { + $atts = Utils::get_tag_attributes( $asset ); + if ( ! empty( $atts['src'] ) ) { + $url = Delivery::clean_url( $atts['src'] ); + + $has_id = $this->get_asset_id( $url ); + if ( ! empty( $has_id ) ) { + $id = $has_id; + } + } + } + } + + return $id; + } + + /** + * Clear captured URLS for synced attachments. + * + * @param int $attachment_id The attachment ID. + */ + protected function clear_attachment_syncables( $attachment_id ) { + $sizes = array_keys( $this->delivery->get_attachment_size_urls( $attachment_id ) ); + foreach ( $sizes as $size_url ) { + if ( isset( $this->to_create[ $size_url ] ) ) { + unset( $this->to_create[ $size_url ] ); + } + } + } + + /** + * Check if the html tag contains found urls. + * + * @param string $asset_html The html tag. + * + * @return bool + */ + protected function contains_found_url( $asset_html ) { + // in case we haven't built the found assets up yet. + if ( is_null( $this->asset_ids ) ) { + $this->build_asset_ids(); + } + $contains = false; + foreach ( $this->found_urls as $found_set ) { + foreach ( $found_set as $url ) { + if ( false !== strpos( $asset_html, $url ) ) { + $contains = true; + break; + } + } + } + + return $contains; + } + + /** + * Register the post type. + */ + protected function register_post_type() { + $args = array( + 'label' => __( 'Cloudinary Asset', 'cloudinary' ), + 'description' => __( 'Post type to represent a non-media library asset.', 'cloudinary' ), + 'labels' => array(), + 'supports' => false, + 'hierarchical' => true, + 'public' => false, + 'show_ui' => false, + 'show_in_menu' => false, + 'show_in_admin_bar' => false, + 'show_in_nav_menus' => false, + 'can_export' => false, + 'has_archive' => false, + 'exclude_from_search' => true, + 'publicly_queryable' => false, + 'rewrite' => false, + 'capability_type' => 'page', + ); + $this->post_type = register_post_type( self::POST_TYPE_SLUG, $args ); + } + + /** + * Setup the class. + * + * @hook cloudinary_init_settings + */ + public function setup() { + + $settings = $this->settings->get_settings_by_type( 'folder_table' ); + foreach ( $settings as $setting ) { + $paths = $setting->get_param( 'root_paths' ); + foreach ( $paths as $slug => $conf ) { + if ( 'on' === $this->settings->get_value( $slug ) ) { + self::register_asset_path( trailingslashit( $conf['url'] ), $conf['version'] ); + } + } + } + } + + /** + * Returns the setting definitions. + * + * @return array|null + */ + public function settings() { + $args = array( + 'type' => 'page', + 'menu_title' => __( 'Site Cache', 'cloudinary' ), + 'tabs' => array( + 'main_cache_page' => array( + 'page_title' => __( 'Site Cache', 'cloudinary' ), + array( + 'slug' => 'cache_paths', + 'type' => 'panel', + 'title' => __( 'Cache Settings', 'cloudinary' ), + 'attributes' => array( + 'header' => array( + 'class' => array( + 'full-width', + ), + ), + 'wrap' => array( + 'class' => array( + 'full-width', + ), + ), + ), + array( + 'type' => 'on_off', + 'slug' => 'enable_full_site_cache', + 'title' => __( 'Full CDN', 'cloudinary' ), + 'tooltip_text' => __( + 'Deliver all assets from Cloudinary.', + 'cloudinary' + ), + 'description' => __( 'Enable caching site assets.', 'cloudinary' ), + 'default' => 'off', + ), + array( + 'type' => 'button', + 'slug' => 'cld_purge_all', + 'attributes' => array( + 'type' => 'button', + 'html_button' => array( + 'disabled' => 'disabled', + 'style' => 'width: 100px', + ), + ), + 'label' => 'Purge all', + ), + array( + 'slug' => 'cache_plugins', + 'type' => 'frame', + $this->add_plugin_settings(), + ), + array( + 'slug' => 'cache_themes', + 'type' => 'frame', + $this->add_theme_settings(), + ), + array( + 'slug' => 'cache_wordpress', + 'type' => 'frame', + $this->add_wp_settings(), + ), + array( + 'slug' => 'cache_content', + 'type' => 'frame', + $this->add_content_settings(), + ), + ), + array( + 'type' => 'submit', + 'attributes' => array( + 'wrap' => array( + 'class' => array( + 'full-width', + ), + ), + ), + ), + ), + ), + ); + + return $args; + } + + /** + * Get the plugins table structure. + * + * @return array + */ + protected function get_plugins_table() { + + $plugins = get_plugins(); + $active = wp_get_active_and_valid_plugins(); + $rows = array(); + foreach ( $active as $plugin_path ) { + $dir = basename( dirname( $plugin_path ) ); + $plugin = $dir . '/' . basename( $plugin_path ); + if ( ! isset( $plugins[ $plugin ] ) ) { + continue; + } + $slug = sanitize_file_name( $plugin ); + $plugin_url = plugins_url( $plugin ); + $details = $plugins[ $plugin ]; + $rows[ $slug ] = array( + 'title' => $details['Name'], + 'url' => dirname( $plugin_url ), + 'version' => $details['Version'], + ); + } + + return array( + 'slug' => 'plugin_files', + 'type' => 'folder_table', + 'title' => __( 'Plugin', 'cloudinary' ), + 'master' => array( + 'cache_all_plugins', + ), + 'root_paths' => $rows, + ); + + } + + /** + * Add the plugin cache settings page. + */ + protected function add_plugin_settings() { + + $plugins_setup = $this->get_plugins_table(); + $params = array( + 'type' => 'panel', + 'title' => __( 'Plugins', 'cloudinary' ), + 'collapsible' => 'closed', + 'attributes' => array( + 'header' => array( + 'class' => array( + 'full-width', + ), + ), + 'wrap' => array( + 'class' => array( + 'full-width', + ), + ), + ), + array( + 'type' => 'on_off', + 'slug' => 'cache_all_plugins', + 'description' => __( 'Deliver assets from all plugin folders', 'cloudinary' ), + 'default' => 'off', + 'master' => array( + 'enable_full_site_cache', + ), + ), + array( + 'type' => 'group', + $plugins_setup, + ), + ); + + return $params; + } + + /** + * Get the settings structure for the theme table. + * + * @return array + */ + protected function get_theme_table() { + + $theme = wp_get_theme(); + $themes = array( + $theme, + ); + if ( $theme->parent() ) { + $themes[] = $theme->parent(); + } + $rows = array(); + // Active Theme. + foreach ( $themes as $theme ) { + $theme_location = $theme->get_stylesheet_directory(); + $theme_slug = basename( dirname( $theme_location ) ) . '/' . basename( $theme_location ); + $slug = sanitize_file_name( $theme_slug ); + $rows[ $slug ] = array( + 'title' => $theme->get( 'Name' ), + 'url' => $theme->get_stylesheet_directory_uri(), + 'version' => $theme->get( 'Version' ), + ); + } + + return array( + 'slug' => 'theme_files', + 'type' => 'folder_table', + 'title' => __( 'Theme', 'cloudinary' ), + 'root_paths' => $rows, + 'master' => array( + 'cache_all_themes', + ), + ); + } + + /** + * Add Theme Settings page. + */ + protected function add_theme_settings() { + + $theme_setup = $this->get_theme_table(); + $params = array( + 'type' => 'panel', + 'title' => __( 'Themes', 'cloudinary' ), + 'collapsible' => 'closed', + 'attributes' => array( + 'header' => array( + 'class' => array( + 'full-width', + ), + ), + 'wrap' => array( + 'class' => array( + 'full-width', + ), + ), + ), + array( + 'type' => 'on_off', + 'slug' => 'cache_all_themes', + 'description' => __( 'Deliver all assets from active theme.', 'cloudinary' ), + 'default' => 'off', + 'master' => array( + 'enable_full_site_cache', + ), + ), + array( + 'type' => 'group', + $theme_setup, + ), + ); + + return $params; + } + + /** + * Get the settings structure for the WordPress table. + * + * @return array + */ + protected function get_wp_table() { + + $rows = array(); + $version = get_bloginfo( 'version' ); + // Admin folder. + $rows['wp_admin'] = array( + 'title' => __( 'WordPress Admin', 'cloudinary' ), + 'url' => admin_url(), + 'version' => $version, + ); + // Includes folder. + $rows['wp_includes'] = array( + 'title' => __( 'WordPress Includes', 'cloudinary' ), + 'url' => includes_url(), + 'version' => $version, + ); + + return array( + 'slug' => 'wordpress_files', + 'type' => 'folder_table', + 'title' => __( 'WordPress', 'cloudinary' ), + 'root_paths' => $rows, + 'master' => array( + 'cache_all_wp', + ), + ); + } + + /** + * Add WP Settings page. + */ + protected function add_wp_settings() { + + $wordpress_setup = $this->get_wp_table(); + $params = array( + 'type' => 'panel', + 'title' => __( 'WordPress', 'cloudinary' ), + 'collapsible' => 'closed', + 'attributes' => array( + 'header' => array( + 'class' => array( + 'full-width', + ), + ), + 'wrap' => array( + 'class' => array( + 'full-width', + ), + ), + ), + array( + 'type' => 'on_off', + 'slug' => 'cache_all_wp', + 'description' => __( 'Deliver all assets from WordPress core.', 'cloudinary' ), + 'default' => 'off', + 'master' => array( + 'enable_full_site_cache', + ), + ), + array( + 'type' => 'group', + $wordpress_setup, + ), + ); + + return $params; + } + + /** + * Get the settings structure for the WordPress table. + * + * @return array + */ + protected function get_content_table() { + + $rows = array(); + $uploads = wp_get_upload_dir(); + $rows['wp_content'] = array( + 'title' => __( 'Uploads', 'cloudinary' ), + 'url' => $uploads['baseurl'], + 'version' => 0, + ); + + return array( + 'slug' => 'content_files', + 'type' => 'folder_table', + 'title' => __( 'Content', 'cloudinary' ), + 'root_paths' => $rows, + 'master' => array( + 'cache_all_content', + ), + ); + } + + /** + * Add WP Settings page. + */ + protected function add_content_settings() { + + $content_setup = $this->get_content_table(); + $params = array( + 'type' => 'panel', + 'title' => __( 'Content', 'cloudinary' ), + 'collapsible' => 'closed', + 'attributes' => array( + 'header' => array( + 'class' => array( + 'full-width', + ), + ), + 'wrap' => array( + 'class' => array( + 'full-width', + ), + ), + ), + array( + 'type' => 'on_off', + 'slug' => 'cache_all_content', + 'description' => __( 'Deliver all content assets from WordPress Media Library.', 'cloudinary' ), + 'default' => 'off', + 'master' => array( + 'enable_full_site_cache', + ), + ), + array( + 'type' => 'group', + $content_setup, + ), + ); + + return $params; + } + +} diff --git a/php/class-beta.php b/php/class-beta.php index 6a3879733..5df6d26b7 100644 --- a/php/class-beta.php +++ b/php/class-beta.php @@ -46,6 +46,12 @@ public function __construct( Plugin $plugin ) { 'options' => array(), 'deps' => array( 'delivery' ), ), + 'assets' => array( + 'class' => array( 'Cloudinary\Assets' ), + 'name' => __( 'Non-media library assets', 'cloudinary' ), + 'options' => array(), + 'deps' => array( 'delivery' ), + ), ); foreach ( $this->components as $key => $data ) { @@ -64,7 +70,7 @@ public function __construct( Plugin $plugin ) { * @param $feature {string} Optional feature type. * @param $data {array} The beta feature data. * - * @return {bool} + * @return {bool} */ if ( apply_filters( 'cloudinary_beta', false, $key, $data ) ) { foreach ( (array) $data['class'] as $class ) { diff --git a/php/class-cache.php b/php/class-cache.php index ee4f448ca..ae7a5838b 100644 --- a/php/class-cache.php +++ b/php/class-cache.php @@ -263,7 +263,7 @@ public function bypass_cache() { * * @param $bypass {bool} True to bypass, false to not. * - * @return {bool} + * @return {bool} */ return apply_filters( 'cloudinary_bypass_cache', ! is_null( $bypass ) ); } @@ -456,7 +456,7 @@ public function rest_disable_items( $request ) { protected function get_upload_method() { $method = get_transient( self::META_KEYS['upload_method'] ); if ( empty( $method ) ) { - $test_url = $this->media->base_url . '/image/fetch/' . $this->plugin->dir_url . 'css/logo.svg'; + $test_url = $this->media->base_url . '/image/fetch/' . $this->plugin->dir_url . 'css/images/logo.svg'; $request = wp_remote_head( $test_url ); $method = 'direct'; if ( 200 === wp_remote_retrieve_response_code( $request ) ) { @@ -486,7 +486,7 @@ protected function get_inline_types() { * * @param $inline_types {array} The types of files to be encoded inline. * - * @return {array} + * @return {array} */ return apply_filters( 'cloudinary_plugin_asset_cache_inline_types', $inline_types ); } @@ -577,7 +577,7 @@ protected function get_filetype_filters() { * * @param $default_filters {array} The types of files to be filtered. * - * @return {array} + * @return {array} */ return apply_filters( 'cloudinary_plugin_asset_cache_filters', $default_filters ); } diff --git a/php/class-connect.php b/php/class-connect.php index e360df7e2..82fa930a8 100644 --- a/php/class-connect.php +++ b/php/class-connect.php @@ -118,7 +118,7 @@ public function media_library_script() { if ( is_object( $screen ) && $screen->id === $this->handle ) { // External assets. - wp_enqueue_script( 'cloudinary-media-library', 'https://media-library.cloudinary.com/global/all.js', array(), $this->plugin->version, true ); + wp_enqueue_script( 'cloudinary-media-library', CLOUDINARY_ENDPOINTS_MEDIA_LIBRARY, array(), $this->plugin->version, true ); $params = array( 'nonce' => wp_create_nonce( 'wp_rest' ), 'mloptions' => array( @@ -214,6 +214,10 @@ public function verify_connection( $data ) { * @return boolean */ public function is_connected() { + $connected = $this->plugin->settings->get_param( 'connected', null ); + if ( ! is_null( $connected ) ) { + return $connected; + } $signature = $this->settings->get_value( 'signature' ); if ( null === $signature ) { @@ -692,7 +696,7 @@ public function upgrade_connection( $old_version ) { if ( version_compare( $old_version, '2.0.0', '>' ) ) { // Post V1 - quick check all details are valid. - $data = get_option( self::META_KEYS['connect'], array() ); + $data = get_option( self::META_KEYS['connection'], array() ); if ( ! isset( $data['cloudinary_url'] ) || empty( $data['cloudinary_url'] ) ) { return; // Not setup at all, abort upgrade. } @@ -727,7 +731,7 @@ public function upgrade_connection( $old_version ) { // remove filters as we've already verified it and 'add_settings_error()' isn't available yet. remove_filter( 'pre_update_option_cloudinary_connect', array( $this, 'verify_connection' ) ); - update_option( self::META_KEYS['connect'], $data ); + update_option( self::META_KEYS['connection'], $data ); update_option( self::META_KEYS['signature'], $signature ); update_option( self::META_KEYS['version'], $this->plugin->version ); } @@ -823,7 +827,7 @@ public function settings() { ), array( 'type' => 'info_box', - 'icon' => $this->plugin->dir_url . 'css/crop.svg', + 'icon' => $this->plugin->dir_url . 'css/images/crop.svg', 'title' => __( 'Image Delivery Settings', 'cloudinary' ), 'text' => __( 'Configure how your images are shown on your site. You can apply transformations to adjust the quality, format or visual appearance and define other settings such as responsive images.', @@ -835,7 +839,7 @@ public function settings() { ), array( 'type' => 'info_box', - 'icon' => $this->plugin->dir_url . 'css/video.svg', + 'icon' => $this->plugin->dir_url . 'css/images/video.svg', 'title' => __( 'Video Settings', 'cloudinary' ), 'text' => __( 'Configure how your videos are shown on your site. You can apply transformations to adjust the quality, format or visual appearance and define other settings such as whether to use the Cloudinary video player.', @@ -847,7 +851,7 @@ public function settings() { ), array( 'type' => 'info_box', - 'icon' => $this->plugin->dir_url . 'css/transformation.svg', + 'icon' => $this->plugin->dir_url . 'css/images/transformation.svg', 'title' => __( 'Learn More', 'cloudinary' ), 'text' => __( 'You can upload and manage your images and videos in Cloudinary directly from your WordPress interface. The plugin also supports automated (single-click) migration of all media assets from your existing posts to Cloudinary. Once your WordPress media is stored in Cloudinary, you can take advantage of Cloudinary\'s transformation, optimization, and responsive features as well as fast CDN delivery.', diff --git a/php/class-deactivation.php b/php/class-deactivation.php index 9cb70c1fe..705ae0057 100644 --- a/php/class-deactivation.php +++ b/php/class-deactivation.php @@ -21,12 +21,6 @@ * @package Cloudinary */ class Deactivation { - /** - * The Cloudinary endpoint to submit the feedback. - * - * @var string - */ - protected static $cld_endpoint = 'https://analytics-api.cloudinary.com/wp_deactivate_reason'; /** * The internal endpoint to capture the administrator feedback. @@ -291,7 +285,7 @@ public function rest_callback( WP_REST_Request $request ) { $args['contact'] = $contact; } - $url = add_query_arg( $args, self::$cld_endpoint ); + $url = add_query_arg( $args, CLOUDINARY_ENDPOINTS_DEACTIVATION ); $response = wp_safe_remote_get( $url ); diff --git a/php/class-delivery.php b/php/class-delivery.php index a47cfb018..d4891a7c5 100644 --- a/php/class-delivery.php +++ b/php/class-delivery.php @@ -72,20 +72,24 @@ public function __construct( Plugin $plugin ) { $this->plugin = $plugin; $this->plugin->components['replace'] = new String_Replace( $this->plugin ); $this->media = $this->plugin->get_component( 'media' ); - $this->setup_hooks(); + add_filter( 'cloudinary_filter_out_local', '__return_false' ); + add_action( 'update_option_cloudinary_media_display', array( $this, 'clear_cache' ) ); + add_action( 'cloudinary_flush_cache', array( $this, 'clear_cache' ) ); } /** * Setup early needed hooks. */ protected function setup_hooks() { + // Add filters. + add_action( 'save_post', array( $this, 'remove_replace_cache' ) ); + add_action( 'cloudinary_string_replace', array( $this, 'catch_urls' ) ); + add_filter( 'post_thumbnail_html', array( $this, 'process_featured_image' ), 100, 3 ); - add_filter( 'cloudinary_filter_out_local', '__return_false' ); - add_action( 'update_option_cloudinary_media_display', array( $this, 'clear_cache' ) ); - add_action( 'cloudinary_flush_cache', array( $this, 'clear_cache' ) ); add_filter( 'cloudinary_current_post_id', array( $this, 'get_current_post_id' ) ); add_filter( 'the_content', array( $this, 'add_post_id' ) ); add_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' ); + add_action( 'wp_resource_hints', array( $this, 'dns_prefetch' ), 10, 2 ); // Clear cache on taxonomy update. $taxonomies = get_taxonomies( array( 'show_ui' => true ) ); @@ -94,6 +98,23 @@ protected function setup_hooks() { } } + /** + * Add DNS prefetch link tag for assets. + * + * @param array $urls URLs to print for resource hints. + * @param string $relation_type The relation type the URLs are printed for, e.g. 'preconnect' or 'prerender'. + * + * @return array + */ + public function dns_prefetch( $urls, $relation_type ) { + + if ( 'dns-prefetch' === $relation_type || 'preconnect' === $relation_type ) { + $urls[] = $this->media->base_url; + } + + return $urls; + } + /** * Clear cached meta. */ @@ -142,10 +163,7 @@ public function setup() { $this->filter = $this->media->filter; $this->sync = $this->media->sync; - // Add filters. - add_action( 'save_post', array( $this, 'remove_replace_cache' ) ); - add_action( 'cloudinary_string_replace', array( $this, 'catch_urls' ) ); - add_filter( 'post_thumbnail_html', array( $this, 'process_featured_image' ), 100, 3 ); + $this->setup_hooks(); } /** @@ -156,14 +174,12 @@ protected function init_delivery() { add_filter( 'wp_calculate_image_srcset', array( $this->media, 'image_srcset' ), 10, 5 ); /** - * Action indicating that the delivery is starting.s - * - * @hook cloudinary_pre_image_tag - * @since 2.7.5 + * Action indicating that the delivery is starting. * - * @param $delivery {Delivery} The delivery object. + * @hook cloudinary_pre_image_tag + * @since 2.7.5 * - * @return void + * @param $delivery {Delivery} The delivery object. */ do_action( 'cloudinary_init_delivery', $this ); } @@ -181,6 +197,8 @@ public function process_featured_image( $html, $post_id, $attachment_id ) { // Get tag element. $tag_element = $this->parse_element( $html ); + $tag_element['id'] = $attachment_id; + $tag_element['context'] = $post_id; $tag_element['atts']['class'][] = 'wp-image-' . $attachment_id; $tag_element['atts']['class'][] = 'wp-post-' . $post_id; @@ -210,9 +228,12 @@ public function remove_replace_cache( $post_id ) { */ public function get_attachment_size_urls( $attachment_id ) { - $urls = array(); - $meta = wp_get_attachment_metadata( $attachment_id ); - $baseurl = wp_get_attachment_url( $attachment_id ); + $urls = array(); + $meta = wp_get_attachment_metadata( $attachment_id ); + $baseurl = wp_get_attachment_url( $attachment_id ); + if ( false === $baseurl ) { + return $urls; + } $base = trailingslashit( dirname( $baseurl ) ); $urls[ $baseurl ] = $this->media->cloudinary_url( $attachment_id ); // Ignore getting 'original_image' since this isn't used in the front end. @@ -289,38 +310,52 @@ public function find_attachment_size_urls( $urls ) { * @return array */ public function convert_tags( $content ) { - + $cached = array(); if ( is_singular() ) { $cache_key = self::META_CACHE_KEY; $has_cache = get_post_meta( get_the_ID(), $cache_key, true ); $type = is_ssl() ? 'https' : 'http'; if ( ! empty( $has_cache ) && ! empty( $has_cache[ $type ] ) ) { - return $has_cache[ $type ]; + $cached = $has_cache[ $type ]; } } - $tags = $this->filter->get_media_tags( $content ); - $replacements = array(); - $attachment_ids = array(); - foreach ( $tags as $element ) { - $attachment_id = $this->filter->get_id_from_tag( $element ); - $this->current_post_id = $this->filter->get_id_from_tag( $element, 'wp-post-' ); - - if ( empty( $attachment_id ) || ! $this->sync->is_synced( $attachment_id ) ) { + + $tags = $this->filter->get_media_tags( $content ); + $tags = array_map( array( $this, 'parse_element' ), array_unique( $tags ) ); + $replacements = array(); + foreach ( $tags as $set ) { + + // Check cache and skip if needed. + if ( isset( $replacements[ $set['original'] ] ) ) { continue; } - // Register replacement. - $replacements[ $element ] = $this->rebuild_tag( $element, $attachment_id ); - $attachment_ids[] = $attachment_id; - $this->current_post_id = null; - } - - // Create other image sizes for ID's found. - foreach ( $attachment_ids as $attachment_id ) { - $urls = $this->get_attachment_size_urls( $attachment_id ); - foreach ( $urls as $local => $remote ) { - $replacements[ $local ] = $remote; + /** + * Filter id from the tag. + * + * @hook cloudinary_delivery_get_id + * @since 2.7.6 + * + * @param $attachment_id {int} The attachment ID. + * @param $html_tag {string} The html tag. + * @param $type {string} The asset type. + * + * @return {int|false} + */ + $set['id'] = apply_filters( 'cloudinary_delivery_get_id', $set['id'], $set['original'], $set['type'] ); + if ( empty( $set['id'] ) || ! $this->media->cloudinary_id( $set['id'] ) ) { + continue; } + $this->current_post_id = $set['context']; + // Use cached item if found. + if ( isset( $cached[ $set['original'] ] ) ) { + $replacements[ $set['original'] ] = $cached[ $set['original'] ]; + } else { + // Register replacement. + $replacements[ $set['original'] ] = $this->rebuild_tag( $set ); + } + $this->current_post_id = null; } + // Update the post meta cache. if ( isset( $cache_key ) && isset( $type ) ) { if ( empty( $has_cache ) ) { @@ -336,48 +371,52 @@ public function convert_tags( $content ) { /** * Rebuild a tag with cloudinary urls. * - * @param string $element The original HTML tag. - * @param null|int $attachment_id The attachment ID. + * @param array $tag_element The original HTML tag. * * @return string */ - public function rebuild_tag( $element, $attachment_id ) { - - $image_meta = wp_get_attachment_metadata( $attachment_id ); - // Check overwrite. - $image_meta['overwrite_transformations'] = (bool) strpos( $element, 'cld-overwrite' ); - - // Try add srcset if not present. - $element = wp_image_add_srcset_and_sizes( $element, $image_meta, $attachment_id ); - - // Get tag element. - $tag_element = $this->parse_element( $element ); - - // Get size. - $size = $this->get_size_from_atts( $tag_element['atts'] ); - - // Get transformations if present. - $transformations = $this->get_transformations_maybe( $tag_element['atts']['src'] ); - - // Get cloudinary URL, only if overwrite or has inline transformations. Catch all will replace standard urls. - if ( $image_meta['overwrite_transformations'] || $transformations ) { - $tag_element['atts']['src'] = $this->media->cloudinary_url( $attachment_id, $size, $transformations, null, $image_meta['overwrite_transformations'] ); - } + public function rebuild_tag( $tag_element ) { /** * Filter the tag element. * - * @hook cloudinary_pre_image_tag - * @since 2.7.5 + * @hook cloudinary_pre_image_tag + * @since 2.7.5 * - * @param $tag_element {array} The tag_element ( tag + attributes array). - * @param $attachment_id {int} The attachment ID. - * @param $element {string} The original HTML tag. + * @param $tag_element {array} The tag_element ( tag + attributes array). + * @param $attachment_id {int} The attachment ID. + * @param $element {string} The original HTML tag. * - * @return array + * @return {array} */ - $tag_element = apply_filters( 'cloudinary_pre_image_tag', $tag_element, $attachment_id, $element ); + $tag_element = apply_filters( 'cloudinary_pre_image_tag', $tag_element, $tag_element['id'], $tag_element['original'] ); + + if ( 'wp' === $tag_element['delivery'] ) { + $image_meta = wp_get_attachment_metadata( $tag_element['id'] ); + // Check overwrite. + $image_meta['overwrite_transformations'] = $tag_element['cld-overwrite']; + + // Try add srcset if not present. + $element = wp_image_add_srcset_and_sizes( $tag_element['original'], $image_meta, $tag_element['id'] ); + $atts = Utils::get_tag_attributes( $element ); + + if ( ! empty( $atts['srcset'] ) ) { + $tag_element['atts']['srcset'] = $atts['srcset']; + } + if ( ! empty( $atts['sizes'] ) ) { + $tag_element['atts']['sizes'] = $atts['sizes']; + } + + // Get size. + $size = $this->get_size_from_atts( $tag_element['atts'] ); + + // Get transformations if present. + $transformations = $this->get_transformations_maybe( $tag_element['atts']['src'] ); + + // Get cloudinary URL, only if overwrite or has inline transformations. Catch all will replace standard urls. + $tag_element['atts']['src'] = $this->media->cloudinary_url( $tag_element['id'], $size, $transformations, null, $image_meta['overwrite_transformations'] ); + } // Setup new tag. $replace = HTML::build_tag( $tag_element['tag'], $tag_element['atts'] ); @@ -393,18 +432,41 @@ public function rebuild_tag( $element, $attachment_id ) { */ public function parse_element( $element ) { + $tag_element = array( + 'tag' => '', + 'atts' => array(), + 'original' => $element, + 'cld-overwrite' => false, + 'context' => 0, + 'id' => 0, + 'type' => '', + 'delivery' => 'wp', + ); // Cleanup element. $element = trim( $element, '' ); // Break element up. - $atts = shortcode_parse_atts( $element ); - if ( ! empty( $atts['class'] ) ) { - $atts['class'] = explode( ' ', $atts['class'] ); + $tag_element['atts'] = shortcode_parse_atts( $element ); + $tag_element['tag'] = array_shift( $tag_element['atts'] ); + if ( ! empty( $tag_element['atts']['class'] ) ) { + $tag_element['atts']['class'] = explode( ' ', $tag_element['atts']['class'] ); + foreach ( $tag_element['atts']['class'] as $class ) { + if ( 0 === strpos( $class, 'wp-video-' ) ) { + $tag_element['id'] = intval( substr( $class, 9 ) ); + $tag_element['type'] = 'video'; + } + if ( 0 === strpos( $class, 'wp-image-' ) ) { + $tag_element['id'] = intval( substr( $class, 9 ) ); + $tag_element['type'] = 'image'; + } + if ( 0 === strpos( $class, 'wp-post-' ) ) { + $tag_element['context'] = intval( substr( $class, 8 ) ); + } + } + if ( in_array( 'cld-overwrite', $tag_element['atts']['class'], true ) ) { + $tag_element['cld-overwrite'] = true; + } } - $tag_element = array( - 'tag' => array_shift( $atts ), - 'atts' => $atts, - ); return $tag_element; } @@ -450,6 +512,96 @@ protected function get_transformations_maybe( $url ) { return $transformations; } + /** + * Checks if a url is for a local asset. + * + * @param string $url The url to check. + * + * @return bool + */ + protected function is_local_asset_url( $url ) { + static $base = ''; + if ( empty( $base ) ) { + $dirs = wp_upload_dir(); + $base = $dirs['baseurl']; + } + + $is_local = substr( $url, 0, strlen( $base ) ) === $base; + + /** + * Filter if the url is a local asset. + * + * @hook cloudinary_pre_image_tag + * @since 2.7.6 + * + * @param $is_local {bool} If the url is a local asset. + * @param $url {string} The url. + * + * @return {bool} + */ + return apply_filters( 'cloudinary_is_local_asset_url', $is_local, $url ); + } + + /** + * Clean a url: adds scheme if missing, removes query and fragments. + * + * @param string $url The URL to clean. + * + * @return string + */ + public static function clean_url( $url ) { + $default = array( + 'scheme' => '', + 'host' => '', + 'path' => '', + ); + $parts = wp_parse_args( wp_parse_url( $url ), $default ); + + return $parts['scheme'] . '://' . $parts['host'] . $parts['path']; + } + + /** + * Filter out excluded urls. + * + * @param string $url The url to filter out. + * + * @return bool + */ + public function validate_url( $url ) { + static $home; + if ( ! $home ) { + $home = wp_parse_url( home_url( '/' ) ); + } + $parts = wp_parse_url( $url ); + if ( empty( $parts['host'] ) ) { + return false; // If host is empty, it's a false positive url. + } + if ( empty( $parts['path'] ) || '/' === $parts['path'] ) { + return false; // exclude base domains. + } + $ext = pathinfo( $parts['path'], PATHINFO_EXTENSION ); + if ( $parts['host'] === $home['host'] && empty( $ext ) || 'php' === $ext ) { + return false; // Local urls without an extension or ending in PHP will not be media. + } + + return true; + } + + /** + * Get urls from HTML. + * + * @param string $content The content html. + * + * @return array + */ + protected function get_urls( $content ) { + $base_urls = array_map( array( $this, 'clean_url' ), wp_extract_urls( $content ) ); + $urls = array_filter( array_unique( $base_urls ), array( $this, 'validate_url' ) ); // clean out empty urls. + $urls = array_filter( $urls, array( $this, 'is_local_asset_url' ) ); + + return $urls; + } + /** * Catch attachment URLS from HTML content. * @@ -457,22 +609,9 @@ protected function get_transformations_maybe( $url ) { */ public function catch_urls( $content ) { $this->init_delivery(); - $known = $this->convert_tags( $content ); - $urls = wp_extract_urls( $content ); - $dirs = wp_get_upload_dir(); - $urls = array_map( - function ( $url ) use ( $dirs ) { - - if ( false === strpos( $url, $dirs['baseurl'] ) ) { - return null; - } - - return $url; - }, - $urls - ); - - $urls = array_filter( array_filter( $urls ), array( 'Cloudinary\String_Replace', 'string_not_set' ) ); + $urls = $this->get_urls( $content ); + $known = $this->convert_tags( $content ); + $urls = array_filter( $urls, array( 'Cloudinary\String_Replace', 'string_not_set' ) ); $unknown = array_diff( $urls, array_keys( $known ) ); if ( ! empty( $unknown ) ) { $known = array_merge( $known, $this->find_attachment_size_urls( $unknown ) ); diff --git a/php/class-media.php b/php/class-media.php index 81470f7ba..bea57b7b7 100644 --- a/php/class-media.php +++ b/php/class-media.php @@ -238,6 +238,7 @@ public function get_convertible_extensions() { public function is_file_compatible( $file ) { $types = $this->get_compatible_media_types(); + $file = wp_parse_url( $file, PHP_URL_PATH ); $filename = pathinfo( $file, PATHINFO_BASENAME ); $mime = wp_check_filetype( $filename ); $type = strstr( $mime['type'], '/', true ); @@ -262,7 +263,19 @@ public function is_media( $attachment_id ) { $is_media = in_array( $type, $media_types, true ); } - return $is_media; + /** + * Filter the check if post is media. + * + * @hook cloudinary_is_media + * @since 2.7.6 + * @default false + * + * @param $is_media {bool} Flag if is media. + * @param $attachment_id {int} The attachment ID. + * + * @return {bool} + */ + return apply_filters( 'cloudinary_is_media', $is_media, $attachment_id ); } /** @@ -352,6 +365,7 @@ public function is_preview_only( $attachment_id ) { * @return string */ public function get_file_type( $file ) { + $file = wp_parse_url( $file, PHP_URL_PATH ); $file = pathinfo( $file, PATHINFO_BASENAME ); $mime = wp_check_filetype( $file ); @@ -694,6 +708,13 @@ public function get_transformation( $transformations, $type ) { * @return array */ public function get_transformations( $attachment_id, $transformations = array(), $overwrite_transformations = false ) { + static $cache = array(); + + $key = $this->get_cache_key( func_get_args() ); + if ( isset( $cache[ $key ] ) ) { + return $cache[ $key ]; + } + // If not provided, get transformations from the attachment meta. if ( empty( $transformations ) ) { $transformations = $this->get_transformation_from_meta( $attachment_id ); @@ -715,7 +736,9 @@ public function get_transformations( $attachment_id, $transformations = array(), * * @return array */ - return apply_filters( 'cloudinary_transformations', $transformations, $attachment_id ); + $cache[ $key ] = apply_filters( 'cloudinary_transformations', $transformations, $attachment_id ); + + return $cache[ $key ]; } /** @@ -836,6 +859,12 @@ public function attachment_url( $url, $attachment_id ) { * @return array */ public function apply_default_transformations( array $transformations, $attachment_id ) { + static $cache = array(), $freeform = array(); + + $key = $this->get_cache_key( func_get_args() ); + if ( isset( $cache[ $key ] ) ) { + return $cache[ $key ]; + } /** * Filter to allow bypassing defaults. Return false to not apply defaults. * @@ -870,19 +899,21 @@ public function apply_default_transformations( array $transformations, $attachme $default = array_filter( $default ); // Clear out empty settings. $new_transformations['qf'] = Api::generate_transformation_string( array( $default ), $type ); - /** - * Filter the default Freeform transformations for the specific media type. - * - * @param array $defaults The default transformations array. - * @param array $transformations The current transformations array. - * - * @return array - */ - $freeform = apply_filters( "cloudinary_default_freeform_transformations_{$type}", array(), $transformations ); - $freeform = array_filter( $freeform ); // Clear out empty settings. + if ( empty( $freeform[ $type ] ) ) { + /** + * Filter the default Freeform transformations for the specific media type. + * + * @param array $defaults The default transformations array. + * @param array $transformations The current transformations array. + * + * @return array + */ + $freeform[ $type ] = apply_filters( "cloudinary_default_freeform_transformations_{$type}", array(), $transformations ); + $freeform[ $type ] = array_filter( $freeform[ $type ] ); // Clear out empty settings. + } // Add freeform global transformations. - if ( ! empty( $freeform ) ) { - $new_transformations['global'] = implode( '/', $freeform ); + if ( ! empty( $freeform[ $type ] ) ) { + $new_transformations['global'] = implode( '/', $freeform[ $type ] ); } } // Clean out empty parts, and join into a sectioned string. @@ -897,12 +928,12 @@ public function apply_default_transformations( array $transformations, $attachme * * @return array */ - $defaults = apply_filters( + $cache[ $key ] = apply_filters( 'cloudinary_default_transformations', $transformations ); - return $defaults; + return $cache[ $key ]; } /** @@ -946,24 +977,43 @@ public function default_image_freeform_transformations( $default ) { return $default; } + /** + * Get a cache key for static caching. + * + * @param array $args The arguments array to generate a key with. + * + * @return string + */ + protected function get_cache_key( $args ) { + $args[] = $this->global_transformations->get_current_post(); + + return md5( wp_json_encode( $args ) ); + } + /** * Generate a Cloudinary URL based on attachment ID and required size. * * @param int $attachment_id The id of the attachment. * @param array|string $size The wp size to set for the URL. * @param array $transformations Set of transformations to apply to this url. - * @param string $cloudinary_id Optional forced cloudinary ID. + * @param string|null $cloudinary_id Optional forced cloudinary ID. * @param bool $overwrite_transformations Flag url is a breakpoint URL to stop re-applying default transformations. * * @return string The converted URL. */ public function cloudinary_url( $attachment_id, $size = array(), $transformations = array(), $cloudinary_id = null, $overwrite_transformations = false ) { + static $cache = array(); + if ( ! $cloudinary_id ) { $cloudinary_id = $this->cloudinary_id( $attachment_id ); if ( ! $cloudinary_id ) { return null; } } + $key = $this->get_cache_key( func_get_args() ); + if ( isset( $cache[ $key ] ) ) { + return $cache[ $key ]; + } // Get the attachment resource type. $resource_type = $this->get_resource_type( $attachment_id ); @@ -1003,12 +1053,14 @@ public function cloudinary_url( $attachment_id, $size = array(), $transformation $url = apply_filters( 'cloudinary_converted_url', $url, $attachment_id, $pre_args ); // Add Cloudinary analytics. - return add_query_arg( + $cache[ $key ] = add_query_arg( array( '_i' => 'AA', ), $url ); + + return $cache[ $key ]; } /** @@ -1162,7 +1214,7 @@ public function get_cloudinary_id( $attachment_id ) { } } $cloudinary_id = $public_id; - if ( 'fetch' !== $this->get_media_delivery( $attachment_id ) ) { + if ( 'fetch' !== $this->get_media_delivery( $attachment_id ) && empty( pathinfo( $public_id, PATHINFO_EXTENSION ) ) ) { $cloudinary_id = $public_id . '.' . $extension; } } @@ -1187,6 +1239,7 @@ public function cloudinary_id( $attachment_id ) { if ( ! $this->is_media( $attachment_id ) ) { $cloudinary_ids[ $attachment_id ] = false; + return false; } @@ -1197,6 +1250,7 @@ public function cloudinary_id( $attachment_id ) { if ( is_null( $sync_type ) || $this->sync->is_required( $sync_type, $attachment_id ) ) { // Cache ID to prevent multiple lookups. $cloudinary_ids[ $attachment_id ] = false; + return false; // Return and render local URLs. } } @@ -1223,7 +1277,6 @@ public function cloudinary_id( $attachment_id ) { $cloudinary_ids[ $attachment_id ] = $cloudinary_id; - return $cloudinary_id; } @@ -1411,7 +1464,7 @@ public function is_cloudinary_sync_folder( $url ) { $parts = explode( '/', $path ); // Remove public id and file name. - array_splice( $parts, -2 ); + array_splice( $parts, - 2 ); foreach ( $parts as $part ) { array_shift( $parts ); @@ -1444,7 +1497,7 @@ public function media_template() { public function editor_assets() { // External assets. - wp_enqueue_script( 'cloudinary-media-library', 'https://media-library.cloudinary.com/global/all.js', array(), $this->plugin->version, true ); + wp_enqueue_script( 'cloudinary-media-library', CLOUDINARY_ENDPOINTS_MEDIA_LIBRARY, array(), $this->plugin->version, true ); $params = array( 'nonce' => wp_create_nonce( 'wp_rest' ), 'mloptions' => array( @@ -1870,12 +1923,12 @@ public function get_post_meta( $post_id, $key = '', $single = false ) { /** * Filter the meta if not found, in order to migrate from a legacy plugin. * - * @hook cloudinary_migrate_legacy_meta - * @since 2.7.5 + * @hook cloudinary_migrate_legacy_meta + * @since 2.7.5 * * @param $attachment_id {int} The attachment ID. * - * @return array + * @return {array} */ $meta = apply_filters( 'cloudinary_migrate_legacy_meta', $post_id ); } @@ -2224,14 +2277,16 @@ public function can_filter_out_local() { /** * Filters the new sizes to ensure non upload (sprites), don't get resized. * - * @param array $new_sizes Array of sizes. - * @param array $image_meta Image metadata. - * @param int $attachment_id The attachment ID. + * @param array $new_sizes Array of sizes. + * @param array $image_meta Image metadata. + * @param int|null $attachment_id The attachment ID. * * @return array */ - public function manage_sizes( $new_sizes, $image_meta, $attachment_id ) { - + public function manage_sizes( $new_sizes, $image_meta, $attachment_id = null ) { + if ( is_null( $attachment_id ) ) { + $attachment_id = $this->plugin->settings->get_param( '_currrent_attachment', 0 ); + } if ( $this->has_public_id( $attachment_id ) ) { // Get delivery type. $delivery = $this->get_media_delivery( $attachment_id ); @@ -2346,7 +2401,7 @@ public function settings() { 'page_title' => __( 'Media Display', 'cloudinary' ), array( 'type' => 'info_box', - 'icon' => $this->plugin->dir_url . 'css/transformation.svg', + 'icon' => $this->plugin->dir_url . 'css/images/transformation.svg', 'title' => __( 'Transformations', 'cloudinary' ), 'text' => __( 'Cloudinary allows you to easily transform your images on-the-fly to any required format, style and dimension, and also optimizes images for minimal file size alongside high visual quality for an improved user experience and minimal bandwidth. You can do all of this by implementing dynamic image transformation and delivery URLs.', diff --git a/php/class-plugin.php b/php/class-plugin.php index 94b276208..a4a7b3eb7 100644 --- a/php/class-plugin.php +++ b/php/class-plugin.php @@ -115,6 +115,7 @@ public function __construct() { $this->dir_path = $location['dir_path']; $this->template_path = $this->dir_path . 'php/templates/'; $this->dir_url = $location['dir_url']; + $this->setup_endpoints(); spl_autoload_register( array( $this, 'autoload' ) ); $this->register_hooks(); } @@ -201,7 +202,8 @@ public function setup_settings() { \Cloudinary\Settings::init_setting( $this->slug ); // Add count notice if not connected. - if ( ! $this->get_component( 'connect' )->is_connected() ) { + $this->settings->set_param( 'connected', $this->get_component( 'connect' )->is_connected() ); + if ( ! $this->settings->get_param( 'connected' ) ) { $count = sprintf( ' %d', 1, number_format_i18n( 1 ) ); $main_title = $this->settings->get_param( 'menu_title' ) . $count; $this->settings->set_param( 'menu_title', $main_title ); @@ -216,12 +218,10 @@ public function setup_settings() { /** * Action indicating that the Settings are initialised. * - * @hook cloudinary_init_settings - * @since 2.7.5 + * @hook cloudinary_init_settings + * @since 2.7.5 * - * @param $plugin {Plugin} The core plugin object. - * - * @return void + * @param $plugin {Plugin} The core plugin object. */ do_action( 'cloudinary_init_settings', $this ); } @@ -440,19 +440,20 @@ private function is_notice_component( $component ) { public function setup() { $this->set_config(); - /** - * Component that implements Component\Setup. - * - * @var Component\Setup $component - */ - foreach ( $this->components as $key => $component ) { - if ( ! $this->is_setup_component( $component ) ) { - continue; - } + if ( $this->settings->get_param( 'connected' ) ) { + /** + * Component that implements Component\Setup. + * + * @var Component\Setup $component + */ + foreach ( $this->components as $key => $component ) { + if ( ! $this->is_setup_component( $component ) ) { + continue; + } - $component->setup(); + $component->setup(); + } } - } /** @@ -498,6 +499,99 @@ public function admin_notices() { } } + /** + * Setup the Cloudinary endpoints. + */ + protected function setup_endpoints() { + + /** + * The Cloudinary API URL. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_API' ) ) { + define( 'CLOUDINARY_ENDPOINTS_API', 'api.cloudinary.com' ); + } + + /** + * The Cloudinary endpoint for the Core. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_CORE' ) ) { + // The %s stands for the version of Core. Use the constant CLOUDINARY_ENDPOINTS_CORE_VERSION to set it. + define( 'CLOUDINARY_ENDPOINTS_CORE', 'https://unpkg.com/cloudinary-core@%s/cloudinary-core-shrinkwrap.min.js' ); + } + + /** + * The Cloudinary Core version. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_CORE_VERSION' ) ) { + define( 'CLOUDINARY_ENDPOINTS_CORE_VERSION', '2.6.3' ); + } + + /** + * The Cloudinary endpoint to submit the deactivation feedback. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_DEACTIVATION' ) ) { + define( 'CLOUDINARY_ENDPOINTS_DEACTIVATION', 'https://analytics-api.cloudinary.com/wp_deactivate_reason' ); + } + + /** + * The Cloudinary Gallery widget lib cdn url. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_GALLERY' ) ) { + define( 'CLOUDINARY_ENDPOINTS_GALLERY', 'https://product-gallery.cloudinary.com/all.js' ); + } + + /** + * The Cloudinary endpoint for the Media Library. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_MEDIA_LIBRARY' ) ) { + define( 'CLOUDINARY_ENDPOINTS_MEDIA_LIBRARY', 'https://media-library.cloudinary.com/global/all.js' ); + } + + /** + * The Cloudinary endpoint for the Preview Image. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_PREVIEW_IMAGE' ) ) { + define( 'CLOUDINARY_ENDPOINTS_PREVIEW_IMAGE', 'https://res.cloudinary.com/demo/image/upload/' ); + } + + /** + * The Cloudinary endpoint for the Preview Video. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_PREVIEW_VIDEO' ) ) { + define( 'CLOUDINARY_ENDPOINTS_PREVIEW_VIDEO', 'https://res.cloudinary.com/demo/video/upload/' ); + } + + /** + * The Cloudinary endpoint for the Video Player Embed. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_EMBED' ) ) { + define( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_EMBED', 'https://player.cloudinary.com/embed/' ); + } + + /** + * The Cloudinary endpoint for the Video Player Script. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_SCRIPT' ) ) { + // The %s stands for the version of Video Player. Use the constant CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION to set it. + define( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_SCRIPT', 'https://unpkg.com/cloudinary-video-player@%s/dist/cld-video-player.min.js' ); + } + + /** + * The Cloudinary endpoint for the Video Player Style. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_STYLE' ) ) { + // The %s stands for the version of Video Player. Use the constant CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION to set it. + define( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_STYLE', 'https://unpkg.com/cloudinary-video-player@%s/dist/cld-video-player.min.css' ); + } + + /** + * The Cloudinary Video Player version. + */ + if ( ! defined( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION' ) ) { + define( 'CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION', '1.5.1' ); + } + } + /** * Autoload for classes that are in the same namespace as $this. * diff --git a/php/class-report.php b/php/class-report.php index b9de63d41..c84c309e0 100644 --- a/php/class-report.php +++ b/php/class-report.php @@ -384,7 +384,7 @@ protected function posts() { */ protected function config() { $config = $this->plugin->settings->get_root_setting()->get_value(); - unset( $config['connect'] ); + unset( $config['connect'], $config['connection'] ); // The Gallery setting might not be set, so we need ensure it exists before using it. if ( $this->plugin->get_component( 'media' )->gallery ) { $config['gallery'] = $this->plugin->get_component( 'media' )->gallery->get_config(); diff --git a/php/class-string-replace.php b/php/class-string-replace.php index e9027288e..63d4347e0 100644 --- a/php/class-string-replace.php +++ b/php/class-string-replace.php @@ -7,10 +7,12 @@ namespace Cloudinary; +use Cloudinary\Component\Setup; + /** * String replace class. */ -class String_Replace { +class String_Replace implements Setup { /** * Holds the plugin instance. @@ -33,6 +35,12 @@ class String_Replace { */ public function __construct( Plugin $plugin ) { $this->plugin = $plugin; + } + + /** + * Setup the object. + */ + public function setup() { add_action( 'template_redirect', array( $this, 'init' ), 1 ); add_action( 'template_include', array( $this, 'init_debug' ), 1 ); $types = get_post_types_by_support( 'editor' ); @@ -138,7 +146,7 @@ public function replace_strings( $html ) { /** * Do replacement action. * - * @hook cloudinary_string_replace + * @hook cloudinary_string_replace * * @param $html {string} The html of the page. */ diff --git a/php/class-sync.php b/php/class-sync.php index e58e9ec8d..35e5399da 100644 --- a/php/class-sync.php +++ b/php/class-sync.php @@ -94,6 +94,7 @@ class Sync implements Setup, Assets { 'process_log' => '_process_log', 'storage' => '_cloudinary_storage', 'queued' => '_cloudinary_sync_queued', + 'delay' => '_cloudinary_sync_delay', ); /** @@ -333,7 +334,7 @@ public function get_signature( $attachment_id, $cached = true ) { /** * Filter the get signature of the asset. * - * @hook cloudinary_get_signature + * @hook cloudinary_get_signature * * @param $return {array} The attachment signature. * @param $attachment_id {int} The attachment ID. diff --git a/php/class-utils.php b/php/class-utils.php index e28351b52..f18b60e04 100644 --- a/php/class-utils.php +++ b/php/class-utils.php @@ -152,4 +152,42 @@ public static function array_depth( array $array ) { return $depth; } + + /** + * Check if the current user can perform a task. + * + * @param string $task The task to check. + * + * @return bool + */ + public static function user_can( $task ) { + + /** + * Filter the capability required for a specific cloudinary task. + * + * @hook cloudinary_task_capability_{task} + * @since 2.7.6 + * + * @param $capability {string} The capability. + * + * @default 'manage_options' + * @return {string} + */ + $capability = apply_filters( "cloudinary_task_capability_{$task}", 'manage_options' ); + + /** + * Filter the capability required for cloudinary tasks. + * + * @hook cloudinary_task_capability + * @since 2.7.6 + * + * @param $capability {string} The current capability for the task. + * @param $task {string} The task. + * + * @return {string} + */ + $capability = apply_filters( 'cloudinary_task_capability', $capability, $task ); + + return current_user_can( $capability ); + } } diff --git a/php/connect/class-api.php b/php/connect/class-api.php index 78c8ea5c6..b416f2141 100644 --- a/php/connect/class-api.php +++ b/php/connect/class-api.php @@ -23,13 +23,6 @@ class Api { */ public $credentials; - /** - * Cloudinary API URL. - * - * @var string - */ - public $api_url = 'api.cloudinary.com'; - /** * Cloudinary Asset URL. * @@ -162,7 +155,7 @@ public function url( $resource, $function = null, $endpoint = false ) { $parts = array(); if ( $endpoint ) { - $parts[] = $this->api_url; + $parts[] = CLOUDINARY_ENDPOINTS_API; $parts[] = $this->api_version; } else { $parts[] = $this->asset_url; @@ -398,6 +391,9 @@ function_exists( 'wp_get_original_image_url' ) && } else { $file_url = wp_get_attachment_url( $attachment_id ); } + if ( empty( $file_url ) ) { + $disable_https_fetch = true; + } $media = get_plugin_instance()->get_component( 'media' ); if ( ! $media->is_local_media( $attachment_id ) ) { $disable_https_fetch = false; // Remote can upload via url. diff --git a/php/delivery/class-lazy-load.php b/php/delivery/class-lazy-load.php index 9e91f2424..0de5db34d 100644 --- a/php/delivery/class-lazy-load.php +++ b/php/delivery/class-lazy-load.php @@ -125,7 +125,7 @@ public function add_features( $tag_element, $attachment_id, $original_tag ) { } $src = $tag_element['atts']['src']; if ( ! $this->media->is_cloudinary_url( $src ) ) { - $src = $this->media->cloudinary_url( $attachment_id ); + $src = $this->media->cloudinary_url( $attachment_id, array(), array(), null, $tag_element['cld-overwrite'] ); } $tag_element['atts']['data-src'] = $src; $transformations = $this->media->get_transformations_from_string( $src ); @@ -161,6 +161,7 @@ public function add_features( $tag_element, $attachment_id, $original_tag ) { unset( $tag_element['atts']['loading'] ); $tag_element['atts']['decoding'] = 'async'; $tag_element['atts']['data-width'] = $size[0]; + $tag_element['delivery'] = 'cld'; return $tag_element; } diff --git a/php/delivery/class-responsive-breakpoints.php b/php/delivery/class-responsive-breakpoints.php index f92974d4c..39c3c218c 100644 --- a/php/delivery/class-responsive-breakpoints.php +++ b/php/delivery/class-responsive-breakpoints.php @@ -57,7 +57,7 @@ protected function setup_hooks() { public function add_features( $tag_element, $attachment_id, $original_tag ) { if ( ! $this->media->is_cloudinary_url( $tag_element['atts']['src'] ) ) { - $tag_element['atts']['src'] = $this->media->cloudinary_url( $attachment_id ); + $tag_element['atts']['src'] = $this->media->cloudinary_url( $attachment_id, array(), array(), null, $tag_element['cld-overwrite'] ); } $transformations = $this->media->get_transformations_from_string( $tag_element['atts']['src'] ); $original_string = Api::generate_transformation_string( $transformations ); @@ -75,6 +75,7 @@ public function add_features( $tag_element, $attachment_id, $original_tag ) { if ( isset( $tag_element['atts']['srcset'] ) ) { unset( $tag_element['atts']['srcset'], $tag_element['atts']['sizes'] ); } + $tag_element['delivery'] = 'cld'; return $tag_element; } diff --git a/php/media/class-filter.php b/php/media/class-filter.php index 8af9bb830..731e34c24 100644 --- a/php/media/class-filter.php +++ b/php/media/class-filter.php @@ -734,6 +734,23 @@ public function init_rest_filters() { } } + /** + * Record attachment with meta being updated. + * + * @hook wp_update_attachment_metadata + * + * @param array $data The new meta array. + * @param int $id The id. + * + * @return array + */ + public function record_meta_update( $data, $id ) { + $this->media->plugin->settings->set_param( '_currrent_attachment', $id ); + $this->media->plugin->settings->set_param( '_currrent_meta', $data ); + + return $data; + } + /** * Setup hooks for the filters. */ @@ -764,6 +781,8 @@ public function setup_hooks() { // Filter for block rendering. add_filter( 'render_block', array( $this, 'filter_image_block_render_block' ), 10, 2 ); + // Filter to record current meta updating attachment. + add_filter( 'wp_update_attachment_metadata', array( $this, 'record_meta_update' ), 10, 2 ); // Filter out locals and responsive images setup. if ( $this->media->can_filter_out_local() || is_admin() ) { diff --git a/php/media/class-gallery.php b/php/media/class-gallery.php index 33ac85a2a..99fa38074 100644 --- a/php/media/class-gallery.php +++ b/php/media/class-gallery.php @@ -26,13 +26,6 @@ class Gallery { */ const GALLERY_LIBRARY_HANDLE = 'cld-gallery'; - /** - * The gallery widget lib cdn url. - * - * @var string - */ - const GALLERY_LIBRARY_URL = 'https://product-gallery.cloudinary.com/all.js'; - /** * Holds the settings slug. * @@ -155,7 +148,7 @@ public function enqueue_gallery_library() { wp_enqueue_script( self::GALLERY_LIBRARY_HANDLE, - self::GALLERY_LIBRARY_URL, + CLOUDINARY_ENDPOINTS_GALLERY, array(), $this->media->plugin->version, true @@ -342,7 +335,7 @@ public function settings() { $panel = array( 'type' => 'panel', 'title' => __( 'Gallery Settings', 'cloudinary' ), - 'icon' => $this->media->plugin->dir_url . 'css/gallery.svg', + 'icon' => $this->media->plugin->dir_url . 'css/images/gallery.svg', ); if ( WooCommerceGallery::woocommerce_active() ) { diff --git a/php/media/class-global-transformations.php b/php/media/class-global-transformations.php index 96f5d3309..233150259 100644 --- a/php/media/class-global-transformations.php +++ b/php/media/class-global-transformations.php @@ -245,8 +245,14 @@ public function get_transformations( $type ) { * @return string */ public function get_taxonomy_transformations( $type ) { + static $cache = array(); + + $post = $this->get_current_post(); + $key = wp_json_encode( func_get_args() ) . ( $post ? $post->ID : 0 ); + if ( isset( $cache[ $key ] ) ) { + return $cache[ $key ]; + } $return_transformations = ''; - $post = $this->get_current_post(); if ( $post ) { $transformations = array(); $terms = $this->get_terms( $post->ID ); @@ -262,7 +268,9 @@ public function get_taxonomy_transformations( $type ) { } } - return $return_transformations; + $cache[ $key ] = $return_transformations; + + return $cache[ $key ]; } /** @@ -567,7 +575,7 @@ public function save_overwrite_transformations_featured_image( $post_id ) { * * @return WP_Post|null */ - protected function get_current_post() { + public function get_current_post() { /** * Filter the post ID. * diff --git a/php/media/class-upgrade.php b/php/media/class-upgrade.php index f406225d4..5933a08d4 100644 --- a/php/media/class-upgrade.php +++ b/php/media/class-upgrade.php @@ -189,7 +189,7 @@ public function migrate_legacy_meta( $attachment_id ) { } else { // Attempt old post meta. $public_id = get_post_meta( $attachment_id, Sync::META_KEYS['public_id'], true ); - if ( isset( $public_id ) ) { + if ( ! empty( $public_id ) ) { // Loop through all types and create new meta item. $meta = array( Sync::META_KEYS['public_id'] => $public_id, diff --git a/php/media/class-video.php b/php/media/class-video.php index 3bed5ebed..67c68f115 100644 --- a/php/media/class-video.php +++ b/php/media/class-video.php @@ -42,20 +42,6 @@ class Video { */ private $attachments = array(); - /** - * Cloudinary Stable Player Version. - * - * @var string - */ - const PLAYER_VER = '1.5.1'; - - /** - * Cloudinary Core Version. - * - * @var string - */ - const CORE_VER = '2.6.3'; - /** * Meta key to store usable video transformations for an attachment. * @@ -201,9 +187,13 @@ public function admin_enqueue_scripts() { } if ( in_array( $current_screen->base, $requiring_screens, true ) ) { - wp_register_style( 'cld-player', 'https://unpkg.com/cloudinary-video-player@' . self::PLAYER_VER . '/dist/cld-video-player.min.css', null, self::PLAYER_VER ); - wp_register_script( 'cld-core', 'https://unpkg.com/cloudinary-core@' . self::CORE_VER . '/cloudinary-core-shrinkwrap.min.js', null, self::CORE_VER, true ); - wp_register_script( 'cld-player', 'https://unpkg.com/cloudinary-video-player@' . self::PLAYER_VER . '/dist/cld-video-player.min.js', array( 'cld-core' ), self::PLAYER_VER, true ); + $core_url = sprintf( CLOUDINARY_ENDPOINTS_CORE, CLOUDINARY_ENDPOINTS_CORE_VERSION ); + $player_style_url = sprintf( CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_STYLE, CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION ); + $player_script_url = sprintf( CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_SCRIPT, CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION ); + + wp_register_style( 'cld-player', $player_style_url, null, CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION ); + wp_register_script( 'cld-core', $core_url, null, CLOUDINARY_ENDPOINTS_CORE_VERSION, true ); + wp_register_script( 'cld-player', $player_script_url, array( 'cld-core' ), CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION, true ); } } @@ -330,10 +320,10 @@ protected function build_video_embed( $attachment_id, $attributes = array(), $ov unset( $attributes['poster'] ); } // Add the player version to use. - $params['vpv'] = self::PLAYER_VER; + $params['vpv'] = CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_VERSION; // Build URL. $params['player'] = wp_parse_args( $attributes, $params['player'] ); - $url = add_query_arg( $params, 'https://player.cloudinary.com/embed/' ); + $url = add_query_arg( $params, CLOUDINARY_ENDPOINTS_VIDEO_PLAYER_EMBED ); // Build the Player HTML. $tag_args = array( diff --git a/php/settings/class-setting.php b/php/settings/class-setting.php index f4b8e18d6..181b0457c 100644 --- a/php/settings/class-setting.php +++ b/php/settings/class-setting.php @@ -330,6 +330,30 @@ public function get_settings() { return $settings; } + /** + * Get settings recursively of a specific type. + * + * @param string $type The type of settings to get. + * + * @return array + */ + public function get_settings_by_type( $type ) { + $settings = array(); + if ( $type === $this->get_param( 'type' ) ) { + $settings[] = $this; + } + if ( $this->has_settings() ) { + foreach ( $this->settings as $setting ) { + $has = $setting->get_settings_by_type( $type ); + if ( ! empty( $has ) ) { + $settings = array_merge( $settings, $has ); + } + } + } + + return $settings; + } + /** * Get all slugs of settings. * diff --git a/php/sync/class-storage.php b/php/sync/class-storage.php index d288927a7..ea2e1b882 100644 --- a/php/sync/class-storage.php +++ b/php/sync/class-storage.php @@ -28,7 +28,6 @@ class Storage implements Notice { */ protected $plugin; - /** * Holds the Plugin Media instance. * @@ -72,6 +71,11 @@ class Storage implements Notice { */ protected $settings; + /** + * The delay in seconds before local assets get deleted if Cloudinary only storage. + */ + const DELETE_DELAY = MINUTE_IN_SECONDS; + /** * Filter constructor. * @@ -162,15 +166,25 @@ public function validate_file_folder_sync( $attachment_id ) { * @return string */ public function generate_signature( $attachment_id ) { - $file_exists = true; + $extension = true; + $attachment_file = get_attached_file( $attachment_id ); + if ( 'cld' !== $this->settings['offload'] ) { - $attachment_file = get_attached_file( $attachment_id ); if ( ! file_exists( $attachment_file ) ) { - $file_exists = $attachment_file; + $extension = $attachment_file; + } + } else { + // A fully synced signature for cld, will have the extension as true. + // If coming from cld_dual, the extension in that signature will have the path. + // This means the new signature will not match. + if ( file_exists( $attachment_file ) ) { + // The validate method will return false the first time it's run in cld mode. + // After the delay, it will return true. Making the signature different again. + $extension = $this->validate( $attachment_id ); } } - return $this->settings['offload'] . $this->media->get_public_id( $attachment_id ) . $file_exists; + return $this->settings['offload'] . $this->media->get_public_id( $attachment_id ) . $extension; } /** @@ -259,6 +273,9 @@ protected function remove_local_assets( $attachment_id ) { $meta['file'] = get_the_guid( $attachment_id ); } + // Remove the delay meta. + delete_post_meta( $attachment_id, Sync::META_KEYS['delay'] ); + return wp_delete_attachment_files( $attachment_id, $meta, $backup_sizes, get_attached_file( $attachment_id ) ); } @@ -339,6 +356,34 @@ public function is_ready() { return $this->sync && $this->media && $this->connect && $this->download; } + /** + * Validates the storage mechanism. + * Returning a false on the validate method within a sync type bypasses the sync method and sets the signature. + * + * @param int $attachment_id The attachment ID to validate. + * + * @return bool + */ + public function validate( $attachment_id ) { + $valid = true; + if ( 'cld' === $this->settings['offload'] ) { + // In cld mode, we want to delay the deletion. + $now = time(); + $timestamp = get_post_meta( $attachment_id, Sync::META_KEYS['delay'], true ); + if ( empty( $timestamp ) ) { + update_post_meta( $attachment_id, Sync::META_KEYS['delay'], $now ); + $timestamp = $now; + } + $diff = $now - $timestamp; + // If this is false, it will set the signature without running the sync method. + // When the sync expected sync signature changes, due to using this method as part of the signature, + // it will be forced to revalidate the sync method, with will be true and allow the sync to run. + $valid = self::DELETE_DELAY <= $diff; + } + + return $valid; + } + /** * Setup hooks for the filters. */ @@ -357,6 +402,7 @@ public function setup() { $this->settings = wp_parse_args( $settings, $defaults ); $structure = array( 'generate' => array( $this, 'generate_signature' ), + 'validate' => array( $this, 'validate' ), 'priority' => 15, 'sync' => array( $this, 'sync' ), 'state' => 'info syncing', diff --git a/php/sync/class-sync-queue.php b/php/sync/class-sync-queue.php index 29d006748..cbe97bed0 100644 --- a/php/sync/class-sync-queue.php +++ b/php/sync/class-sync-queue.php @@ -311,6 +311,18 @@ public function build_queue() { 'no_found_rows' => true, ); + /** + * Filter the params for the query used to build a queue. + * + * @hook cloudinary_build_queue_query + * @since 2.7.6 + * + * @param $args {array} The arguments for the query. + * + * @return {array} + */ + $args = apply_filters( 'cloudinary_build_queue_query', $args ); + // translators: variable is page number. $action_message = __( 'Building Queue.', 'cloudinary' ); do_action( '_cloudinary_queue_action', $action_message ); @@ -551,6 +563,19 @@ protected function get_thread_queue_details( $thread ) { ), ); + /** + * Filter the params for the query used to get thread queue details. + * + * @hook cloudinary_thread_queue_details_query + * @since 2.7.6 + * + * @param $args {array} The arguments for the query. + * @param $thread {string} The thread name. + * + * @return {array} + */ + $args = apply_filters( 'cloudinary_thread_queue_details_query', $args, $thread ); + $query = new \WP_Query( $args ); $return = array( diff --git a/php/templates/connection-string.php b/php/templates/connection-string.php index a8c817c00..e11cf939d 100644 --- a/php/templates/connection-string.php +++ b/php/templates/connection-string.php @@ -29,4 +29,4 @@
  • -<?php esc_attr_e( 'Where the connection string can be found on the cloudinary.com console.', 'cloudinary' ); ?> +<?php esc_attr_e( 'Where the connection string can be found on the cloudinary.com console.', 'cloudinary' ); ?> diff --git a/php/templates/transformation-preview-video.php b/php/templates/transformation-preview-video.php index 5db7fd1af..b6aec5e8a 100644 --- a/php/templates/transformation-preview-video.php +++ b/php/templates/transformation-preview-video.php @@ -5,7 +5,7 @@ * @package Cloudinary */ -$url = 'https://res.cloudinary.com/demo/video/upload/'; +$url = CLOUDINARY_ENDPOINTS_PREVIEW_VIDEO; $src = $url . '/dog.mp4'; $preview_src = $url . 'w_600/'; $sample = '/dog.mp4'; diff --git a/php/templates/transformation-preview.php b/php/templates/transformation-preview.php index 7c1440f10..80964949a 100644 --- a/php/templates/transformation-preview.php +++ b/php/templates/transformation-preview.php @@ -5,7 +5,7 @@ * @package Cloudinary */ -$url = 'https://res.cloudinary.com/demo/image/upload/'; +$url = CLOUDINARY_ENDPOINTS_PREVIEW_IMAGE; $src = $url . '/sample.jpg'; $preview_src = $url . 'w_600/'; $sample = '/sample.jpg'; diff --git a/php/ui/component/class-color.php b/php/ui/component/class-color.php index 635bc10e1..230b79e6a 100644 --- a/php/ui/component/class-color.php +++ b/php/ui/component/class-color.php @@ -21,10 +21,9 @@ class Color extends Text { */ public function enqueue_scripts() { parent::enqueue_scripts(); - $instance = get_plugin_instance(); wp_enqueue_style( 'wp-color-picker' ); - wp_enqueue_script( 'wp-color-picker-alpha', $instance->dir_url . '/js/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), $instance->version, true ); + wp_enqueue_script( 'wp-color-picker-alpha', $instance->dir_url . 'js/wp-color-picker-alpha.js', array( 'wp-color-picker' ), $instance->version, true ); } /** diff --git a/php/ui/component/class-folder-table.php b/php/ui/component/class-folder-table.php index e53596ef1..68b9b498d 100644 --- a/php/ui/component/class-folder-table.php +++ b/php/ui/component/class-folder-table.php @@ -8,7 +8,7 @@ namespace Cloudinary\UI\Component; use Cloudinary\REST_API; -use Cloudinary\Cache\Cache_Point; +use Cloudinary\Assets; use function Cloudinary\get_plugin_instance; /** @@ -33,11 +33,11 @@ class Folder_Table extends Table { protected $slugs = array(); /** - * Holds the cache point object. + * Holds the assets instance. * - * @var Cache_Point + * @var Assets */ - protected $cache_point; + protected $assets; /** * Holds the script export data. @@ -50,7 +50,7 @@ class Folder_Table extends Table { * Register table structures as components. */ public function setup() { - $this->cache_point = get_plugin_instance()->get_component( 'cache' )->cache_point; + $this->assets = get_plugin_instance()->get_component( 'assets' ); $this->setting->set_param( 'columns', $this->build_headers() ); $this->setting->set_param( 'rows', $this->build_rows() ); $this->setting->set_param( 'file_lists', $this->slugs ); @@ -58,6 +58,7 @@ public function setup() { 'update_url' => rest_url( REST_API::BASE . '/disable_cache_items' ), 'fetch_url' => rest_url( REST_API::BASE . '/show_cache' ), 'purge_url' => rest_url( REST_API::BASE . '/purge_cache' ), + 'purge_all' => rest_url( REST_API::BASE . '/purge_all' ), 'nonce' => wp_create_nonce( 'wp_rest' ), ); parent::setup(); @@ -76,13 +77,13 @@ protected function build_headers() { 'type' => 'on_off', 'default' => 'on', 'description' => $this->setting->get_param( 'title', '' ), + 'master' => $this->setting->get_param( 'master', array() ), ), ), 'apply_changes' => array( 'attributes' => array( 'style' => 'text-align:right;', ), - ), ); @@ -123,12 +124,12 @@ protected function build_rows() { $row_params = array(); $rows = $this->get_rows(); foreach ( $rows as $slug => $row ) { - $cache_point = $this->cache_point->get_cache_point( $row['url'] ); + $asset = $this->assets->get_asset_parent( $row['url'] ); $row_params[ $slug ] = $this->build_column( $row ); $row_params[ $slug . '_spacer' ] = array(); - if ( empty( $cache_point ) ) { + if ( empty( $asset ) ) { $row_params[ $slug . '_tree' ] = array( 'title_column' => array( 'condition' => array( @@ -148,11 +149,12 @@ protected function build_rows() { 'tree', ), ), + 'condition' => array( + $slug => true, + ), array( 'element' => 'table', - 'condition' => array( - $slug => true, - ), + 'attributes' => array( 'class' => array( 'striped', @@ -214,32 +216,13 @@ protected function build_rows() { 'attributes' => array( 'style' => 'text-align:right;', ), - array( - 'slug' => $slug . '_selector', - 'type' => 'on_off', - 'attributes' => array( - 'wrap' => array( - 'data-tooltip' => $slug . '_disable_tip', - ), - ), - ), - array( - 'element' => 'span', - 'content' => __( 'Select cache items to bypass.', 'cloudinary' ), - 'attributes' => array( - 'id' => $slug . '_disable_tip', - 'class' => array( - 'hidden', - ), - ), - ), ), ), ), array( 'element' => 'tbody', 'attributes' => array( - 'data-cache-point' => $cache_point->ID, + 'data-cache-point' => $asset->post_title, 'data-browser' => 'toggle_' . $slug, 'data-slug' => $slug, 'data-apply' => 'apply_' . $slug, @@ -330,7 +313,6 @@ protected function build_column( $row ) { 'data-changes' => array(), ), 'style' => array( - 'button-small', 'button-primary', 'closed', ), diff --git a/php/ui/component/class-image-preview.php b/php/ui/component/class-image-preview.php index 05380802b..741c0764b 100644 --- a/php/ui/component/class-image-preview.php +++ b/php/ui/component/class-image-preview.php @@ -202,7 +202,7 @@ protected function url( $struct ) { * Setup the JS data before rendering. */ protected function pre_render() { - $url = 'https://res.cloudinary.com/demo/image/upload/'; + $url = CLOUDINARY_ENDPOINTS_PREVIEW_IMAGE; $preview_src = $url . 'w_600/'; $sample = '/sample.jpg'; $script_data = array( diff --git a/php/ui/component/class-media-status.php b/php/ui/component/class-media-status.php index 21e204540..55f6d000f 100644 --- a/php/ui/component/class-media-status.php +++ b/php/ui/component/class-media-status.php @@ -112,7 +112,7 @@ protected function box_status( $struct ) { $icon = $this->get_part( 'icon' ); $icon['element'] = 'img'; - $icon['attributes']['src'] = $this->dir_url . 'css/upload.svg'; + $icon['attributes']['src'] = $this->dir_url . 'css/images/upload.svg'; $icon['render'] = true; $status = $this->get_part( 'span' ); diff --git a/php/ui/component/class-on-off.php b/php/ui/component/class-on-off.php index bf28dc6ae..8954f2396 100644 --- a/php/ui/component/class-on-off.php +++ b/php/ui/component/class-on-off.php @@ -19,7 +19,7 @@ class On_Off extends Text { * * @var string */ - protected $blueprint = 'div|label|title|tooltip/|/title|prefix/|/label|wrap|description_left/|control|false_value/|input/|slider/|/control|description/|/wrap|/div'; + protected $blueprint = 'span|label|title|tooltip/|/title|prefix/|/label|wrap|description_left/|control|false_value/|input/|slider/|/control|description/|/wrap|/span'; /** * Filter the false_value parts structure. diff --git a/php/ui/component/class-page.php b/php/ui/component/class-page.php index 7ef7facd9..84bdbab9c 100644 --- a/php/ui/component/class-page.php +++ b/php/ui/component/class-page.php @@ -23,6 +23,24 @@ class Page extends Panel { */ protected $blueprint = 'wrap|header/|tabs/|form|notice/|body|/body|settings/|/form|/wrap'; + /** + * Filter the wrap parts structure. + * + * @param array $struct The array structure. + * + * @return array + */ + protected function wrap( $struct ) { + static $added = null; + + if ( empty( $added ) ) { + $struct['attributes']['id'] = 'cloudinary-settings-page'; + $added = true; + } + + return parent::wrap( $struct ); + } + /** * Filter the form parts structure. * diff --git a/php/ui/component/class-plan-status.php b/php/ui/component/class-plan-status.php index 6f00809ff..c042780af 100644 --- a/php/ui/component/class-plan-status.php +++ b/php/ui/component/class-plan-status.php @@ -95,7 +95,7 @@ protected function box_storage( array $struct ) { $icon = $this->get_part( 'icon' ); $icon['element'] = 'img'; - $icon['attributes']['src'] = $this->dir_url . 'css/cloud.svg'; + $icon['attributes']['src'] = $this->dir_url . 'css/images/cloud.svg'; $icon['render'] = true; $limit = $this->get_part( 'span' ); @@ -129,7 +129,7 @@ protected function box_transformations( array $struct ) { $icon = $this->get_part( 'icon' ); $icon['element'] = 'img'; - $icon['attributes']['src'] = $this->dir_url . 'css/transformation.svg'; + $icon['attributes']['src'] = $this->dir_url . 'css/images/transformation.svg'; $icon['render'] = true; $limit = $this->get_part( 'span' ); @@ -162,7 +162,7 @@ protected function box_bandwidth( array $struct ) { $icon = $this->get_part( 'icon' ); $icon['element'] = 'img'; - $icon['attributes']['src'] = $this->dir_url . 'css/bandwidth.svg'; + $icon['attributes']['src'] = $this->dir_url . 'css/images/bandwidth.svg'; $icon['render'] = true; $limit = $this->get_part( 'span' ); diff --git a/php/ui/component/class-video-preview.php b/php/ui/component/class-video-preview.php index 7a95bba55..faa632fe1 100644 --- a/php/ui/component/class-video-preview.php +++ b/php/ui/component/class-video-preview.php @@ -59,7 +59,7 @@ protected function preview( $struct ) { * Setup the JS data before rendering. */ protected function pre_render() { - $url = 'https://res.cloudinary.com/demo/video/upload/'; + $url = CLOUDINARY_ENDPOINTS_PREVIEW_VIDEO; $preview_src = $url . 'w_600/'; $sample = '/dog.mp4'; $script_data = array( diff --git a/css/src/_variables.scss b/src/css/_variables.scss similarity index 100% rename from css/src/_variables.scss rename to src/css/_variables.scss diff --git a/css/src/components/_brand.scss b/src/css/components/_brand.scss similarity index 97% rename from css/src/components/_brand.scss rename to src/css/components/_brand.scss index 401ac66a2..bdc535b5a 100755 --- a/css/src/components/_brand.scss +++ b/src/css/components/_brand.scss @@ -107,7 +107,7 @@ .cloudinary { &-welcome { - background-image: url(logo.svg); + background-image: url(images/logo.svg); background-repeat: no-repeat; background-size: 153px; background-position: top 12px right 20px; diff --git a/css/src/components/_global_transformations.scss b/src/css/components/_global_transformations.scss similarity index 100% rename from css/src/components/_global_transformations.scss rename to src/css/components/_global_transformations.scss diff --git a/css/src/components/_media_library.scss b/src/css/components/_media_library.scss similarity index 100% rename from css/src/components/_media_library.scss rename to src/css/components/_media_library.scss diff --git a/css/src/components/_settings.scss b/src/css/components/_settings.scss similarity index 100% rename from css/src/components/_settings.scss rename to src/css/components/_settings.scss diff --git a/css/src/components/_sync.scss b/src/css/components/_sync.scss similarity index 100% rename from css/src/components/_sync.scss rename to src/css/components/_sync.scss diff --git a/css/src/components/_terms_order.scss b/src/css/components/_terms_order.scss similarity index 100% rename from css/src/components/_terms_order.scss rename to src/css/components/_terms_order.scss diff --git a/css/src/components/_ui.scss b/src/css/components/_ui.scss similarity index 99% rename from css/src/components/_ui.scss rename to src/css/components/_ui.scss index 963245f48..26f31c4fa 100644 --- a/css/src/components/_ui.scss +++ b/src/css/components/_ui.scss @@ -13,7 +13,6 @@ .cld { &-pagenav{ margin-top: 5px; - text-align: right; line-height: 2.4em; color: #555; &-text{ @@ -55,7 +54,7 @@ } &-syncing { - background: url("./loading.svg") no-repeat center center; + background: url("./images/loading.svg") no-repeat center center; width: 30px; height: 20px; margin-left: 12px; @@ -910,6 +909,7 @@ td.tree { padding: 4px 6px; font-size: 0.9em; margin-right: 12px; + width: 300px; } .file-size { diff --git a/css/src/components/_widget.scss b/src/css/components/_widget.scss similarity index 100% rename from css/src/components/_widget.scss rename to src/css/components/_widget.scss diff --git a/css/src/fonts/cloudinary.eot b/src/css/fonts/cloudinary.eot similarity index 100% rename from css/src/fonts/cloudinary.eot rename to src/css/fonts/cloudinary.eot diff --git a/css/src/fonts/cloudinary.svg b/src/css/fonts/cloudinary.svg similarity index 100% rename from css/src/fonts/cloudinary.svg rename to src/css/fonts/cloudinary.svg diff --git a/css/src/fonts/cloudinary.ttf b/src/css/fonts/cloudinary.ttf similarity index 100% rename from css/src/fonts/cloudinary.ttf rename to src/css/fonts/cloudinary.ttf diff --git a/css/src/fonts/cloudinary.woff b/src/css/fonts/cloudinary.woff similarity index 100% rename from css/src/fonts/cloudinary.woff rename to src/css/fonts/cloudinary.woff diff --git a/css/src/gallery-ui.scss b/src/css/gallery-ui.scss similarity index 100% rename from css/src/gallery-ui.scss rename to src/css/gallery-ui.scss diff --git a/css/src/gallery.scss b/src/css/gallery.scss similarity index 100% rename from css/src/gallery.scss rename to src/css/gallery.scss diff --git a/src/css/images/bandwidth.svg b/src/css/images/bandwidth.svg new file mode 100644 index 000000000..a025e417b --- /dev/null +++ b/src/css/images/bandwidth.svg @@ -0,0 +1,20 @@ + + + Shape + + + + + + + + + + + + + + + + + diff --git a/src/css/images/circle.svg b/src/css/images/circle.svg new file mode 100644 index 000000000..74114d802 --- /dev/null +++ b/src/css/images/circle.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/css/images/cloud.svg b/src/css/images/cloud.svg new file mode 100644 index 000000000..db920e047 --- /dev/null +++ b/src/css/images/cloud.svg @@ -0,0 +1,13 @@ + + + crop + + + + + + + + + + diff --git a/src/css/images/cloudinary.svg b/src/css/images/cloudinary.svg new file mode 100644 index 000000000..fdb8419c8 --- /dev/null +++ b/src/css/images/cloudinary.svg @@ -0,0 +1,15 @@ + + + +Generated by IcoMoon + + + + + + + + + + + \ No newline at end of file diff --git a/src/css/images/connection-string.png b/src/css/images/connection-string.png new file mode 100644 index 000000000..0887d4bd9 Binary files /dev/null and b/src/css/images/connection-string.png differ diff --git a/src/css/images/crop.svg b/src/css/images/crop.svg new file mode 100644 index 000000000..c3c1504be --- /dev/null +++ b/src/css/images/crop.svg @@ -0,0 +1,13 @@ + + + crop + + + + + + + + + + \ No newline at end of file diff --git a/src/css/images/gallery.svg b/src/css/images/gallery.svg new file mode 100644 index 000000000..e5e73c6b4 --- /dev/null +++ b/src/css/images/gallery.svg @@ -0,0 +1,13 @@ + + + crop + + + + + + + + + + diff --git a/src/css/images/image.svg b/src/css/images/image.svg new file mode 100644 index 000000000..485d6b322 --- /dev/null +++ b/src/css/images/image.svg @@ -0,0 +1,19 @@ + + + crop + + + + + + + + + + + + + + + + diff --git a/src/css/images/learn.svg b/src/css/images/learn.svg new file mode 100644 index 000000000..d77a8dd0c --- /dev/null +++ b/src/css/images/learn.svg @@ -0,0 +1,18 @@ + + + Shape + + + + + + + + + + + + + + + diff --git a/css/src/loading.svg b/src/css/images/loading.svg similarity index 100% rename from css/src/loading.svg rename to src/css/images/loading.svg diff --git a/src/css/images/logo-icon.svg b/src/css/images/logo-icon.svg new file mode 100644 index 000000000..a284090df --- /dev/null +++ b/src/css/images/logo-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/css/src/logo.svg b/src/css/images/logo.svg similarity index 100% rename from css/src/logo.svg rename to src/css/images/logo.svg diff --git a/src/css/images/sample.webp b/src/css/images/sample.webp new file mode 100644 index 000000000..b1772ea2a Binary files /dev/null and b/src/css/images/sample.webp differ diff --git a/src/css/images/transformation.svg b/src/css/images/transformation.svg new file mode 100644 index 000000000..09f077965 --- /dev/null +++ b/src/css/images/transformation.svg @@ -0,0 +1,15 @@ + + + crop copy + + + + + + + + + + + + diff --git a/src/css/images/upload.svg b/src/css/images/upload.svg new file mode 100644 index 000000000..67398c49d --- /dev/null +++ b/src/css/images/upload.svg @@ -0,0 +1,11 @@ + + + crop copy 2 + + + + + + + + diff --git a/src/css/images/video.svg b/src/css/images/video.svg new file mode 100644 index 000000000..5685856cc --- /dev/null +++ b/src/css/images/video.svg @@ -0,0 +1,19 @@ + + + crop + + + + + + + + + + + + + + + + diff --git a/css/src/main.scss b/src/css/main.scss similarity index 100% rename from css/src/main.scss rename to src/css/main.scss diff --git a/css/src/video.scss b/src/css/video.scss similarity index 100% rename from css/src/video.scss rename to src/css/video.scss diff --git a/js/src/blocks.js b/src/js/blocks.js similarity index 100% rename from js/src/blocks.js rename to src/js/blocks.js diff --git a/js/src/components/cache-manage.js b/src/js/components/cache-manage.js similarity index 76% rename from js/src/components/cache-manage.js rename to src/js/components/cache-manage.js index 5c6c70704..8e85b1bce 100644 --- a/js/src/components/cache-manage.js +++ b/src/js/components/cache-manage.js @@ -1,4 +1,5 @@ import apiFetch from '@wordpress/api-fetch'; +import { __ } from '@wordpress/i18n'; import OnOff from './onoff'; const CacheManage = { @@ -11,6 +12,30 @@ const CacheManage = { '[data-cache-point]' ); cachePoints.forEach( ( cachePoint ) => this._bind( cachePoint ) ); + const purgeAll = document.getElementById( 'cld_purge_all' ); + if ( purgeAll ) { + purgeAll.disabled = 'disabled'; + purgeAll.style.width = '100px'; + purgeAll.style.transition = 'width 0.5s'; + purgeAll.addEventListener( 'click', () => { + if ( ! purgeAll.dataset.purging ) { + if ( + confirm( + wp.i18n.__( + 'Purge entire cache?', + 'cloudinary' + ) + ) + ) { + this._purgeAll( purgeAll, false ); + } + } + } ); + this._watchPurge( purgeAll ); + setInterval( () => { + this._watchPurge( purgeAll ); + }, 5000 ); + } } }, getCachePoint( ID ) { @@ -36,6 +61,9 @@ const CacheManage = { cachePoint.dataset.browser ); const apply = document.getElementById( cachePoint.dataset.apply ); + apply.style.float = 'right'; + apply.style.marginLeft = '6px'; + controller.addEventListener( 'change', ( ev ) => { this._handleManager( ID ); } ); @@ -114,9 +142,14 @@ const CacheManage = { }, _load( ID ) { const cachePoint = this.getCachePoint( ID ); + let height = '100px'; + if ( cachePoint.clientHeight ) { + height = cachePoint.clientHeight - 16 + 'px'; // Subtract padding. + } this._clearChildren( cachePoint ); cachePoint.appendChild( cachePoint.loader ); this.open( cachePoint.loader ); + cachePoint.loader.firstChild.style.height = height; apiFetch( { path: CLDCACHE.fetch_url, data: { @@ -143,7 +176,7 @@ const CacheManage = { this._evaluateApply( cachePoint ); }, _evaluateApply( cachePoint ) { - this.close( cachePoint.apply ); + cachePoint.apply.disabled = 'disabled'; const lists = cachePoint.apply.cacheChanges; let show = false; for ( const state in lists ) { @@ -152,7 +185,7 @@ const CacheManage = { } } if ( show ) { - this.open( cachePoint.apply ); + cachePoint.apply.disabled = ''; } }, _applyChanges( cachePoint ) { @@ -164,6 +197,90 @@ const CacheManage = { } } }, + _watchPurge( button ) { + if ( ! button.dataset.purging && ! button.dataset.updating ) { + button.dataset.updating = true; + apiFetch( { + path: CLDCACHE.purge_all, + data: { + count: true, + }, + method: 'POST', + } ).then( ( result ) => { + button.dataset.updating = ''; + if ( 0 < result.percent && 100 > result.percent ) { + button.disabled = ''; + this._purgeAll( button, true ); + } else if ( 0 < result.pending ) { + button.disabled = ''; + } else { + button.disabled = 'disabled'; + } + } ); + } + }, + _purgeAll( button, count, callback ) { + button.blur(); + const percent = 0; + button.dataset.purging = true; + button.style.width = '200px'; + button.style.border = '0'; + button.dataset.title = button.innerText; + button.innerText = __( 'Purging cache 0%', 'cloudinary' ); + button.style.backgroundImage = + 'linear-gradient(90deg,' + + ' #2a0 ' + + percent + + '%,' + + ' #787878 ' + + percent + + '%)'; + this._purgeAction( button, count, callback ); + }, + _purgeAction( button, count, callback ) { + const parent = button.dataset.parent; + apiFetch( { + path: CLDCACHE.purge_all, + data: { + count, + parent, + }, + method: 'POST', + } ).then( ( result ) => { + button.innerText = + __( 'Purging cache', 'cloudinary' ) + + ' ' + + Math.round( result.percent, 2 ) + + '%'; + button.style.backgroundImage = + 'linear-gradient(90deg,' + + ' #2a0 ' + + result.percent + + '%,' + + ' #787878 ' + + result.percent + + '%)'; + if ( 100 > result.percent ) { + this._purgeAction( button, true, callback ); + } else if ( callback ) { + callback(); + } else { + button.innerText = wp.i18n.__( + 'Purge complete.', + 'cloudinary' + ); + setTimeout( () => { + button.dataset.purging = ''; + button.style.backgroundImage = ''; + button.style.minHeight = ''; + button.style.border = ''; + button.style.width = '100px'; + button.disabled = 'disabled'; + button.innerText = button.dataset.title; + }, 2000 ); + } + } ); + }, _set_state( cachePoint, state, ids ) { this._showSpinners( ids ); apiFetch( { @@ -176,27 +293,15 @@ const CacheManage = { } ).then( ( result ) => { this._hideSpinners( result ); result.forEach( ( id ) => { - this.close( cachePoint.apply ); this._removeFromList( cachePoint, id, state ); this._evaluateApply( cachePoint ); - cachePoint.apply.disabled = ''; + cachePoint.apply.disabled = 'disabled'; } ); if ( 'delete' === state ) { this._load( cachePoint.dataset.cachePoint ); } } ); }, - _purgeCache( cachePoint ) { - apiFetch( { - path: CLDCACHE.purge_url, - data: { - cachePoint: cachePoint.dataset.cachePoint, - }, - method: 'POST', - } ).then( () => { - this._load( cachePoint.dataset.cachePoint ); - } ); - }, _showSpinners( ids ) { ids.forEach( ( id ) => { this.spinners[ 'spinner_' + id ].style.visibility = 'visible'; @@ -264,25 +369,6 @@ const CacheManage = { const left = document.createElement( 'button' ); const right = document.createElement( 'button' ); - if ( result.items.length ) { - const purge = document.createElement( 'button' ); - purge.type = 'button'; - purge.className = 'button'; - purge.innerText = wp.i18n.__( 'Purge cache point', 'cloudinary' ); - purge.style.float = 'left'; - cachePoint.paginate.appendChild( purge ); - - purge.addEventListener( 'click', ( ev ) => { - if ( - confirm( - wp.i18n.__( 'Purge entire cache point?', 'cloudinary' ) - ) - ) { - this._purgeCache( cachePoint ); - } - } ); - } - left.type = 'button'; left.innerHTML = '‹'; left.className = 'button cld-pagenav-prev'; @@ -316,6 +402,33 @@ const CacheManage = { cachePoint.paginate.appendChild( left ); cachePoint.paginate.appendChild( text ); cachePoint.paginate.appendChild( right ); + cachePoint.paginate.appendChild( cachePoint.apply ); + cachePoint.apply.classList.remove( 'closed' ); + cachePoint.apply.disabled = 'disabled'; + // Add purge + if ( result.items.length ) { + const purge = document.createElement( 'button' ); + purge.type = 'button'; + purge.className = 'button'; + purge.innerText = wp.i18n.__( 'Purge cache point', 'cloudinary' ); + purge.style.float = 'right'; + cachePoint.paginate.appendChild( purge ); + + purge.addEventListener( 'click', ( ev ) => { + if ( + confirm( + wp.i18n.__( 'Purge entire cache point?', 'cloudinary' ) + ) + ) { + purge.dataset.parent = cachePoint.dataset.cachePoint; + const self = this; + purge.classList.add( 'button-primary' ); + this._purgeAll( purge, false, function () { + self._load( cachePoint.dataset.cachePoint ); + } ); + } + } ); + } }, _getNote( message ) { const row = this._getRow(); @@ -397,7 +510,6 @@ const CacheManage = { checkbox.type = 'checkbox'; checkbox.value = item.ID; checkbox.checked = -1 < index ? false : item.active; - checkbox.dataset.master = JSON.stringify( masters ); slider.className = 'cld-input-on-off-control-slider'; wrap.appendChild( checkbox ); diff --git a/js/src/components/featured-image.js b/src/js/components/featured-image.js similarity index 100% rename from js/src/components/featured-image.js rename to src/js/components/featured-image.js diff --git a/js/src/components/gallery-init.js b/src/js/components/gallery-init.js similarity index 100% rename from js/src/components/gallery-init.js rename to src/js/components/gallery-init.js diff --git a/js/src/components/global-transformations.js b/src/js/components/global-transformations.js similarity index 100% rename from js/src/components/global-transformations.js rename to src/js/components/global-transformations.js diff --git a/js/src/components/media-library.js b/src/js/components/media-library.js similarity index 100% rename from js/src/components/media-library.js rename to src/js/components/media-library.js diff --git a/js/src/components/notices.js b/src/js/components/notices.js similarity index 100% rename from js/src/components/notices.js rename to src/js/components/notices.js diff --git a/js/src/components/onoff.js b/src/js/components/onoff.js similarity index 100% rename from js/src/components/onoff.js rename to src/js/components/onoff.js diff --git a/js/src/components/settings-gallery.js b/src/js/components/settings-gallery.js similarity index 100% rename from js/src/components/settings-gallery.js rename to src/js/components/settings-gallery.js diff --git a/js/src/components/settings-page.js b/src/js/components/settings-page.js similarity index 100% rename from js/src/components/settings-page.js rename to src/js/components/settings-page.js diff --git a/js/src/components/taxonomies.js b/src/js/components/taxonomies.js similarity index 100% rename from js/src/components/taxonomies.js rename to src/js/components/taxonomies.js diff --git a/js/src/components/terms-order.js b/src/js/components/terms-order.js similarity index 100% rename from js/src/components/terms-order.js rename to src/js/components/terms-order.js diff --git a/js/src/components/ui.js b/src/js/components/ui.js similarity index 94% rename from js/src/components/ui.js rename to src/js/components/ui.js index 94a7bfa4a..d8a44ca00 100644 --- a/js/src/components/ui.js +++ b/src/js/components/ui.js @@ -38,9 +38,7 @@ const UI = { expanded: 'auto', }, content: ( reference ) => - context.getElementById( - reference.getAttribute( 'data-tooltip' ) - ).innerHTML, + document.getElementById( reference.dataset.tooltip ).innerHTML, } ); [ ...triggers ].forEach( ( input ) => { input.dispatchEvent( new Event( 'input' ) ); @@ -130,9 +128,12 @@ const UI = { } ); input.addEventListener( 'input', function () { self.bindings[ trigger ].value = input.value; - if ( 'checkbox' === input.type || 'radio' === input.type ) { + if ( 'checkbox' === input.type ) { self.bindings[ trigger ].checked = input.checked; } + if ( 'radio' === input.type && false === input.checked ) { + return; // Ignore an unchecked radio. + } for ( const bound in self.bindings[ trigger ].elements ) { self.toggle( self.bindings[ trigger ].elements[ bound ], @@ -198,7 +199,12 @@ const UI = { } }, }; -// Init. -window.addEventListener( 'load', UI._init( document ) ); + +const context = document.getElementById( 'cloudinary-settings-page' ); + +if ( context ) { + // Init. + window.addEventListener( 'load', UI._init( context ) ); +} export default UI; diff --git a/js/src/components/video.js b/src/js/components/video.js similarity index 100% rename from js/src/components/video.js rename to src/js/components/video.js diff --git a/js/src/components/widget.js b/src/js/components/widget.js similarity index 100% rename from js/src/components/widget.js rename to src/js/components/widget.js diff --git a/js/src/deactivate.js b/src/js/deactivate.js similarity index 100% rename from js/src/deactivate.js rename to src/js/deactivate.js diff --git a/js/src/gallery-block/attributes.json b/src/js/gallery-block/attributes.json similarity index 100% rename from js/src/gallery-block/attributes.json rename to src/js/gallery-block/attributes.json diff --git a/js/src/gallery-block/controls.js b/src/js/gallery-block/controls.js similarity index 100% rename from js/src/gallery-block/controls.js rename to src/js/gallery-block/controls.js diff --git a/js/src/gallery-block/deprecated.js b/src/js/gallery-block/deprecated.js similarity index 100% rename from js/src/gallery-block/deprecated.js rename to src/js/gallery-block/deprecated.js diff --git a/js/src/gallery-block/edit.js b/src/js/gallery-block/edit.js similarity index 99% rename from js/src/gallery-block/edit.js rename to src/js/gallery-block/edit.js index 6084f158e..1ed6a4dda 100644 --- a/js/src/gallery-block/edit.js +++ b/src/js/gallery-block/edit.js @@ -18,7 +18,7 @@ import { InspectorControls, MediaPlaceholder } from '@wordpress/block-editor'; /** * Internal dependencies */ -import '../../../css/src/gallery.scss'; +import '../../css/gallery.scss'; import Controls from './controls'; import { ALLOWED_MEDIA_TYPES } from './options'; import { generateId, setupAttributesForRendering, showNotice } from './utils'; diff --git a/js/src/gallery-block/icons.js b/src/js/gallery-block/icons.js similarity index 100% rename from js/src/gallery-block/icons.js rename to src/js/gallery-block/icons.js diff --git a/js/src/gallery-block/index.js b/src/js/gallery-block/index.js similarity index 100% rename from js/src/gallery-block/index.js rename to src/js/gallery-block/index.js diff --git a/js/src/gallery-block/options.js b/src/js/gallery-block/options.js similarity index 100% rename from js/src/gallery-block/options.js rename to src/js/gallery-block/options.js diff --git a/js/src/gallery-block/radio.js b/src/js/gallery-block/radio.js similarity index 100% rename from js/src/gallery-block/radio.js rename to src/js/gallery-block/radio.js diff --git a/js/src/gallery-block/save.js b/src/js/gallery-block/save.js similarity index 100% rename from js/src/gallery-block/save.js rename to src/js/gallery-block/save.js diff --git a/js/src/gallery-block/utils.js b/src/js/gallery-block/utils.js similarity index 100% rename from js/src/gallery-block/utils.js rename to src/js/gallery-block/utils.js diff --git a/js/src/lazy-load.js b/src/js/lazy-load.js similarity index 92% rename from js/src/lazy-load.js rename to src/js/lazy-load.js index 383e6ba9d..07cb6d218 100644 --- a/js/src/lazy-load.js +++ b/src/js/lazy-load.js @@ -106,6 +106,7 @@ const LazyLoad = { const rect = image.getBoundingClientRect(); const density = 'auto' !== this.density ? this._getDensity() : 1; return ( + image.dataset.placeholder && ! image.cld_loaded && rect.top < this.lazyThreshold * 2 && ( width > image.naturalWidth / density || ! image.cld_placehold ) @@ -191,7 +192,20 @@ const LazyLoad = { }, getPlaceholderURL( image ) { image.cld_placehold = true; - return image.dataset.placeholder.replace( '/--size--', '/' ); + const width = this.scaleSize( + image.originalWidth, + image.width, + this.config.pixel_step + ); + const density = this._getDensity(); + let newSize = ''; + if ( width ) { + newSize += 'w_' + width; + if ( 1 !== density ) { + newSize += ',dpr_' + density; + } + } + return image.dataset.placeholder.replace( '--size--', newSize ); }, }; // Init. diff --git a/js/src/main.js b/src/js/main.js similarity index 56% rename from js/src/main.js rename to src/js/main.js index 129def477..32ddb7246 100644 --- a/js/src/main.js +++ b/src/js/main.js @@ -14,7 +14,22 @@ import MediaLibrary from './components/media-library'; import Notices from './components/notices'; import UI from './components/ui'; -import '../../css/src/main.scss'; +import '../css/main.scss'; + +// include images. +import '../css/images/bandwidth.svg'; +import '../css/images/circle.svg'; +import '../css/images/cloud.svg'; +import '../css/images/crop.svg'; +import '../css/images/gallery.svg'; +import '../css/images/image.svg'; +import '../css/images/learn.svg'; +import '../css/images/logo-icon.svg'; +import '../css/images/transformation.svg'; +import '../css/images/upload.svg'; +import '../css/images/video.svg'; +import '../css/images/connection-string.png'; +import '../css/images/sample.webp'; // jQuery, because reasons. window.$ = window.jQuery; diff --git a/src/js/responsive-breakpoints.js b/src/js/responsive-breakpoints.js new file mode 100644 index 000000000..f45fd872a --- /dev/null +++ b/src/js/responsive-breakpoints.js @@ -0,0 +1,144 @@ +const ResponsiveBreakpoints = { + density: window.devicePixelRatio ? window.devicePixelRatio : 'auto', + images: [], + debounce: null, + config: CLDLB ? CLDLB : {}, + _init() { + [ ...document.images ].forEach( ( image ) => { + if ( ! image.dataset.src ) { + return; + } + image.originalWidth = image.dataset.width; + this.images.push( image ); + } ); + + // Resize handler. + window.addEventListener( 'resize', ( ev ) => { + this._debounceBuild(); + } ); + window.addEventListener( 'scroll', ( ev ) => { + this._debounceBuild(); + } ); + // Build images. + this._build(); + }, + _debounceBuild() { + if ( this.debounce ) { + clearTimeout( this.debounce ); + } + this.debounce = setTimeout( () => { + this._build(); + }, 100 ); + }, + _build() { + this.images.forEach( ( image ) => { + this.buildSize( image ); + } ); + }, + _shouldRebuild( image ) { + const width = this.scaleSize( + image.originalWidth, + image.width, + this.config.bytes_step + ); + const rect = image.getBoundingClientRect(); + const diff = + window.innerHeight + parseInt( this.config.lazy_threshold, 10 ); + return ( + rect.top < diff && + ( width > image.naturalWidth / this.density || ! image.cld_loaded ) + ); + }, + _shouldPlacehold( image ) { + const width = this.scaleSize( + image.originalWidth, + image.width, + this.config.bytes_step + ); + const rect = image.getBoundingClientRect(); + const diff = + window.innerHeight + parseInt( this.config.lazy_threshold, 10 ); + return ( + ! image.cld_loaded && + rect.top < diff * 2 && + ( width > image.naturalWidth / this.density || + ! image.cld_placehold ) + ); + }, + getResponsiveSteps( image ) { + const steps = Math.ceil( + image.dataset.breakpoints + ? image.originalWidth / image.dataset.breakpoints + : this.responsiveStep + ); + return steps; + }, + getQuality() { + let quality = 'q_auto'; + switch ( + navigator && navigator.connection + ? navigator.connection.effectiveType + : 'none' + ) { + case 'none': + break; + case '4g': + quality = 'q_auto:good'; + break; + case '3g': + quality = 'q_auto:eco'; + break; + case '2g': + case 'slow-2g': + quality = 'q_auto:low'; + break; + default: + quality = 'q_auto:best'; + break; + } + return quality; + }, + scaleSize( original, newSize, responsiveStep ) { + const diff = Math.floor( ( original - newSize ) / responsiveStep ); + let scaledSize = original - responsiveStep * diff; + if ( scaledSize > original ) { + scaledSize = original; + } else if ( this.config.max_width < scaledSize ) { + scaledSize = original; + } + return scaledSize; + }, + buildSize( image ) { + if ( this._shouldRebuild( image ) ) { + image.src = this.getSizeURL( image ); + } else if ( this._shouldPlacehold( image ) ) { + image.src = this.getPlaceholderURL( image ); + } + }, + getSizeURL( image ) { + image.cld_loaded = true; + if ( image.dataset.srcset ) { + image.srcset = image.dataset.srcset; + delete image.dataset.srcset; + return ''; + } + const width = this.scaleSize( + image.originalWidth, + image.width, + this.config.bytes_step + ); + const newSize = 'w_' + width + ',dpr_' + this.density; + return image.dataset.src + .replace( '--size--', newSize ) + .replace( '/--placehold--', '' ) + .replace( 'q_auto', this.getQuality() ); + }, + getPlaceholderURL( image ) { + image.cld_placehold = true; + return image.dataset.placeholder; + }, +}; +// Init. +window.addEventListener( 'load', () => { + ResponsiveBreakpoints._init(); +} ); diff --git a/js/src/video-init.js b/src/js/video-init.js similarity index 100% rename from js/src/video-init.js rename to src/js/video-init.js diff --git a/src/js/wp-color-picker-alpha.js b/src/js/wp-color-picker-alpha.js new file mode 100644 index 000000000..bd407429b --- /dev/null +++ b/src/js/wp-color-picker-alpha.js @@ -0,0 +1,635 @@ +/**! + * wp-color-picker-alpha + * + * Overwrite Automattic Iris for enabled Alpha Channel in wpColorPicker + * Only run in input and is defined data alpha in true + * + * Version: 3.0.0 + * https://github.com/kallookoo/wp-color-picker-alpha + * Licensed under the GPLv2 license or later. + */ + +( function( $, undef ) { + + var wpColorPickerAlpha = { + 'version' : 300 + }; + + // Always try to use the last version of this script. + if ( 'wpColorPickerAlpha' in window && 'version' in window.wpColorPickerAlpha ) { + var version = parseInt( window.wpColorPickerAlpha.version, 10 ); + if ( ! isNaN( version ) && version >= wpColorPickerAlpha.version ) { + return; + } + } + + // Prevent multiple initiations + if ( Color.fn.hasOwnProperty( 'to_s' ) ) { + return; + } + + // Create new method to replace the `Color.toString()` inside the scripts. + Color.fn.to_s = function( type ) { + type = ( type || 'hex' ); + // Change hex to rgba to return the correct color. + if ( 'hex' === type && this._alpha < 1 ) { + type = 'rgba'; + } + + var color = ''; + if ( 'hex' === type ) { + color = this.toString(); + } else if ( ! this.error ) { + color = this.toCSS( type ).replace( /\(\s+/, '(' ).replace( /\s+\)/, ')' ); + } + return color; + } + + // Register the global variable. + window.wpColorPickerAlpha = wpColorPickerAlpha; + + // Background image encoded + var backgroundImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg=='; + + /** + * Iris + */ + $.widget( 'a8c.iris', $.a8c.iris, { + /** + * Alpha options + * + * @since 3.0.0 + * + * @type {Object} + */ + alphaOptions: { + alphaEnabled: false, + }, + /** + * Get the current color or the new color. + * + * @since 3.0.0 + * @access private + * + * @param {Object|*} The color instance if not defined return the cuurent color. + * + * @return {string} The element's color. + */ + _getColor: function( color ) { + if ( color === undef ) { + color = this._color; + } + + if ( this.alphaOptions.alphaEnabled ) { + color = color.to_s( this.alphaOptions.alphaColorType ); + if ( ! this.alphaOptions.alphaColorWithSpace ) { + color = color.replace( /\s+/g, '' ); + } + return color; + } + return color.toString(); + }, + /** + * Create widget + * + * @since 3.0.0 + * @access private + * + * @return {void} + */ + _create: function() { + try { + // Try to get the wpColorPicker alpha options. + this.alphaOptions = this.element.wpColorPicker( 'instance' ).alphaOptions; + } catch( e ) {} + + // We make sure there are all options + $.extend( {}, this.alphaOptions, { + alphaEnabled: false, + alphaCustomWidth: 130, + alphaReset: false, + alphaColorType: 'hex', + alphaColorWithSpace: false, + } ); + + this._super(); + }, + /** + * Binds event listeners to the Iris. + * + * @since 3.0.0 + * @access private + * + * @return {void} + */ + _addInputListeners: function( input ) { + var self = this, + debounceTimeout = 100, + callback = function( event ){ + var val = input.val(), + color = new Color( val ), + val = val.replace( /^(#|(rgb|hsl)a?)/, '' ), + type = self.alphaOptions.alphaColorType; + + input.removeClass( 'iris-error' ); + + if ( ! color.error ) { + // let's not do this on keyup for hex shortcodes + if ( 'hex' !== type || ! ( event.type === 'keyup' && val.match( /^[0-9a-fA-F]{3}$/ ) ) ) { + // Compare color ( #AARRGGBB ) + if ( color.toIEOctoHex() !== self._color.toIEOctoHex() ) { + self._setOption( 'color', self._getColor( color ) ); + } + } + } else if ( val !== '' ) { + input.addClass( 'iris-error' ); + } + }; + + input.on( 'change', callback ).on( 'keyup', self._debounce( callback, debounceTimeout ) ); + + // If we initialized hidden, show on first focus. The rest is up to you. + if ( self.options.hide ) { + input.one( 'focus', function() { + self.show(); + }); + } + }, + /** + * Init Controls + * + * @since 3.0.0 + * @access private + * + * @return {void} + */ + _initControls: function() { + this._super(); + + if ( this.alphaOptions.alphaEnabled ) { + // Create Alpha controls + var self = this, + stripAlpha = self.controls.strip.clone(false, false), + stripAlphaSlider = stripAlpha.find( '.iris-slider-offset' ), + controls = { + stripAlpha : stripAlpha, + stripAlphaSlider : stripAlphaSlider + }; + + stripAlpha.addClass( 'iris-strip-alpha' ); + stripAlphaSlider.addClass( 'iris-slider-offset-alpha' ); + stripAlpha.appendTo( self.picker.find( '.iris-picker-inner' ) ); + + // Push new controls + $.each( controls, function( k, v ) { + self.controls[k] = v; + } ); + + // Create slider + self.controls.stripAlphaSlider.slider( { + orientation : 'vertical', + min : 0, + max : 100, + step : 1, + value : parseInt( self._color._alpha * 100 ), + slide : function( event, ui ) { + self.active = 'strip'; + // Update alpha value + self._color._alpha = parseFloat( ui.value / 100 ); + self._change.apply( self, arguments ); + } + } ); + } + }, + /** + * Create the controls sizes + * + * @since 3.0.0 + * @access private + * + * @param {bool} reset Set to True for recreate the controls sizes. + * + * @return {void} + */ + _dimensions: function( reset ) { + this._super( reset ); + + if ( this.alphaOptions.alphaEnabled ) { + var self = this, + opts = self.options, + controls = self.controls, + square = controls.square, + strip = self.picker.find( '.iris-strip' ), + innerWidth, squareWidth, stripWidth, stripMargin, totalWidth; + + /** + * I use Math.round() to avoid possible size errors, + * this function returns the value of a number rounded + * to the nearest integer. + * + * The width to append all widgets, + * if border is enabled, 22 is subtracted. + * 20 for css left and right property + * 2 for css border + */ + innerWidth = Math.round( self.picker.outerWidth( true ) - ( opts.border ? 22 : 0 ) ); + // The width of the draggable, aka square. + squareWidth = Math.round( square.outerWidth() ); + // The width for the sliders + stripWidth = Math.round( ( innerWidth - squareWidth ) / 2 ); + // The margin for the sliders + stripMargin = Math.round( stripWidth / 2 ); + // The total width of the elements. + totalWidth = Math.round( squareWidth + ( stripWidth * 2 ) + ( stripMargin * 2 ) ); + + // Check and change if necessary. + while ( totalWidth > innerWidth ) { + stripWidth = Math.round( stripWidth - 2 ); + stripMargin = Math.round( stripMargin - 1 ); + totalWidth = Math.round( squareWidth + ( stripWidth * 2 ) + ( stripMargin * 2 ) ); + } + + + square.css( 'margin', '0' ); + strip.width( stripWidth ).css( 'margin-left', stripMargin + 'px' ); + } + }, + /** + * Callback to update the controls and the current color. + * + * @since 3.0.0 + * @access private + * + * @return {void} + */ + _change: function() { + var self = this, + active = self.active; + + self._super(); + + if ( self.alphaOptions.alphaEnabled ) { + var controls = self.controls, + alpha = parseInt( self._color._alpha * 100 ), + color = self._color.toRgb(), + gradient = [ + 'rgb(' + color.r + ',' + color.g + ',' + color.b + ') 0%', + 'rgba(' + color.r + ',' + color.g + ',' + color.b + ', 0) 100%' + ], + target = self.picker.closest( '.wp-picker-container' ).find( '.wp-color-result' ); + + self.options.color = self._getColor(); + // Generate background slider alpha, only for CSS3. + controls.stripAlpha.css( { 'background' : 'linear-gradient(to bottom, ' + gradient.join( ', ' ) + '), url(' + backgroundImage + ')' } ); + // Update alpha value + if ( active ) { + controls.stripAlphaSlider.slider( 'value', alpha ); + } + + if ( ! self._color.error ) { + self.element.removeClass( 'iris-error' ).val( self.options.color ); + } + + self.picker.find( '.iris-palette-container' ).on( 'click.palette', '.iris-palette', function() { + var color = $( this ).data( 'color' ); + if ( self.alphaOptions.alphaReset ) { + self._color._alpha = 1; + color = self._getColor(); + } + self._setOption( 'color', color ); + } ); + } + }, + /** + * Paint dimensions. + * + * @since 3.0.0 + * @access private + * + * @param {string} origin Origin (position). + * @param {string} control Type of the control, + * + * @return {void} + */ + _paintDimension: function( origin, control ) { + var self = this, + color = false; + + // Fix for slider hue opacity. + if ( self.alphaOptions.alphaEnabled && 'strip' === control ) { + color = self._color; + self._color = new Color( color.toString() ); + self.hue = self._color.h(); + } + + self._super( origin, control ); + + // Restore the color after paint. + if ( color ) { + self._color = color; + } + }, + /** + * To update the options, see original source to view the available options. + * + * @since 3.0.0 + * + * @param {string} key The Option name. + * @param {mixed} value The Option value to update. + * + * @return {void} + */ + _setOption: function( key, value ) { + var self = this; + if ( 'color' === key && self.alphaOptions.alphaEnabled ) { + // cast to string in case we have a number + value = '' + value; + newColor = new Color( value ).setHSpace( self.options.mode ); + // Check if error && Check the color to prevent callbacks with the same color. + if ( ! newColor.error && self._getColor( newColor ) !== self._getColor() ) { + self._color = newColor; + self.options.color = self._getColor(); + self.active = 'external'; + self._change(); + } + } else { + return self._super( key, value ); + } + }, + /** + * Returns the iris object if no new color is provided. If a new color is provided, it sets the new color. + * + * @param newColor {string|*} The new color to use. Can be undefined. + * + * @since 3.0.0 + * + * @return {string} The element's color. + */ + color: function( newColor ) { + if ( newColor === true ) { + return this._color.clone(); + } + if ( newColor === undef ) { + return this._getColor(); + } + this.option( 'color', newColor ); + }, + } ); + + /** + * wpColorPicker + */ + $.widget( 'wp.wpColorPicker', $.wp.wpColorPicker, { + /** + * Alpha options + * + * @since 3.0.0 + * + * @type {Object} + */ + alphaOptions: { + alphaEnabled: false, + }, + /** + * Get the alpha options. + * + * @since 3.0.0 + * @access private + * + * @return {object} The current alpha options. + */ + _getAlphaOptions: function() { + var el = this.element, + type = ( el.data( 'type' ) || this.options.type ), + color = ( el.data( 'defaultColor' ) || el.val() ), + options = { + alphaEnabled: ( el.data( 'alphaEnabled' ) || false ), + alphaCustomWidth: 130, + alphaReset: false, + alphaColorType: 'rgb', + alphaColorWithSpace: false, + }; + + if ( options.alphaEnabled ) { + options.alphaEnabled = ( el.is( 'input' ) && 'full' === type ); + } + + if ( ! options.alphaEnabled ) { + return options; + } + + options.alphaColorWithSpace = ( color && color.match( /\s/ ) ); + + $.each( options, function( name, defaultValue ) { + var value = ( el.data( name ) || defaultValue ); + switch ( name ) { + case 'alphaCustomWidth': + value = ( value ? parseInt( value, 10 ) : 0 ); + value = ( isNaN( value ) ? defaultValue : value ); + break; + case 'alphaColorType': + if ( ! value.match( /^(hex|(rgb|hsl)a?)$/ ) ) { + if ( color && color.match( /^#/ ) ) { + value = 'hex'; + } else if ( color && color.match( /^hsla?/ ) ) { + value = 'hsl'; + } else { + value = defaultValue; + } + } + break; + default: + value = !!value; + break; + } + options[name] = value; + } ); + + return options; + }, + /** + * Create widget + * + * @since 3.0.0 + * @access private + * + * @return {void} + */ + _create: function() { + // Return early if Iris support is missing. + if ( ! $.support.iris ) { + return; + } + + // Set the alpha options for the current instance. + this.alphaOptions = this._getAlphaOptions(); + + // Create widget. + this._super(); + }, + /** + * Binds event listeners to the color picker and create options, etc... + * + * @since 3.0.0 + * @access private + * + * @return {void} + */ + _addListeners: function() { + if ( ! this.alphaOptions.alphaEnabled ) { + return this._super(); + } + + var self = this, + el = self.element, + isDeprecated = self.toggler.is( 'a' ); + + this.alphaOptions.defaultWidth = el.width(); + if ( this.alphaOptions.alphaCustomWidth ) { + el.width( parseInt( this.alphaOptions.defaultWidth + this.alphaOptions.alphaCustomWidth, 10 ) ); + } + + self.toggler.css( { + 'position': 'relative', + 'background-image' : 'url(' + backgroundImage + ')' + } ); + + if ( isDeprecated ) { + self.toggler.html( '' ); + } else { + self.toggler.append( '' ); + } + + self.colorAlpha = self.toggler.find( 'span.color-alpha' ).css( { + 'width' : '30px', + 'height' : '100%', + 'position' : 'absolute', + 'top' : 0, + 'background-color' : el.val(), + } ); + + // Define the correct position for ltr or rtl direction. + if ( 'ltr' === self.colorAlpha.css( 'direction' ) ) { + self.colorAlpha.css( { + 'border-bottom-left-radius' : '2px', + 'border-top-left-radius' : '2px', + 'left' : 0 + } ); + } else { + self.colorAlpha.css( { + 'border-bottom-right-radius' : '2px', + 'border-top-right-radius' : '2px', + 'right' : 0 + } ); + } + + + el.iris( { + /** + * @summary Handles the onChange event if one has been defined in the options. + * + * Handles the onChange event if one has been defined in the options and additionally + * sets the background color for the toggler element. + * + * @since 3.0.0 + * + * @param {Event} event The event that's being called. + * @param {HTMLElement} ui The HTMLElement containing the color picker. + * + * @returns {void} + */ + change: function( event, ui ) { + self.colorAlpha.css( { 'background-color': ui.color.to_s( self.alphaOptions.alphaColorType ) } ); + + // fire change callback if we have one + if ( $.isFunction( self.options.change ) ) { + self.options.change.call( this, event, ui ); + } + } + } ); + + + /** + * Prevent any clicks inside this widget from leaking to the top and closing it. + * + * @since 3.0.0 + * + * @param {Event} event The event that's being called. + * + * @return {void} + */ + self.wrap.on( 'click.wpcolorpicker', function( event ) { + event.stopPropagation(); + }); + + /** + * Open or close the color picker depending on the class. + * + * @since 3.0.0 + */ + self.toggler.click( function() { + if ( self.toggler.hasClass( 'wp-picker-open' ) ) { + self.close(); + } else { + self.open(); + } + }); + + /** + * Checks if value is empty when changing the color in the color picker. + * If so, the background color is cleared. + * + * @since 3.0.0 + * + * @param {Event} event The event that's being called. + * + * @return {void} + */ + el.change( function( event ) { + var val = $( this ).val(); + + if ( el.hasClass( 'iris-error' ) || val === '' || val.match( /^(#|(rgb|hsl)a?)$/ ) ) { + if ( isDeprecated ) { + self.toggler.removeAttr( 'style' ); + } + + self.colorAlpha.css( 'background-color', '' ); + + // fire clear callback if we have one + if ( $.isFunction( self.options.clear ) ) { + self.options.clear.call( this, event ); + } + } + } ); + + /** + * Enables the user to either clear the color in the color picker or revert back to the default color. + * + * @since 3.0.0 + * + * @param {Event} event The event that's being called. + * + * @return {void} + */ + self.button.click( function( event ) { + if ( $( this ).hasClass( 'wp-picker-default' ) ) { + el.val( self.options.defaultColor ).change(); + } else if ( $( this ).hasClass( 'wp-picker-clear' ) ) { + el.val( '' ); + if ( isDeprecated ) { + self.toggler.removeAttr( 'style' ); + } + + self.colorAlpha.css( 'background-color', '' ); + + // fire clear callback if we have one + if ( $.isFunction( self.options.clear ) ) { + self.options.clear.call( this, event ); + } + + el.trigger( 'change' ); + } + } ); + }, + } ); +} ( jQuery ) ); diff --git a/ui-definitions/settings-header.php b/ui-definitions/settings-header.php index dea779833..f3f7f9393 100644 --- a/ui-definitions/settings-header.php +++ b/ui-definitions/settings-header.php @@ -10,7 +10,7 @@ 'type' => 'tag', 'element' => 'img', 'attributes' => array( - 'src' => esc_url( $this->dir_url . 'css/logo.svg' ), + 'src' => esc_url( $this->dir_url . 'css/images/logo.svg' ), 'alt' => __( "Cloudinary's logo", 'cloudinary' ), 'width' => '150px', ), diff --git a/ui-definitions/settings-image.php b/ui-definitions/settings-image.php index 5c04a6dfc..8b6fbce86 100644 --- a/ui-definitions/settings-image.php +++ b/ui-definitions/settings-image.php @@ -9,7 +9,7 @@ array( 'type' => 'panel', 'title' => __( 'Image - Global Settings', 'cloudinary' ), - 'icon' => $this->plugin->dir_url . 'css/image.svg', + 'icon' => $this->plugin->dir_url . 'css/images/image.svg', 'slug' => 'image_settings', 'anchor' => true, array( @@ -173,7 +173,7 @@ 'type' => 'image_preview', 'title' => __( 'Image preview', 'cloudinary' ), 'slug' => 'image_preview', - 'default' => 'https://res.cloudinary.com/demo/image/upload/w_600/sample.jpg', + 'default' => CLOUDINARY_ENDPOINTS_PREVIEW_IMAGE . 'w_600/sample.jpg', 'taxonomy_field' => array( 'context' => 'image', 'priority' => 10, diff --git a/ui-definitions/settings-video.php b/ui-definitions/settings-video.php index d71e6d658..cc2c5c94e 100644 --- a/ui-definitions/settings-video.php +++ b/ui-definitions/settings-video.php @@ -9,7 +9,7 @@ array( 'type' => 'panel', 'title' => __( 'Video - Global Settings', 'cloudinary' ), - 'icon' => $this->plugin->dir_url . 'css/video.svg', + 'icon' => $this->plugin->dir_url . 'css/images/video.svg', 'slug' => 'video_settings', 'anchor' => true, array( diff --git a/webpack.config.js b/webpack.config.js index 0bdea27fc..bb05f00e9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -73,23 +73,20 @@ const cldCore = { ...defaultConfig, ...sharedConfig, entry: { - cloudinary: './js/src/main.js', - video: './css/src/video.scss', - }, - output: { - path: path.resolve( process.cwd(), 'js' ), - filename: '[name].js', + cloudinary: './src/js/main.js', + video: './src/css/video.scss', + 'wp-color-picker-alpha': './src/js/wp-color-picker-alpha.js', }, module: { rules: [ { - test: /\.(png|svg|jpg|gif)$/, + test: /\.(png|svg|jpg|gif|webp)$/, use: [ { loader: 'file-loader', options: { name: '[name].[ext]', - outputPath: '../css/', + outputPath: '../css/images/', }, }, ], @@ -132,17 +129,7 @@ const cldBlockEditor = { ...defaultConfig, ...sharedConfig, entry: { - 'block-editor': './js/src/blocks.js', - }, - module: { - ...sharedConfig.module, - rules: [ - ...sharedConfig.module.rules, - { - test: /\.(sa|sc|c)ss$/, - use: 'null-loader', - }, - ], + 'block-editor': './src/js/blocks.js', }, }; @@ -150,11 +137,7 @@ const cldGalleryBlock = { ...defaultConfig, ...sharedConfig, entry: { - 'gallery-block': './js/src/gallery-block/index.js', - }, - output: { - path: path.resolve( process.cwd(), 'js' ), - filename: '[name].js', + 'gallery-block': './src/js/gallery-block/index.js', }, }; @@ -162,7 +145,7 @@ const cldGalleryInit = { ...defaultConfig, ...sharedConfig, entry: { - 'gallery-init': './js/src/components/gallery-init.js', + 'gallery-init': './src/js/components/gallery-init.js', }, }; @@ -170,14 +153,14 @@ const cldSettingsGallery = { ...defaultConfig, ...sharedConfig, entry: { - gallery: './js/src/components/settings-gallery.js', + gallery: './src/js/components/settings-gallery.js', }, }; const cldGalleryUI = { ...cldCore, entry: { - 'gallery-ui': './css/src/gallery-ui.scss', + 'gallery-ui': './src/css/gallery-ui.scss', }, }; @@ -185,7 +168,7 @@ const cldDeactivate = { ...defaultConfig, ...sharedConfig, entry: { - deactivate: './js/src/deactivate.js', + deactivate: './src/js/deactivate.js', }, }; @@ -193,7 +176,7 @@ const cldVideoInit = { ...defaultConfig, ...sharedConfig, entry: { - 'video-init': './js/src/video-init.js', + 'video-init': './src/js/video-init.js', }, }; @@ -201,7 +184,7 @@ const cldLazyLoad = { ...defaultConfig, ...sharedConfig, entry: { - 'lazy-load': './js/src/lazy-load.js', + 'lazy-load': './src/js/lazy-load.js', }, };