Plugin Directory

Changeset 2388764


Ignore:
Timestamp:
09/26/2020 08:24:51 AM (6 years ago)
Author:
codeer
Message:

Release version 1.4

Location:
happyfiles
Files:
16 added
13 edited
20 copied

Legend:

Unmodified
Added
Removed
  • happyfiles/trunk/assets/blocks/blocks.asset.php

    r2370842 r2388764  
    1 <?php return array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'd8e2f5023f040f7eb22ce6fe2fab8b90');
     1<?php return array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'f37216b7cb99416e68700690818d7c35');
  • happyfiles/trunk/assets/blocks/blocks.js

    r2370842 r2388764  
    1 !function(e){var l={};function n(t){if(l[t])return l[t].exports;var r=l[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=l,n.d=function(e,l,t){n.o(e,l)||Object.defineProperty(e,l,{enumerable:!0,get:t})},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,l){if(1&l&&(e=n(e)),8&l)return e;if(4&l&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(n.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&l&&"string"!=typeof e)for(var r in e)n.d(t,r,function(l){return e[l]}.bind(null,r));return t},n.n=function(e){var l=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(l,"a",l),l},n.o=function(e,l){return Object.prototype.hasOwnProperty.call(e,l)},n.p="",n(n.s=1)}([function(e,l){!function(){e.exports=this.wp.element}()},function(e,l,n){"use strict";n.r(l);var t,r,a,o,i,c,p,u,s=n(0);window.wp.blocks,window.wp.element,window.wp.editor,window.wp.components,t=wp.blocks.registerBlockType,r=wp.blockEditor.InspectorControls,a=wp.components,o=a.ToggleControl,i=a.PanelBody,a.PanelRow,c=a.SelectControl,p=a.RangeControl,u=wp.serverSideRender,t("happyfiles/gallery",{title:window.happyFiles.l10n.block.gallery.title,description:window.happyFiles.l10n.block.gallery.description,icon:"images-alt2",category:"happyfiles",attributes:{columns:{type:"number",default:3},max:{type:"number"},categories:{type:"array"},orderBy:{type:"string",default:"date"},order:{type:"string",default:"DESC"},imageSize:{type:"string",default:"medium"},linkTo:{type:"string",default:"none"},includeChildren:{type:"boolean",default:!1},crop:{type:"boolean",default:!0},caption:{type:"boolean",default:!1}},edit:function(e){var l=e.attributes,n=e.setAttributes;return e.className,Object(s.createElement)("div",null,Object(s.createElement)(r,null,Object(s.createElement)(i,{title:happyFiles.l10n.block.gallery.settingsTitle,initialOpen:!0},Object(s.createElement)(p,{label:happyFiles.l10n.block.gallery.columns,value:l.columns,min:1,max:6,onChange:function(e){return n({columns:e})}}),Object(s.createElement)(p,{label:happyFiles.l10n.block.gallery.maxNumberOfImages,value:l.max,min:1,onChange:function(e){return n({max:e})}}),Object(s.createElement)(c,{multiple:!0,label:happyFiles.l10n.block.gallery.categories,help:happyFiles.l10n.block.gallery.categoriesHelp,value:l.categories,size:happyFiles.terms.length<=10?happyFiles.terms.length:10,options:happyFiles.terms.filter((function(e){return e.term_id>0})).map((function(e){return{value:e.term_id,label:(e.parent?"- "+e.name:e.name)+" ("+e.count+")"}})),onChange:function(e){return n({categories:e})}}),Object(s.createElement)(c,{label:happyFiles.l10n.block.gallery.orderBy,value:l.orderBy,options:Object.keys(happyFiles.orderBy).map((function(e){return{value:e,label:happyFiles.orderBy[e]}})),onChange:function(e){return n({orderBy:e})}}),Object(s.createElement)(c,{label:happyFiles.l10n.block.gallery.order,value:l.order,options:Object.keys(happyFiles.order).map((function(e){return{value:e,label:happyFiles.order[e]}})),onChange:function(e){return n({order:e})}}),Object(s.createElement)(c,{label:happyFiles.l10n.block.gallery.imageSize,value:l.imageSize,options:Object.keys(happyFiles.imageSizes).map((function(e){return{value:e,label:happyFiles.imageSizes[e]}})),onChange:function(e){return n({imageSize:e})}}),Object(s.createElement)(c,{label:happyFiles.l10n.block.gallery.linkTo,value:l.linkTo,options:Object.keys(happyFiles.linkTo).map((function(e){return{value:e,label:happyFiles.linkTo[e]}})),onChange:function(e){return n({linkTo:e})}}),Object(s.createElement)(o,{label:happyFiles.l10n.block.gallery.includeChildren,checked:l.includeChildren,onChange:function(e){return n({includeChildren:e})}}),Object(s.createElement)(o,{label:happyFiles.l10n.block.gallery.crop,checked:l.crop,onChange:function(e){return n({crop:e})}}),Object(s.createElement)(o,{label:happyFiles.l10n.block.gallery.caption,checked:l.caption,onChange:function(e){return n({caption:e})}}))),Object(s.createElement)(u,{block:"happyfiles/gallery",attributes:l}))},save:function(e){return null}})}]);
     1!function(e){var l={};function t(n){if(l[n])return l[n].exports;var o=l[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=l,t.d=function(e,l,n){t.o(e,l)||Object.defineProperty(e,l,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,l){if(1&l&&(e=t(e)),8&l)return e;if(4&l&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&l&&"string"!=typeof e)for(var o in e)t.d(n,o,function(l){return e[l]}.bind(null,o));return n},t.n=function(e){var l=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(l,"a",l),l},t.o=function(e,l){return Object.prototype.hasOwnProperty.call(e,l)},t.p="",t(t.s=1)}([function(e,l){!function(){e.exports=this.wp.element}()},function(e,l,t){"use strict";t.r(l);var n,o,r,a,i,c,u,p,b=t(0);window.wp.blocks,window.wp.element,window.wp.editor,window.wp.components,n=wp.blocks.registerBlockType,o=wp.blockEditor.InspectorControls,r=wp.components,a=r.ToggleControl,i=r.PanelBody,r.PanelRow,c=r.SelectControl,u=r.RangeControl,p=wp.serverSideRender,n("happyfiles/gallery",{title:window.happyFiles.l10n.block.gallery.title,description:window.happyFiles.l10n.block.gallery.description,icon:"images-alt2",category:"happyfiles",attributes:{columns:{type:"number",default:3},max:{type:"number"},categories:{type:"array"},orderBy:{type:"string",default:"date"},order:{type:"string",default:"DESC"},imageSize:{type:"string",default:"medium"},linkTo:{type:"string",default:"none"},includeChildren:{type:"boolean",default:!1},crop:{type:"boolean",default:!0},caption:{type:"boolean",default:!1},lightbox:{type:"boolean",default:!1},lightboxFullscreen:{type:"boolean",default:!1},lightboxThumbnails:{type:"boolean",default:!1},lightboxZoom:{type:"boolean",default:!1}},edit:function(e){var l=e.attributes,t=e.setAttributes;return e.className,Object(b.createElement)("div",null,Object(b.createElement)(o,null,Object(b.createElement)(i,{title:happyFiles.l10n.block.gallery.settingsTitle,initialOpen:!0},Object(b.createElement)(u,{label:happyFiles.l10n.block.gallery.columns,value:l.columns,min:1,max:6,onChange:function(e){return t({columns:e})}}),Object(b.createElement)(u,{label:happyFiles.l10n.block.gallery.maxNumberOfImages,value:l.max,min:1,onChange:function(e){return t({max:e})}}),Object(b.createElement)(c,{multiple:!0,label:happyFiles.l10n.block.gallery.categories,help:happyFiles.l10n.block.gallery.categoriesHelp,value:l.categories,size:happyFiles.terms.length<=10?happyFiles.terms.length:10,options:happyFiles.terms.filter((function(e){return e.term_id>0})).map((function(e){return{value:e.term_id,label:(e.parent?"- "+e.name:e.name)+" ("+e.count+")"}})),onChange:function(e){return t({categories:e})}}),Object(b.createElement)(c,{label:happyFiles.l10n.block.gallery.orderBy,value:l.orderBy,options:Object.keys(happyFiles.orderBy).map((function(e){return{value:e,label:happyFiles.orderBy[e]}})),onChange:function(e){return t({orderBy:e})}}),Object(b.createElement)(c,{label:happyFiles.l10n.block.gallery.order,value:l.order,options:Object.keys(happyFiles.order).map((function(e){return{value:e,label:happyFiles.order[e]}})),onChange:function(e){return t({order:e})}}),Object(b.createElement)(c,{label:happyFiles.l10n.block.gallery.imageSize,value:l.imageSize,options:Object.keys(happyFiles.imageSizes).map((function(e){return{value:e,label:happyFiles.imageSizes[e]}})),onChange:function(e){return t({imageSize:e})}}),Object(b.createElement)(c,{label:happyFiles.l10n.block.gallery.linkTo,value:l.linkTo,options:Object.keys(happyFiles.linkTo).map((function(e){return{value:e,label:happyFiles.linkTo[e]}})),onChange:function(e){return t({linkTo:e})}}),Object(b.createElement)(a,{label:happyFiles.l10n.block.gallery.includeChildren,checked:l.includeChildren,onChange:function(e){return t({includeChildren:e})}}),Object(b.createElement)(a,{label:happyFiles.l10n.block.gallery.crop,checked:l.crop,onChange:function(e){return t({crop:e})}}),Object(b.createElement)(a,{label:happyFiles.l10n.block.gallery.caption,checked:l.caption,onChange:function(e){return t({caption:e})}}),Object(b.createElement)(a,{label:happyFiles.l10n.block.gallery.lightbox,checked:l.lightbox,onChange:function(e){return t({lightbox:e})}}),l.lightbox?Object(b.createElement)(a,{label:happyFiles.l10n.block.gallery.lightboxFullscreen,checked:l.lightboxFullscreen,onChange:function(e){return t({lightboxFullscreen:e})}}):null,l.lightbox?Object(b.createElement)(a,{label:happyFiles.l10n.block.gallery.lightboxThumbnails,checked:l.lightboxThumbnails,onChange:function(e){return t({lightboxThumbnails:e})}}):null,l.lightbox?Object(b.createElement)(a,{label:happyFiles.l10n.block.gallery.lightboxZoom,checked:l.lightboxZoom,onChange:function(e){return t({lightboxZoom:e})}}):null)),Object(b.createElement)(p,{block:"happyfiles/gallery",attributes:l}))},save:function(e){return null}})}]);
  • happyfiles/trunk/assets/css/admin.min.css

    r2370842 r2388764  
    1 #happyfiles-settings-tabs{margin:0 0 30px;text-transform:capitalize}#happyfiles-settings-tabs li{margin:0}#happyfiles-settings-wrapper table{display:none;max-width:1280px}#happyfiles-settings-wrapper table.active{display:table}#happyfiles-settings-wrapper table tbody{background-color:#fff;border-top:1px solid #ccd0d4;border-left:1px solid #ccd0d4}#happyfiles-settings-wrapper table tbody th,#happyfiles-settings-wrapper table tbody td{padding:20px;border-right:1px solid #ccd0d4;border-bottom:1px solid #ccd0d4}#happyfiles-settings-wrapper table tbody .description{margin:.5em 0 0;font-size:13px;color:#939393}#happyfiles-settings-wrapper table tfoot td{padding-right:0;padding-left:0}#happyfiles-settings-wrapper table tfoot .delete{text-align:right}#happyfiles-settings-wrapper table tfoot .delete button{color:#fff;background-color:crimson;border-color:crimson}#tab-import th{width:240px}#tab-import .spinner:not(.is-active){width:0;height:0;margin:0}#tab-import .spinner{margin-right:0}#tab-import .happyfiles-import{margin-right:10px}#tab-import .happyfiles-delete:hover{color:#fff;background-color:crimson;border-color:crimson}#tab-import .message{display:flex;align-items:center;justify-content:space-between}#tab-import .message.success{padding:15px;color:#11b76b;background-color:#e6f6ed}#tab-import .message.success .button{color:#fff;background-color:#11b76b;border-color:#11b76b}.hf-notice{display:flex;align-items:center;justify-content:space-between;padding:0 12px !important}.hf-notice .button{margin:0 .5em 0;font-weight:700}.hf-notice .notice-dismiss{position:relative;padding:0}
     1#happyfiles-settings-tabs{margin:0 0 30px;text-transform:capitalize}#happyfiles-settings-tabs li{margin:0}#happyfiles-settings-wrapper table{display:none;max-width:1280px}#happyfiles-settings-wrapper table.active{display:table}#happyfiles-settings-wrapper table tbody{background-color:#fff;border-top:1px solid #ccd0d4;border-left:1px solid #ccd0d4}#happyfiles-settings-wrapper table tbody th,#happyfiles-settings-wrapper table tbody td{padding:20px;border-right:1px solid #ccd0d4;border-bottom:1px solid #ccd0d4}#happyfiles-settings-wrapper table tbody .description{margin:.5em 0 0;font-size:13px;color:#939393}#happyfiles-settings-wrapper table tfoot td{padding-right:0;padding-left:0}#happyfiles-settings-wrapper table tfoot .delete{text-align:right}#happyfiles-settings-wrapper table tfoot .delete button{color:#fff;background-color:crimson;border-color:crimson}#happyfiles-settings-wrapper table .message{margin-top:1em}#happyfiles-settings-wrapper table .message a{color:currentColor}#happyfiles-settings-wrapper table .message.hf-success{color:#11b76b}#happyfiles-settings-wrapper table .message.hf-error{color:crimson}#happyfiles-settings-wrapper #tab-general th{text-transform:capitalize}#happyfiles-settings-wrapper #tab-import th{width:260px}#happyfiles-settings-wrapper #tab-import .spinner:not(.is-active){width:0;height:0;margin:0}#happyfiles-settings-wrapper #tab-import .spinner{margin-right:0}#happyfiles-settings-wrapper #tab-import .happyfiles-import{margin-right:10px}#happyfiles-settings-wrapper #tab-import .happyfiles-delete:hover{color:#fff;background-color:crimson;border-color:crimson}#happyfiles-settings-wrapper #tab-import .message{display:flex;align-items:center;justify-content:space-between}#happyfiles-settings-wrapper #tab-import .message.success{padding:15px;color:#11b76b;background-color:#e6f6ed}#happyfiles-settings-wrapper #tab-import .message.success .button{color:#fff;background-color:#11b76b;border-color:#11b76b}.hf-notice{display:flex;align-items:center;justify-content:space-between;padding:0 12px !important}.hf-notice .button{margin:0 .5em 0;font-weight:700}.hf-notice .notice-dismiss{position:relative;padding:0}
  • happyfiles/trunk/assets/css/hf.min.css

    r2371420 r2388764  
    1 select[id=happyfiles_category],select.happyfiles-filter{display:none !important}#hf-wrapper{display:flex;width:100%}#hf-wrapper #hf-sidebar-wrapper{display:block}#hf-wrapper #hf-sidebar-wrapper+.wrap{flex:1}#hf-wrapper #hf-sidebar-wrapper+.wrap .wp-heading-inline{padding:0}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments{margin:0 -8px}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachment:focus{outline:none;box-shadow:none}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser{display:flex;flex-direction:column}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .media-toolbar{order:1}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .no-media,#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .media-sidebar{order:2}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .uploader-inline{order:3;margin-top:15px}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .attachments{order:4}#hf-wrapper #hf-sidebar-wrapper+.wrap #the-list tr img{cursor:move}#hf-sidebar-wrapper{position:relative;z-index:1;display:none;width:300px;margin-left:0;margin-right:30px;font-weight:500;color:#444}#hf-sidebar-wrapper.minimize:not(.modal){width:0 !important}#hf-sidebar-wrapper.minimize:not(.modal) .title-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) .toolbar-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-new-category-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-no-category-notification-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-upgrade-notification-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-categories-wrapper{display:none}#hf-sidebar-wrapper.minimize:not(.modal) #hf-resizable{cursor:default;right:18px !important}#hf-sidebar-wrapper.minimize:not(.modal) #hf-resizable:after{display:none}#hf-sidebar-wrapper.minimize:not(.modal) #hf-toggle{display:block !important;transform:scaleX(-1)}#hf-sidebar-wrapper.minimize:not(.modal)+.wrap{width:calc(100% - 52px) !important}#hf-sidebar-wrapper.minimize:not(.modal)+.acf-columns-2{width:calc(100% - 332px) !important}#hf-sidebar-wrapper i{transition:none}#hf-sidebar-wrapper .title-wrapper{display:flex;justify-content:space-between;align-items:center;position:relative}#hf-sidebar-wrapper .title-wrapper .title{font-size:23px;font-weight:400;margin:0;line-height:1.3}#hf-sidebar-wrapper #hf-sort-toggle{width:24px;opacity:.5;cursor:pointer}#hf-sidebar-wrapper #hf-sort-toggle:hover{opacity:1}#hf-sidebar-wrapper .toolbar-wrapper{position:relative;display:flex;flex-wrap:wrap;align-items:center;margin:12px 0 25px;padding:5px;color:#666;background-color:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0,0,0,0.04);min-height:42px}#hf-sidebar-wrapper .toolbar-wrapper:hover{color:inherit}#hf-sidebar-wrapper .toolbar-wrapper.info{justify-content:center;color:#fff;background-color:#007cba;border-color:#007cba;box-shadow:none}#hf-sidebar-wrapper .toolbar-wrapper .button{flex-basis:85px;display:flex;align-items:center;margin:5px;padding:0 8px;color:currentColor;letter-spacing:0;line-height:30px;text-transform:none;background-color:#f3f5f6;border-color:#ccd0d4;box-sizing:border-box}#hf-sidebar-wrapper .toolbar-wrapper .button:hover{border-color:currentColor}#hf-sidebar-wrapper .toolbar-wrapper .button:hover i{color:currentColor}#hf-sidebar-wrapper .toolbar-wrapper .button:last-child{margin-right:0}#hf-sidebar-wrapper .toolbar-wrapper .button i{width:auto;height:auto;margin-right:5px;font-size:14px;color:#939393}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper{opacity:0;position:absolute;left:-1px;right:-1px;bottom:-10px;height:10px;background-color:#ccd0d4}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper:after{content:"";position:absolute;height:100%;width:0;background-color:#42b883;transition:width 5s}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploading{opacity:1}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploading::after{width:90%}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploaded{visibility:hidden;transition:visibility 1s}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploaded::after{transition:width 1s;width:100%}#hf-sidebar-wrapper #hf-new-category-wrapper{display:none;margin:0 0 15px;padding:15px 0;background-color:transparent !important;border-top:1px solid #ccd0d4;border-bottom:1px solid #ccd0d4}#hf-sidebar-wrapper #hf-new-category-wrapper input{flex:1;margin-right:5px;color:inherit;border:1px solid #7e8993;border-radius:4px;background-color:#fff}#hf-sidebar-wrapper #hf-new-category-wrapper input+button{margin-right:5px}#hf-sidebar-wrapper #hf-new-category-wrapper.show{display:flex}#hf-sidebar-wrapper #hf-new-category-wrapper>*{padding:0 8px;font-size:inherit;font-weight:inherit;line-height:30px;text-transform:none}#hf-no-category-notification-wrapper{margin-bottom:15px;padding:20px;font-size:14px;font-weight:400;color:#fff;text-align:center;background-color:#007cba}#hf-upgrade-notification-wrapper{display:none;margin-bottom:25px;padding:20px;font-weight:400;color:#fff;text-align:center;background-color:#42b883}#hf-upgrade-notification-wrapper.show{display:block}#hf-upgrade-notification-wrapper .title{margin:0 0 15px;font-size:21px;font-weight:500;color:#fff}#hf-upgrade-notification-wrapper p{margin:0 0 20px;font-size:14px}#hf-upgrade-notification-wrapper a{display:block;padding:0 10px;font-size:16px;font-weight:700;color:#444;letter-spacing:.2px;line-height:50px;text-decoration:none;text-transform:uppercase;background-color:#fff;border-radius:50px;outline:none;box-shadow:0 2px 8px 0 rgba(0,0,0,0.25)}#hf-upgrade-notification-wrapper a:hover{box-shadow:0 2px 8px 0 rgba(0,0,0,0.5)}#hf-dragging-wrapper{display:none;position:fixed;top:50%;left:50%;z-index:-1;padding:0 7px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;font-weight:600;line-height:30px;text-transform:capitalize;color:#fff;background-color:#23282D;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.04);cursor:grab}#hf-dragging-wrapper.show{display:block;z-index:99999999}.attachments li .attachment-preview{pointer-events:none}.media-frame-tab-panel[aria-labelledby="menu-item-gallery-edit"] #happyfiles_category{display:none}.media-frame-tab-panel[aria-labelledby="menu-item-gallery-edit"] .attachment-preview{pointer-events:all}#hf-term-action-wrapper{display:none;position:fixed;z-index:-1;top:75%;left:50%;line-height:40px;color:#fff;background:#23282D;cursor:pointer}#hf-term-action-wrapper.show{display:block;z-index:999999}#hf-term-action-wrapper i{height:40px;width:40px;line-height:inherit}#hf-term-action-wrapper #hf-confirm{background-color:#42b883}.hf-tree-wrapper{position:relative;margin:0;padding:0;overflow:hidden;list-style:none}.hf-tree-wrapper li{display:flex;flex-wrap:wrap;position:relative;margin-bottom:0;line-height:40px;outline:none}.hf-tree-wrapper li>div{cursor:pointer}.hf-tree-wrapper li.all,.hf-tree-wrapper li.uncategorized{margin-left:0}.hf-tree-wrapper li.all .icon:before{content:"\62" !important}.hf-tree-wrapper li.uncategorized .icon:before{content:"\65"}.hf-tree-wrapper li.uncategorized{margin-top:5px;margin-bottom:20px}.hf-tree-wrapper li.uncategorized:before{content:"";position:absolute;bottom:-10px;width:100%;height:1px;background-color:#ccd0d4}.hf-tree-wrapper li.has-children>.icon:before{cursor:pointer;content:"\64"}.hf-tree-wrapper li.has-children.open>.icon:before{cursor:pointer;content:"\63"}.hf-tree-wrapper li.rename[data-count]:after,.hf-tree-wrapper li.rename>.icon{opacity:0}.hf-tree-wrapper li.rename>.term{text-overflow:initial;background-color:#fff;box-shadow:inset 0 0 0 1px #42b883}.hf-tree-wrapper li.droppable[data-count]:after{color:#42b883 !important;background-color:#fff !important}.hf-tree-wrapper li.droppable>div{color:#fff}.hf-tree-wrapper li.droppable>.term{background-color:#42b883 !important}.hf-tree-wrapper li:hover>.icon::before{opacity:1}.hf-tree-wrapper li[data-count]:after{position:absolute;top:20px;right:10px;height:18px;min-width:14px;padding:0 3px;line-height:18px;font-size:10px;font-weight:600;text-align:center;background-color:#e1e1e1;border-radius:2px;transform:translate(0, -50%);content:attr(data-count)}.hf-tree-wrapper .open>ul>li{display:block}.hf-tree-wrapper .active[data-count]:after{color:#fff;background-color:#23282D}.hf-tree-wrapper .active>.icon:before{opacity:1}.hf-tree-wrapper .active>.term{font-weight:700;cursor:default;background-color:#e6e6e6}.hf-tree-wrapper .icon{position:absolute;z-index:1;top:1px;left:0;font-family:'happyfiles';width:40px;font-size:16px;text-align:center}.hf-tree-wrapper .icon:before{content:"\65";opacity:.5}.hf-tree-wrapper .icon:hover+.term{background-color:#e6e6e6}.hf-tree-wrapper .term{flex:1;position:relative;line-height:40px;padding:0 40px;text-overflow:ellipsis;overflow:hidden;outline:none;white-space:nowrap}.hf-tree-wrapper .term:hover{background-color:#e6e6e6}.hf-tree-wrapper ul{width:100%;width:calc(100% - 30px);margin:5px 0 0 30px;padding:0}.hf-tree-wrapper ul>li{display:none}.uploader-window.hide{display:none !important}.hf-sortable-ghost{display:flex !important;list-style:none;border:1px dashed #939393;height:40px}.hf-sortable-ghost:after{opacity:0}.hf-sortable-ghost>*{display:none;opacity:0}.hf-sortable-drag{opacity:.5;list-style:none;width:100%}.hf-sortable-drag:after{opacity:0}.hf-sortable-drag ul{display:none}.media-router .media-menu-item:focus{box-shadow:none}body.upload-php #hf-sidebar-wrapper,body.edit-php #hf-sidebar-wrapper{position:fixed;height:100%;margin-right:-30px;padding:0 30px 0 0;overflow:hidden}body.upload-php #hf-sidebar-wrapper+.wrap,body.edit-php #hf-sidebar-wrapper+.wrap{flex:none !important;margin-left:auto !important}body.upload-php #hf-sidebar-inner,body.edit-php #hf-sidebar-inner{float:left;width:100%}body.upload-php #hf-categories-wrapper,body.edit-php #hf-categories-wrapper{overflow-y:scroll;list-style:none}body.upload-php #hf-categories-wrapper::-webkit-scrollbar,body.edit-php #hf-categories-wrapper::-webkit-scrollbar{width:0;background:transparent}body.upload-php #hf-resizable,body.edit-php #hf-resizable{float:right;position:absolute;right:12px;top:0;bottom:0;width:5px;cursor:ew-resize;backface-visibility:hidden}body.upload-php #hf-resizable:after,body.edit-php #hf-resizable:after{position:absolute;right:2px;width:1px;height:100%;border-right:1px solid #ccd0d4;content:""}body.upload-php #hf-resizable:hover:after,body.edit-php #hf-resizable:hover:after{border-right:1px dashed #444}body.upload-php #hf-resizable:hover #hf-toggle,body.edit-php #hf-resizable:hover #hf-toggle{display:block}@media (max-width: 991px){body.upload-php #hf-wrapper,body.edit-php #hf-wrapper{display:block}body.upload-php #hf-wrapper #hf-sidebar-wrapper,body.edit-php #hf-wrapper #hf-sidebar-wrapper{position:relative;width:calc(100% - 10px) !important;margin:0 0 30px;padding:0}body.upload-php #hf-wrapper #hf-sidebar-wrapper+.wrap,body.edit-php #hf-wrapper #hf-sidebar-wrapper+.wrap{position:relative;width:calc(100% - 10px) !important}body.upload-php #hf-wrapper #hf-sidebar-wrapper .toolbar-wrapper,body.edit-php #hf-wrapper #hf-sidebar-wrapper .toolbar-wrapper{margin:10px 0}body.upload-php #hf-wrapper #hf-resizable,body.edit-php #hf-wrapper #hf-resizable{display:none !important}}.woocommerce-embed-page #hf-wrapper{margin:20px 20px 0;width:auto}.woocommerce-embed-page #hf-sidebar-wrapper+.wrap{padding:0}#hf-toggle{display:none;position:absolute;z-index:1;top:56px;right:-8px;width:20px;color:#fff;line-height:20px;text-align:center;background:#444;cursor:pointer}tr[data-slug=happyfiles] a.happyfiles-go-pro{font-weight:700;color:#ec008c}@font-face{font-family:"happyfiles";src:url("../fonts/happyfiles.eot");src:url("../fonts/happyfiles.eot?#iefix") format("embedded-opentype"),url("../fonts/happyfiles.woff") format("woff"),url("../fonts/happyfiles.ttf") format("truetype"),url("../fonts/happyfiles.svg#happyfiles") format("svg");font-weight:normal;font-style:normal}#hf-sidebar-wrapper .icon:before{font-family:"happyfiles" !important;font-style:normal !important;font-weight:normal !important;font-variant:normal !important;text-transform:none !important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.hf-icon-folder-open:before{content:"\61"}.hf-icon-folder-fill:before{content:"\62"}.hf-icon-folder-minus:before{content:"\63"}.hf-icon-folder-plus:before{content:"\64"}.hf-icon-folder:before{content:"\65"}.hf-icon-add:before{content:"\66"}.hf-icon-edit:before{content:"\67"}.hf-icon-trash:before{content:"\68"}.hf-icon-trash-fill:before{content:"\69"}#hf-sidebar-wrapper.modal{display:block !important;width:300px;margin:0;padding:20px 20px 0;background-color:#f3f3f3;border-right:1px solid #ccc}#hf-sidebar-wrapper.modal .title-wrapper .title{font-size:22px;font-weight:600;line-height:2.27272727;margin:0}#hf-sidebar-wrapper.modal .toolbar-wrapper{margin-top:34px}.media-frame-content #hf-category-upload-wrapper{display:none !important}.hf-view #hf-sidebar-wrapper .toolbar-wrapper{margin-top:0}.hf-view.hide-menu .media-frame-menu{display:block !important}.hf-view.media-frame{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.hf-view.media-frame::-webkit-scrollbar{width:0;background:transparent}.hf-view .media-frame-menu{width:341px}.hf-view .media-frame-title,.hf-view .media-frame-content,.hf-view .media-frame-router,.hf-view .media-frame-toolbar{left:341px !important}.hf-view .media-toolbar-secondary select.attachment-filters{max-width:32% !important}#hf-feedback-form-wrapper{display:none;justify-content:center;align-items:center;position:fixed;z-index:9999;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,0.75);user-select:none}#hf-feedback-form-wrapper.show{display:flex !important}#hf-feedback-form-inner{width:540px;max-width:90%;background-color:#fff;border-radius:4px;box-shadow:4px 4px 24px rgba(0,0,0,0.25)}#hf-feedback-form-inner .hf-title{margin:0 0 30px;padding:20px 30px;letter-spacing:.2px;text-transform:uppercase;box-shadow:0 0 10px rgba(0,0,0,0.1)}#hf-feedback-form-inner .hf-description{margin:0 30px;font-size:15px;font-weight:600}#hf-feedback-form{margin:30px}#hf-feedback-form fieldset{margin:0 0 15px}#hf-feedback-form fieldset .reason{display:flex;align-items:center}#hf-feedback-form input[type=radio]{min-width:14px;width:14px;height:14px;margin:0 7px 0 0}#hf-feedback-form input[type=radio]:checked::before{width:6px;height:6px;margin:3px;background-color:#ec008c}#hf-feedback-form input[type=radio]:checked+label{opacity:1;font-weight:500}#hf-feedback-form input[type=radio]:checked,#hf-feedback-form input[type=radio]:focus{border-color:#ec008c;box-shadow:none}#hf-feedback-form label{width:100%;opacity:.8}#hf-feedback-form label:hover{opacity:1}#hf-feedback-form p,#hf-feedback-form input[type=text]{display:none;width:calc(100% - 30px);margin:10px 0 5px 20px}#hf-feedback-form p.show,#hf-feedback-form input[type=text].show{display:block}#hf-feedback-form-sumbit-wrapper{display:flex;justify-content:space-between;align-items:center;margin:30px 0 0}#hf-feedback-form-sumbit-wrapper button{min-height:40px;padding:0 20px;border:none;box-shadow:none !important;outline:none}#hf-feedback-form-sumbit-wrapper .button-primary{background-color:#ec008c;text-transform:uppercase;font-weight:700;letter-spacing:0.4px}#hf-feedback-form-sumbit-wrapper .button-secondary{padding:0;color:#9e9e9e;background-color:transparent;border:none}#hf-context-menu-sort-wrapper,#hf-context-menu-categories-wrapper,#hf-context-menu-wrapper{z-index:99999999;position:fixed;top:50%;left:50%;margin:0;padding:0;list-style-type:none;background-color:#fff;border-radius:2px;box-shadow:0 0 4px 0 rgba(0,0,0,0.25);display:none}#hf-context-menu-sort-wrapper.show,#hf-context-menu-categories-wrapper.show,#hf-context-menu-wrapper.show{display:block}#hf-context-menu-sort-wrapper li,#hf-context-menu-categories-wrapper li,#hf-context-menu-wrapper li{margin:0;padding:0 20px;font-size:12px;font-weight:400;line-height:36px;color:#616161;border-bottom:1px solid #ccd0d4;cursor:pointer}#hf-context-menu-sort-wrapper li:last-child,#hf-context-menu-categories-wrapper li:last-child,#hf-context-menu-wrapper li:last-child{border:none}#hf-context-menu-sort-wrapper li:hover,#hf-context-menu-categories-wrapper li:hover,#hf-context-menu-wrapper li:hover{background-color:#e6e6e6}#hf-context-menu-sort-wrapper li.disabled,#hf-context-menu-categories-wrapper li.disabled,#hf-context-menu-wrapper li.disabled{color:#939393;cursor:default}#hf-context-menu-sort-wrapper{position:absolute;top:40px;right:0;left:0;border:1px solid #ccd0d4;box-shadow:none}
     1select[id=happyfiles_category],select.happyfiles-filter{display:none !important}#hf-wrapper{display:flex;width:100%}#hf-wrapper #hf-sidebar-wrapper{display:block}#hf-wrapper #hf-sidebar-wrapper+.wrap{flex:1}#hf-wrapper #hf-sidebar-wrapper+.wrap .wp-heading-inline{padding:0}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments{margin:0 -8px}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachment:focus{outline:none;box-shadow:none}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser{display:flex;flex-direction:column}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .media-toolbar{order:1}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .no-media,#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .media-sidebar{order:2}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .uploader-inline{order:3;margin-top:15px}#hf-wrapper #hf-sidebar-wrapper+.wrap .attachments-browser .attachments{order:4}#hf-wrapper #hf-sidebar-wrapper+.wrap #the-list tr img{cursor:move}#hf-sidebar-wrapper{position:relative;z-index:1;display:none;width:300px;margin-left:0;margin-right:30px;font-weight:500;color:#444}#hf-sidebar-wrapper.minimize:not(.modal){width:0 !important}#hf-sidebar-wrapper.minimize:not(.modal) .title-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) .toolbar-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-new-category-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-no-category-notification-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-upgrade-notification-wrapper,#hf-sidebar-wrapper.minimize:not(.modal) #hf-categories-wrapper{display:none}#hf-sidebar-wrapper.minimize:not(.modal) #hf-resizable{cursor:default;right:18px !important}#hf-sidebar-wrapper.minimize:not(.modal) #hf-resizable:after{display:none}#hf-sidebar-wrapper.minimize:not(.modal) #hf-toggle{display:block !important;transform:scaleX(-1)}#hf-sidebar-wrapper.minimize:not(.modal)+.wrap{width:calc(100% - 52px) !important}#hf-sidebar-wrapper.minimize:not(.modal)+.acf-columns-2{width:calc(100% - 332px) !important}#hf-sidebar-wrapper i{transition:none}#hf-sidebar-wrapper .title-wrapper{display:flex;justify-content:space-between;align-items:center;position:relative}#hf-sidebar-wrapper .title-wrapper .title{font-size:23px;font-weight:400;margin:0;line-height:1.3}#hf-sidebar-wrapper #hf-sort-toggle{width:24px;opacity:.5;cursor:pointer}#hf-sidebar-wrapper #hf-sort-toggle:hover{opacity:1}#hf-sidebar-wrapper .toolbar-wrapper{position:relative;display:flex;flex-wrap:wrap;align-items:center;margin:12px 0 25px;padding:5px;color:#666;background-color:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0,0,0,0.04);min-height:42px}#hf-sidebar-wrapper .toolbar-wrapper:hover{color:inherit}#hf-sidebar-wrapper .toolbar-wrapper.info{justify-content:center;color:#fff;background-color:#007cba;border-color:#007cba;box-shadow:none}#hf-sidebar-wrapper .toolbar-wrapper .button{flex-basis:85px;display:flex;align-items:center;margin:5px;padding:0 8px;color:currentColor;letter-spacing:0;line-height:30px;text-transform:none;background-color:#f3f5f6;border-color:#ccd0d4;box-sizing:border-box}#hf-sidebar-wrapper .toolbar-wrapper .button:hover{border-color:currentColor}#hf-sidebar-wrapper .toolbar-wrapper .button:hover i{color:currentColor}#hf-sidebar-wrapper .toolbar-wrapper .button:last-child{margin-right:0}#hf-sidebar-wrapper .toolbar-wrapper .button i{width:auto;height:auto;margin-right:5px;font-size:14px;color:#939393}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper{opacity:0;position:absolute;left:-1px;right:-1px;bottom:-10px;height:10px;background-color:#ccd0d4}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper:after{content:"";position:absolute;height:100%;width:0;background-color:#42b883;transition:width 5s}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploading{opacity:1}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploading::after{width:90%}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploaded{visibility:hidden;transition:visibility 1s}#hf-sidebar-wrapper .toolbar-wrapper #hf-upload-wrapper.is-uploaded::after{transition:width 1s;width:100%}#hf-sidebar-wrapper #hf-new-category-wrapper{display:none;margin:0 0 15px;padding:15px 0;background-color:transparent !important;border-top:1px solid #ccd0d4;border-bottom:1px solid #ccd0d4}#hf-sidebar-wrapper #hf-new-category-wrapper input{flex:1;margin-right:5px;color:inherit;border:1px solid #7e8993;border-radius:4px;background-color:#fff}#hf-sidebar-wrapper #hf-new-category-wrapper input+button{margin-right:5px}#hf-sidebar-wrapper #hf-new-category-wrapper.show{display:flex}#hf-sidebar-wrapper #hf-new-category-wrapper>*{padding:0 8px;font-size:inherit;font-weight:inherit;line-height:30px;text-transform:none}#hf-no-category-notification-wrapper{margin-bottom:15px;padding:20px;font-size:14px;font-weight:400;color:#fff;text-align:center;background-color:#007cba}#hf-upgrade-notification-wrapper{display:none;margin-bottom:25px;padding:20px;font-weight:400;color:#fff;text-align:center;background-color:#42b883}#hf-upgrade-notification-wrapper.show{display:block}#hf-upgrade-notification-wrapper .title{margin:0 0 15px;font-size:21px;font-weight:500;color:#fff}#hf-upgrade-notification-wrapper p{margin:0 0 20px;font-size:14px}#hf-upgrade-notification-wrapper a{display:block;padding:0 10px;font-size:16px;font-weight:700;color:#444;letter-spacing:.2px;line-height:50px;text-decoration:none;text-transform:uppercase;background-color:#fff;border-radius:50px;outline:none;box-shadow:0 2px 8px 0 rgba(0,0,0,0.25)}#hf-upgrade-notification-wrapper a:hover{box-shadow:0 2px 8px 0 rgba(0,0,0,0.5)}#hf-dragging-wrapper{display:none;position:fixed;top:50%;left:50%;z-index:-1;padding:0 7px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;font-weight:600;line-height:30px;text-transform:capitalize;color:#fff;background-color:#23282D;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.04);cursor:grab}#hf-dragging-wrapper.show{display:block;z-index:99999999}.attachments li .attachment-preview{pointer-events:none}.media-frame-tab-panel[aria-labelledby="menu-item-gallery-edit"] #happyfiles_category{display:none}.media-frame-tab-panel[aria-labelledby="menu-item-gallery-edit"] .attachment-preview{pointer-events:all}.edit-attachment-frame .details-image[src$=".svg"],.attachment-preview img[src$=".svg"]{width:100% !important;height:auto !important}#hf-term-action-wrapper{display:none;position:fixed;z-index:-1;top:75%;left:50%;line-height:40px;color:#fff;background:#23282D;cursor:pointer}#hf-term-action-wrapper.show{display:block;z-index:999999}#hf-term-action-wrapper i{height:40px;width:40px;line-height:inherit}#hf-term-action-wrapper #hf-confirm{background-color:#42b883}.hf-tree-wrapper{position:relative;margin:0;padding:0;overflow:hidden;list-style:none}.hf-tree-wrapper li{display:flex;flex-wrap:wrap;position:relative;margin-bottom:0;line-height:40px;outline:none}.hf-tree-wrapper li>div{cursor:pointer}.hf-tree-wrapper li.all,.hf-tree-wrapper li.uncategorized{margin-left:0}.hf-tree-wrapper li.all .icon:before{content:"\62" !important}.hf-tree-wrapper li.uncategorized .icon:before{content:"\65"}.hf-tree-wrapper li.uncategorized{margin-top:5px;margin-bottom:20px}.hf-tree-wrapper li.uncategorized:before{content:"";position:absolute;bottom:-10px;width:100%;height:1px;background-color:#ccd0d4}.hf-tree-wrapper li.has-children>.icon:before{cursor:pointer;content:"\64"}.hf-tree-wrapper li.has-children.open>.icon:before{cursor:pointer;content:"\63"}.hf-tree-wrapper li.rename[data-count]:after,.hf-tree-wrapper li.rename>.icon{opacity:0}.hf-tree-wrapper li.rename>.term{text-overflow:initial;background-color:#fff;box-shadow:inset 0 0 0 1px #42b883}.hf-tree-wrapper li.droppable[data-count]:after{color:#42b883 !important;background-color:#fff !important}.hf-tree-wrapper li.droppable>div{color:#fff}.hf-tree-wrapper li.droppable>.term{background-color:#42b883 !important}.hf-tree-wrapper li:hover>.icon::before{opacity:1}.hf-tree-wrapper li[data-count]:after{position:absolute;top:20px;right:10px;height:18px;min-width:14px;padding:0 3px;line-height:18px;font-size:10px;font-weight:600;text-align:center;background-color:#e1e1e1;border-radius:2px;transform:translate(0, -50%);content:attr(data-count)}.hf-tree-wrapper .open>ul>li{display:block}.hf-tree-wrapper .active[data-count]:after{color:#fff;background-color:#23282D}.hf-tree-wrapper .active>.icon:before{opacity:1}.hf-tree-wrapper .active>.term{font-weight:700;cursor:default;background-color:#e6e6e6}.hf-tree-wrapper .icon{position:absolute;z-index:1;top:1px;left:0;font-family:'happyfiles';width:40px;font-size:16px;text-align:center}.hf-tree-wrapper .icon:before{content:"\65";opacity:.5}.hf-tree-wrapper .icon:hover+.term{background-color:#e6e6e6}.hf-tree-wrapper .term{flex:1;position:relative;line-height:40px;padding:0 40px;text-overflow:ellipsis;overflow:hidden;outline:none;white-space:nowrap}.hf-tree-wrapper .term:hover{background-color:#e6e6e6}.hf-tree-wrapper ul{width:100%;width:calc(100% - 30px);margin:5px 0 0 30px;padding:0}.hf-tree-wrapper ul>li{display:none}.uploader-window.hide{display:none !important}.hf-sortable-ghost{display:flex !important;list-style:none;border:1px dashed #939393;height:40px}.hf-sortable-ghost:after{opacity:0}.hf-sortable-ghost>*{display:none;opacity:0}.hf-sortable-drag{opacity:.5;list-style:none;width:100%}.hf-sortable-drag:after{opacity:0}.hf-sortable-drag ul{display:none}.media-router .media-menu-item:focus{box-shadow:none}body.upload-php #hf-sidebar-wrapper,body.edit-php #hf-sidebar-wrapper{position:fixed;height:100%;margin-right:-30px;padding:0 30px 0 0;overflow:hidden}body.upload-php #hf-sidebar-wrapper+.wrap,body.edit-php #hf-sidebar-wrapper+.wrap{flex:none !important;margin-left:auto !important}body.upload-php #hf-sidebar-inner,body.edit-php #hf-sidebar-inner{float:left;width:100%}body.upload-php #hf-categories-wrapper,body.edit-php #hf-categories-wrapper{overflow-y:scroll;list-style:none}body.upload-php #hf-categories-wrapper::-webkit-scrollbar,body.edit-php #hf-categories-wrapper::-webkit-scrollbar{width:0;background:transparent}body.upload-php #hf-resizable,body.edit-php #hf-resizable{float:right;position:absolute;right:12px;top:0;bottom:0;width:5px;cursor:ew-resize;backface-visibility:hidden}body.upload-php #hf-resizable:after,body.edit-php #hf-resizable:after{position:absolute;right:2px;width:1px;height:100%;border-right:1px solid #ccd0d4;content:""}body.upload-php #hf-resizable:hover:after,body.edit-php #hf-resizable:hover:after{border-right:1px dashed #444}body.upload-php #hf-resizable:hover #hf-toggle,body.edit-php #hf-resizable:hover #hf-toggle{display:block}@media (max-width: 991px){body.upload-php #hf-wrapper,body.edit-php #hf-wrapper{display:block}body.upload-php #hf-wrapper #hf-sidebar-wrapper,body.edit-php #hf-wrapper #hf-sidebar-wrapper{position:relative;width:calc(100% - 10px) !important;margin:0 0 30px;padding:0}body.upload-php #hf-wrapper #hf-sidebar-wrapper+.wrap,body.edit-php #hf-wrapper #hf-sidebar-wrapper+.wrap{position:relative;width:calc(100% - 10px) !important}body.upload-php #hf-wrapper #hf-sidebar-wrapper .toolbar-wrapper,body.edit-php #hf-wrapper #hf-sidebar-wrapper .toolbar-wrapper{margin:10px 0}body.upload-php #hf-wrapper #hf-resizable,body.edit-php #hf-wrapper #hf-resizable{display:none !important}}.woocommerce-embed-page #hf-wrapper{margin:20px 20px 0;width:auto}.woocommerce-embed-page #hf-sidebar-wrapper+.wrap{padding:0}#hf-toggle{display:none;position:absolute;z-index:1;top:56px;right:-8px;width:20px;color:#fff;line-height:20px;text-align:center;background:#444;cursor:pointer}tr[data-slug=happyfiles] a.happyfiles-go-pro{font-weight:700;color:#ec008c}@font-face{font-family:"happyfiles";src:url("../fonts/happyfiles.eot");src:url("../fonts/happyfiles.eot?#iefix") format("embedded-opentype"),url("../fonts/happyfiles.woff") format("woff"),url("../fonts/happyfiles.ttf") format("truetype"),url("../fonts/happyfiles.svg#happyfiles") format("svg");font-weight:normal;font-style:normal}#hf-sidebar-wrapper .icon:before{font-family:"happyfiles" !important;font-style:normal !important;font-weight:normal !important;font-variant:normal !important;text-transform:none !important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.hf-icon-folder-open:before{content:"\61"}.hf-icon-folder-fill:before{content:"\62"}.hf-icon-folder-minus:before{content:"\63"}.hf-icon-folder-plus:before{content:"\64"}.hf-icon-folder:before{content:"\65"}.hf-icon-add:before{content:"\66"}.hf-icon-edit:before{content:"\67"}.hf-icon-trash:before{content:"\68"}.hf-icon-trash-fill:before{content:"\69"}#hf-sidebar-wrapper.modal{display:block !important;width:300px;margin:0;padding:20px 20px 0;background-color:#f3f3f3;border-right:1px solid #ccc}#hf-sidebar-wrapper.modal .title-wrapper .title{font-size:22px;font-weight:600;line-height:2.27272727;margin:0}#hf-sidebar-wrapper.modal .toolbar-wrapper{margin-top:34px}.media-frame-content #hf-category-upload-wrapper{display:none !important}.hf-view #hf-sidebar-wrapper .toolbar-wrapper{margin-top:0}.hf-view.media-frame{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.hf-view.media-frame::-webkit-scrollbar{width:0;background:transparent}.hf-view .media-frame-menu{display:block !important;width:341px}.hf-view .media-frame-title,.hf-view .media-frame-content,.hf-view .media-frame-router,.hf-view .media-frame-toolbar{left:341px !important}.hf-view .media-toolbar-secondary select.attachment-filters{max-width:32% !important}#hf-feedback-form-wrapper{display:none;justify-content:center;align-items:center;position:fixed;z-index:9999;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,0.75);user-select:none}#hf-feedback-form-wrapper.show{display:flex !important}#hf-feedback-form-inner{width:540px;max-width:90%;background-color:#fff;border-radius:4px;box-shadow:4px 4px 24px rgba(0,0,0,0.25)}#hf-feedback-form-inner .hf-title{margin:0 0 30px;padding:20px 30px;letter-spacing:.2px;text-transform:uppercase;box-shadow:0 0 10px rgba(0,0,0,0.1)}#hf-feedback-form-inner .hf-description{margin:0 30px;font-size:15px;font-weight:600}#hf-feedback-form{margin:30px}#hf-feedback-form fieldset{margin:0 0 15px}#hf-feedback-form fieldset .reason{display:flex;align-items:center}#hf-feedback-form input[type=radio]{min-width:14px;width:14px;height:14px;margin:0 7px 0 0}#hf-feedback-form input[type=radio]:checked::before{width:6px;height:6px;margin:3px;background-color:#ec008c}#hf-feedback-form input[type=radio]:checked+label{opacity:1;font-weight:500}#hf-feedback-form input[type=radio]:checked,#hf-feedback-form input[type=radio]:focus{border-color:#ec008c;box-shadow:none}#hf-feedback-form label{width:100%;opacity:.8}#hf-feedback-form label:hover{opacity:1}#hf-feedback-form p,#hf-feedback-form input[type=text]{display:none;width:calc(100% - 30px);margin:10px 0 5px 20px}#hf-feedback-form p.show,#hf-feedback-form input[type=text].show{display:block}#hf-feedback-form-sumbit-wrapper{display:flex;justify-content:space-between;align-items:center;margin:30px 0 0}#hf-feedback-form-sumbit-wrapper button{min-height:40px;padding:0 20px;border:none;box-shadow:none !important;outline:none}#hf-feedback-form-sumbit-wrapper .button-primary{background-color:#ec008c;text-transform:uppercase;font-weight:700;letter-spacing:0.4px}#hf-feedback-form-sumbit-wrapper .button-secondary{padding:0;color:#9e9e9e;background-color:transparent;border:none}#hf-context-menu-sort-wrapper,#hf-context-menu-categories-wrapper,#hf-context-menu-wrapper{z-index:99999999;position:fixed;top:50%;left:50%;margin:0;padding:0;list-style-type:none;background-color:#fff;border-radius:2px;box-shadow:0 0 4px 0 rgba(0,0,0,0.25);display:none}#hf-context-menu-sort-wrapper.show,#hf-context-menu-categories-wrapper.show,#hf-context-menu-wrapper.show{display:block}#hf-context-menu-sort-wrapper li,#hf-context-menu-categories-wrapper li,#hf-context-menu-wrapper li{margin:0;padding:0 20px;font-size:12px;font-weight:400;line-height:36px;color:#616161;border-bottom:1px solid #ccd0d4;cursor:pointer}#hf-context-menu-sort-wrapper li:last-child,#hf-context-menu-categories-wrapper li:last-child,#hf-context-menu-wrapper li:last-child{border:none}#hf-context-menu-sort-wrapper li:hover,#hf-context-menu-categories-wrapper li:hover,#hf-context-menu-wrapper li:hover{background-color:#e6e6e6}#hf-context-menu-sort-wrapper li.disabled,#hf-context-menu-categories-wrapper li.disabled,#hf-context-menu-wrapper li.disabled{color:#939393;cursor:default}#hf-context-menu-sort-wrapper{position:absolute;top:40px;right:0;left:0;border:1px solid #ccd0d4;box-shadow:none}
  • happyfiles/trunk/assets/js/hf.min.js

    r2371420 r2388764  
    1111     * @author  owenm    <[email protected]>
    1212     * @license MIT
    13      */let pluginEvent=function(eventName,sortable,{evt:originalEvent,...data}={}){PluginManager.pluginEvent.bind(Sortable)(eventName,sortable,{dragEl:dragEl,parentEl:parentEl,ghostEl:ghostEl,rootEl:rootEl,nextEl:nextEl,lastDownEl:lastDownEl,cloneEl:cloneEl,cloneHidden:cloneHidden,dragStarted:moved,putSortable:putSortable,activeSortable:Sortable.active,originalEvent:originalEvent,oldIndex:oldIndex,oldDraggableIndex:oldDraggableIndex,newIndex:newIndex,newDraggableIndex:newDraggableIndex,hideGhostForTarget:_hideGhostForTarget,unhideGhostForTarget:_unhideGhostForTarget,cloneNowHidden(){cloneHidden=!0},cloneNowShown(){cloneHidden=!1},dispatchSortableEvent(name){_dispatchEvent({sortable:sortable,name:name,originalEvent:originalEvent})},...data})};function _dispatchEvent(info){dispatchEvent({putSortable:putSortable,cloneEl:cloneEl,targetEl:dragEl,rootEl:rootEl,oldIndex:oldIndex,oldDraggableIndex:oldDraggableIndex,newIndex:newIndex,newDraggableIndex:newDraggableIndex,...info})}let dragEl,parentEl,ghostEl,rootEl,nextEl,lastDownEl,cloneEl,cloneHidden,oldIndex,newIndex,oldDraggableIndex,newDraggableIndex,activeGroup,putSortable,tapEvt,touchEvt,lastDx,lastDy,tapDistanceLeft,tapDistanceTop,moved,lastTarget,lastDirection,targetMoveDistance,ghostRelativeParent,awaitingDragStarted=!1,ignoreNextClick=!1,sortables=[],pastFirstInvertThresh=!1,isCircumstantialInvert=!1,ghostRelativeParentInitialScroll=[],_silent=!1,savedInputChecked=[];const documentExists="undefined"!=typeof document,PositionGhostAbsolutely=IOS,CSSFloatProperty=Edge||IE11OrLess?"cssFloat":"float",supportDraggable=documentExists&&!ChromeForAndroid&&!IOS&&"draggable"in document.createElement("div"),supportCssPointerEvents=function(){if(!documentExists)return;if(IE11OrLess)return!1;let el=document.createElement("x");return el.style.cssText="pointer-events:auto","auto"===el.style.pointerEvents}(),_detectDirection=function(el,options){let elCSS=css(el),elWidth=parseInt(elCSS.width)-parseInt(elCSS.paddingLeft)-parseInt(elCSS.paddingRight)-parseInt(elCSS.borderLeftWidth)-parseInt(elCSS.borderRightWidth),child1=getChild(el,0,options),child2=getChild(el,1,options),firstChildCSS=child1&&css(child1),secondChildCSS=child2&&css(child2),firstChildWidth=firstChildCSS&&parseInt(firstChildCSS.marginLeft)+parseInt(firstChildCSS.marginRight)+getRect(child1).width,secondChildWidth=secondChildCSS&&parseInt(secondChildCSS.marginLeft)+parseInt(secondChildCSS.marginRight)+getRect(child2).width;if("flex"===elCSS.display)return"column"===elCSS.flexDirection||"column-reverse"===elCSS.flexDirection?"vertical":"horizontal";if("grid"===elCSS.display)return elCSS.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(child1&&firstChildCSS.float&&"none"!==firstChildCSS.float){let touchingSideChild2="left"===firstChildCSS.float?"left":"right";return!child2||"both"!==secondChildCSS.clear&&secondChildCSS.clear!==touchingSideChild2?"horizontal":"vertical"}return child1&&("block"===firstChildCSS.display||"flex"===firstChildCSS.display||"table"===firstChildCSS.display||"grid"===firstChildCSS.display||firstChildWidth>=elWidth&&"none"===elCSS[CSSFloatProperty]||child2&&"none"===elCSS[CSSFloatProperty]&&firstChildWidth+secondChildWidth>elWidth)?"vertical":"horizontal"},_prepareGroup=function(options){function toFn(value,pull){return function(to,from,dragEl,evt){let sameGroup=to.options.group.name&&from.options.group.name&&to.options.group.name===from.options.group.name;if(null==value&&(pull||sameGroup))return!0;if(null==value||!1===value)return!1;if(pull&&"clone"===value)return value;if("function"==typeof value)return toFn(value(to,from,dragEl,evt),pull)(to,from,dragEl,evt);{let otherGroup=(pull?to:from).options.group.name;return!0===value||"string"==typeof value&&value===otherGroup||value.join&&value.indexOf(otherGroup)>-1}}}let group={},originalGroup=options.group;originalGroup&&"object"==typeof originalGroup||(originalGroup={name:originalGroup}),group.name=originalGroup.name,group.checkPull=toFn(originalGroup.pull,!0),group.checkPut=toFn(originalGroup.put),group.revertClone=originalGroup.revertClone,options.group=group},_hideGhostForTarget=function(){!supportCssPointerEvents&&ghostEl&&css(ghostEl,"display","none")},_unhideGhostForTarget=function(){!supportCssPointerEvents&&ghostEl&&css(ghostEl,"display","")};documentExists&&document.addEventListener("click",(function(evt){if(ignoreNextClick)return evt.preventDefault(),evt.stopPropagation&&evt.stopPropagation(),evt.stopImmediatePropagation&&evt.stopImmediatePropagation(),ignoreNextClick=!1,!1}),!0);let nearestEmptyInsertDetectEvent=function(evt){if(dragEl){let nearest=function(x,y){let ret;return sortables.some(sortable=>{if(lastChild(sortable))return;let rect=getRect(sortable),threshold=sortable[expando].options.emptyInsertThreshold,insideHorizontally=x>=rect.left-threshold&&x<=rect.right+threshold,insideVertically=y>=rect.top-threshold&&y<=rect.bottom+threshold;return threshold&&insideHorizontally&&insideVertically?ret=sortable:void 0}),ret}((evt=evt.touches?evt.touches[0]:evt).clientX,evt.clientY);if(nearest){let event={};for(let i in evt)evt.hasOwnProperty(i)&&(event[i]=evt[i]);event.target=event.rootEl=nearest,event.preventDefault=void 0,event.stopPropagation=void 0,nearest[expando]._onDragOver(event)}}},_checkOutsideTargetEl=function(evt){dragEl&&dragEl.parentNode[expando]._isOutsideThisEl(evt.target)};function Sortable(el,options){if(!el||!el.nodeType||1!==el.nodeType)throw`Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(el)}`;this.el=el,this.options=options=Object.assign({},options),el[expando]=this;let defaults={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(el.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return _detectDirection(el,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(dataTransfer,dragEl){dataTransfer.setData("Text",dragEl.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Sortable.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};PluginManager.initializePlugins(this,el,defaults);for(let name in defaults)!(name in options)&&(options[name]=defaults[name]);_prepareGroup(options);for(let fn in this)"_"===fn.charAt(0)&&"function"==typeof this[fn]&&(this[fn]=this[fn].bind(this));this.nativeDraggable=!options.forceFallback&&supportDraggable,this.nativeDraggable&&(this.options.touchStartThreshold=1),options.supportPointer?on(el,"pointerdown",this._onTapStart):(on(el,"mousedown",this._onTapStart),on(el,"touchstart",this._onTapStart)),this.nativeDraggable&&(on(el,"dragover",this),on(el,"dragenter",this)),sortables.push(this.el),options.store&&options.store.get&&this.sort(options.store.get(this)||[]),Object.assign(this,AnimationStateManager())}function onMove(fromEl,toEl,dragEl,dragRect,targetEl,targetRect,originalEvent,willInsertAfter){let evt,retVal,sortable=fromEl[expando],onMoveFn=sortable.options.onMove;return!window.CustomEvent||IE11OrLess||Edge?(evt=document.createEvent("Event"),evt.initEvent("move",!0,!0)):evt=new CustomEvent("move",{bubbles:!0,cancelable:!0}),evt.to=toEl,evt.from=fromEl,evt.dragged=dragEl,evt.draggedRect=dragRect,evt.related=targetEl||toEl,evt.relatedRect=targetRect||getRect(toEl),evt.willInsertAfter=willInsertAfter,evt.originalEvent=originalEvent,fromEl.dispatchEvent(evt),onMoveFn&&(retVal=onMoveFn.call(sortable,evt,originalEvent)),retVal}function _disableDraggable(el){el.draggable=!1}function _unsilent(){_silent=!1}function _generateId(el){let str=el.tagName+el.className+el.src+el.href+el.textContent,i=str.length,sum=0;for(;i--;)sum+=str.charCodeAt(i);return sum.toString(36)}function _nextTick(fn){return setTimeout(fn,0)}function _cancelNextTick(id){return clearTimeout(id)}Sortable.prototype={constructor:Sortable,_isOutsideThisEl:function(target){this.el.contains(target)||target===this.el||(lastTarget=null)},_getDirection:function(evt,target){return"function"==typeof this.options.direction?this.options.direction.call(this,evt,target,dragEl):this.options.direction},_onTapStart:function(evt){if(!evt.cancelable)return;let _this=this,el=this.el,options=this.options,preventOnFilter=options.preventOnFilter,type=evt.type,touch=evt.touches&&evt.touches[0]||evt.pointerType&&"touch"===evt.pointerType&&evt,target=(touch||evt).target,originalTarget=evt.target.shadowRoot&&(evt.path&&evt.path[0]||evt.composedPath&&evt.composedPath()[0])||target,filter=options.filter;if(function(root){savedInputChecked.length=0;let inputs=root.getElementsByTagName("input"),idx=inputs.length;for(;idx--;){let el=inputs[idx];el.checked&&savedInputChecked.push(el)}}(el),!dragEl&&!(/mousedown|pointerdown/.test(type)&&0!==evt.button||options.disabled||originalTarget.isContentEditable||(target=closest(target,options.draggable,el,!1),target&&target.animated||lastDownEl===target))){if(oldIndex=index(target),oldDraggableIndex=index(target,options.draggable),"function"==typeof filter){if(filter.call(this,evt,target,this))return _dispatchEvent({sortable:_this,rootEl:originalTarget,name:"filter",targetEl:target,toEl:el,fromEl:el}),pluginEvent("filter",_this,{evt:evt}),void(preventOnFilter&&evt.cancelable&&evt.preventDefault())}else if(filter&&(filter=filter.split(",").some((function(criteria){if(criteria=closest(originalTarget,criteria.trim(),el,!1))return _dispatchEvent({sortable:_this,rootEl:criteria,name:"filter",targetEl:target,fromEl:el,toEl:el}),pluginEvent("filter",_this,{evt:evt}),!0})),filter))return void(preventOnFilter&&evt.cancelable&&evt.preventDefault());options.handle&&!closest(originalTarget,options.handle,el,!1)||this._prepareDragStart(evt,touch,target)}},_prepareDragStart:function(evt,touch,target){let dragStartFn,_this=this,el=_this.el,options=_this.options,ownerDocument=el.ownerDocument;if(target&&!dragEl&&target.parentNode===el){let dragRect=getRect(target);if(rootEl=el,dragEl=target,parentEl=dragEl.parentNode,nextEl=dragEl.nextSibling,lastDownEl=target,activeGroup=options.group,Sortable.dragged=dragEl,tapEvt={target:dragEl,clientX:(touch||evt).clientX,clientY:(touch||evt).clientY},tapDistanceLeft=tapEvt.clientX-dragRect.left,tapDistanceTop=tapEvt.clientY-dragRect.top,this._lastX=(touch||evt).clientX,this._lastY=(touch||evt).clientY,dragEl.style["will-change"]="all",dragStartFn=function(){pluginEvent("delayEnded",_this,{evt:evt}),Sortable.eventCanceled?_this._onDrop():(_this._disableDelayedDragEvents(),!FireFox&&_this.nativeDraggable&&(dragEl.draggable=!0),_this._triggerDragStart(evt,touch),_dispatchEvent({sortable:_this,name:"choose",originalEvent:evt}),toggleClass(dragEl,options.chosenClass,!0))},options.ignore.split(",").forEach((function(criteria){find(dragEl,criteria.trim(),_disableDraggable)})),on(ownerDocument,"dragover",nearestEmptyInsertDetectEvent),on(ownerDocument,"mousemove",nearestEmptyInsertDetectEvent),on(ownerDocument,"touchmove",nearestEmptyInsertDetectEvent),on(ownerDocument,"mouseup",_this._onDrop),on(ownerDocument,"touchend",_this._onDrop),on(ownerDocument,"touchcancel",_this._onDrop),FireFox&&this.nativeDraggable&&(this.options.touchStartThreshold=4,dragEl.draggable=!0),pluginEvent("delayStart",this,{evt:evt}),!options.delay||options.delayOnTouchOnly&&!touch||this.nativeDraggable&&(Edge||IE11OrLess))dragStartFn();else{if(Sortable.eventCanceled)return void this._onDrop();on(ownerDocument,"mouseup",_this._disableDelayedDrag),on(ownerDocument,"touchend",_this._disableDelayedDrag),on(ownerDocument,"touchcancel",_this._disableDelayedDrag),on(ownerDocument,"mousemove",_this._delayedDragTouchMoveHandler),on(ownerDocument,"touchmove",_this._delayedDragTouchMoveHandler),options.supportPointer&&on(ownerDocument,"pointermove",_this._delayedDragTouchMoveHandler),_this._dragStartTimer=setTimeout(dragStartFn,options.delay)}}},_delayedDragTouchMoveHandler:function(e){let touch=e.touches?e.touches[0]:e;Math.max(Math.abs(touch.clientX-this._lastX),Math.abs(touch.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){dragEl&&_disableDraggable(dragEl),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){let ownerDocument=this.el.ownerDocument;off(ownerDocument,"mouseup",this._disableDelayedDrag),off(ownerDocument,"touchend",this._disableDelayedDrag),off(ownerDocument,"touchcancel",this._disableDelayedDrag),off(ownerDocument,"mousemove",this._delayedDragTouchMoveHandler),off(ownerDocument,"touchmove",this._delayedDragTouchMoveHandler),off(ownerDocument,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(evt,touch){touch=touch||"touch"==evt.pointerType&&evt,!this.nativeDraggable||touch?this.options.supportPointer?on(document,"pointermove",this._onTouchMove):on(document,touch?"touchmove":"mousemove",this._onTouchMove):(on(dragEl,"dragend",this),on(rootEl,"dragstart",this._onDragStart));try{document.selection?_nextTick((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(err){}},_dragStarted:function(fallback,evt){if(awaitingDragStarted=!1,rootEl&&dragEl){pluginEvent("dragStarted",this,{evt:evt}),this.nativeDraggable&&on(document,"dragover",_checkOutsideTargetEl);let options=this.options;!fallback&&toggleClass(dragEl,options.dragClass,!1),toggleClass(dragEl,options.ghostClass,!0),Sortable.active=this,fallback&&this._appendGhost(),_dispatchEvent({sortable:this,name:"start",originalEvent:evt})}else this._nulling()},_emulateDragOver:function(){if(touchEvt){this._lastX=touchEvt.clientX,this._lastY=touchEvt.clientY,_hideGhostForTarget();let target=document.elementFromPoint(touchEvt.clientX,touchEvt.clientY),parent=target;for(;target&&target.shadowRoot&&(target=target.shadowRoot.elementFromPoint(touchEvt.clientX,touchEvt.clientY),target!==parent);)parent=target;if(dragEl.parentNode[expando]._isOutsideThisEl(target),parent)do{if(parent[expando]){let inserted;if(inserted=parent[expando]._onDragOver({clientX:touchEvt.clientX,clientY:touchEvt.clientY,target:target,rootEl:parent}),inserted&&!this.options.dragoverBubble)break}target=parent}while(parent=parent.parentNode);_unhideGhostForTarget()}},_onTouchMove:function(evt){if(tapEvt){let options=this.options,fallbackTolerance=options.fallbackTolerance,fallbackOffset=options.fallbackOffset,touch=evt.touches?evt.touches[0]:evt,ghostMatrix=ghostEl&&matrix(ghostEl,!0),scaleX=ghostEl&&ghostMatrix&&ghostMatrix.a,scaleY=ghostEl&&ghostMatrix&&ghostMatrix.d,relativeScrollOffset=PositionGhostAbsolutely&&ghostRelativeParent&&getRelativeScrollOffset(ghostRelativeParent),dx=(touch.clientX-tapEvt.clientX+fallbackOffset.x)/(scaleX||1)+(relativeScrollOffset?relativeScrollOffset[0]-ghostRelativeParentInitialScroll[0]:0)/(scaleX||1),dy=(touch.clientY-tapEvt.clientY+fallbackOffset.y)/(scaleY||1)+(relativeScrollOffset?relativeScrollOffset[1]-ghostRelativeParentInitialScroll[1]:0)/(scaleY||1);if(!Sortable.active&&!awaitingDragStarted){if(fallbackTolerance&&Math.max(Math.abs(touch.clientX-this._lastX),Math.abs(touch.clientY-this._lastY))<fallbackTolerance)return;this._onDragStart(evt,!0)}if(ghostEl){ghostMatrix?(ghostMatrix.e+=dx-(lastDx||0),ghostMatrix.f+=dy-(lastDy||0)):ghostMatrix={a:1,b:0,c:0,d:1,e:dx,f:dy};let cssMatrix=`matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`;css(ghostEl,"webkitTransform",cssMatrix),css(ghostEl,"mozTransform",cssMatrix),css(ghostEl,"msTransform",cssMatrix),css(ghostEl,"transform",cssMatrix),lastDx=dx,lastDy=dy,touchEvt=touch}evt.cancelable&&evt.preventDefault()}},_appendGhost:function(){if(!ghostEl){let container=this.options.fallbackOnBody?document.body:rootEl,rect=getRect(dragEl,!0,PositionGhostAbsolutely,!0,container),options=this.options;if(PositionGhostAbsolutely){for(ghostRelativeParent=container;"static"===css(ghostRelativeParent,"position")&&"none"===css(ghostRelativeParent,"transform")&&ghostRelativeParent!==document;)ghostRelativeParent=ghostRelativeParent.parentNode;ghostRelativeParent!==document.body&&ghostRelativeParent!==document.documentElement?(ghostRelativeParent===document&&(ghostRelativeParent=getWindowScrollingElement()),rect.top+=ghostRelativeParent.scrollTop,rect.left+=ghostRelativeParent.scrollLeft):ghostRelativeParent=getWindowScrollingElement(),ghostRelativeParentInitialScroll=getRelativeScrollOffset(ghostRelativeParent)}ghostEl=dragEl.cloneNode(!0),toggleClass(ghostEl,options.ghostClass,!1),toggleClass(ghostEl,options.fallbackClass,!0),toggleClass(ghostEl,options.dragClass,!0),css(ghostEl,"transition",""),css(ghostEl,"transform",""),css(ghostEl,"box-sizing","border-box"),css(ghostEl,"margin",0),css(ghostEl,"top",rect.top),css(ghostEl,"left",rect.left),css(ghostEl,"width",rect.width),css(ghostEl,"height",rect.height),css(ghostEl,"opacity","0.8"),css(ghostEl,"position",PositionGhostAbsolutely?"absolute":"fixed"),css(ghostEl,"zIndex","100000"),css(ghostEl,"pointerEvents","none"),Sortable.ghost=ghostEl,container.appendChild(ghostEl),css(ghostEl,"transform-origin",tapDistanceLeft/parseInt(ghostEl.style.width)*100+"% "+tapDistanceTop/parseInt(ghostEl.style.height)*100+"%")}},_onDragStart:function(evt,fallback){let _this=this,dataTransfer=evt.dataTransfer,options=_this.options;pluginEvent("dragStart",this,{evt:evt}),Sortable.eventCanceled?this._onDrop():(pluginEvent("setupClone",this),Sortable.eventCanceled||(cloneEl=clone(dragEl),cloneEl.draggable=!1,cloneEl.style["will-change"]="",this._hideClone(),toggleClass(cloneEl,this.options.chosenClass,!1),Sortable.clone=cloneEl),_this.cloneId=_nextTick((function(){pluginEvent("clone",_this),Sortable.eventCanceled||(_this.options.removeCloneOnHide||rootEl.insertBefore(cloneEl,dragEl),_this._hideClone(),_dispatchEvent({sortable:_this,name:"clone"}))})),!fallback&&toggleClass(dragEl,options.dragClass,!0),fallback?(ignoreNextClick=!0,_this._loopId=setInterval(_this._emulateDragOver,50)):(off(document,"mouseup",_this._onDrop),off(document,"touchend",_this._onDrop),off(document,"touchcancel",_this._onDrop),dataTransfer&&(dataTransfer.effectAllowed="move",options.setData&&options.setData.call(_this,dataTransfer,dragEl)),on(document,"drop",_this),css(dragEl,"transform","translateZ(0)")),awaitingDragStarted=!0,_this._dragStartId=_nextTick(_this._dragStarted.bind(_this,fallback,evt)),on(document,"selectstart",_this),moved=!0,Safari&&css(document.body,"user-select","none"))},_onDragOver:function(evt){let dragRect,targetRect,revert,vertical,el=this.el,target=evt.target,options=this.options,group=options.group,activeSortable=Sortable.active,isOwner=activeGroup===group,canSort=options.sort,fromSortable=putSortable||activeSortable,_this=this,completedFired=!1;if(!_silent){if(void 0!==evt.preventDefault&&evt.cancelable&&evt.preventDefault(),target=closest(target,options.draggable,el,!0),dragOverEvent("dragOver"),Sortable.eventCanceled)return completedFired;if(dragEl.contains(evt.target)||target.animated&&target.animatingX&&target.animatingY||_this._ignoreWhileAnimating===target)return completed(!1);if(ignoreNextClick=!1,activeSortable&&!options.disabled&&(isOwner?canSort||(revert=!rootEl.contains(dragEl)):putSortable===this||(this.lastPutMode=activeGroup.checkPull(this,activeSortable,dragEl,evt))&&group.checkPut(this,activeSortable,dragEl,evt))){if(vertical="vertical"===this._getDirection(evt,target),dragRect=getRect(dragEl),dragOverEvent("dragOverValid"),Sortable.eventCanceled)return completedFired;if(revert)return parentEl=rootEl,capture(),this._hideClone(),dragOverEvent("revert"),Sortable.eventCanceled||(nextEl?rootEl.insertBefore(dragEl,nextEl):rootEl.appendChild(dragEl)),completed(!0);let elLastChild=lastChild(el,options.draggable);if(!elLastChild||function(evt,vertical,sortable){let rect=getRect(lastChild(sortable.el,sortable.options.draggable));return vertical?evt.clientX>rect.right+10||evt.clientX<=rect.right&&evt.clientY>rect.bottom&&evt.clientX>=rect.left:evt.clientX>rect.right&&evt.clientY>rect.top||evt.clientX<=rect.right&&evt.clientY>rect.bottom+10}(evt,vertical,this)&&!elLastChild.animated){if(elLastChild===dragEl)return completed(!1);if(elLastChild&&el===evt.target&&(target=elLastChild),target&&(targetRect=getRect(target)),!1!==onMove(rootEl,el,dragEl,dragRect,target,targetRect,evt,!!target))return capture(),el.appendChild(dragEl),parentEl=el,changed(),completed(!0)}else if(target.parentNode===el){targetRect=getRect(target);let targetBeforeFirstSwap,sibling,direction=0,differentLevel=dragEl.parentNode!==el,differentRowCol=!function(dragRect,targetRect,vertical){let dragElS1Opp=vertical?dragRect.left:dragRect.top,dragElS2Opp=vertical?dragRect.right:dragRect.bottom,dragElOppLength=vertical?dragRect.width:dragRect.height,targetS1Opp=vertical?targetRect.left:targetRect.top,targetS2Opp=vertical?targetRect.right:targetRect.bottom,targetOppLength=vertical?targetRect.width:targetRect.height;return dragElS1Opp===targetS1Opp||dragElS2Opp===targetS2Opp||dragElS1Opp+dragElOppLength/2===targetS1Opp+targetOppLength/2}(dragEl.animated&&dragEl.toRect||dragRect,target.animated&&target.toRect||targetRect,vertical),side1=vertical?"top":"left",scrolledPastTop=isScrolledPast(target,"top","top")||isScrolledPast(dragEl,"top","top"),scrollBefore=scrolledPastTop?scrolledPastTop.scrollTop:void 0;if(lastTarget!==target&&(targetBeforeFirstSwap=targetRect[side1],pastFirstInvertThresh=!1,isCircumstantialInvert=!differentRowCol&&options.invertSwap||differentLevel),direction=function(evt,target,targetRect,vertical,swapThreshold,invertedSwapThreshold,invertSwap,isLastTarget){let mouseOnAxis=vertical?evt.clientY:evt.clientX,targetLength=vertical?targetRect.height:targetRect.width,targetS1=vertical?targetRect.top:targetRect.left,targetS2=vertical?targetRect.bottom:targetRect.right,invert=!1;if(!invertSwap)if(isLastTarget&&targetMoveDistance<targetLength*swapThreshold){if(!pastFirstInvertThresh&&(1===lastDirection?mouseOnAxis>targetS1+targetLength*invertedSwapThreshold/2:mouseOnAxis<targetS2-targetLength*invertedSwapThreshold/2)&&(pastFirstInvertThresh=!0),pastFirstInvertThresh)invert=!0;else if(1===lastDirection?mouseOnAxis<targetS1+targetMoveDistance:mouseOnAxis>targetS2-targetMoveDistance)return-lastDirection}else if(mouseOnAxis>targetS1+targetLength*(1-swapThreshold)/2&&mouseOnAxis<targetS2-targetLength*(1-swapThreshold)/2)return function(target){return index(dragEl)<index(target)?1:-1}(target);if(invert=invert||invertSwap,invert&&(mouseOnAxis<targetS1+targetLength*invertedSwapThreshold/2||mouseOnAxis>targetS2-targetLength*invertedSwapThreshold/2))return mouseOnAxis>targetS1+targetLength/2?1:-1;return 0}(evt,target,targetRect,vertical,differentRowCol?1:options.swapThreshold,null==options.invertedSwapThreshold?options.swapThreshold:options.invertedSwapThreshold,isCircumstantialInvert,lastTarget===target),0!==direction){let dragIndex=index(dragEl);do{dragIndex-=direction,sibling=parentEl.children[dragIndex]}while(sibling&&("none"===css(sibling,"display")||sibling===ghostEl))}if(0===direction||sibling===target)return completed(!1);lastTarget=target,lastDirection=direction;let nextSibling=target.nextElementSibling,after=!1;after=1===direction;let moveVector=onMove(rootEl,el,dragEl,dragRect,target,targetRect,evt,after);if(!1!==moveVector)return 1!==moveVector&&-1!==moveVector||(after=1===moveVector),_silent=!0,setTimeout(_unsilent,30),capture(),after&&!nextSibling?el.appendChild(dragEl):target.parentNode.insertBefore(dragEl,after?nextSibling:target),scrolledPastTop&&scrollBy(scrolledPastTop,0,scrollBefore-scrolledPastTop.scrollTop),parentEl=dragEl.parentNode,void 0===targetBeforeFirstSwap||isCircumstantialInvert||(targetMoveDistance=Math.abs(targetBeforeFirstSwap-getRect(target)[side1])),changed(),completed(!0)}if(el.contains(dragEl))return completed(!1)}return!1}function dragOverEvent(name,extra){pluginEvent(name,_this,{evt:evt,isOwner:isOwner,axis:vertical?"vertical":"horizontal",revert:revert,dragRect:dragRect,targetRect:targetRect,canSort:canSort,fromSortable:fromSortable,target:target,completed:completed,onMove:(target,after)=>onMove(rootEl,el,dragEl,dragRect,target,getRect(target),evt,after),changed:changed,...extra})}function capture(){dragOverEvent("dragOverAnimationCapture"),_this.captureAnimationState(),_this!==fromSortable&&fromSortable.captureAnimationState()}function completed(insertion){return dragOverEvent("dragOverCompleted",{insertion:insertion}),insertion&&(isOwner?activeSortable._hideClone():activeSortable._showClone(_this),_this!==fromSortable&&(toggleClass(dragEl,putSortable?putSortable.options.ghostClass:activeSortable.options.ghostClass,!1),toggleClass(dragEl,options.ghostClass,!0)),putSortable!==_this&&_this!==Sortable.active?putSortable=_this:_this===Sortable.active&&putSortable&&(putSortable=null),fromSortable===_this&&(_this._ignoreWhileAnimating=target),_this.animateAll((function(){dragOverEvent("dragOverAnimationComplete"),_this._ignoreWhileAnimating=null})),_this!==fromSortable&&(fromSortable.animateAll(),fromSortable._ignoreWhileAnimating=null)),(target===dragEl&&!dragEl.animated||target===el&&!target.animated)&&(lastTarget=null),options.dragoverBubble||evt.rootEl||target===document||(dragEl.parentNode[expando]._isOutsideThisEl(evt.target),!insertion&&nearestEmptyInsertDetectEvent(evt)),!options.dragoverBubble&&evt.stopPropagation&&evt.stopPropagation(),completedFired=!0}function changed(){newIndex=index(dragEl),newDraggableIndex=index(dragEl,options.draggable),_dispatchEvent({sortable:_this,name:"change",toEl:el,newIndex:newIndex,newDraggableIndex:newDraggableIndex,originalEvent:evt})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){off(document,"mousemove",this._onTouchMove),off(document,"touchmove",this._onTouchMove),off(document,"pointermove",this._onTouchMove),off(document,"dragover",nearestEmptyInsertDetectEvent),off(document,"mousemove",nearestEmptyInsertDetectEvent),off(document,"touchmove",nearestEmptyInsertDetectEvent)},_offUpEvents:function(){let ownerDocument=this.el.ownerDocument;off(ownerDocument,"mouseup",this._onDrop),off(ownerDocument,"touchend",this._onDrop),off(ownerDocument,"pointerup",this._onDrop),off(ownerDocument,"touchcancel",this._onDrop),off(document,"selectstart",this)},_onDrop:function(evt){let el=this.el,options=this.options;newIndex=index(dragEl),newDraggableIndex=index(dragEl,options.draggable),pluginEvent("drop",this,{evt:evt}),parentEl=dragEl&&dragEl.parentNode,newIndex=index(dragEl),newDraggableIndex=index(dragEl,options.draggable),Sortable.eventCanceled?this._nulling():(awaitingDragStarted=!1,isCircumstantialInvert=!1,pastFirstInvertThresh=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),_cancelNextTick(this.cloneId),_cancelNextTick(this._dragStartId),this.nativeDraggable&&(off(document,"drop",this),off(el,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Safari&&css(document.body,"user-select",""),css(dragEl,"transform",""),evt&&(moved&&(evt.cancelable&&evt.preventDefault(),!options.dropBubble&&evt.stopPropagation()),ghostEl&&ghostEl.parentNode&&ghostEl.parentNode.removeChild(ghostEl),(rootEl===parentEl||putSortable&&"clone"!==putSortable.lastPutMode)&&cloneEl&&cloneEl.parentNode&&cloneEl.parentNode.removeChild(cloneEl),dragEl&&(this.nativeDraggable&&off(dragEl,"dragend",this),_disableDraggable(dragEl),dragEl.style["will-change"]="",moved&&!awaitingDragStarted&&toggleClass(dragEl,putSortable?putSortable.options.ghostClass:this.options.ghostClass,!1),toggleClass(dragEl,this.options.chosenClass,!1),_dispatchEvent({sortable:this,name:"unchoose",toEl:parentEl,newIndex:null,newDraggableIndex:null,originalEvent:evt}),rootEl!==parentEl?(newIndex>=0&&(_dispatchEvent({rootEl:parentEl,name:"add",toEl:parentEl,fromEl:rootEl,originalEvent:evt}),_dispatchEvent({sortable:this,name:"remove",toEl:parentEl,originalEvent:evt}),_dispatchEvent({rootEl:parentEl,name:"sort",toEl:parentEl,fromEl:rootEl,originalEvent:evt}),_dispatchEvent({sortable:this,name:"sort",toEl:parentEl,originalEvent:evt})),putSortable&&putSortable.save()):newIndex!==oldIndex&&newIndex>=0&&(_dispatchEvent({sortable:this,name:"update",toEl:parentEl,originalEvent:evt}),_dispatchEvent({sortable:this,name:"sort",toEl:parentEl,originalEvent:evt})),Sortable.active&&(null!=newIndex&&-1!==newIndex||(newIndex=oldIndex,newDraggableIndex=oldDraggableIndex),_dispatchEvent({sortable:this,name:"end",toEl:parentEl,originalEvent:evt}),this.save()))),this._nulling())},_nulling:function(){pluginEvent("nulling",this),rootEl=dragEl=parentEl=ghostEl=nextEl=cloneEl=lastDownEl=cloneHidden=tapEvt=touchEvt=moved=newIndex=newDraggableIndex=oldIndex=oldDraggableIndex=lastTarget=lastDirection=putSortable=activeGroup=Sortable.dragged=Sortable.ghost=Sortable.clone=Sortable.active=null,savedInputChecked.forEach((function(el){el.checked=!0})),savedInputChecked.length=lastDx=lastDy=0},handleEvent:function(evt){switch(evt.type){case"drop":case"dragend":this._onDrop(evt);break;case"dragenter":case"dragover":dragEl&&(this._onDragOver(evt),function(evt){evt.dataTransfer&&(evt.dataTransfer.dropEffect="move");evt.cancelable&&evt.preventDefault()}(evt));break;case"selectstart":evt.preventDefault()}},toArray:function(){let el,order=[],children=this.el.children,i=0,n=children.length,options=this.options;for(;i<n;i++)el=children[i],closest(el,options.draggable,this.el,!1)&&order.push(el.getAttribute(options.dataIdAttr)||_generateId(el));return order},sort:function(order){let items={},rootEl=this.el;this.toArray().forEach((function(id,i){let el=rootEl.children[i];closest(el,this.options.draggable,rootEl,!1)&&(items[id]=el)}),this),order.forEach((function(id){items[id]&&(rootEl.removeChild(items[id]),rootEl.appendChild(items[id]))}))},save:function(){let store=this.options.store;store&&store.set&&store.set(this)},closest:function(el,selector){return closest(el,selector||this.options.draggable,this.el,!1)},option:function(name,value){let options=this.options;if(void 0===value)return options[name];{let modifiedValue=PluginManager.modifyOption(this,name,value);options[name]=void 0!==modifiedValue?modifiedValue:value,"group"===name&&_prepareGroup(options)}},destroy:function(){pluginEvent("destroy",this);let el=this.el;el[expando]=null,off(el,"mousedown",this._onTapStart),off(el,"touchstart",this._onTapStart),off(el,"pointerdown",this._onTapStart),this.nativeDraggable&&(off(el,"dragover",this),off(el,"dragenter",this)),Array.prototype.forEach.call(el.querySelectorAll("[draggable]"),(function(el){el.removeAttribute("draggable")})),this._onDrop(),this._disableDelayedDragEvents(),sortables.splice(sortables.indexOf(this.el),1),this.el=el=null},_hideClone:function(){if(!cloneHidden){if(pluginEvent("hideClone",this),Sortable.eventCanceled)return;css(cloneEl,"display","none"),this.options.removeCloneOnHide&&cloneEl.parentNode&&cloneEl.parentNode.removeChild(cloneEl),cloneHidden=!0}},_showClone:function(putSortable){if("clone"===putSortable.lastPutMode){if(cloneHidden){if(pluginEvent("showClone",this),Sortable.eventCanceled)return;rootEl.contains(dragEl)&&!this.options.group.revertClone?rootEl.insertBefore(cloneEl,dragEl):nextEl?rootEl.insertBefore(cloneEl,nextEl):rootEl.appendChild(cloneEl),this.options.group.revertClone&&this.animate(dragEl,cloneEl),css(cloneEl,"display",""),cloneHidden=!1}}else this._hideClone()}},documentExists&&on(document,"touchmove",(function(evt){(Sortable.active||awaitingDragStarted)&&evt.cancelable&&evt.preventDefault()})),Sortable.utils={on:on,off:off,css:css,find:find,is:function(el,selector){return!!closest(el,selector,el,!1)},extend:function(dst,src){if(dst&&src)for(var key in src)src.hasOwnProperty(key)&&(dst[key]=src[key]);return dst},throttle:throttle,closest:closest,toggleClass:toggleClass,clone:clone,index:index,nextTick:_nextTick,cancelNextTick:_cancelNextTick,detectDirection:_detectDirection,getChild:getChild},Sortable.get=function(element){return element[expando]},Sortable.mount=function(...plugins){plugins[0].constructor===Array&&(plugins=plugins[0]),plugins.forEach(plugin=>{if(!plugin.prototype||!plugin.prototype.constructor)throw`Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(plugin)}`;plugin.utils&&(Sortable.utils={...Sortable.utils,...plugin.utils}),PluginManager.mount(plugin)})},Sortable.create=function(el,options){return new Sortable(el,options)},Sortable.version="1.10.2";let scrollEl,scrollRootEl,lastAutoScrollX,lastAutoScrollY,touchEvt$1,pointerElemChangedInterval,autoScrolls=[],scrolling=!1;function clearAutoScrolls(){autoScrolls.forEach((function(autoScroll){clearInterval(autoScroll.pid)})),autoScrolls=[]}function clearPointerElemChangedInterval(){clearInterval(pointerElemChangedInterval)}const autoScroll=throttle((function(evt,options,rootEl,isFallback){if(!options.scroll)return;const x=(evt.touches?evt.touches[0]:evt).clientX,y=(evt.touches?evt.touches[0]:evt).clientY,sens=options.scrollSensitivity,speed=options.scrollSpeed,winScroller=getWindowScrollingElement();let scrollCustomFn,scrollThisInstance=!1;scrollRootEl!==rootEl&&(scrollRootEl=rootEl,clearAutoScrolls(),scrollEl=options.scroll,scrollCustomFn=options.scrollFn,!0===scrollEl&&(scrollEl=getParentAutoScrollElement(rootEl,!0)));let layersOut=0,currentParent=scrollEl;do{let canScrollX,canScrollY,el=currentParent,rect=getRect(el),top=rect.top,bottom=rect.bottom,left=rect.left,right=rect.right,width=rect.width,height=rect.height,scrollWidth=el.scrollWidth,scrollHeight=el.scrollHeight,elCSS=css(el),scrollPosX=el.scrollLeft,scrollPosY=el.scrollTop;el===winScroller?(canScrollX=width<scrollWidth&&("auto"===elCSS.overflowX||"scroll"===elCSS.overflowX||"visible"===elCSS.overflowX),canScrollY=height<scrollHeight&&("auto"===elCSS.overflowY||"scroll"===elCSS.overflowY||"visible"===elCSS.overflowY)):(canScrollX=width<scrollWidth&&("auto"===elCSS.overflowX||"scroll"===elCSS.overflowX),canScrollY=height<scrollHeight&&("auto"===elCSS.overflowY||"scroll"===elCSS.overflowY));let vx=canScrollX&&(Math.abs(right-x)<=sens&&scrollPosX+width<scrollWidth)-(Math.abs(left-x)<=sens&&!!scrollPosX),vy=canScrollY&&(Math.abs(bottom-y)<=sens&&scrollPosY+height<scrollHeight)-(Math.abs(top-y)<=sens&&!!scrollPosY);if(!autoScrolls[layersOut])for(let i=0;i<=layersOut;i++)autoScrolls[i]||(autoScrolls[i]={});autoScrolls[layersOut].vx==vx&&autoScrolls[layersOut].vy==vy&&autoScrolls[layersOut].el===el||(autoScrolls[layersOut].el=el,autoScrolls[layersOut].vx=vx,autoScrolls[layersOut].vy=vy,clearInterval(autoScrolls[layersOut].pid),0==vx&&0==vy||(scrollThisInstance=!0,autoScrolls[layersOut].pid=setInterval(function(){isFallback&&0===this.layer&&Sortable.active._onTouchMove(touchEvt$1);let scrollOffsetY=autoScrolls[this.layer].vy?autoScrolls[this.layer].vy*speed:0,scrollOffsetX=autoScrolls[this.layer].vx?autoScrolls[this.layer].vx*speed:0;"function"==typeof scrollCustomFn&&"continue"!==scrollCustomFn.call(Sortable.dragged.parentNode[expando],scrollOffsetX,scrollOffsetY,evt,touchEvt$1,autoScrolls[this.layer].el)||scrollBy(autoScrolls[this.layer].el,scrollOffsetX,scrollOffsetY)}.bind({layer:layersOut}),24))),layersOut++}while(options.bubbleScroll&&currentParent!==winScroller&&(currentParent=getParentAutoScrollElement(currentParent,!1)));scrolling=scrollThisInstance}),30),drop=function({originalEvent:originalEvent,putSortable:putSortable,dragEl:dragEl,activeSortable:activeSortable,dispatchSortableEvent:dispatchSortableEvent,hideGhostForTarget:hideGhostForTarget,unhideGhostForTarget:unhideGhostForTarget}){if(!originalEvent)return;let toSortable=putSortable||activeSortable;hideGhostForTarget();let touch=originalEvent.changedTouches&&originalEvent.changedTouches.length?originalEvent.changedTouches[0]:originalEvent,target=document.elementFromPoint(touch.clientX,touch.clientY);unhideGhostForTarget(),toSortable&&!toSortable.el.contains(target)&&(dispatchSortableEvent("spill"),this.onSpill({dragEl:dragEl,putSortable:putSortable}))};function Revert(){}function Remove(){}let lastSwapEl;Revert.prototype={startIndex:null,dragStart({oldDraggableIndex:oldDraggableIndex}){this.startIndex=oldDraggableIndex},onSpill({dragEl:dragEl,putSortable:putSortable}){this.sortable.captureAnimationState(),putSortable&&putSortable.captureAnimationState();let nextSibling=getChild(this.sortable.el,this.startIndex,this.options);nextSibling?this.sortable.el.insertBefore(dragEl,nextSibling):this.sortable.el.appendChild(dragEl),this.sortable.animateAll(),putSortable&&putSortable.animateAll()},drop:drop},Object.assign(Revert,{pluginName:"revertOnSpill"}),Remove.prototype={onSpill({dragEl:dragEl,putSortable:putSortable}){const parentSortable=putSortable||this.sortable;parentSortable.captureAnimationState(),dragEl.parentNode&&dragEl.parentNode.removeChild(dragEl),parentSortable.animateAll()},drop:drop},Object.assign(Remove,{pluginName:"removeOnSpill"});let lastMultiDragSelect,multiDragSortable,dragEl$1,clonesFromRect,clonesHidden,multiDragElements=[],multiDragClones=[],initialFolding=!1,folding=!1,dragStarted=!1;function insertMultiDragClones(elementsInserted,rootEl){multiDragClones.forEach((clone,i)=>{let target=rootEl.children[clone.sortableIndex+(elementsInserted?Number(i):0)];target?rootEl.insertBefore(clone,target):rootEl.appendChild(clone)})}function removeMultiDragElements(){multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&multiDragElement.parentNode&&multiDragElement.parentNode.removeChild(multiDragElement)})}return Sortable.mount(new function(){function AutoScroll(){this.defaults={scroll:!0,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(let fn in this)"_"===fn.charAt(0)&&"function"==typeof this[fn]&&(this[fn]=this[fn].bind(this))}return AutoScroll.prototype={dragStarted({originalEvent:originalEvent}){this.sortable.nativeDraggable?on(document,"dragover",this._handleAutoScroll):this.options.supportPointer?on(document,"pointermove",this._handleFallbackAutoScroll):originalEvent.touches?on(document,"touchmove",this._handleFallbackAutoScroll):on(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted({originalEvent:originalEvent}){this.options.dragOverBubble||originalEvent.rootEl||this._handleAutoScroll(originalEvent)},drop(){this.sortable.nativeDraggable?off(document,"dragover",this._handleAutoScroll):(off(document,"pointermove",this._handleFallbackAutoScroll),off(document,"touchmove",this._handleFallbackAutoScroll),off(document,"mousemove",this._handleFallbackAutoScroll)),clearPointerElemChangedInterval(),clearAutoScrolls(),clearTimeout(_throttleTimeout),_throttleTimeout=void 0},nulling(){touchEvt$1=scrollRootEl=scrollEl=scrolling=pointerElemChangedInterval=lastAutoScrollX=lastAutoScrollY=null,autoScrolls.length=0},_handleFallbackAutoScroll(evt){this._handleAutoScroll(evt,!0)},_handleAutoScroll(evt,fallback){const x=(evt.touches?evt.touches[0]:evt).clientX,y=(evt.touches?evt.touches[0]:evt).clientY,elem=document.elementFromPoint(x,y);if(touchEvt$1=evt,fallback||Edge||IE11OrLess||Safari){autoScroll(evt,this.options,elem,fallback);let ogElemScroller=getParentAutoScrollElement(elem,!0);!scrolling||pointerElemChangedInterval&&x===lastAutoScrollX&&y===lastAutoScrollY||(pointerElemChangedInterval&&clearPointerElemChangedInterval(),pointerElemChangedInterval=setInterval(()=>{let newElem=getParentAutoScrollElement(document.elementFromPoint(x,y),!0);newElem!==ogElemScroller&&(ogElemScroller=newElem,clearAutoScrolls()),autoScroll(evt,this.options,newElem,fallback)},10),lastAutoScrollX=x,lastAutoScrollY=y)}else{if(!this.options.bubbleScroll||getParentAutoScrollElement(elem,!0)===getWindowScrollingElement())return void clearAutoScrolls();autoScroll(evt,this.options,getParentAutoScrollElement(elem,!1),!1)}}},Object.assign(AutoScroll,{pluginName:"scroll",initializeByDefault:!0})}),Sortable.mount(Remove,Revert),Sortable.mount(new function(){function Swap(){this.defaults={swapClass:"sortable-swap-highlight"}}return Swap.prototype={dragStart({dragEl:dragEl}){lastSwapEl=dragEl},dragOverValid({completed:completed,target:target,onMove:onMove,activeSortable:activeSortable,changed:changed,cancel:cancel}){if(!activeSortable.options.swap)return;let el=this.sortable.el,options=this.options;if(target&&target!==el){let prevSwapEl=lastSwapEl;!1!==onMove(target)?(toggleClass(target,options.swapClass,!0),lastSwapEl=target):lastSwapEl=null,prevSwapEl&&prevSwapEl!==lastSwapEl&&toggleClass(prevSwapEl,options.swapClass,!1)}changed(),completed(!0),cancel()},drop({activeSortable:activeSortable,putSortable:putSortable,dragEl:dragEl}){let toSortable=putSortable||this.sortable,options=this.options;lastSwapEl&&toggleClass(lastSwapEl,options.swapClass,!1),lastSwapEl&&(options.swap||putSortable&&putSortable.options.swap)&&dragEl!==lastSwapEl&&(toSortable.captureAnimationState(),toSortable!==activeSortable&&activeSortable.captureAnimationState(),function(n1,n2){let i1,i2,p1=n1.parentNode,p2=n2.parentNode;if(!p1||!p2||p1.isEqualNode(n2)||p2.isEqualNode(n1))return;i1=index(n1),i2=index(n2),p1.isEqualNode(p2)&&i1<i2&&i2++;p1.insertBefore(n2,p1.children[i1]),p2.insertBefore(n1,p2.children[i2])}(dragEl,lastSwapEl),toSortable.animateAll(),toSortable!==activeSortable&&activeSortable.animateAll())},nulling(){lastSwapEl=null}},Object.assign(Swap,{pluginName:"swap",eventProperties:()=>({swapItem:lastSwapEl})})}),Sortable.mount(new function(){function MultiDrag(sortable){for(let fn in this)"_"===fn.charAt(0)&&"function"==typeof this[fn]&&(this[fn]=this[fn].bind(this));sortable.options.supportPointer?on(document,"pointerup",this._deselectMultiDrag):(on(document,"mouseup",this._deselectMultiDrag),on(document,"touchend",this._deselectMultiDrag)),on(document,"keydown",this._checkKeyDown),on(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,setData(dataTransfer,dragEl){let data="";multiDragElements.length&&multiDragSortable===sortable?multiDragElements.forEach((multiDragElement,i)=>{data+=(i?", ":"")+multiDragElement.textContent}):data=dragEl.textContent,dataTransfer.setData("Text",data)}}}return MultiDrag.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal({dragEl:dragged}){dragEl$1=dragged},delayEnded(){this.isMultiDrag=~multiDragElements.indexOf(dragEl$1)},setupClone({sortable:sortable,cancel:cancel}){if(this.isMultiDrag){for(let i=0;i<multiDragElements.length;i++)multiDragClones.push(clone(multiDragElements[i])),multiDragClones[i].sortableIndex=multiDragElements[i].sortableIndex,multiDragClones[i].draggable=!1,multiDragClones[i].style["will-change"]="",toggleClass(multiDragClones[i],this.options.selectedClass,!1),multiDragElements[i]===dragEl$1&&toggleClass(multiDragClones[i],this.options.chosenClass,!1);sortable._hideClone(),cancel()}},clone({sortable:sortable,rootEl:rootEl,dispatchSortableEvent:dispatchSortableEvent,cancel:cancel}){this.isMultiDrag&&(this.options.removeCloneOnHide||multiDragElements.length&&multiDragSortable===sortable&&(insertMultiDragClones(!0,rootEl),dispatchSortableEvent("clone"),cancel()))},showClone({cloneNowShown:cloneNowShown,rootEl:rootEl,cancel:cancel}){this.isMultiDrag&&(insertMultiDragClones(!1,rootEl),multiDragClones.forEach(clone=>{css(clone,"display","")}),cloneNowShown(),clonesHidden=!1,cancel())},hideClone({sortable:sortable,cloneNowHidden:cloneNowHidden,cancel:cancel}){this.isMultiDrag&&(multiDragClones.forEach(clone=>{css(clone,"display","none"),this.options.removeCloneOnHide&&clone.parentNode&&clone.parentNode.removeChild(clone)}),cloneNowHidden(),clonesHidden=!0,cancel())},dragStartGlobal({sortable:sortable}){!this.isMultiDrag&&multiDragSortable&&multiDragSortable.multiDrag._deselectMultiDrag(),multiDragElements.forEach(multiDragElement=>{multiDragElement.sortableIndex=index(multiDragElement)}),multiDragElements=multiDragElements.sort((function(a,b){return a.sortableIndex-b.sortableIndex})),dragStarted=!0},dragStarted({sortable:sortable}){if(this.isMultiDrag){if(this.options.sort&&(sortable.captureAnimationState(),this.options.animation)){multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&css(multiDragElement,"position","absolute")});let dragRect=getRect(dragEl$1,!1,!0,!0);multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&setRect(multiDragElement,dragRect)}),folding=!0,initialFolding=!0}sortable.animateAll(()=>{folding=!1,initialFolding=!1,this.options.animation&&multiDragElements.forEach(multiDragElement=>{unsetRect(multiDragElement)}),this.options.sort&&removeMultiDragElements()})}},dragOver({target:target,completed:completed,cancel:cancel}){folding&&~multiDragElements.indexOf(target)&&(completed(!1),cancel())},revert({fromSortable:fromSortable,rootEl:rootEl,sortable:sortable,dragRect:dragRect}){multiDragElements.length>1&&(multiDragElements.forEach(multiDragElement=>{sortable.addAnimationState({target:multiDragElement,rect:folding?getRect(multiDragElement):dragRect}),unsetRect(multiDragElement),multiDragElement.fromRect=dragRect,fromSortable.removeAnimationState(multiDragElement)}),folding=!1,function(clonesInserted,rootEl){multiDragElements.forEach((multiDragElement,i)=>{let target=rootEl.children[multiDragElement.sortableIndex+(clonesInserted?Number(i):0)];target?rootEl.insertBefore(multiDragElement,target):rootEl.appendChild(multiDragElement)})}(!this.options.removeCloneOnHide,rootEl))},dragOverCompleted({sortable:sortable,isOwner:isOwner,insertion:insertion,activeSortable:activeSortable,parentEl:parentEl,putSortable:putSortable}){let options=this.options;if(insertion){if(isOwner&&activeSortable._hideClone(),initialFolding=!1,options.animation&&multiDragElements.length>1&&(folding||!isOwner&&!activeSortable.options.sort&&!putSortable)){let dragRectAbsolute=getRect(dragEl$1,!1,!0,!0);multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&(setRect(multiDragElement,dragRectAbsolute),parentEl.appendChild(multiDragElement))}),folding=!0}if(!isOwner)if(folding||removeMultiDragElements(),multiDragElements.length>1){let clonesHiddenBefore=clonesHidden;activeSortable._showClone(sortable),activeSortable.options.animation&&!clonesHidden&&clonesHiddenBefore&&multiDragClones.forEach(clone=>{activeSortable.addAnimationState({target:clone,rect:clonesFromRect}),clone.fromRect=clonesFromRect,clone.thisAnimationDuration=null})}else activeSortable._showClone(sortable)}},dragOverAnimationCapture({dragRect:dragRect,isOwner:isOwner,activeSortable:activeSortable}){if(multiDragElements.forEach(multiDragElement=>{multiDragElement.thisAnimationDuration=null}),activeSortable.options.animation&&!isOwner&&activeSortable.multiDrag.isMultiDrag){clonesFromRect=Object.assign({},dragRect);let dragMatrix=matrix(dragEl$1,!0);clonesFromRect.top-=dragMatrix.f,clonesFromRect.left-=dragMatrix.e}},dragOverAnimationComplete(){folding&&(folding=!1,removeMultiDragElements())},drop({originalEvent:evt,rootEl:rootEl,parentEl:parentEl,sortable:sortable,dispatchSortableEvent:dispatchSortableEvent,oldIndex:oldIndex,putSortable:putSortable}){let toSortable=putSortable||this.sortable;if(!evt)return;let options=this.options,children=parentEl.children;if(!dragStarted)if(options.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),toggleClass(dragEl$1,options.selectedClass,!~multiDragElements.indexOf(dragEl$1)),~multiDragElements.indexOf(dragEl$1))multiDragElements.splice(multiDragElements.indexOf(dragEl$1),1),lastMultiDragSelect=null,dispatchEvent({sortable:sortable,rootEl:rootEl,name:"deselect",targetEl:dragEl$1,originalEvt:evt});else{if(multiDragElements.push(dragEl$1),dispatchEvent({sortable:sortable,rootEl:rootEl,name:"select",targetEl:dragEl$1,originalEvt:evt}),evt.shiftKey&&lastMultiDragSelect&&sortable.el.contains(lastMultiDragSelect)){let lastIndex=index(lastMultiDragSelect),currentIndex=index(dragEl$1);if(~lastIndex&&~currentIndex&&lastIndex!==currentIndex){let n,i;for(currentIndex>lastIndex?(i=lastIndex,n=currentIndex):(i=currentIndex,n=lastIndex+1);i<n;i++)~multiDragElements.indexOf(children[i])||(toggleClass(children[i],options.selectedClass,!0),multiDragElements.push(children[i]),dispatchEvent({sortable:sortable,rootEl:rootEl,name:"select",targetEl:children[i],originalEvt:evt}))}}else lastMultiDragSelect=dragEl$1;multiDragSortable=toSortable}if(dragStarted&&this.isMultiDrag){if((parentEl[expando].options.sort||parentEl!==rootEl)&&multiDragElements.length>1){let dragRect=getRect(dragEl$1),multiDragIndex=index(dragEl$1,":not(."+this.options.selectedClass+")");if(!initialFolding&&options.animation&&(dragEl$1.thisAnimationDuration=null),toSortable.captureAnimationState(),!initialFolding&&(options.animation&&(dragEl$1.fromRect=dragRect,multiDragElements.forEach(multiDragElement=>{if(multiDragElement.thisAnimationDuration=null,multiDragElement!==dragEl$1){let rect=folding?getRect(multiDragElement):dragRect;multiDragElement.fromRect=rect,toSortable.addAnimationState({target:multiDragElement,rect:rect})}})),removeMultiDragElements(),multiDragElements.forEach(multiDragElement=>{children[multiDragIndex]?parentEl.insertBefore(multiDragElement,children[multiDragIndex]):parentEl.appendChild(multiDragElement),multiDragIndex++}),oldIndex===index(dragEl$1))){let update=!1;multiDragElements.forEach(multiDragElement=>{multiDragElement.sortableIndex===index(multiDragElement)||(update=!0)}),update&&dispatchSortableEvent("update")}multiDragElements.forEach(multiDragElement=>{unsetRect(multiDragElement)}),toSortable.animateAll()}multiDragSortable=toSortable}(rootEl===parentEl||putSortable&&"clone"!==putSortable.lastPutMode)&&multiDragClones.forEach(clone=>{clone.parentNode&&clone.parentNode.removeChild(clone)})},nullingGlobal(){this.isMultiDrag=dragStarted=!1,multiDragClones.length=0},destroyGlobal(){this._deselectMultiDrag(),off(document,"pointerup",this._deselectMultiDrag),off(document,"mouseup",this._deselectMultiDrag),off(document,"touchend",this._deselectMultiDrag),off(document,"keydown",this._checkKeyDown),off(document,"keyup",this._checkKeyUp)},_deselectMultiDrag(evt){if(!(void 0!==dragStarted&&dragStarted||multiDragSortable!==this.sortable||evt&&closest(evt.target,this.options.draggable,this.sortable.el,!1)||evt&&0!==evt.button))for(;multiDragElements.length;){let el=multiDragElements[0];toggleClass(el,this.options.selectedClass,!1),multiDragElements.shift(),dispatchEvent({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:el,originalEvt:evt})}},_checkKeyDown(evt){evt.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp(evt){evt.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},Object.assign(MultiDrag,{pluginName:"multiDrag",utils:{select(el){let sortable=el.parentNode[expando];sortable&&sortable.options.multiDrag&&!~multiDragElements.indexOf(el)&&(multiDragSortable&&multiDragSortable!==sortable&&(multiDragSortable.multiDrag._deselectMultiDrag(),multiDragSortable=sortable),toggleClass(el,sortable.options.selectedClass,!0),multiDragElements.push(el))},deselect(el){let sortable=el.parentNode[expando],index=multiDragElements.indexOf(el);sortable&&sortable.options.multiDrag&&~index&&(toggleClass(el,sortable.options.selectedClass,!1),multiDragElements.splice(index,1))}},eventProperties(){const oldIndicies=[],newIndicies=[];return multiDragElements.forEach(multiDragElement=>{let newIndex;oldIndicies.push({multiDragElement:multiDragElement,index:multiDragElement.sortableIndex}),newIndex=folding&&multiDragElement!==dragEl$1?-1:folding?index(multiDragElement,":not(."+this.options.selectedClass+")"):index(multiDragElement),newIndicies.push({multiDragElement:multiDragElement,index:newIndex})}),{items:[...multiDragElements],clones:[...multiDragClones],oldIndicies:oldIndicies,newIndicies:newIndicies}},optionListeners:{multiDragKey:key=>("ctrl"===(key=key.toLowerCase())?key="Control":key.length>1&&(key=key.charAt(0).toUpperCase()+key.substr(1)),key)}})}),Sortable})),function(){happyFiles.debug&&console.warn("happyfiles.js"),this.HF=function(selector){var hfWrapper,categoriesWrapper,termElements,hf=this;this.selectAll=function(parentNode,selector){if(parentNode){var elements=parentNode.querySelectorAll(selector);return Array.prototype.slice.apply(elements)}},this.onUpload=function(){void 0!==wp.Uploader&&(void 0!==wp.Uploader.queue&&wp.Uploader.queue.on("all",(function(fileObj,serverData){var uploadWrapper=document.getElementById("hf-upload-wrapper");uploadWrapper&&("add"===fileObj&&(uploadWrapper.classList.remove("is-uploaded"),uploadWrapper.classList.add("is-uploading")),"reset"===fileObj&&(uploadWrapper.classList.add("is-uploaded"),setTimeout(()=>{uploadWrapper.classList.remove("is-uploading")},1e3)))})),jQuery.extend(wp.Uploader.prototype,{init:function(file_attachment){this.uploader.bind("BeforeUpload",(function(up,file){up.settings.multipart_params.hfTermId=parseInt(happyFiles.open)}))},success:function(file_attachment){var openTerm=happyFiles.open;happyFiles.terms.forEach((function(term){"all"==term.term_id&&(term.count+=1),"-1"!=term.term_id||happyFiles.canEdit||(term.count+=1),null==openTerm||"all"==openTerm||"-1"==openTerm?-1==term.term_id&&(term.count+=1):term.term_id==openTerm&&happyFiles.canEdit&&(term.count+=1)})),hf.refreshAttachmentsBrowser()}}))},this.onDelete=function(){jQuery(document).ajaxSuccess((function(event,xhr,settings){settings.hasOwnProperty("data")&&"string"==typeof settings.data&&-1!=settings.data.indexOf("action=delete-post")&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_attachment_terms",postType:happyFiles.postType,taxonomy:happyFiles.taxonomy},success:function(res){!0===res.success&&res.data.hasOwnProperty("terms")&&(happyFiles.terms=res.data.terms,hf.updateTermCount())}})}))},this.initFilter=function(){var HappyFilesMediaLibraryTaxonomyFilter=wp.media.view.AttachmentFilters.extend({id:happyFiles.filterId,createFilters:function(){var filters={};_.each(happyFiles.terms||{},(function(value,index){var term=happyFiles.terms[index],term_id=term.term_id;filters[term_id]={text:value.name,props:{[happyFiles.taxonomy]:term.hasOwnProperty("value")?term.value:term_id},priority:20}})),filters.all.priority=10,filters[-1].priority=11,this.filters=filters,happyFiles.filters=this.filters}}),AttachmentsBrowser=wp.media.view.AttachmentsBrowser;wp.media.view.AttachmentsBrowser=wp.media.view.AttachmentsBrowser.extend({createToolbar:function(){happyFiles.attachmentsBrowser=this,AttachmentsBrowser.prototype.createToolbar.call(this),this.toolbar.set("HappyFilesMediaLibraryTaxonomyFilter",new HappyFilesMediaLibraryTaxonomyFilter({controller:this.controller,model:this.collection.props,priority:-75}).render())}})},this.onUpload(),this.onDelete(),this.initFilter(),this.newCategoryListener=function(){var newCategoryWrapper=document.getElementById("hf-new-category-wrapper"),newCategoryToggle=document.getElementById("hf-new-category-toggle"),createCategoryButton=document.getElementById("hf-new-category-create"),createCategoryInput=document.getElementById("hf-new-category-input"),upgradeWrapper=document.getElementById("hf-upgrade-notification-wrapper");newCategoryWrapper&&newCategoryToggle&&newCategoryToggle.addEventListener("click",(function(e){(e.preventDefault(),happyFiles.renaming)?alert(happyFiles.l10n.deleteCategoryFinishRenamingFirst):happyFiles.terms.length-2>=10?upgradeWrapper&&(upgradeWrapper.classList.contains("show")?upgradeWrapper.classList.remove("show"):upgradeWrapper.classList.add("show")):(newCategoryWrapper.classList.toggle("show"),newCategoryWrapper.classList.contains("show")&&createCategoryInput.focus())}));var newCategoryCancel=document.getElementById("hf-new-category-cancel");if(newCategoryWrapper&&newCategoryCancel&&newCategoryCancel.addEventListener("click",(function(e){e.preventDefault(),newCategoryWrapper.classList.remove("show")})),createCategoryButton&&createCategoryInput){var createCategory=function(){var newCategoryNames=createCategoryInput.value;newCategoryNames?jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_create_category",newCategoryNames:newCategoryNames,parentId:happyFiles.open,postType:happyFiles.postType,taxonomy:happyFiles.taxonomy},success:function(res){if(!1===res.success&&res.data.hasOwnProperty("error")&&alert(res.data.error),!0===res.success){if(res.data.hasOwnProperty("limit_reached")&&!0===res.data.limit_reached&&upgradeWrapper.classList.add("show"),createCategoryInput.value="",newCategoryToggle.click(),res.data.hasOwnProperty("tree")&&(happyFiles.tree=res.data.tree),res.data.hasOwnProperty("terms")){happyFiles.terms=res.data.terms;var mediaTermSelectElement=document.getElementById(happyFiles.filterId);mediaTermSelectElement&&happyFiles.terms.forEach((function(term,index){if(!(term.term_id<0||isNaN(term.term_id))&&!mediaTermSelectElement.querySelector('option[value="'+term.term_id+'"]')){var newOption=document.createElement("option");newOption.innerText=happyFiles.terms[index].name,newOption.value=happyFiles.terms[index].term_id,mediaTermSelectElement.append(newOption)}})),happyFiles.attachmentsBrowser&&happyFiles.attachmentsBrowser.toolbar.get("HappyFilesMediaLibraryTaxonomyFilter").createFilters()}var noCategoryNotification=document.getElementById("hf-no-category-notification-wrapper");noCategoryNotification&&noCategoryNotification.remove(),hf.init(),hf.contextMenuListener()}}}):alert(happyFiles.l10n.newCategoryNoName)};createCategoryInput.addEventListener("keydown",(function(event){"Enter"===event.key&&createCategory(),"Escape"===event.key&&newCategoryWrapper.classList.remove("show")})),createCategoryButton.addEventListener("click",(function(e){e.preventDefault(),createCategory()}))}},this.renameCategoryListener=function(){var categoryName,renameButton=document.getElementById("hf-rename-category"),termActionsWrapper=document.getElementById("hf-term-action-wrapper");if(renameButton&&categoriesWrapper){var confirmButton=document.getElementById("hf-confirm"),cancelButton=document.getElementById("hf-cancel"),cancel=function(categoryName){var activeTermWrapper=categoriesWrapper.querySelector(".rename"),activeTerm=activeTermWrapper.querySelector(".term");activeTermWrapper&&activeTerm&&(activeTerm.innerHTML,activeTerm.innerText=categoryName,happyFiles.renaming=!1,termActionsWrapper.classList.remove("show"),activeTerm.removeAttribute("contenteditable"),activeTermWrapper.classList.remove("rename"))},rename=function(categoryName){var activeTermWrapper=categoriesWrapper.querySelector(".rename"),activeTerm=activeTermWrapper.querySelector(".term");if(activeTermWrapper&&activeTerm){happyFiles.renaming=!1;var newCategoryName=activeTerm.innerText.trim();newCategoryName?(termActionsWrapper.classList.remove("show"),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_rename_category",newCategoryName:newCategoryName,termId:happyFiles.open,taxonomy:happyFiles.taxonomy},success:function(res){!res.success&&res.data.hasOwnProperty("error")&&(activeTerm.innerText=categoryName,alert(res.data.error)),activeTerm.removeAttribute("contenteditable"),activeTermWrapper.classList.remove("rename")}})):alert(happyFiles.l10n.renameCategoryNoName)}};renameButton.addEventListener("click",(function(e){if(e.preventDefault(),!happyFiles.renaming){var activeTermWrapper=categoriesWrapper.querySelector(".active"),activeTerm=activeTermWrapper.querySelector(".term");if(activeTermWrapper){var activeTermId=parseInt(activeTermWrapper.dataset.termId);activeTermId<=0||isNaN(activeTermId)||(categoryName=activeTerm.innerText,happyFiles.renaming=!0,termActionsWrapper.classList.add("show"),activeTermWrapper.classList.add("rename"),activeTerm.setAttribute("contenteditable",!0),activeTerm.setAttribute("spellcheck",!1),activeTerm.focus(),activeTerm.addEventListener("keydown",(function(event){"Enter"===event.key&&(event.preventDefault(),event.stopPropagation(),rename(categoryName)),"Escape"===event.key&&cancel(categoryName)})))}else alert(happyFiles.l10n.renameCategoryNoCategorySelected)}})),confirmButton&&confirmButton.addEventListener("click",(function(e){rename(categoryName)})),cancelButton&&cancelButton.addEventListener("click",(function(e){cancel(categoryName)}))}},this.deleteCategoryListener=function(){var deleteButton=document.getElementById("hf-delete-category");deleteButton&&deleteButton.addEventListener("click",(function(e){var openTerm=happyFiles.open;openTerm<=0||isNaN(openTerm)?alert(happyFiles.l10n.deleteCategoryNoCategorySelected):happyFiles.renaming?alert(happyFiles.l10n.deleteCategoryFinishRenamingFirst):confirm(happyFiles.l10n.deleteCategoryConfirmation)&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_delete_category",termId:openTerm,taxonomy:happyFiles.taxonomy,postType:happyFiles.postType},success:function(res){if(!1===res.success&&res.data.hasOwnProperty("error"))console.warn(res.data.error);else if(!0===res.success&&res.data.hasOwnProperty("terms")&&res.data.hasOwnProperty("tree")){happyFiles.terms=res.data.terms,happyFiles.tree=res.data.tree;var termElementToDelete=document.getElementById("hf-term-"+openTerm),childWrapper=termElementToDelete.parentNode,parentId=termElementToDelete.dataset.parentId,parentWrapper=document.getElementById("hf-term-"+parentId);if("0"==parentId?hf.init():(document.getElementById("hf-term-"+parentId).querySelector(".term").click(),termElementToDelete.remove(),hf.updateTermCount(),""==childWrapper.innerHTML&&parentWrapper.classList.remove("has-children","open")),hf.refreshAttachmentsBrowser(),hf.listViewRefreshResults(!0),hf.contextMenuListener(),happyFiles.terms.length-2<10){var upgradeWrapper=document.getElementById("hf-upgrade-notification-wrapper");upgradeWrapper&&upgradeWrapper.classList.remove("show")}}}})}))},this.sortCategoriesListener=function(){var sortToggle=document.getElementById("hf-sort-toggle"),sortWrapper=document.getElementById("hf-context-menu-sort-wrapper");sortToggle&&sortWrapper&&(sortToggle.addEventListener("click",(function(e){setTimeout((function(){sortWrapper.classList.toggle("show")}),10)})),document.addEventListener("click",(function(e){sortWrapper.classList.contains("show")&&sortWrapper.classList.remove("show")})),sortWrapper.addEventListener("click",(function(e){sortWrapper.classList.remove("show");var order=!!e.target.dataset.hasOwnProperty("order")&&e.target.dataset.order;order&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_sort_categories",order:order,terms:happyFiles.terms},success:function(res){res.success&&res.data.hasOwnProperty("terms")&&res.data.hasOwnProperty("tree")&&(happyFiles.terms=res.data.terms,happyFiles.tree=res.data.tree,HappyFiles.init())}})})))},this.contextMenuListener=function(){var termElements=hf.selectAll(categoriesWrapper,".term"),contextMenu=document.getElementById("hf-context-menu-wrapper");contextMenu&&termElements.length&&(!0!==happyFiles.initialized&&(document.addEventListener("click",(function(e){contextMenu.classList.contains("show")&&contextMenu.classList.remove("show")})),contextMenu.addEventListener("click",(function(e){switch(e.target.classList.value){case"create":document.getElementById("hf-new-category-toggle").click();break;case"rename":document.getElementById("hf-rename-category").click();break;case"delete":document.getElementById("hf-delete-category").click()}}))),termElements.forEach((function(term){term.addEventListener("contextmenu",(function(e){e.preventDefault(),e.target.click(),happyFiles.renaming||"all"===happyFiles.open||"-1"===happyFiles.open?(contextMenu.querySelector(".create").classList.add("disabled"),contextMenu.querySelector(".rename").classList.add("disabled"),contextMenu.querySelector(".delete").classList.add("disabled")):(contextMenu.querySelector(".create").classList.remove("disabled"),contextMenu.querySelector(".rename").classList.remove("disabled"),contextMenu.querySelector(".delete").classList.remove("disabled")),contextMenu.classList.add("show"),contextMenu.style.left=e.clientX+"px";var distToBottom=window.innerHeight-e.clientY,contextMenuHeight=contextMenu.clientHeight;contextMenu.style.top=distToBottom<contextMenuHeight?e.clientY-contextMenuHeight+"px":e.clientY+"px"}))})))},this.paginationLinksListener=function(){document.body.classList.contains("upload-php")&&happyFiles.listViewDisableAjax||jQuery(document).on("click",".tablenav-pages .pagination-links a",(function(e){e.preventDefault(),e.stopPropagation();var url=this.href;jQuery.ajax({method:"GET",url:url,data:{}}).done((function(e){window.history.replaceState({},"",url);var newDocument=jQuery(e).find("#posts-filter")[0];document.getElementById("posts-filter").innerHTML=newDocument.innerHTML,setTimeout((function(){hf.moveAttachmentListener(),hf.contextMenuListener()}),200)}))}))},this.initSidebar=function(){var sidebarWrapper=document.getElementById("hf-sidebar-wrapper");if(sidebarWrapper){var wrapper=document.createElement("div");wrapper.id="hf-wrapper";var wpMediaWrapper=document.getElementById("wp-media-grid");if(wpMediaWrapper||(wpMediaWrapper=!!document.getElementById("posts-filter")&&document.getElementById("posts-filter").parentNode),wpMediaWrapper){wpMediaWrapper.parentNode.insertBefore(wrapper,wpMediaWrapper);var sidebarWidth=parseInt(happyFiles.width)+52;if(wpMediaWrapper.classList.contains("acf-columns-2")){sidebarWrapper.style.marginTop=0,wpMediaWrapper.style.marginLeft="auto";var acfColumn=wpMediaWrapper.querySelector(".acf-column-2");acfColumn&&(sidebarWidth+=acfColumn.offsetWidth)}wpMediaWrapper.style.width="calc(100% - "+sidebarWidth+"px)",document.body.classList.contains("rtl")&&(wpMediaWrapper.style.marginRight=sidebarWidth-20+"px");var setCategoryHeight=function(){document.getElementById("hf-categories-wrapper").style.height=window.innerHeight-240+"px"};setTimeout((function(){setCategoryHeight()}),10),window.addEventListener("resize",setCategoryHeight),wrapper.appendChild(sidebarWrapper),wrapper.appendChild(wpMediaWrapper),sidebarWrapper.classList.add("show"),HappyFiles.init(),document.addEventListener("mousedown",(function(e){"hf-resizable"===e.target.id&&1===e.which&&(sidebarWrapper.classList.add("resizing"),happyFiles.x=e.clientX,happyFiles.resizing=!0)})),document.addEventListener("mousemove",(function(e){if(happyFiles.resizing){e.preventDefault(),e.stopPropagation();var newWidth=e.clientX-sidebarWrapper.getBoundingClientRect().left-17;if(document.body.classList.contains("rtl")&&(newWidth=sidebarWrapper.getBoundingClientRect().right-e.clientX-17),newWidth<210)return;if(newWidth>600)return;sidebarWrapper.style.width=newWidth+"px";var sidebarWidth=parseInt(newWidth)+52;wpMediaWrapper.style.width="calc(100% - "+sidebarWidth+"px)",document.body.classList.contains("rtl")&&(wpMediaWrapper.style.marginRight=sidebarWidth-20+"px")}})),document.addEventListener("mouseup",(function(e){if(happyFiles.resizing){happyFiles.resizing=!1,happyFiles.width=sidebarWrapper.clientWidth;var newWidth=parseInt(happyFiles.width)-30;sidebarWrapper.classList.remove("resizing"),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_save_sidebar_width",width:newWidth}})}})),!sidebarWrapper.classList.contains("modal")&&happyFiles.width&&happyFiles.width>210&&(sidebarWrapper.style.width=happyFiles.width+"px");var hfToggle=document.getElementById("hf-toggle");hfToggle&&hfToggle.addEventListener("click",(function(e){sidebarWrapper.classList.contains("minimize")?sidebarWrapper.classList.remove("minimize"):sidebarWrapper.classList.add("minimize"),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_save_category_minimize",minimize:sidebarWrapper.classList.contains("minimize"),taxonomy:happyFiles.taxonomy},success:function(res){}})}))}}},this.initCategories=function(){if(categoriesWrapper)if(categoriesWrapper.classList.add("hf-tree-wrapper"),categoriesWrapper.classList.add("hf-sortable-wrapper"),categoriesWrapper){var items=happyFiles.tree;if(items){var html="";!function addListItems(items,level=0){items.forEach((function(item){var hasChildren=item.hasOwnProperty("children")&&item.children.length,itemClasses=["term-wrapper",item.slug];"all"==item.term_id||"-1"==item.term_id?itemClasses.push("ignore"):itemClasses.push("draggable"),hasChildren&&itemClasses.push("has-children"),0!=item.count?html+='<li id="hf-term-'+item.term_id+'" class="'+itemClasses.join(" ")+'" data-term-id="'+item.term_id+'" data-parent-id="'+item.parent+'"  data-level="'+level+'" data-count="'+item.count+'">':html+='<li id="hf-term-'+item.term_id+'" class="'+itemClasses.join(" ")+'" data-term-id="'+item.term_id+'" data-parent-id="'+item.parent+'"  data-level="'+level+'">',html+='<div class="icon"></div>',html+='<div class="term">'+item.name+"</div>","all"!=item.term_id&&"-1"!=item.term_id&&(hasChildren?(html+='<ul class="hf-sortable-wrapper">',addListItems(item.children,level++),html+="</ul>"):html+='<ul class="hf-sortable-wrapper"></ul>'),html+="</li>"}))}(items),categoriesWrapper.innerHTML=html}else console.warn("HappyFilesTree Error: No settings.items array provided for wrapper "+selector)}else console.warn("HappyFilesTree Error: Wrapper not found "+selector)},this.initSortable=function(){for(var uploaderWindow=document.querySelector(".uploader-window"),nestedSortables=hfWrapper.querySelectorAll(".hf-sortable-wrapper"),i=0;i<nestedSortables.length;i++)new Sortable(nestedSortables[i],{animation:20,group:"nested",fallbackOnBody:!0,swapThreshold:.5,handle:".term",filter:".ignore",draggable:".draggable",ghostClass:"hf-sortable-ghost",chosenClass:"hf-sortable-chosen",dragClass:"hf-sortable-drag",onStart:function(event){(uploaderWindow=document.querySelector(".uploader-window"))&&uploaderWindow.classList.add("hide")},onEnd:function(e){uploaderWindow&&setTimeout((function(){uploaderWindow.classList.remove("hide")}),200),function openParentListItem(node){node.classList.contains("hf-tree-wrapper")||(node.parentNode.classList.contains("term-wrapper")&&(node.parentNode.classList.add("has-children"),node.parentNode.classList.add("open")),openParentListItem(node.parentNode))}(e.to),function removeHasChildrenListItem(node){node.classList.contains("hf-tree-wrapper")||(node.classList.contains("hf-sortable-wrapper")&&(node.innerHTML||node.parentNode.classList.remove("has-children")),removeHasChildrenListItem(node.parentNode))}(e.from);for(var terms=hf.selectAll(categoriesWrapper,".draggable"),termIds=[],i=0;i<terms.length;i++){var termId=terms[i].querySelector(".term").parentNode.dataset.termId;termId&&termIds.push(termId)}jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_update_term_position",termIds:termIds},success:function(res){!1===res.success&&res.data.error&&console.warn(res.data.error)}}),termId=e.item.dataset.termId;var parentId=e.item.parentNode.parentNode.dataset.termId;jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_update_term_parent",parentId:parentId,termId:termId,taxonomy:happyFiles.taxonomy},success:function(res){!res.success&&res.data.error&&console.warn(res.data.error)}})}})},this.selectCategoryListener=function(){hf.selectAll(categoriesWrapper,".icon").forEach((function(folderIcon){folderIcon.addEventListener("click",(function(e){var parentWrapper=folderIcon.parentNode;parentWrapper.classList.contains("has-children")&&parentWrapper.classList.toggle("open")}))}));var termElements=hf.selectAll(categoriesWrapper,".term");termElements.forEach((function(termElement){termElement.addEventListener("click",(function(e){var termId=!!termElement.parentNode.dataset.termId&&termElement.parentNode.dataset.termId;if(termId||console.warn("No termId found (selectCategoryListener)"),hfWrapper=document.getElementById("hf-sidebar-wrapper"),happyFiles.open!=termId||!happyFiles.initialized){jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_save_category_state",termId:termId,taxonomy:happyFiles.taxonomy},success:function(res){document.body.classList.contains("upload-php")&&document.getElementById("posts-filter")&&happyFiles.listViewDisableAjax&&happyFiles.initialized&&(location.href=happyFiles.uploadUrl),happyFiles.initialized=!0}});var selectEl=!!hfWrapper.nextElementSibling&&hfWrapper.nextElementSibling.querySelector("#"+happyFiles.filterId);if(!selectEl){var activeModal=jQuery('div[id^="__wp-uploader-id-"].supports-drag-drop:visible');selectEl=jQuery(activeModal).find("#"+happyFiles.filterId)}termId&&selectEl&&jQuery(selectEl).val(termId).change(),happyFiles.initialized&&hf.listViewRefreshResults(!0)}happyFiles.open=termId,termElements.forEach((function(term){term.parentNode.classList.remove("active")})),termElement.parentNode.classList.add("active");var termActionsWrapper=document.getElementById("hf-term-action-wrapper");if(termActionsWrapper&&!happyFiles.renaming){var termCoordinates=termElement.getBoundingClientRect();termActionsWrapper.style.top=termCoordinates.top+"px",termActionsWrapper.style.left=termCoordinates.right-2+"px",document.body.classList.contains("rtl")&&(termActionsWrapper.style.top=termCoordinates.top+"px",termActionsWrapper.style.left=termCoordinates.left-80+"px")}}))}))},this.openCurrentCategory=function(){var openId=happyFiles.open&&document.getElementById("hf-term-"+happyFiles.open)?happyFiles.open:"all",openCategory=function(termId,isParent){var openTermWrapper=categoriesWrapper.querySelector('[data-term-id="'+termId+'"]');if(openTermWrapper){isParent?openTermWrapper.classList.add("open"):openTermWrapper.classList.add("active");var parentTermId=openTermWrapper.dataset.parentId;parentTermId&&0!=parentTermId&&openCategory(parentTermId,!0)}};openCategory(openId,!1);var activeTermWrapper=categoriesWrapper.querySelector(".active"),activeTerm=activeTermWrapper.querySelector(".term");activeTermWrapper&&activeTerm&&(activeTermWrapper.classList.contains("has-children")&&activeTermWrapper.classList.add("open"),activeTerm.click())},this.listViewRefreshResults=function(resetPaged=!1){var formFilter=document.getElementById("posts-filter");if(formFilter&&hfWrapper){for(var formFilterData=jQuery(formFilter).serializeArray(),newFilterData=[],i=0;formFilterData.length>i;i++)-1===["action","action2","_ajax_nonce","_wpnonce","_wp_http_referer"].indexOf(formFilterData[i].name)&&("paged"!=formFilterData[i].name||"1"!=formFilterData[i].value&&!resetPaged?formFilterData[i].value.length&&"0"!=formFilterData[i].value&&formFilterData[i].name!==happyFiles.taxonomy&&("post_status"===formFilterData[i].name&&"all"===formFilterData[i].value||"post_type"===formFilterData[i].name&&"post"===formFilterData[i].value||newFilterData.push({name:formFilterData[i].name,value:formFilterData[i].value})):delete formFilterData[i]);var url=document.body.classList.contains("edit-php")?happyFiles.editUrl:happyFiles.uploadUrl;jQuery.ajax({method:"GET",url:url,data:formFilterData}).done((function(e){newFilterData.length&&(url+="?"+jQuery.param(newFilterData)),window.history.replaceState({},"",url);var newDocument=jQuery(e).find("#posts-filter")[0];document.getElementById("posts-filter").innerHTML=newDocument.innerHTML,hf.init(!1),hf.updateTermCount()}))}},this.showCategoriesListener=function(){var categoryWrapper=document.getElementById("hf-context-menu-categories-wrapper");categoryWrapper&&!happyFiles.initialized&&(document.addEventListener("click",(function(e){categoryWrapper.classList.remove("show"),categoryWrapper.innerText=""})),window.addEventListener("contextmenu",(function(e){var itemId=!(!e.target.classList.contains("attachment")||!e.target.dataset.hasOwnProperty("id"))&&e.target.dataset.id;if(!itemId){if("A"===e.target.nodeName)return;var tableRowId=jQuery(e.target).closest("tr").attr("id");if(!tableRowId)return;itemId=tableRowId.replace(/^\D+/g,"")}itemId&&"-1"!=happyFiles.open&&(categoryWrapper.innerText="",e.preventDefault(),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_item_categories",itemId:itemId,postType:happyFiles.postType,open:happyFiles.open,taxonomy:happyFiles.taxonomy},success:function(res){!1!==res.data&&(res.data.forEach((function(term){var categoryItem=document.createElement("li");categoryItem.innerText=term.name+" ("+term.count+")",categoryItem.dataset.termId=term.term_id,categoryItem.style.paddingLeft=15*term.level+"px",term.term_id==happyFiles.open&&categoryItem.classList.add("disabled"),categoryItem.addEventListener("click",(function(e){var termId=e.target.dataset.termId;termId!=happyFiles.open&&(document.querySelector("#hf-term-"+termId+" .term").click(),categoryWrapper.classList.remove("show"),hf.openCurrentCategory())})),categoryWrapper.appendChild(categoryItem)})),categoryWrapper.style.top=e.clientY+"px",categoryWrapper.style.left=e.clientX+"px",categoryWrapper.classList.add("show"))}}))})))},this.moveAttachmentListener=function(){var draggingWrapper=document.createElement("div");draggingWrapper.id="hf-dragging-wrapper",draggingWrapper.dataset.itemId="",draggingWrapper.dataset.termId="",document.body.append(draggingWrapper),window.addEventListener("mousemove",(function(e){if(draggingWrapper.dataset.itemId){draggingWrapper.classList.add("show"),draggingWrapper.style.left=e.clientX+5+"px",draggingWrapper.style.top=e.clientY+5+"px";var itemCount=draggingWrapper.dataset.itemId.split(",").length,draggingWrapperText=happyFiles.l10n.move+" "+itemCount+" ";draggingWrapperText+=1===itemCount?happyFiles.postTypeSingular:happyFiles.postTypePlural,draggingWrapper.innerText=draggingWrapperText}})),termElements.forEach((function(termElement){var termWrapper=termElement.parentNode;termElement.addEventListener("mouseenter",(function(e){draggingWrapper.dataset.itemId&&(termWrapper.classList.add("droppable"),termWrapper.classList.contains("has-children")&&termWrapper.classList.add("open"),draggingWrapper.innerText="termId: "+termWrapper.dataset.termId,draggingWrapper.dataset.termId=termWrapper.dataset.termId)}))})),termElements.forEach((function(termElement){var termWrapper=termElement.parentNode;termElement.addEventListener("mouseleave",(function(e){draggingWrapper.dataset.itemId&&(termWrapper.classList.remove("droppable"),draggingWrapper.dataset.termId="")}))})),jQuery("#the-list").delegate("tr","mousedown",(function(event){if(1===event.which&&("IMG"===event.target.nodeName||event.target.classList.contains("happyfiles-move"))){event.preventDefault();var checkboxName="attachment"===happyFiles.postType?"media":"post",selectedAttachments=jQuery('#the-list input[name="'+checkboxName+'[]"]:checked');if(selectedAttachments.length){for(var selectedIds=[],i=0;i<selectedAttachments.length;i++)selectedIds.push(selectedAttachments[i].value);selectedIds.length&&(draggingWrapper.dataset.itemId=selectedIds)}else{var attachementId=jQuery(this).attr("id").replace("post-","");attachementId&&(draggingWrapper.dataset.itemId=attachementId)}}})),window.addEventListener("mousedown",(function(event){if(1===event.which&&event.target.classList.contains("attachment")&&event.target.dataset.id){event.preventDefault();var selectedIds=[];event.target.parentNode.classList.contains("attachments")&&hf.selectAll(event.target.parentNode,".selected").forEach((function(selectedAttachment){selectedAttachment.dataset.id&&selectedIds.push(selectedAttachment.dataset.id)}));var draggingItems=event.target.dataset.id;selectedIds.length&&(draggingItems=selectedIds),draggingWrapper.dataset.itemId=draggingItems}})),window.addEventListener("mouseup",(function(event){draggingWrapper.classList.remove("show");var itemId=draggingWrapper.dataset.itemId,termId=draggingWrapper.dataset.termId;itemId&&termId&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_update_attachment_terms",itemId:itemId,termId:termId,openId:happyFiles.open,taxonomy:happyFiles.taxonomy,postType:happyFiles.postType},success:function(res){!1===res.success&&res.data.hasOwnProperty("error")&&console.warn("Error: "+res.data.error),!0===res.success&&res.data.hasOwnProperty("terms")&&(happyFiles.terms=res.data.terms,hf.refreshAttachmentsBrowser(),hf.listViewRefreshResults(),hf.updateTermCount());var mediaFrame=document.querySelector(".media-frame");if(mediaFrame&&mediaFrame.classList.contains("mode-select")){var modeSelectToggleButton=document.querySelector(".select-mode-toggle-button");modeSelectToggleButton&&modeSelectToggleButton.click()}}}),termElements.forEach((function(termElement){termElement.parentNode.classList.remove("droppable"),draggingWrapper.dataset.itemId&&(draggingWrapper.dataset.itemId="",draggingWrapper.dataset.termId="")}))}))},this.updateTermCount=function(){happyFiles.terms.forEach((function(term){termElements.forEach((function(termElement){var termWrapper=termElement.parentNode;termWrapper.dataset.termId==term.term_id&&(0!=term.count?termWrapper.dataset.count=term.count:delete termWrapper.dataset.count)}))}))},this.refreshAttachmentsBrowser=function(){happyFiles.attachmentsBrowser&&happyFiles.attachmentsBrowser.collection.props.set({ignore:+new Date}),hf.updateTermCount()},this.init=function(initCategories=!0){hfWrapper=document.getElementById("hf-sidebar-wrapper"),categoriesWrapper=document.querySelector(selector),happyFiles.minimize&&hfWrapper.classList.add("minimize"),initCategories&&(hf.initCategories(),happyFiles.canEdit&&hf.initSortable()),hf.selectAll(categoriesWrapper,".term-wrapper"),termElements=hf.selectAll(categoriesWrapper,".term"),happyFiles.canEdit&&(hf.moveAttachmentListener(),hf.contextMenuListener()),hf.showCategoriesListener(),hf.selectCategoryListener(),hf.openCurrentCategory(),!0!==happyFiles.initialized&&(hf.paginationLinksListener(),happyFiles.canEdit&&(hf.newCategoryListener(),hf.renameCategoryListener(),hf.deleteCategoryListener(),hf.sortCategoriesListener()))}}}();var HappyFiles=new HF("#hf-categories-wrapper");jQuery(document).ready((function(){document.body.classList.contains("upload-php")&&(happyFiles.debug&&console.warn("library.js"),HappyFiles.initSidebar())})),jQuery(document).ready((function(){document.body.classList.contains("wp-admin")&&document.body.classList.contains("upload-php")||(happyFiles.debug&&console.warn("modal.js"),wp.media.view.Modal.prototype.on("open",(function(e){var happyFilesWrapper=document.getElementById("hf-sidebar-wrapper"),initModal=function(html){var activeModal=jQuery('div[id^="__wp-uploader-id-"].supports-drag-drop:visible'),mediaFrameWrapper=document.querySelector("#"+activeModal.attr("id")+" .media-frame");if(!jQuery(activeModal).hasClass("image-details")){jQuery(html).appendTo("#"+activeModal.attr("id")+" .media-menu"),mediaFrameWrapper.classList.add("hf-view"),mediaFrameWrapper.classList.contains("hide-menu")&&mediaFrameWrapper.classList.remove("hide-menu"),HappyFiles.init(),happyFilesWrapper=document.getElementById("hf-sidebar-wrapper");var selectEl=jQuery(activeModal).find("#"+happyFiles.filterId);selectEl&&happyFilesWrapper&&happyFiles.open&&jQuery(selectEl).val(happyFiles.open).change(),happyFilesWrapper.classList.add("modal"),HappyFiles.refreshAttachmentsBrowser(),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_category_terms_and_tree",postType:happyFiles.postType,taxonomy:happyFiles.taxonomy},success:function(res){res.data.hasOwnProperty("terms")&&(happyFiles.terms=res.data.terms),res.data.hasOwnProperty("tree")&&(happyFiles.tree=res.data.tree),HappyFiles.init(),HappyFiles.openCurrentCategory()}})}};if(happyFilesWrapper)var counter=0,modelInterval=setInterval((function(){var activeModal=jQuery('div[id^="__wp-uploader-id-"].supports-drag-drop:visible'),mediaFrameWrapper=document.querySelector("#"+activeModal.attr("id")+" .media-frame");activeModal&&mediaFrameWrapper?(clearInterval(modelInterval),initModal(happyFilesWrapper)):++counter>=10&&clearInterval(modelInterval)}),100);else jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_categories_html"},success:function(res){res.data.hasOwnProperty("html")&&initModal(res.data.html)}})})),wp.media.view.Modal.prototype.on("close",(function(e){var happyFilesWrapper=document.getElementById("hf-sidebar-wrapper");happyFilesWrapper&&(jQuery(happyFilesWrapper).appendTo("body"),jQuery(happyFilesWrapper).removeClass("modal"))})))})),window.addEventListener("DOMContentLoaded",(function(event){document.body.classList.contains("media-new-php")&&(happyFiles.debug&&console.warn("media-new.js"),uploader&&uploader.bind("BeforeUpload",(function(up,file){var termId=jQuery("#hf-category-upload").val();termId&&(up.settings.multipart_params.hfTermId=parseInt(termId))})))}));
     13     */let pluginEvent=function(eventName,sortable,{evt:originalEvent,...data}={}){PluginManager.pluginEvent.bind(Sortable)(eventName,sortable,{dragEl:dragEl,parentEl:parentEl,ghostEl:ghostEl,rootEl:rootEl,nextEl:nextEl,lastDownEl:lastDownEl,cloneEl:cloneEl,cloneHidden:cloneHidden,dragStarted:moved,putSortable:putSortable,activeSortable:Sortable.active,originalEvent:originalEvent,oldIndex:oldIndex,oldDraggableIndex:oldDraggableIndex,newIndex:newIndex,newDraggableIndex:newDraggableIndex,hideGhostForTarget:_hideGhostForTarget,unhideGhostForTarget:_unhideGhostForTarget,cloneNowHidden(){cloneHidden=!0},cloneNowShown(){cloneHidden=!1},dispatchSortableEvent(name){_dispatchEvent({sortable:sortable,name:name,originalEvent:originalEvent})},...data})};function _dispatchEvent(info){dispatchEvent({putSortable:putSortable,cloneEl:cloneEl,targetEl:dragEl,rootEl:rootEl,oldIndex:oldIndex,oldDraggableIndex:oldDraggableIndex,newIndex:newIndex,newDraggableIndex:newDraggableIndex,...info})}let dragEl,parentEl,ghostEl,rootEl,nextEl,lastDownEl,cloneEl,cloneHidden,oldIndex,newIndex,oldDraggableIndex,newDraggableIndex,activeGroup,putSortable,tapEvt,touchEvt,lastDx,lastDy,tapDistanceLeft,tapDistanceTop,moved,lastTarget,lastDirection,targetMoveDistance,ghostRelativeParent,awaitingDragStarted=!1,ignoreNextClick=!1,sortables=[],pastFirstInvertThresh=!1,isCircumstantialInvert=!1,ghostRelativeParentInitialScroll=[],_silent=!1,savedInputChecked=[];const documentExists="undefined"!=typeof document,PositionGhostAbsolutely=IOS,CSSFloatProperty=Edge||IE11OrLess?"cssFloat":"float",supportDraggable=documentExists&&!ChromeForAndroid&&!IOS&&"draggable"in document.createElement("div"),supportCssPointerEvents=function(){if(!documentExists)return;if(IE11OrLess)return!1;let el=document.createElement("x");return el.style.cssText="pointer-events:auto","auto"===el.style.pointerEvents}(),_detectDirection=function(el,options){let elCSS=css(el),elWidth=parseInt(elCSS.width)-parseInt(elCSS.paddingLeft)-parseInt(elCSS.paddingRight)-parseInt(elCSS.borderLeftWidth)-parseInt(elCSS.borderRightWidth),child1=getChild(el,0,options),child2=getChild(el,1,options),firstChildCSS=child1&&css(child1),secondChildCSS=child2&&css(child2),firstChildWidth=firstChildCSS&&parseInt(firstChildCSS.marginLeft)+parseInt(firstChildCSS.marginRight)+getRect(child1).width,secondChildWidth=secondChildCSS&&parseInt(secondChildCSS.marginLeft)+parseInt(secondChildCSS.marginRight)+getRect(child2).width;if("flex"===elCSS.display)return"column"===elCSS.flexDirection||"column-reverse"===elCSS.flexDirection?"vertical":"horizontal";if("grid"===elCSS.display)return elCSS.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(child1&&firstChildCSS.float&&"none"!==firstChildCSS.float){let touchingSideChild2="left"===firstChildCSS.float?"left":"right";return!child2||"both"!==secondChildCSS.clear&&secondChildCSS.clear!==touchingSideChild2?"horizontal":"vertical"}return child1&&("block"===firstChildCSS.display||"flex"===firstChildCSS.display||"table"===firstChildCSS.display||"grid"===firstChildCSS.display||firstChildWidth>=elWidth&&"none"===elCSS[CSSFloatProperty]||child2&&"none"===elCSS[CSSFloatProperty]&&firstChildWidth+secondChildWidth>elWidth)?"vertical":"horizontal"},_prepareGroup=function(options){function toFn(value,pull){return function(to,from,dragEl,evt){let sameGroup=to.options.group.name&&from.options.group.name&&to.options.group.name===from.options.group.name;if(null==value&&(pull||sameGroup))return!0;if(null==value||!1===value)return!1;if(pull&&"clone"===value)return value;if("function"==typeof value)return toFn(value(to,from,dragEl,evt),pull)(to,from,dragEl,evt);{let otherGroup=(pull?to:from).options.group.name;return!0===value||"string"==typeof value&&value===otherGroup||value.join&&value.indexOf(otherGroup)>-1}}}let group={},originalGroup=options.group;originalGroup&&"object"==typeof originalGroup||(originalGroup={name:originalGroup}),group.name=originalGroup.name,group.checkPull=toFn(originalGroup.pull,!0),group.checkPut=toFn(originalGroup.put),group.revertClone=originalGroup.revertClone,options.group=group},_hideGhostForTarget=function(){!supportCssPointerEvents&&ghostEl&&css(ghostEl,"display","none")},_unhideGhostForTarget=function(){!supportCssPointerEvents&&ghostEl&&css(ghostEl,"display","")};documentExists&&document.addEventListener("click",(function(evt){if(ignoreNextClick)return evt.preventDefault(),evt.stopPropagation&&evt.stopPropagation(),evt.stopImmediatePropagation&&evt.stopImmediatePropagation(),ignoreNextClick=!1,!1}),!0);let nearestEmptyInsertDetectEvent=function(evt){if(dragEl){let nearest=function(x,y){let ret;return sortables.some(sortable=>{if(lastChild(sortable))return;let rect=getRect(sortable),threshold=sortable[expando].options.emptyInsertThreshold,insideHorizontally=x>=rect.left-threshold&&x<=rect.right+threshold,insideVertically=y>=rect.top-threshold&&y<=rect.bottom+threshold;return threshold&&insideHorizontally&&insideVertically?ret=sortable:void 0}),ret}((evt=evt.touches?evt.touches[0]:evt).clientX,evt.clientY);if(nearest){let event={};for(let i in evt)evt.hasOwnProperty(i)&&(event[i]=evt[i]);event.target=event.rootEl=nearest,event.preventDefault=void 0,event.stopPropagation=void 0,nearest[expando]._onDragOver(event)}}},_checkOutsideTargetEl=function(evt){dragEl&&dragEl.parentNode[expando]._isOutsideThisEl(evt.target)};function Sortable(el,options){if(!el||!el.nodeType||1!==el.nodeType)throw`Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(el)}`;this.el=el,this.options=options=Object.assign({},options),el[expando]=this;let defaults={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(el.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return _detectDirection(el,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(dataTransfer,dragEl){dataTransfer.setData("Text",dragEl.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Sortable.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};PluginManager.initializePlugins(this,el,defaults);for(let name in defaults)!(name in options)&&(options[name]=defaults[name]);_prepareGroup(options);for(let fn in this)"_"===fn.charAt(0)&&"function"==typeof this[fn]&&(this[fn]=this[fn].bind(this));this.nativeDraggable=!options.forceFallback&&supportDraggable,this.nativeDraggable&&(this.options.touchStartThreshold=1),options.supportPointer?on(el,"pointerdown",this._onTapStart):(on(el,"mousedown",this._onTapStart),on(el,"touchstart",this._onTapStart)),this.nativeDraggable&&(on(el,"dragover",this),on(el,"dragenter",this)),sortables.push(this.el),options.store&&options.store.get&&this.sort(options.store.get(this)||[]),Object.assign(this,AnimationStateManager())}function onMove(fromEl,toEl,dragEl,dragRect,targetEl,targetRect,originalEvent,willInsertAfter){let evt,retVal,sortable=fromEl[expando],onMoveFn=sortable.options.onMove;return!window.CustomEvent||IE11OrLess||Edge?(evt=document.createEvent("Event"),evt.initEvent("move",!0,!0)):evt=new CustomEvent("move",{bubbles:!0,cancelable:!0}),evt.to=toEl,evt.from=fromEl,evt.dragged=dragEl,evt.draggedRect=dragRect,evt.related=targetEl||toEl,evt.relatedRect=targetRect||getRect(toEl),evt.willInsertAfter=willInsertAfter,evt.originalEvent=originalEvent,fromEl.dispatchEvent(evt),onMoveFn&&(retVal=onMoveFn.call(sortable,evt,originalEvent)),retVal}function _disableDraggable(el){el.draggable=!1}function _unsilent(){_silent=!1}function _generateId(el){let str=el.tagName+el.className+el.src+el.href+el.textContent,i=str.length,sum=0;for(;i--;)sum+=str.charCodeAt(i);return sum.toString(36)}function _nextTick(fn){return setTimeout(fn,0)}function _cancelNextTick(id){return clearTimeout(id)}Sortable.prototype={constructor:Sortable,_isOutsideThisEl:function(target){this.el.contains(target)||target===this.el||(lastTarget=null)},_getDirection:function(evt,target){return"function"==typeof this.options.direction?this.options.direction.call(this,evt,target,dragEl):this.options.direction},_onTapStart:function(evt){if(!evt.cancelable)return;let _this=this,el=this.el,options=this.options,preventOnFilter=options.preventOnFilter,type=evt.type,touch=evt.touches&&evt.touches[0]||evt.pointerType&&"touch"===evt.pointerType&&evt,target=(touch||evt).target,originalTarget=evt.target.shadowRoot&&(evt.path&&evt.path[0]||evt.composedPath&&evt.composedPath()[0])||target,filter=options.filter;if(function(root){savedInputChecked.length=0;let inputs=root.getElementsByTagName("input"),idx=inputs.length;for(;idx--;){let el=inputs[idx];el.checked&&savedInputChecked.push(el)}}(el),!dragEl&&!(/mousedown|pointerdown/.test(type)&&0!==evt.button||options.disabled||originalTarget.isContentEditable||(target=closest(target,options.draggable,el,!1),target&&target.animated||lastDownEl===target))){if(oldIndex=index(target),oldDraggableIndex=index(target,options.draggable),"function"==typeof filter){if(filter.call(this,evt,target,this))return _dispatchEvent({sortable:_this,rootEl:originalTarget,name:"filter",targetEl:target,toEl:el,fromEl:el}),pluginEvent("filter",_this,{evt:evt}),void(preventOnFilter&&evt.cancelable&&evt.preventDefault())}else if(filter&&(filter=filter.split(",").some((function(criteria){if(criteria=closest(originalTarget,criteria.trim(),el,!1))return _dispatchEvent({sortable:_this,rootEl:criteria,name:"filter",targetEl:target,fromEl:el,toEl:el}),pluginEvent("filter",_this,{evt:evt}),!0})),filter))return void(preventOnFilter&&evt.cancelable&&evt.preventDefault());options.handle&&!closest(originalTarget,options.handle,el,!1)||this._prepareDragStart(evt,touch,target)}},_prepareDragStart:function(evt,touch,target){let dragStartFn,_this=this,el=_this.el,options=_this.options,ownerDocument=el.ownerDocument;if(target&&!dragEl&&target.parentNode===el){let dragRect=getRect(target);if(rootEl=el,dragEl=target,parentEl=dragEl.parentNode,nextEl=dragEl.nextSibling,lastDownEl=target,activeGroup=options.group,Sortable.dragged=dragEl,tapEvt={target:dragEl,clientX:(touch||evt).clientX,clientY:(touch||evt).clientY},tapDistanceLeft=tapEvt.clientX-dragRect.left,tapDistanceTop=tapEvt.clientY-dragRect.top,this._lastX=(touch||evt).clientX,this._lastY=(touch||evt).clientY,dragEl.style["will-change"]="all",dragStartFn=function(){pluginEvent("delayEnded",_this,{evt:evt}),Sortable.eventCanceled?_this._onDrop():(_this._disableDelayedDragEvents(),!FireFox&&_this.nativeDraggable&&(dragEl.draggable=!0),_this._triggerDragStart(evt,touch),_dispatchEvent({sortable:_this,name:"choose",originalEvent:evt}),toggleClass(dragEl,options.chosenClass,!0))},options.ignore.split(",").forEach((function(criteria){find(dragEl,criteria.trim(),_disableDraggable)})),on(ownerDocument,"dragover",nearestEmptyInsertDetectEvent),on(ownerDocument,"mousemove",nearestEmptyInsertDetectEvent),on(ownerDocument,"touchmove",nearestEmptyInsertDetectEvent),on(ownerDocument,"mouseup",_this._onDrop),on(ownerDocument,"touchend",_this._onDrop),on(ownerDocument,"touchcancel",_this._onDrop),FireFox&&this.nativeDraggable&&(this.options.touchStartThreshold=4,dragEl.draggable=!0),pluginEvent("delayStart",this,{evt:evt}),!options.delay||options.delayOnTouchOnly&&!touch||this.nativeDraggable&&(Edge||IE11OrLess))dragStartFn();else{if(Sortable.eventCanceled)return void this._onDrop();on(ownerDocument,"mouseup",_this._disableDelayedDrag),on(ownerDocument,"touchend",_this._disableDelayedDrag),on(ownerDocument,"touchcancel",_this._disableDelayedDrag),on(ownerDocument,"mousemove",_this._delayedDragTouchMoveHandler),on(ownerDocument,"touchmove",_this._delayedDragTouchMoveHandler),options.supportPointer&&on(ownerDocument,"pointermove",_this._delayedDragTouchMoveHandler),_this._dragStartTimer=setTimeout(dragStartFn,options.delay)}}},_delayedDragTouchMoveHandler:function(e){let touch=e.touches?e.touches[0]:e;Math.max(Math.abs(touch.clientX-this._lastX),Math.abs(touch.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){dragEl&&_disableDraggable(dragEl),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){let ownerDocument=this.el.ownerDocument;off(ownerDocument,"mouseup",this._disableDelayedDrag),off(ownerDocument,"touchend",this._disableDelayedDrag),off(ownerDocument,"touchcancel",this._disableDelayedDrag),off(ownerDocument,"mousemove",this._delayedDragTouchMoveHandler),off(ownerDocument,"touchmove",this._delayedDragTouchMoveHandler),off(ownerDocument,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(evt,touch){touch=touch||"touch"==evt.pointerType&&evt,!this.nativeDraggable||touch?this.options.supportPointer?on(document,"pointermove",this._onTouchMove):on(document,touch?"touchmove":"mousemove",this._onTouchMove):(on(dragEl,"dragend",this),on(rootEl,"dragstart",this._onDragStart));try{document.selection?_nextTick((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(err){}},_dragStarted:function(fallback,evt){if(awaitingDragStarted=!1,rootEl&&dragEl){pluginEvent("dragStarted",this,{evt:evt}),this.nativeDraggable&&on(document,"dragover",_checkOutsideTargetEl);let options=this.options;!fallback&&toggleClass(dragEl,options.dragClass,!1),toggleClass(dragEl,options.ghostClass,!0),Sortable.active=this,fallback&&this._appendGhost(),_dispatchEvent({sortable:this,name:"start",originalEvent:evt})}else this._nulling()},_emulateDragOver:function(){if(touchEvt){this._lastX=touchEvt.clientX,this._lastY=touchEvt.clientY,_hideGhostForTarget();let target=document.elementFromPoint(touchEvt.clientX,touchEvt.clientY),parent=target;for(;target&&target.shadowRoot&&(target=target.shadowRoot.elementFromPoint(touchEvt.clientX,touchEvt.clientY),target!==parent);)parent=target;if(dragEl.parentNode[expando]._isOutsideThisEl(target),parent)do{if(parent[expando]){let inserted;if(inserted=parent[expando]._onDragOver({clientX:touchEvt.clientX,clientY:touchEvt.clientY,target:target,rootEl:parent}),inserted&&!this.options.dragoverBubble)break}target=parent}while(parent=parent.parentNode);_unhideGhostForTarget()}},_onTouchMove:function(evt){if(tapEvt){let options=this.options,fallbackTolerance=options.fallbackTolerance,fallbackOffset=options.fallbackOffset,touch=evt.touches?evt.touches[0]:evt,ghostMatrix=ghostEl&&matrix(ghostEl,!0),scaleX=ghostEl&&ghostMatrix&&ghostMatrix.a,scaleY=ghostEl&&ghostMatrix&&ghostMatrix.d,relativeScrollOffset=PositionGhostAbsolutely&&ghostRelativeParent&&getRelativeScrollOffset(ghostRelativeParent),dx=(touch.clientX-tapEvt.clientX+fallbackOffset.x)/(scaleX||1)+(relativeScrollOffset?relativeScrollOffset[0]-ghostRelativeParentInitialScroll[0]:0)/(scaleX||1),dy=(touch.clientY-tapEvt.clientY+fallbackOffset.y)/(scaleY||1)+(relativeScrollOffset?relativeScrollOffset[1]-ghostRelativeParentInitialScroll[1]:0)/(scaleY||1);if(!Sortable.active&&!awaitingDragStarted){if(fallbackTolerance&&Math.max(Math.abs(touch.clientX-this._lastX),Math.abs(touch.clientY-this._lastY))<fallbackTolerance)return;this._onDragStart(evt,!0)}if(ghostEl){ghostMatrix?(ghostMatrix.e+=dx-(lastDx||0),ghostMatrix.f+=dy-(lastDy||0)):ghostMatrix={a:1,b:0,c:0,d:1,e:dx,f:dy};let cssMatrix=`matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`;css(ghostEl,"webkitTransform",cssMatrix),css(ghostEl,"mozTransform",cssMatrix),css(ghostEl,"msTransform",cssMatrix),css(ghostEl,"transform",cssMatrix),lastDx=dx,lastDy=dy,touchEvt=touch}evt.cancelable&&evt.preventDefault()}},_appendGhost:function(){if(!ghostEl){let container=this.options.fallbackOnBody?document.body:rootEl,rect=getRect(dragEl,!0,PositionGhostAbsolutely,!0,container),options=this.options;if(PositionGhostAbsolutely){for(ghostRelativeParent=container;"static"===css(ghostRelativeParent,"position")&&"none"===css(ghostRelativeParent,"transform")&&ghostRelativeParent!==document;)ghostRelativeParent=ghostRelativeParent.parentNode;ghostRelativeParent!==document.body&&ghostRelativeParent!==document.documentElement?(ghostRelativeParent===document&&(ghostRelativeParent=getWindowScrollingElement()),rect.top+=ghostRelativeParent.scrollTop,rect.left+=ghostRelativeParent.scrollLeft):ghostRelativeParent=getWindowScrollingElement(),ghostRelativeParentInitialScroll=getRelativeScrollOffset(ghostRelativeParent)}ghostEl=dragEl.cloneNode(!0),toggleClass(ghostEl,options.ghostClass,!1),toggleClass(ghostEl,options.fallbackClass,!0),toggleClass(ghostEl,options.dragClass,!0),css(ghostEl,"transition",""),css(ghostEl,"transform",""),css(ghostEl,"box-sizing","border-box"),css(ghostEl,"margin",0),css(ghostEl,"top",rect.top),css(ghostEl,"left",rect.left),css(ghostEl,"width",rect.width),css(ghostEl,"height",rect.height),css(ghostEl,"opacity","0.8"),css(ghostEl,"position",PositionGhostAbsolutely?"absolute":"fixed"),css(ghostEl,"zIndex","100000"),css(ghostEl,"pointerEvents","none"),Sortable.ghost=ghostEl,container.appendChild(ghostEl),css(ghostEl,"transform-origin",tapDistanceLeft/parseInt(ghostEl.style.width)*100+"% "+tapDistanceTop/parseInt(ghostEl.style.height)*100+"%")}},_onDragStart:function(evt,fallback){let _this=this,dataTransfer=evt.dataTransfer,options=_this.options;pluginEvent("dragStart",this,{evt:evt}),Sortable.eventCanceled?this._onDrop():(pluginEvent("setupClone",this),Sortable.eventCanceled||(cloneEl=clone(dragEl),cloneEl.draggable=!1,cloneEl.style["will-change"]="",this._hideClone(),toggleClass(cloneEl,this.options.chosenClass,!1),Sortable.clone=cloneEl),_this.cloneId=_nextTick((function(){pluginEvent("clone",_this),Sortable.eventCanceled||(_this.options.removeCloneOnHide||rootEl.insertBefore(cloneEl,dragEl),_this._hideClone(),_dispatchEvent({sortable:_this,name:"clone"}))})),!fallback&&toggleClass(dragEl,options.dragClass,!0),fallback?(ignoreNextClick=!0,_this._loopId=setInterval(_this._emulateDragOver,50)):(off(document,"mouseup",_this._onDrop),off(document,"touchend",_this._onDrop),off(document,"touchcancel",_this._onDrop),dataTransfer&&(dataTransfer.effectAllowed="move",options.setData&&options.setData.call(_this,dataTransfer,dragEl)),on(document,"drop",_this),css(dragEl,"transform","translateZ(0)")),awaitingDragStarted=!0,_this._dragStartId=_nextTick(_this._dragStarted.bind(_this,fallback,evt)),on(document,"selectstart",_this),moved=!0,Safari&&css(document.body,"user-select","none"))},_onDragOver:function(evt){let dragRect,targetRect,revert,vertical,el=this.el,target=evt.target,options=this.options,group=options.group,activeSortable=Sortable.active,isOwner=activeGroup===group,canSort=options.sort,fromSortable=putSortable||activeSortable,_this=this,completedFired=!1;if(!_silent){if(void 0!==evt.preventDefault&&evt.cancelable&&evt.preventDefault(),target=closest(target,options.draggable,el,!0),dragOverEvent("dragOver"),Sortable.eventCanceled)return completedFired;if(dragEl.contains(evt.target)||target.animated&&target.animatingX&&target.animatingY||_this._ignoreWhileAnimating===target)return completed(!1);if(ignoreNextClick=!1,activeSortable&&!options.disabled&&(isOwner?canSort||(revert=!rootEl.contains(dragEl)):putSortable===this||(this.lastPutMode=activeGroup.checkPull(this,activeSortable,dragEl,evt))&&group.checkPut(this,activeSortable,dragEl,evt))){if(vertical="vertical"===this._getDirection(evt,target),dragRect=getRect(dragEl),dragOverEvent("dragOverValid"),Sortable.eventCanceled)return completedFired;if(revert)return parentEl=rootEl,capture(),this._hideClone(),dragOverEvent("revert"),Sortable.eventCanceled||(nextEl?rootEl.insertBefore(dragEl,nextEl):rootEl.appendChild(dragEl)),completed(!0);let elLastChild=lastChild(el,options.draggable);if(!elLastChild||function(evt,vertical,sortable){let rect=getRect(lastChild(sortable.el,sortable.options.draggable));return vertical?evt.clientX>rect.right+10||evt.clientX<=rect.right&&evt.clientY>rect.bottom&&evt.clientX>=rect.left:evt.clientX>rect.right&&evt.clientY>rect.top||evt.clientX<=rect.right&&evt.clientY>rect.bottom+10}(evt,vertical,this)&&!elLastChild.animated){if(elLastChild===dragEl)return completed(!1);if(elLastChild&&el===evt.target&&(target=elLastChild),target&&(targetRect=getRect(target)),!1!==onMove(rootEl,el,dragEl,dragRect,target,targetRect,evt,!!target))return capture(),el.appendChild(dragEl),parentEl=el,changed(),completed(!0)}else if(target.parentNode===el){targetRect=getRect(target);let targetBeforeFirstSwap,sibling,direction=0,differentLevel=dragEl.parentNode!==el,differentRowCol=!function(dragRect,targetRect,vertical){let dragElS1Opp=vertical?dragRect.left:dragRect.top,dragElS2Opp=vertical?dragRect.right:dragRect.bottom,dragElOppLength=vertical?dragRect.width:dragRect.height,targetS1Opp=vertical?targetRect.left:targetRect.top,targetS2Opp=vertical?targetRect.right:targetRect.bottom,targetOppLength=vertical?targetRect.width:targetRect.height;return dragElS1Opp===targetS1Opp||dragElS2Opp===targetS2Opp||dragElS1Opp+dragElOppLength/2===targetS1Opp+targetOppLength/2}(dragEl.animated&&dragEl.toRect||dragRect,target.animated&&target.toRect||targetRect,vertical),side1=vertical?"top":"left",scrolledPastTop=isScrolledPast(target,"top","top")||isScrolledPast(dragEl,"top","top"),scrollBefore=scrolledPastTop?scrolledPastTop.scrollTop:void 0;if(lastTarget!==target&&(targetBeforeFirstSwap=targetRect[side1],pastFirstInvertThresh=!1,isCircumstantialInvert=!differentRowCol&&options.invertSwap||differentLevel),direction=function(evt,target,targetRect,vertical,swapThreshold,invertedSwapThreshold,invertSwap,isLastTarget){let mouseOnAxis=vertical?evt.clientY:evt.clientX,targetLength=vertical?targetRect.height:targetRect.width,targetS1=vertical?targetRect.top:targetRect.left,targetS2=vertical?targetRect.bottom:targetRect.right,invert=!1;if(!invertSwap)if(isLastTarget&&targetMoveDistance<targetLength*swapThreshold){if(!pastFirstInvertThresh&&(1===lastDirection?mouseOnAxis>targetS1+targetLength*invertedSwapThreshold/2:mouseOnAxis<targetS2-targetLength*invertedSwapThreshold/2)&&(pastFirstInvertThresh=!0),pastFirstInvertThresh)invert=!0;else if(1===lastDirection?mouseOnAxis<targetS1+targetMoveDistance:mouseOnAxis>targetS2-targetMoveDistance)return-lastDirection}else if(mouseOnAxis>targetS1+targetLength*(1-swapThreshold)/2&&mouseOnAxis<targetS2-targetLength*(1-swapThreshold)/2)return function(target){return index(dragEl)<index(target)?1:-1}(target);if(invert=invert||invertSwap,invert&&(mouseOnAxis<targetS1+targetLength*invertedSwapThreshold/2||mouseOnAxis>targetS2-targetLength*invertedSwapThreshold/2))return mouseOnAxis>targetS1+targetLength/2?1:-1;return 0}(evt,target,targetRect,vertical,differentRowCol?1:options.swapThreshold,null==options.invertedSwapThreshold?options.swapThreshold:options.invertedSwapThreshold,isCircumstantialInvert,lastTarget===target),0!==direction){let dragIndex=index(dragEl);do{dragIndex-=direction,sibling=parentEl.children[dragIndex]}while(sibling&&("none"===css(sibling,"display")||sibling===ghostEl))}if(0===direction||sibling===target)return completed(!1);lastTarget=target,lastDirection=direction;let nextSibling=target.nextElementSibling,after=!1;after=1===direction;let moveVector=onMove(rootEl,el,dragEl,dragRect,target,targetRect,evt,after);if(!1!==moveVector)return 1!==moveVector&&-1!==moveVector||(after=1===moveVector),_silent=!0,setTimeout(_unsilent,30),capture(),after&&!nextSibling?el.appendChild(dragEl):target.parentNode.insertBefore(dragEl,after?nextSibling:target),scrolledPastTop&&scrollBy(scrolledPastTop,0,scrollBefore-scrolledPastTop.scrollTop),parentEl=dragEl.parentNode,void 0===targetBeforeFirstSwap||isCircumstantialInvert||(targetMoveDistance=Math.abs(targetBeforeFirstSwap-getRect(target)[side1])),changed(),completed(!0)}if(el.contains(dragEl))return completed(!1)}return!1}function dragOverEvent(name,extra){pluginEvent(name,_this,{evt:evt,isOwner:isOwner,axis:vertical?"vertical":"horizontal",revert:revert,dragRect:dragRect,targetRect:targetRect,canSort:canSort,fromSortable:fromSortable,target:target,completed:completed,onMove:(target,after)=>onMove(rootEl,el,dragEl,dragRect,target,getRect(target),evt,after),changed:changed,...extra})}function capture(){dragOverEvent("dragOverAnimationCapture"),_this.captureAnimationState(),_this!==fromSortable&&fromSortable.captureAnimationState()}function completed(insertion){return dragOverEvent("dragOverCompleted",{insertion:insertion}),insertion&&(isOwner?activeSortable._hideClone():activeSortable._showClone(_this),_this!==fromSortable&&(toggleClass(dragEl,putSortable?putSortable.options.ghostClass:activeSortable.options.ghostClass,!1),toggleClass(dragEl,options.ghostClass,!0)),putSortable!==_this&&_this!==Sortable.active?putSortable=_this:_this===Sortable.active&&putSortable&&(putSortable=null),fromSortable===_this&&(_this._ignoreWhileAnimating=target),_this.animateAll((function(){dragOverEvent("dragOverAnimationComplete"),_this._ignoreWhileAnimating=null})),_this!==fromSortable&&(fromSortable.animateAll(),fromSortable._ignoreWhileAnimating=null)),(target===dragEl&&!dragEl.animated||target===el&&!target.animated)&&(lastTarget=null),options.dragoverBubble||evt.rootEl||target===document||(dragEl.parentNode[expando]._isOutsideThisEl(evt.target),!insertion&&nearestEmptyInsertDetectEvent(evt)),!options.dragoverBubble&&evt.stopPropagation&&evt.stopPropagation(),completedFired=!0}function changed(){newIndex=index(dragEl),newDraggableIndex=index(dragEl,options.draggable),_dispatchEvent({sortable:_this,name:"change",toEl:el,newIndex:newIndex,newDraggableIndex:newDraggableIndex,originalEvent:evt})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){off(document,"mousemove",this._onTouchMove),off(document,"touchmove",this._onTouchMove),off(document,"pointermove",this._onTouchMove),off(document,"dragover",nearestEmptyInsertDetectEvent),off(document,"mousemove",nearestEmptyInsertDetectEvent),off(document,"touchmove",nearestEmptyInsertDetectEvent)},_offUpEvents:function(){let ownerDocument=this.el.ownerDocument;off(ownerDocument,"mouseup",this._onDrop),off(ownerDocument,"touchend",this._onDrop),off(ownerDocument,"pointerup",this._onDrop),off(ownerDocument,"touchcancel",this._onDrop),off(document,"selectstart",this)},_onDrop:function(evt){let el=this.el,options=this.options;newIndex=index(dragEl),newDraggableIndex=index(dragEl,options.draggable),pluginEvent("drop",this,{evt:evt}),parentEl=dragEl&&dragEl.parentNode,newIndex=index(dragEl),newDraggableIndex=index(dragEl,options.draggable),Sortable.eventCanceled?this._nulling():(awaitingDragStarted=!1,isCircumstantialInvert=!1,pastFirstInvertThresh=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),_cancelNextTick(this.cloneId),_cancelNextTick(this._dragStartId),this.nativeDraggable&&(off(document,"drop",this),off(el,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Safari&&css(document.body,"user-select",""),css(dragEl,"transform",""),evt&&(moved&&(evt.cancelable&&evt.preventDefault(),!options.dropBubble&&evt.stopPropagation()),ghostEl&&ghostEl.parentNode&&ghostEl.parentNode.removeChild(ghostEl),(rootEl===parentEl||putSortable&&"clone"!==putSortable.lastPutMode)&&cloneEl&&cloneEl.parentNode&&cloneEl.parentNode.removeChild(cloneEl),dragEl&&(this.nativeDraggable&&off(dragEl,"dragend",this),_disableDraggable(dragEl),dragEl.style["will-change"]="",moved&&!awaitingDragStarted&&toggleClass(dragEl,putSortable?putSortable.options.ghostClass:this.options.ghostClass,!1),toggleClass(dragEl,this.options.chosenClass,!1),_dispatchEvent({sortable:this,name:"unchoose",toEl:parentEl,newIndex:null,newDraggableIndex:null,originalEvent:evt}),rootEl!==parentEl?(newIndex>=0&&(_dispatchEvent({rootEl:parentEl,name:"add",toEl:parentEl,fromEl:rootEl,originalEvent:evt}),_dispatchEvent({sortable:this,name:"remove",toEl:parentEl,originalEvent:evt}),_dispatchEvent({rootEl:parentEl,name:"sort",toEl:parentEl,fromEl:rootEl,originalEvent:evt}),_dispatchEvent({sortable:this,name:"sort",toEl:parentEl,originalEvent:evt})),putSortable&&putSortable.save()):newIndex!==oldIndex&&newIndex>=0&&(_dispatchEvent({sortable:this,name:"update",toEl:parentEl,originalEvent:evt}),_dispatchEvent({sortable:this,name:"sort",toEl:parentEl,originalEvent:evt})),Sortable.active&&(null!=newIndex&&-1!==newIndex||(newIndex=oldIndex,newDraggableIndex=oldDraggableIndex),_dispatchEvent({sortable:this,name:"end",toEl:parentEl,originalEvent:evt}),this.save()))),this._nulling())},_nulling:function(){pluginEvent("nulling",this),rootEl=dragEl=parentEl=ghostEl=nextEl=cloneEl=lastDownEl=cloneHidden=tapEvt=touchEvt=moved=newIndex=newDraggableIndex=oldIndex=oldDraggableIndex=lastTarget=lastDirection=putSortable=activeGroup=Sortable.dragged=Sortable.ghost=Sortable.clone=Sortable.active=null,savedInputChecked.forEach((function(el){el.checked=!0})),savedInputChecked.length=lastDx=lastDy=0},handleEvent:function(evt){switch(evt.type){case"drop":case"dragend":this._onDrop(evt);break;case"dragenter":case"dragover":dragEl&&(this._onDragOver(evt),function(evt){evt.dataTransfer&&(evt.dataTransfer.dropEffect="move");evt.cancelable&&evt.preventDefault()}(evt));break;case"selectstart":evt.preventDefault()}},toArray:function(){let el,order=[],children=this.el.children,i=0,n=children.length,options=this.options;for(;i<n;i++)el=children[i],closest(el,options.draggable,this.el,!1)&&order.push(el.getAttribute(options.dataIdAttr)||_generateId(el));return order},sort:function(order){let items={},rootEl=this.el;this.toArray().forEach((function(id,i){let el=rootEl.children[i];closest(el,this.options.draggable,rootEl,!1)&&(items[id]=el)}),this),order.forEach((function(id){items[id]&&(rootEl.removeChild(items[id]),rootEl.appendChild(items[id]))}))},save:function(){let store=this.options.store;store&&store.set&&store.set(this)},closest:function(el,selector){return closest(el,selector||this.options.draggable,this.el,!1)},option:function(name,value){let options=this.options;if(void 0===value)return options[name];{let modifiedValue=PluginManager.modifyOption(this,name,value);options[name]=void 0!==modifiedValue?modifiedValue:value,"group"===name&&_prepareGroup(options)}},destroy:function(){pluginEvent("destroy",this);let el=this.el;el[expando]=null,off(el,"mousedown",this._onTapStart),off(el,"touchstart",this._onTapStart),off(el,"pointerdown",this._onTapStart),this.nativeDraggable&&(off(el,"dragover",this),off(el,"dragenter",this)),Array.prototype.forEach.call(el.querySelectorAll("[draggable]"),(function(el){el.removeAttribute("draggable")})),this._onDrop(),this._disableDelayedDragEvents(),sortables.splice(sortables.indexOf(this.el),1),this.el=el=null},_hideClone:function(){if(!cloneHidden){if(pluginEvent("hideClone",this),Sortable.eventCanceled)return;css(cloneEl,"display","none"),this.options.removeCloneOnHide&&cloneEl.parentNode&&cloneEl.parentNode.removeChild(cloneEl),cloneHidden=!0}},_showClone:function(putSortable){if("clone"===putSortable.lastPutMode){if(cloneHidden){if(pluginEvent("showClone",this),Sortable.eventCanceled)return;rootEl.contains(dragEl)&&!this.options.group.revertClone?rootEl.insertBefore(cloneEl,dragEl):nextEl?rootEl.insertBefore(cloneEl,nextEl):rootEl.appendChild(cloneEl),this.options.group.revertClone&&this.animate(dragEl,cloneEl),css(cloneEl,"display",""),cloneHidden=!1}}else this._hideClone()}},documentExists&&on(document,"touchmove",(function(evt){(Sortable.active||awaitingDragStarted)&&evt.cancelable&&evt.preventDefault()})),Sortable.utils={on:on,off:off,css:css,find:find,is:function(el,selector){return!!closest(el,selector,el,!1)},extend:function(dst,src){if(dst&&src)for(var key in src)src.hasOwnProperty(key)&&(dst[key]=src[key]);return dst},throttle:throttle,closest:closest,toggleClass:toggleClass,clone:clone,index:index,nextTick:_nextTick,cancelNextTick:_cancelNextTick,detectDirection:_detectDirection,getChild:getChild},Sortable.get=function(element){return element[expando]},Sortable.mount=function(...plugins){plugins[0].constructor===Array&&(plugins=plugins[0]),plugins.forEach(plugin=>{if(!plugin.prototype||!plugin.prototype.constructor)throw`Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(plugin)}`;plugin.utils&&(Sortable.utils={...Sortable.utils,...plugin.utils}),PluginManager.mount(plugin)})},Sortable.create=function(el,options){return new Sortable(el,options)},Sortable.version="1.10.2";let scrollEl,scrollRootEl,lastAutoScrollX,lastAutoScrollY,touchEvt$1,pointerElemChangedInterval,autoScrolls=[],scrolling=!1;function clearAutoScrolls(){autoScrolls.forEach((function(autoScroll){clearInterval(autoScroll.pid)})),autoScrolls=[]}function clearPointerElemChangedInterval(){clearInterval(pointerElemChangedInterval)}const autoScroll=throttle((function(evt,options,rootEl,isFallback){if(!options.scroll)return;const x=(evt.touches?evt.touches[0]:evt).clientX,y=(evt.touches?evt.touches[0]:evt).clientY,sens=options.scrollSensitivity,speed=options.scrollSpeed,winScroller=getWindowScrollingElement();let scrollCustomFn,scrollThisInstance=!1;scrollRootEl!==rootEl&&(scrollRootEl=rootEl,clearAutoScrolls(),scrollEl=options.scroll,scrollCustomFn=options.scrollFn,!0===scrollEl&&(scrollEl=getParentAutoScrollElement(rootEl,!0)));let layersOut=0,currentParent=scrollEl;do{let canScrollX,canScrollY,el=currentParent,rect=getRect(el),top=rect.top,bottom=rect.bottom,left=rect.left,right=rect.right,width=rect.width,height=rect.height,scrollWidth=el.scrollWidth,scrollHeight=el.scrollHeight,elCSS=css(el),scrollPosX=el.scrollLeft,scrollPosY=el.scrollTop;el===winScroller?(canScrollX=width<scrollWidth&&("auto"===elCSS.overflowX||"scroll"===elCSS.overflowX||"visible"===elCSS.overflowX),canScrollY=height<scrollHeight&&("auto"===elCSS.overflowY||"scroll"===elCSS.overflowY||"visible"===elCSS.overflowY)):(canScrollX=width<scrollWidth&&("auto"===elCSS.overflowX||"scroll"===elCSS.overflowX),canScrollY=height<scrollHeight&&("auto"===elCSS.overflowY||"scroll"===elCSS.overflowY));let vx=canScrollX&&(Math.abs(right-x)<=sens&&scrollPosX+width<scrollWidth)-(Math.abs(left-x)<=sens&&!!scrollPosX),vy=canScrollY&&(Math.abs(bottom-y)<=sens&&scrollPosY+height<scrollHeight)-(Math.abs(top-y)<=sens&&!!scrollPosY);if(!autoScrolls[layersOut])for(let i=0;i<=layersOut;i++)autoScrolls[i]||(autoScrolls[i]={});autoScrolls[layersOut].vx==vx&&autoScrolls[layersOut].vy==vy&&autoScrolls[layersOut].el===el||(autoScrolls[layersOut].el=el,autoScrolls[layersOut].vx=vx,autoScrolls[layersOut].vy=vy,clearInterval(autoScrolls[layersOut].pid),0==vx&&0==vy||(scrollThisInstance=!0,autoScrolls[layersOut].pid=setInterval(function(){isFallback&&0===this.layer&&Sortable.active._onTouchMove(touchEvt$1);let scrollOffsetY=autoScrolls[this.layer].vy?autoScrolls[this.layer].vy*speed:0,scrollOffsetX=autoScrolls[this.layer].vx?autoScrolls[this.layer].vx*speed:0;"function"==typeof scrollCustomFn&&"continue"!==scrollCustomFn.call(Sortable.dragged.parentNode[expando],scrollOffsetX,scrollOffsetY,evt,touchEvt$1,autoScrolls[this.layer].el)||scrollBy(autoScrolls[this.layer].el,scrollOffsetX,scrollOffsetY)}.bind({layer:layersOut}),24))),layersOut++}while(options.bubbleScroll&&currentParent!==winScroller&&(currentParent=getParentAutoScrollElement(currentParent,!1)));scrolling=scrollThisInstance}),30),drop=function({originalEvent:originalEvent,putSortable:putSortable,dragEl:dragEl,activeSortable:activeSortable,dispatchSortableEvent:dispatchSortableEvent,hideGhostForTarget:hideGhostForTarget,unhideGhostForTarget:unhideGhostForTarget}){if(!originalEvent)return;let toSortable=putSortable||activeSortable;hideGhostForTarget();let touch=originalEvent.changedTouches&&originalEvent.changedTouches.length?originalEvent.changedTouches[0]:originalEvent,target=document.elementFromPoint(touch.clientX,touch.clientY);unhideGhostForTarget(),toSortable&&!toSortable.el.contains(target)&&(dispatchSortableEvent("spill"),this.onSpill({dragEl:dragEl,putSortable:putSortable}))};function Revert(){}function Remove(){}let lastSwapEl;Revert.prototype={startIndex:null,dragStart({oldDraggableIndex:oldDraggableIndex}){this.startIndex=oldDraggableIndex},onSpill({dragEl:dragEl,putSortable:putSortable}){this.sortable.captureAnimationState(),putSortable&&putSortable.captureAnimationState();let nextSibling=getChild(this.sortable.el,this.startIndex,this.options);nextSibling?this.sortable.el.insertBefore(dragEl,nextSibling):this.sortable.el.appendChild(dragEl),this.sortable.animateAll(),putSortable&&putSortable.animateAll()},drop:drop},Object.assign(Revert,{pluginName:"revertOnSpill"}),Remove.prototype={onSpill({dragEl:dragEl,putSortable:putSortable}){const parentSortable=putSortable||this.sortable;parentSortable.captureAnimationState(),dragEl.parentNode&&dragEl.parentNode.removeChild(dragEl),parentSortable.animateAll()},drop:drop},Object.assign(Remove,{pluginName:"removeOnSpill"});let lastMultiDragSelect,multiDragSortable,dragEl$1,clonesFromRect,clonesHidden,multiDragElements=[],multiDragClones=[],initialFolding=!1,folding=!1,dragStarted=!1;function insertMultiDragClones(elementsInserted,rootEl){multiDragClones.forEach((clone,i)=>{let target=rootEl.children[clone.sortableIndex+(elementsInserted?Number(i):0)];target?rootEl.insertBefore(clone,target):rootEl.appendChild(clone)})}function removeMultiDragElements(){multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&multiDragElement.parentNode&&multiDragElement.parentNode.removeChild(multiDragElement)})}return Sortable.mount(new function(){function AutoScroll(){this.defaults={scroll:!0,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(let fn in this)"_"===fn.charAt(0)&&"function"==typeof this[fn]&&(this[fn]=this[fn].bind(this))}return AutoScroll.prototype={dragStarted({originalEvent:originalEvent}){this.sortable.nativeDraggable?on(document,"dragover",this._handleAutoScroll):this.options.supportPointer?on(document,"pointermove",this._handleFallbackAutoScroll):originalEvent.touches?on(document,"touchmove",this._handleFallbackAutoScroll):on(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted({originalEvent:originalEvent}){this.options.dragOverBubble||originalEvent.rootEl||this._handleAutoScroll(originalEvent)},drop(){this.sortable.nativeDraggable?off(document,"dragover",this._handleAutoScroll):(off(document,"pointermove",this._handleFallbackAutoScroll),off(document,"touchmove",this._handleFallbackAutoScroll),off(document,"mousemove",this._handleFallbackAutoScroll)),clearPointerElemChangedInterval(),clearAutoScrolls(),clearTimeout(_throttleTimeout),_throttleTimeout=void 0},nulling(){touchEvt$1=scrollRootEl=scrollEl=scrolling=pointerElemChangedInterval=lastAutoScrollX=lastAutoScrollY=null,autoScrolls.length=0},_handleFallbackAutoScroll(evt){this._handleAutoScroll(evt,!0)},_handleAutoScroll(evt,fallback){const x=(evt.touches?evt.touches[0]:evt).clientX,y=(evt.touches?evt.touches[0]:evt).clientY,elem=document.elementFromPoint(x,y);if(touchEvt$1=evt,fallback||Edge||IE11OrLess||Safari){autoScroll(evt,this.options,elem,fallback);let ogElemScroller=getParentAutoScrollElement(elem,!0);!scrolling||pointerElemChangedInterval&&x===lastAutoScrollX&&y===lastAutoScrollY||(pointerElemChangedInterval&&clearPointerElemChangedInterval(),pointerElemChangedInterval=setInterval(()=>{let newElem=getParentAutoScrollElement(document.elementFromPoint(x,y),!0);newElem!==ogElemScroller&&(ogElemScroller=newElem,clearAutoScrolls()),autoScroll(evt,this.options,newElem,fallback)},10),lastAutoScrollX=x,lastAutoScrollY=y)}else{if(!this.options.bubbleScroll||getParentAutoScrollElement(elem,!0)===getWindowScrollingElement())return void clearAutoScrolls();autoScroll(evt,this.options,getParentAutoScrollElement(elem,!1),!1)}}},Object.assign(AutoScroll,{pluginName:"scroll",initializeByDefault:!0})}),Sortable.mount(Remove,Revert),Sortable.mount(new function(){function Swap(){this.defaults={swapClass:"sortable-swap-highlight"}}return Swap.prototype={dragStart({dragEl:dragEl}){lastSwapEl=dragEl},dragOverValid({completed:completed,target:target,onMove:onMove,activeSortable:activeSortable,changed:changed,cancel:cancel}){if(!activeSortable.options.swap)return;let el=this.sortable.el,options=this.options;if(target&&target!==el){let prevSwapEl=lastSwapEl;!1!==onMove(target)?(toggleClass(target,options.swapClass,!0),lastSwapEl=target):lastSwapEl=null,prevSwapEl&&prevSwapEl!==lastSwapEl&&toggleClass(prevSwapEl,options.swapClass,!1)}changed(),completed(!0),cancel()},drop({activeSortable:activeSortable,putSortable:putSortable,dragEl:dragEl}){let toSortable=putSortable||this.sortable,options=this.options;lastSwapEl&&toggleClass(lastSwapEl,options.swapClass,!1),lastSwapEl&&(options.swap||putSortable&&putSortable.options.swap)&&dragEl!==lastSwapEl&&(toSortable.captureAnimationState(),toSortable!==activeSortable&&activeSortable.captureAnimationState(),function(n1,n2){let i1,i2,p1=n1.parentNode,p2=n2.parentNode;if(!p1||!p2||p1.isEqualNode(n2)||p2.isEqualNode(n1))return;i1=index(n1),i2=index(n2),p1.isEqualNode(p2)&&i1<i2&&i2++;p1.insertBefore(n2,p1.children[i1]),p2.insertBefore(n1,p2.children[i2])}(dragEl,lastSwapEl),toSortable.animateAll(),toSortable!==activeSortable&&activeSortable.animateAll())},nulling(){lastSwapEl=null}},Object.assign(Swap,{pluginName:"swap",eventProperties:()=>({swapItem:lastSwapEl})})}),Sortable.mount(new function(){function MultiDrag(sortable){for(let fn in this)"_"===fn.charAt(0)&&"function"==typeof this[fn]&&(this[fn]=this[fn].bind(this));sortable.options.supportPointer?on(document,"pointerup",this._deselectMultiDrag):(on(document,"mouseup",this._deselectMultiDrag),on(document,"touchend",this._deselectMultiDrag)),on(document,"keydown",this._checkKeyDown),on(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,setData(dataTransfer,dragEl){let data="";multiDragElements.length&&multiDragSortable===sortable?multiDragElements.forEach((multiDragElement,i)=>{data+=(i?", ":"")+multiDragElement.textContent}):data=dragEl.textContent,dataTransfer.setData("Text",data)}}}return MultiDrag.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal({dragEl:dragged}){dragEl$1=dragged},delayEnded(){this.isMultiDrag=~multiDragElements.indexOf(dragEl$1)},setupClone({sortable:sortable,cancel:cancel}){if(this.isMultiDrag){for(let i=0;i<multiDragElements.length;i++)multiDragClones.push(clone(multiDragElements[i])),multiDragClones[i].sortableIndex=multiDragElements[i].sortableIndex,multiDragClones[i].draggable=!1,multiDragClones[i].style["will-change"]="",toggleClass(multiDragClones[i],this.options.selectedClass,!1),multiDragElements[i]===dragEl$1&&toggleClass(multiDragClones[i],this.options.chosenClass,!1);sortable._hideClone(),cancel()}},clone({sortable:sortable,rootEl:rootEl,dispatchSortableEvent:dispatchSortableEvent,cancel:cancel}){this.isMultiDrag&&(this.options.removeCloneOnHide||multiDragElements.length&&multiDragSortable===sortable&&(insertMultiDragClones(!0,rootEl),dispatchSortableEvent("clone"),cancel()))},showClone({cloneNowShown:cloneNowShown,rootEl:rootEl,cancel:cancel}){this.isMultiDrag&&(insertMultiDragClones(!1,rootEl),multiDragClones.forEach(clone=>{css(clone,"display","")}),cloneNowShown(),clonesHidden=!1,cancel())},hideClone({sortable:sortable,cloneNowHidden:cloneNowHidden,cancel:cancel}){this.isMultiDrag&&(multiDragClones.forEach(clone=>{css(clone,"display","none"),this.options.removeCloneOnHide&&clone.parentNode&&clone.parentNode.removeChild(clone)}),cloneNowHidden(),clonesHidden=!0,cancel())},dragStartGlobal({sortable:sortable}){!this.isMultiDrag&&multiDragSortable&&multiDragSortable.multiDrag._deselectMultiDrag(),multiDragElements.forEach(multiDragElement=>{multiDragElement.sortableIndex=index(multiDragElement)}),multiDragElements=multiDragElements.sort((function(a,b){return a.sortableIndex-b.sortableIndex})),dragStarted=!0},dragStarted({sortable:sortable}){if(this.isMultiDrag){if(this.options.sort&&(sortable.captureAnimationState(),this.options.animation)){multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&css(multiDragElement,"position","absolute")});let dragRect=getRect(dragEl$1,!1,!0,!0);multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&setRect(multiDragElement,dragRect)}),folding=!0,initialFolding=!0}sortable.animateAll(()=>{folding=!1,initialFolding=!1,this.options.animation&&multiDragElements.forEach(multiDragElement=>{unsetRect(multiDragElement)}),this.options.sort&&removeMultiDragElements()})}},dragOver({target:target,completed:completed,cancel:cancel}){folding&&~multiDragElements.indexOf(target)&&(completed(!1),cancel())},revert({fromSortable:fromSortable,rootEl:rootEl,sortable:sortable,dragRect:dragRect}){multiDragElements.length>1&&(multiDragElements.forEach(multiDragElement=>{sortable.addAnimationState({target:multiDragElement,rect:folding?getRect(multiDragElement):dragRect}),unsetRect(multiDragElement),multiDragElement.fromRect=dragRect,fromSortable.removeAnimationState(multiDragElement)}),folding=!1,function(clonesInserted,rootEl){multiDragElements.forEach((multiDragElement,i)=>{let target=rootEl.children[multiDragElement.sortableIndex+(clonesInserted?Number(i):0)];target?rootEl.insertBefore(multiDragElement,target):rootEl.appendChild(multiDragElement)})}(!this.options.removeCloneOnHide,rootEl))},dragOverCompleted({sortable:sortable,isOwner:isOwner,insertion:insertion,activeSortable:activeSortable,parentEl:parentEl,putSortable:putSortable}){let options=this.options;if(insertion){if(isOwner&&activeSortable._hideClone(),initialFolding=!1,options.animation&&multiDragElements.length>1&&(folding||!isOwner&&!activeSortable.options.sort&&!putSortable)){let dragRectAbsolute=getRect(dragEl$1,!1,!0,!0);multiDragElements.forEach(multiDragElement=>{multiDragElement!==dragEl$1&&(setRect(multiDragElement,dragRectAbsolute),parentEl.appendChild(multiDragElement))}),folding=!0}if(!isOwner)if(folding||removeMultiDragElements(),multiDragElements.length>1){let clonesHiddenBefore=clonesHidden;activeSortable._showClone(sortable),activeSortable.options.animation&&!clonesHidden&&clonesHiddenBefore&&multiDragClones.forEach(clone=>{activeSortable.addAnimationState({target:clone,rect:clonesFromRect}),clone.fromRect=clonesFromRect,clone.thisAnimationDuration=null})}else activeSortable._showClone(sortable)}},dragOverAnimationCapture({dragRect:dragRect,isOwner:isOwner,activeSortable:activeSortable}){if(multiDragElements.forEach(multiDragElement=>{multiDragElement.thisAnimationDuration=null}),activeSortable.options.animation&&!isOwner&&activeSortable.multiDrag.isMultiDrag){clonesFromRect=Object.assign({},dragRect);let dragMatrix=matrix(dragEl$1,!0);clonesFromRect.top-=dragMatrix.f,clonesFromRect.left-=dragMatrix.e}},dragOverAnimationComplete(){folding&&(folding=!1,removeMultiDragElements())},drop({originalEvent:evt,rootEl:rootEl,parentEl:parentEl,sortable:sortable,dispatchSortableEvent:dispatchSortableEvent,oldIndex:oldIndex,putSortable:putSortable}){let toSortable=putSortable||this.sortable;if(!evt)return;let options=this.options,children=parentEl.children;if(!dragStarted)if(options.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),toggleClass(dragEl$1,options.selectedClass,!~multiDragElements.indexOf(dragEl$1)),~multiDragElements.indexOf(dragEl$1))multiDragElements.splice(multiDragElements.indexOf(dragEl$1),1),lastMultiDragSelect=null,dispatchEvent({sortable:sortable,rootEl:rootEl,name:"deselect",targetEl:dragEl$1,originalEvt:evt});else{if(multiDragElements.push(dragEl$1),dispatchEvent({sortable:sortable,rootEl:rootEl,name:"select",targetEl:dragEl$1,originalEvt:evt}),evt.shiftKey&&lastMultiDragSelect&&sortable.el.contains(lastMultiDragSelect)){let lastIndex=index(lastMultiDragSelect),currentIndex=index(dragEl$1);if(~lastIndex&&~currentIndex&&lastIndex!==currentIndex){let n,i;for(currentIndex>lastIndex?(i=lastIndex,n=currentIndex):(i=currentIndex,n=lastIndex+1);i<n;i++)~multiDragElements.indexOf(children[i])||(toggleClass(children[i],options.selectedClass,!0),multiDragElements.push(children[i]),dispatchEvent({sortable:sortable,rootEl:rootEl,name:"select",targetEl:children[i],originalEvt:evt}))}}else lastMultiDragSelect=dragEl$1;multiDragSortable=toSortable}if(dragStarted&&this.isMultiDrag){if((parentEl[expando].options.sort||parentEl!==rootEl)&&multiDragElements.length>1){let dragRect=getRect(dragEl$1),multiDragIndex=index(dragEl$1,":not(."+this.options.selectedClass+")");if(!initialFolding&&options.animation&&(dragEl$1.thisAnimationDuration=null),toSortable.captureAnimationState(),!initialFolding&&(options.animation&&(dragEl$1.fromRect=dragRect,multiDragElements.forEach(multiDragElement=>{if(multiDragElement.thisAnimationDuration=null,multiDragElement!==dragEl$1){let rect=folding?getRect(multiDragElement):dragRect;multiDragElement.fromRect=rect,toSortable.addAnimationState({target:multiDragElement,rect:rect})}})),removeMultiDragElements(),multiDragElements.forEach(multiDragElement=>{children[multiDragIndex]?parentEl.insertBefore(multiDragElement,children[multiDragIndex]):parentEl.appendChild(multiDragElement),multiDragIndex++}),oldIndex===index(dragEl$1))){let update=!1;multiDragElements.forEach(multiDragElement=>{multiDragElement.sortableIndex===index(multiDragElement)||(update=!0)}),update&&dispatchSortableEvent("update")}multiDragElements.forEach(multiDragElement=>{unsetRect(multiDragElement)}),toSortable.animateAll()}multiDragSortable=toSortable}(rootEl===parentEl||putSortable&&"clone"!==putSortable.lastPutMode)&&multiDragClones.forEach(clone=>{clone.parentNode&&clone.parentNode.removeChild(clone)})},nullingGlobal(){this.isMultiDrag=dragStarted=!1,multiDragClones.length=0},destroyGlobal(){this._deselectMultiDrag(),off(document,"pointerup",this._deselectMultiDrag),off(document,"mouseup",this._deselectMultiDrag),off(document,"touchend",this._deselectMultiDrag),off(document,"keydown",this._checkKeyDown),off(document,"keyup",this._checkKeyUp)},_deselectMultiDrag(evt){if(!(void 0!==dragStarted&&dragStarted||multiDragSortable!==this.sortable||evt&&closest(evt.target,this.options.draggable,this.sortable.el,!1)||evt&&0!==evt.button))for(;multiDragElements.length;){let el=multiDragElements[0];toggleClass(el,this.options.selectedClass,!1),multiDragElements.shift(),dispatchEvent({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:el,originalEvt:evt})}},_checkKeyDown(evt){evt.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp(evt){evt.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},Object.assign(MultiDrag,{pluginName:"multiDrag",utils:{select(el){let sortable=el.parentNode[expando];sortable&&sortable.options.multiDrag&&!~multiDragElements.indexOf(el)&&(multiDragSortable&&multiDragSortable!==sortable&&(multiDragSortable.multiDrag._deselectMultiDrag(),multiDragSortable=sortable),toggleClass(el,sortable.options.selectedClass,!0),multiDragElements.push(el))},deselect(el){let sortable=el.parentNode[expando],index=multiDragElements.indexOf(el);sortable&&sortable.options.multiDrag&&~index&&(toggleClass(el,sortable.options.selectedClass,!1),multiDragElements.splice(index,1))}},eventProperties(){const oldIndicies=[],newIndicies=[];return multiDragElements.forEach(multiDragElement=>{let newIndex;oldIndicies.push({multiDragElement:multiDragElement,index:multiDragElement.sortableIndex}),newIndex=folding&&multiDragElement!==dragEl$1?-1:folding?index(multiDragElement,":not(."+this.options.selectedClass+")"):index(multiDragElement),newIndicies.push({multiDragElement:multiDragElement,index:newIndex})}),{items:[...multiDragElements],clones:[...multiDragClones],oldIndicies:oldIndicies,newIndicies:newIndicies}},optionListeners:{multiDragKey:key=>("ctrl"===(key=key.toLowerCase())?key="Control":key.length>1&&(key=key.charAt(0).toUpperCase()+key.substr(1)),key)}})}),Sortable})),function(){happyFiles.debug&&console.warn("happyfiles.js"),this.HF=function(selector){var hfWrapper,categoriesWrapper,termElements,hf=this;this.selectAll=function(parentNode,selector){if(parentNode){var elements=parentNode.querySelectorAll(selector);return Array.prototype.slice.apply(elements)}},this.onUpload=function(){void 0!==wp.Uploader&&(void 0!==wp.Uploader.queue&&wp.Uploader.queue.on("all",(function(fileObj,serverData){var uploadWrapper=document.getElementById("hf-upload-wrapper");uploadWrapper&&("add"===fileObj&&(uploadWrapper.classList.remove("is-uploaded"),uploadWrapper.classList.add("is-uploading")),"reset"===fileObj&&(uploadWrapper.classList.add("is-uploaded"),setTimeout(()=>{uploadWrapper.classList.remove("is-uploading")},1e3)))})),jQuery.extend(wp.Uploader.prototype,{init:function(file_attachment){this.uploader.bind("BeforeUpload",(function(up,file){up.settings.multipart_params.hfTermId=parseInt(happyFiles.open)}))},success:function(file_attachment){var openTerm=happyFiles.open;happyFiles.terms.forEach((function(term){"all"==term.term_id&&(term.count+=1),"-1"!=term.term_id||happyFiles.canEdit||(term.count+=1),null==openTerm||"all"==openTerm||"-1"==openTerm?-1==term.term_id&&(term.count+=1):term.term_id==openTerm&&happyFiles.canEdit&&(term.count+=1)})),hf.refreshAttachmentsBrowser()}}))},this.onDelete=function(){jQuery(document).ajaxSuccess((function(event,xhr,settings){settings.hasOwnProperty("data")&&"string"==typeof settings.data&&-1!=settings.data.indexOf("action=delete-post")&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_attachment_terms",postType:happyFiles.postType,taxonomy:happyFiles.taxonomy},success:function(res){!0===res.success&&res.data.hasOwnProperty("terms")&&(happyFiles.terms=res.data.terms,hf.updateTermCount())}})}))},this.initFilter=function(){var HappyFilesMediaLibraryTaxonomyFilter=wp.media.view.AttachmentFilters.extend({id:happyFiles.filterId,createFilters:function(){var filters={};_.each(happyFiles.terms||{},(function(value,index){var term=happyFiles.terms[index],term_id=term.term_id;filters[term_id]={text:value.name,props:{[happyFiles.taxonomy]:term.hasOwnProperty("value")?term.value:term_id},priority:20}})),filters.all.priority=10,filters[-1].priority=11,this.filters=filters,happyFiles.filters=this.filters}}),AttachmentsBrowser=wp.media.view.AttachmentsBrowser;wp.media.view.AttachmentsBrowser=wp.media.view.AttachmentsBrowser.extend({createToolbar:function(){happyFiles.attachmentsBrowser=this,AttachmentsBrowser.prototype.createToolbar.call(this),this.toolbar.set("HappyFilesMediaLibraryTaxonomyFilter",new HappyFilesMediaLibraryTaxonomyFilter({controller:this.controller,model:this.collection.props,priority:-75}).render())}})},this.onUpload(),this.onDelete(),this.initFilter(),this.newCategoryListener=function(){var newCategoryWrapper=document.getElementById("hf-new-category-wrapper"),newCategoryToggle=document.getElementById("hf-new-category-toggle"),createCategoryButton=document.getElementById("hf-new-category-create"),createCategoryInput=document.getElementById("hf-new-category-input"),upgradeWrapper=document.getElementById("hf-upgrade-notification-wrapper");newCategoryWrapper&&newCategoryToggle&&newCategoryToggle.addEventListener("click",(function(e){(e.preventDefault(),happyFiles.renaming)?alert(happyFiles.l10n.deleteCategoryFinishRenamingFirst):happyFiles.terms.length-2>=10?upgradeWrapper&&(upgradeWrapper.classList.contains("show")?upgradeWrapper.classList.remove("show"):upgradeWrapper.classList.add("show")):(newCategoryWrapper.classList.toggle("show"),newCategoryWrapper.classList.contains("show")&&createCategoryInput.focus())}));var newCategoryCancel=document.getElementById("hf-new-category-cancel");if(newCategoryWrapper&&newCategoryCancel&&newCategoryCancel.addEventListener("click",(function(e){e.preventDefault(),newCategoryWrapper.classList.remove("show")})),createCategoryButton&&createCategoryInput){var createCategory=function(){var newCategoryNames=createCategoryInput.value;newCategoryNames?jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_create_category",newCategoryNames:newCategoryNames,parentId:happyFiles.open,postType:happyFiles.postType,taxonomy:happyFiles.taxonomy},success:function(res){if(!1===res.success&&res.data.hasOwnProperty("error")&&alert(res.data.error),!0===res.success){if(res.data.hasOwnProperty("limit_reached")&&!0===res.data.limit_reached&&upgradeWrapper.classList.add("show"),createCategoryInput.value="",newCategoryToggle.click(),res.data.hasOwnProperty("tree")&&(happyFiles.tree=res.data.tree),res.data.hasOwnProperty("terms")){happyFiles.terms=res.data.terms;var mediaTermSelectElement=document.getElementById(happyFiles.filterId);mediaTermSelectElement&&happyFiles.terms.forEach((function(term,index){if(!(term.term_id<0||isNaN(term.term_id))&&!mediaTermSelectElement.querySelector('option[value="'+term.term_id+'"]')){var newOption=document.createElement("option");newOption.innerText=happyFiles.terms[index].name,newOption.value=happyFiles.terms[index].term_id,mediaTermSelectElement.append(newOption)}})),happyFiles.attachmentsBrowser&&happyFiles.attachmentsBrowser.toolbar.get("HappyFilesMediaLibraryTaxonomyFilter").createFilters()}var noCategoryNotification=document.getElementById("hf-no-category-notification-wrapper");noCategoryNotification&&noCategoryNotification.remove(),hf.init(),hf.contextMenuListener()}}}):alert(happyFiles.l10n.newCategoryNoName)};createCategoryInput.addEventListener("keydown",(function(event){"Enter"===event.key&&createCategory(),"Escape"===event.key&&newCategoryWrapper.classList.remove("show")})),createCategoryButton.addEventListener("click",(function(e){e.preventDefault(),createCategory()}))}},this.renameCategoryListener=function(){var categoryName,renameButton=document.getElementById("hf-rename-category"),termActionsWrapper=document.getElementById("hf-term-action-wrapper");if(renameButton&&categoriesWrapper){var confirmButton=document.getElementById("hf-confirm"),cancelButton=document.getElementById("hf-cancel"),cancel=function(categoryName){var activeTermWrapper=categoriesWrapper.querySelector(".rename"),activeTerm=activeTermWrapper.querySelector(".term");activeTermWrapper&&activeTerm&&(activeTerm.innerHTML,activeTerm.innerText=categoryName,happyFiles.renaming=!1,termActionsWrapper.classList.remove("show"),activeTerm.removeAttribute("contenteditable"),activeTermWrapper.classList.remove("rename"))},rename=function(categoryName){var activeTermWrapper=categoriesWrapper.querySelector(".rename"),activeTerm=activeTermWrapper.querySelector(".term");if(activeTermWrapper&&activeTerm){happyFiles.renaming=!1;var newCategoryName=activeTerm.innerText.trim();newCategoryName?(termActionsWrapper.classList.remove("show"),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_rename_category",newCategoryName:newCategoryName,termId:happyFiles.open,taxonomy:happyFiles.taxonomy},success:function(res){!res.success&&res.data.hasOwnProperty("error")&&(activeTerm.innerText=categoryName,alert(res.data.error)),activeTerm.removeAttribute("contenteditable"),activeTermWrapper.classList.remove("rename")}})):alert(happyFiles.l10n.renameCategoryNoName)}};renameButton.addEventListener("click",(function(e){if(e.preventDefault(),!happyFiles.renaming){var activeTermWrapper=categoriesWrapper.querySelector(".active"),activeTerm=activeTermWrapper.querySelector(".term");if(activeTermWrapper){var activeTermId=parseInt(activeTermWrapper.dataset.termId);activeTermId<=0||isNaN(activeTermId)||(categoryName=activeTerm.innerText,happyFiles.renaming=!0,termActionsWrapper.classList.add("show"),activeTermWrapper.classList.add("rename"),activeTerm.setAttribute("contenteditable",!0),activeTerm.setAttribute("spellcheck",!1),activeTerm.focus(),activeTerm.addEventListener("keydown",(function(event){"Enter"===event.key&&(event.preventDefault(),event.stopPropagation(),rename(categoryName)),"Escape"===event.key&&cancel(categoryName)})))}else alert(happyFiles.l10n.renameCategoryNoCategorySelected)}})),confirmButton&&confirmButton.addEventListener("click",(function(e){rename(categoryName)})),cancelButton&&cancelButton.addEventListener("click",(function(e){cancel(categoryName)}))}},this.deleteCategoryListener=function(){var deleteButton=document.getElementById("hf-delete-category");deleteButton&&deleteButton.addEventListener("click",(function(e){var openTerm=happyFiles.open;openTerm<=0||isNaN(openTerm)?alert(happyFiles.l10n.deleteCategoryNoCategorySelected):happyFiles.renaming?alert(happyFiles.l10n.deleteCategoryFinishRenamingFirst):confirm(happyFiles.l10n.deleteCategoryConfirmation)&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_delete_category",termId:openTerm,taxonomy:happyFiles.taxonomy,postType:happyFiles.postType},success:function(res){if(!1===res.success&&res.data.hasOwnProperty("error"))console.warn(res.data.error);else if(!0===res.success&&res.data.hasOwnProperty("terms")&&res.data.hasOwnProperty("tree")){happyFiles.terms=res.data.terms,happyFiles.tree=res.data.tree;var termElementToDelete=document.getElementById("hf-term-"+openTerm),childWrapper=termElementToDelete.parentNode,parentId=termElementToDelete.dataset.parentId,parentWrapper=document.getElementById("hf-term-"+parentId);if("0"==parentId?hf.init():(document.getElementById("hf-term-"+parentId).querySelector(".term").click(),termElementToDelete.remove(),hf.updateTermCount(),""==childWrapper.innerHTML&&parentWrapper.classList.remove("has-children","open")),hf.refreshAttachmentsBrowser(),hf.listViewRefreshResults(!0),hf.contextMenuListener(),happyFiles.terms.length-2<10){var upgradeWrapper=document.getElementById("hf-upgrade-notification-wrapper");upgradeWrapper&&upgradeWrapper.classList.remove("show")}}}})}))},this.sortCategoriesListener=function(){var sortToggle=document.getElementById("hf-sort-toggle"),sortWrapper=document.getElementById("hf-context-menu-sort-wrapper");sortToggle&&sortWrapper&&(sortToggle.addEventListener("click",(function(e){setTimeout((function(){sortWrapper.classList.toggle("show")}),10)})),document.addEventListener("click",(function(e){sortWrapper.classList.contains("show")&&sortWrapper.classList.remove("show")})),sortWrapper.addEventListener("click",(function(e){sortWrapper.classList.remove("show");var order=!!e.target.dataset.hasOwnProperty("order")&&e.target.dataset.order;order&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_sort_categories",order:order,terms:happyFiles.terms},success:function(res){res.success&&res.data.hasOwnProperty("terms")&&res.data.hasOwnProperty("tree")&&(happyFiles.terms=res.data.terms,happyFiles.tree=res.data.tree,HappyFiles.init())}})})))},this.contextMenuListener=function(){var termElements=hf.selectAll(categoriesWrapper,".term"),contextMenu=document.getElementById("hf-context-menu-wrapper");contextMenu&&termElements.length&&(!0!==happyFiles.initialized&&(document.addEventListener("click",(function(e){contextMenu.classList.contains("show")&&contextMenu.classList.remove("show")})),contextMenu.addEventListener("click",(function(e){switch(e.target.classList.value){case"create":document.getElementById("hf-new-category-toggle").click();break;case"rename":document.getElementById("hf-rename-category").click();break;case"delete":document.getElementById("hf-delete-category").click()}}))),termElements.forEach((function(term){term.addEventListener("contextmenu",(function(e){e.preventDefault(),e.target.click(),happyFiles.renaming||"all"===happyFiles.open||"-1"===happyFiles.open?(contextMenu.querySelector(".create").classList.add("disabled"),contextMenu.querySelector(".rename").classList.add("disabled"),contextMenu.querySelector(".delete").classList.add("disabled")):(contextMenu.querySelector(".create").classList.remove("disabled"),contextMenu.querySelector(".rename").classList.remove("disabled"),contextMenu.querySelector(".delete").classList.remove("disabled")),contextMenu.classList.add("show"),contextMenu.style.left=e.clientX+"px";var distToBottom=window.innerHeight-e.clientY,contextMenuHeight=contextMenu.clientHeight;contextMenu.style.top=distToBottom<contextMenuHeight?e.clientY-contextMenuHeight+"px":e.clientY+"px"}))})))},this.paginationLinksListener=function(){document.body.classList.contains("upload-php")&&happyFiles.listViewDisableAjax||jQuery(document).on("click",".tablenav-pages .pagination-links a",(function(e){e.preventDefault(),e.stopPropagation();var url=this.href;jQuery.ajax({method:"GET",url:url,data:{}}).done((function(e){window.history.replaceState({},"",url);var newDocument=jQuery(e).find("#posts-filter")[0];document.getElementById("posts-filter").innerHTML=newDocument.innerHTML,setTimeout((function(){hf.moveAttachmentListener(),hf.contextMenuListener()}),200)}))}))},this.initSidebar=function(){var sidebarWrapper=document.getElementById("hf-sidebar-wrapper");if(sidebarWrapper){var wrapper=document.createElement("div");wrapper.id="hf-wrapper";var wpMediaWrapper=document.getElementById("wp-media-grid");if(wpMediaWrapper||(wpMediaWrapper=!!document.getElementById("posts-filter")&&document.getElementById("posts-filter").parentNode),wpMediaWrapper){wpMediaWrapper.parentNode.insertBefore(wrapper,wpMediaWrapper);var sidebarWidth=parseInt(happyFiles.width)+52;if(wpMediaWrapper.classList.contains("acf-columns-2")){sidebarWrapper.style.marginTop=0,wpMediaWrapper.style.marginLeft="auto";var acfColumn=wpMediaWrapper.querySelector(".acf-column-2");acfColumn&&(sidebarWidth+=acfColumn.offsetWidth)}wpMediaWrapper.style.width="calc(100% - "+sidebarWidth+"px)",document.body.classList.contains("rtl")&&(wpMediaWrapper.style.marginRight=sidebarWidth-20+"px");var setCategoryHeight=function(){document.getElementById("hf-categories-wrapper").style.height=window.innerHeight-240+"px"};setTimeout((function(){setCategoryHeight()}),10),window.addEventListener("resize",setCategoryHeight),wrapper.appendChild(sidebarWrapper),wrapper.appendChild(wpMediaWrapper),sidebarWrapper.classList.add("show"),HappyFiles.init(),document.addEventListener("mousedown",(function(e){"hf-resizable"===e.target.id&&1===e.which&&(sidebarWrapper.classList.add("resizing"),happyFiles.x=e.clientX,happyFiles.resizing=!0)})),document.addEventListener("mousemove",(function(e){if(happyFiles.resizing){e.preventDefault(),e.stopPropagation();var newWidth=e.clientX-sidebarWrapper.getBoundingClientRect().left-17;if(document.body.classList.contains("rtl")&&(newWidth=sidebarWrapper.getBoundingClientRect().right-e.clientX-17),newWidth<210)return;if(newWidth>600)return;sidebarWrapper.style.width=newWidth+"px";var sidebarWidth=parseInt(newWidth)+52;wpMediaWrapper.style.width="calc(100% - "+sidebarWidth+"px)",document.body.classList.contains("rtl")&&(wpMediaWrapper.style.marginRight=sidebarWidth-20+"px")}})),document.addEventListener("mouseup",(function(e){if(happyFiles.resizing){happyFiles.resizing=!1,happyFiles.width=sidebarWrapper.clientWidth;var newWidth=parseInt(happyFiles.width)-30;sidebarWrapper.classList.remove("resizing"),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_save_sidebar_width",width:newWidth}})}})),!sidebarWrapper.classList.contains("modal")&&happyFiles.width&&happyFiles.width>210&&(sidebarWrapper.style.width=happyFiles.width+"px");var hfToggle=document.getElementById("hf-toggle");hfToggle&&hfToggle.addEventListener("click",(function(e){sidebarWrapper.classList.contains("minimize")?sidebarWrapper.classList.remove("minimize"):sidebarWrapper.classList.add("minimize"),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_save_category_minimize",minimize:sidebarWrapper.classList.contains("minimize"),taxonomy:happyFiles.taxonomy},success:function(res){}})}))}}},this.initCategories=function(){if(categoriesWrapper)if(categoriesWrapper.classList.add("hf-tree-wrapper"),categoriesWrapper.classList.add("hf-sortable-wrapper"),categoriesWrapper){var items=happyFiles.tree;if(items){var html="";!function addListItems(items,level=0){items.forEach((function(item){var hasChildren=item.hasOwnProperty("children")&&item.children.length,itemClasses=["term-wrapper",item.slug];"all"==item.term_id||"-1"==item.term_id?itemClasses.push("ignore"):itemClasses.push("draggable"),hasChildren&&itemClasses.push("has-children"),0!=item.count?html+='<li id="hf-term-'+item.term_id+'" class="'+itemClasses.join(" ")+'" data-term-id="'+item.term_id+'" data-parent-id="'+item.parent+'"  data-level="'+level+'" data-count="'+item.count+'">':html+='<li id="hf-term-'+item.term_id+'" class="'+itemClasses.join(" ")+'" data-term-id="'+item.term_id+'" data-parent-id="'+item.parent+'"  data-level="'+level+'">',html+='<div class="icon"></div>',html+='<div class="term">'+item.name+"</div>","all"!=item.term_id&&"-1"!=item.term_id&&(hasChildren?(html+='<ul class="hf-sortable-wrapper">',addListItems(item.children,level++),html+="</ul>"):html+='<ul class="hf-sortable-wrapper"></ul>'),html+="</li>"}))}(items),categoriesWrapper.innerHTML=html}else console.warn("HappyFilesTree Error: No settings.items array provided for wrapper "+selector)}else console.warn("HappyFilesTree Error: Wrapper not found "+selector)},this.initSortable=function(){for(var uploaderWindow=document.querySelector(".uploader-window"),nestedSortables=hfWrapper.querySelectorAll(".hf-sortable-wrapper"),i=0;i<nestedSortables.length;i++)new Sortable(nestedSortables[i],{animation:20,group:"nested",fallbackOnBody:!0,swapThreshold:.5,handle:".term",filter:".ignore",draggable:".draggable",ghostClass:"hf-sortable-ghost",chosenClass:"hf-sortable-chosen",dragClass:"hf-sortable-drag",onStart:function(event){(uploaderWindow=document.querySelector(".uploader-window"))&&uploaderWindow.classList.add("hide")},onEnd:function(e){uploaderWindow&&setTimeout((function(){uploaderWindow.classList.remove("hide")}),200),function openParentListItem(node){node.classList.contains("hf-tree-wrapper")||(node.parentNode.classList.contains("term-wrapper")&&(node.parentNode.classList.add("has-children"),node.parentNode.classList.add("open")),openParentListItem(node.parentNode))}(e.to),function removeHasChildrenListItem(node){node.classList.contains("hf-tree-wrapper")||(node.classList.contains("hf-sortable-wrapper")&&(node.innerHTML||node.parentNode.classList.remove("has-children")),removeHasChildrenListItem(node.parentNode))}(e.from);for(var terms=hf.selectAll(categoriesWrapper,".draggable"),termIds=[],i=0;i<terms.length;i++){var termId=terms[i].querySelector(".term").parentNode.dataset.termId;termId&&termIds.push(termId)}jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_update_term_position",termIds:termIds},success:function(res){!1===res.success&&res.data.error&&console.warn(res.data.error)}}),termId=e.item.dataset.termId;var parentId=e.item.parentNode.parentNode.dataset.termId;jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_update_term_parent",parentId:parentId,termId:termId,taxonomy:happyFiles.taxonomy},success:function(res){!res.success&&res.data.error&&console.warn(res.data.error)}})}})},this.selectCategoryListener=function(){hf.selectAll(categoriesWrapper,".icon").forEach((function(folderIcon){folderIcon.addEventListener("click",(function(e){var parentWrapper=folderIcon.parentNode;parentWrapper.classList.contains("has-children")&&parentWrapper.classList.toggle("open")}))}));var termElements=hf.selectAll(categoriesWrapper,".term");termElements.forEach((function(termElement){termElement.addEventListener("click",(function(e){var termId=!!termElement.parentNode.dataset.termId&&termElement.parentNode.dataset.termId;if(termId||console.warn("No termId found (selectCategoryListener)"),hfWrapper=document.getElementById("hf-sidebar-wrapper"),happyFiles.open!=termId||!happyFiles.initialized){jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_save_category_state",termId:termId,taxonomy:happyFiles.taxonomy},success:function(res){document.body.classList.contains("upload-php")&&document.getElementById("posts-filter")&&happyFiles.listViewDisableAjax&&happyFiles.initialized&&(location.href=happyFiles.uploadUrl),happyFiles.initialized=!0}});var selectEl=!!hfWrapper.nextElementSibling&&hfWrapper.nextElementSibling.querySelector("#"+happyFiles.filterId);if(!selectEl){var activeModal=jQuery('div[id^="__wp-uploader-id-"].supports-drag-drop:visible');selectEl=jQuery(activeModal).find("#"+happyFiles.filterId)}termId&&selectEl&&jQuery(selectEl).val(termId).change(),happyFiles.initialized&&hf.listViewRefreshResults(!0)}happyFiles.open=termId,termElements.forEach((function(term){term.parentNode.classList.remove("active")})),termElement.parentNode.classList.add("active");var termActionsWrapper=document.getElementById("hf-term-action-wrapper");if(termActionsWrapper&&!happyFiles.renaming){var termCoordinates=termElement.getBoundingClientRect();termActionsWrapper.style.top=termCoordinates.top+"px",termActionsWrapper.style.left=termCoordinates.right-2+"px",document.body.classList.contains("rtl")&&(termActionsWrapper.style.top=termCoordinates.top+"px",termActionsWrapper.style.left=termCoordinates.left-80+"px")}}))}))},this.openCurrentCategory=function(){var openId=happyFiles.open&&document.getElementById("hf-term-"+happyFiles.open)?happyFiles.open:"all",openCategory=function(termId,isParent){var openTermWrapper=categoriesWrapper.querySelector('[data-term-id="'+termId+'"]');if(openTermWrapper){isParent?openTermWrapper.classList.add("open"):openTermWrapper.classList.add("active");var parentTermId=openTermWrapper.dataset.parentId;parentTermId&&0!=parentTermId&&openCategory(parentTermId,!0)}};openCategory(openId,!1);var activeTermWrapper=categoriesWrapper.querySelector(".active"),activeTerm=activeTermWrapper.querySelector(".term");activeTermWrapper&&activeTerm&&(activeTermWrapper.classList.contains("has-children")&&activeTermWrapper.classList.add("open"),activeTerm.click())},this.listViewRefreshResults=function(resetPaged=!1){var formFilter=document.getElementById("posts-filter");if(formFilter&&hfWrapper){for(var formFilterData=jQuery(formFilter).serializeArray(),newFilterData=[],i=0;formFilterData.length>i;i++)-1===["action","action2","_ajax_nonce","_wpnonce","_wp_http_referer"].indexOf(formFilterData[i].name)&&("paged"!=formFilterData[i].name||"1"!=formFilterData[i].value&&!resetPaged?formFilterData[i].value.length&&"0"!=formFilterData[i].value&&formFilterData[i].name!==happyFiles.taxonomy&&("post_status"===formFilterData[i].name&&"all"===formFilterData[i].value||"post_type"===formFilterData[i].name&&"post"===formFilterData[i].value||newFilterData.push({name:formFilterData[i].name,value:formFilterData[i].value})):delete formFilterData[i]);var url=document.body.classList.contains("edit-php")?happyFiles.editUrl:happyFiles.uploadUrl;jQuery.ajax({method:"GET",url:url,data:formFilterData}).done((function(e){newFilterData.length&&(url+="?"+jQuery.param(newFilterData)),window.history.replaceState({},"",url);var newDocument=jQuery(e).find("#posts-filter")[0];document.getElementById("posts-filter").innerHTML=newDocument.innerHTML,hf.init(!1),hf.updateTermCount(),window.hasOwnProperty("inlineEditPost")&&window.inlineEditPost.init()}))}},this.showCategoriesListener=function(){var categoryWrapper=document.getElementById("hf-context-menu-categories-wrapper");categoryWrapper&&!happyFiles.initialized&&(document.addEventListener("click",(function(e){categoryWrapper.classList.remove("show"),categoryWrapper.innerText=""})),window.addEventListener("contextmenu",(function(e){var itemId=!(!e.target.classList.contains("attachment")||!e.target.dataset.hasOwnProperty("id"))&&e.target.dataset.id;if(!itemId){if("A"===e.target.nodeName)return;var tableRowId=jQuery(e.target).closest("tr").attr("id");if(!tableRowId)return;itemId=tableRowId.replace(/^\D+/g,"")}itemId&&"-1"!=happyFiles.open&&(categoryWrapper.innerText="",e.preventDefault(),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_item_categories",itemId:itemId,postType:happyFiles.postType,open:happyFiles.open,taxonomy:happyFiles.taxonomy},success:function(res){!1!==res.data&&(res.data.forEach((function(term){var categoryItem=document.createElement("li");categoryItem.innerText=term.name+" ("+term.count+")",categoryItem.dataset.termId=term.term_id,categoryItem.style.paddingLeft=15*term.level+"px",term.term_id==happyFiles.open&&categoryItem.classList.add("disabled"),categoryItem.addEventListener("click",(function(e){var termId=e.target.dataset.termId;termId!=happyFiles.open&&(document.querySelector("#hf-term-"+termId+" .term").click(),categoryWrapper.classList.remove("show"),hf.openCurrentCategory())})),categoryWrapper.appendChild(categoryItem)})),categoryWrapper.style.top=e.clientY+"px",categoryWrapper.style.left=e.clientX+"px",categoryWrapper.classList.add("show"))}}))})))},this.moveAttachmentListener=function(){var draggingWrapper=document.createElement("div");draggingWrapper.id="hf-dragging-wrapper",draggingWrapper.dataset.itemId="",draggingWrapper.dataset.termId="",document.body.append(draggingWrapper),window.addEventListener("mousemove",(function(e){if(draggingWrapper.dataset.itemId){draggingWrapper.classList.add("show"),draggingWrapper.style.left=e.clientX+5+"px",draggingWrapper.style.top=e.clientY+5+"px";var itemCount=draggingWrapper.dataset.itemId.split(",").length,draggingWrapperText=happyFiles.l10n.move+" "+itemCount+" ";draggingWrapperText+=1===itemCount?happyFiles.postTypeSingular:happyFiles.postTypePlural,draggingWrapper.innerText=draggingWrapperText}})),termElements.forEach((function(termElement){var termWrapper=termElement.parentNode;termElement.addEventListener("mouseenter",(function(e){draggingWrapper.dataset.itemId&&(termWrapper.classList.add("droppable"),termWrapper.classList.contains("has-children")&&termWrapper.classList.add("open"),draggingWrapper.innerText="termId: "+termWrapper.dataset.termId,draggingWrapper.dataset.termId=termWrapper.dataset.termId)}))})),termElements.forEach((function(termElement){var termWrapper=termElement.parentNode;termElement.addEventListener("mouseleave",(function(e){draggingWrapper.dataset.itemId&&(termWrapper.classList.remove("droppable"),draggingWrapper.dataset.termId="")}))})),jQuery("#the-list").delegate("tr","mousedown",(function(event){if(1===event.which&&("IMG"===event.target.nodeName||event.target.classList.contains("happyfiles-move"))){event.preventDefault();var checkboxName="attachment"===happyFiles.postType?"media":"post",selectedAttachments=jQuery('#the-list input[name="'+checkboxName+'[]"]:checked');if(selectedAttachments.length){for(var selectedIds=[],i=0;i<selectedAttachments.length;i++)selectedIds.push(selectedAttachments[i].value);selectedIds.length&&(draggingWrapper.dataset.itemId=selectedIds)}else{var attachementId=jQuery(this).attr("id").replace("post-","");attachementId&&(draggingWrapper.dataset.itemId=attachementId)}}})),window.addEventListener("mousedown",(function(event){if(1===event.which&&event.target.classList.contains("attachment")&&event.target.dataset.id){event.preventDefault();var selectedIds=[];event.target.parentNode.classList.contains("attachments")&&hf.selectAll(event.target.parentNode,".selected").forEach((function(selectedAttachment){selectedAttachment.dataset.id&&selectedIds.push(selectedAttachment.dataset.id)}));var draggingItems=event.target.dataset.id;selectedIds.length&&(draggingItems=selectedIds),draggingWrapper.dataset.itemId=draggingItems}})),window.addEventListener("mouseup",(function(event){draggingWrapper.classList.remove("show");var itemId=draggingWrapper.dataset.itemId,termId=draggingWrapper.dataset.termId;itemId&&termId&&jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_update_attachment_terms",itemId:itemId,termId:termId,openId:happyFiles.open,taxonomy:happyFiles.taxonomy,postType:happyFiles.postType},success:function(res){!1===res.success&&res.data.hasOwnProperty("error")&&console.warn("Error: "+res.data.error),!0===res.success&&res.data.hasOwnProperty("terms")&&(happyFiles.terms=res.data.terms,hf.refreshAttachmentsBrowser(),hf.listViewRefreshResults(),hf.updateTermCount());var mediaFrame=document.querySelector(".media-frame");if(mediaFrame&&mediaFrame.classList.contains("mode-select")){var modeSelectToggleButton=document.querySelector(".select-mode-toggle-button");modeSelectToggleButton&&modeSelectToggleButton.click()}}}),termElements.forEach((function(termElement){termElement.parentNode.classList.remove("droppable"),draggingWrapper.dataset.itemId&&(draggingWrapper.dataset.itemId="",draggingWrapper.dataset.termId="")}))}))},this.updateTermCount=function(){happyFiles.terms.forEach((function(term){termElements.forEach((function(termElement){var termWrapper=termElement.parentNode;termWrapper.dataset.termId==term.term_id&&(0!=term.count?termWrapper.dataset.count=term.count:delete termWrapper.dataset.count)}))}))},this.refreshAttachmentsBrowser=function(){happyFiles.attachmentsBrowser&&happyFiles.attachmentsBrowser.collection.props.set({ignore:+new Date}),hf.updateTermCount()},this.init=function(initCategories=!0){hfWrapper=document.getElementById("hf-sidebar-wrapper"),categoriesWrapper=document.querySelector(selector),happyFiles.minimize&&hfWrapper.classList.add("minimize"),initCategories&&(hf.initCategories(),happyFiles.canEdit&&hf.initSortable()),hf.selectAll(categoriesWrapper,".term-wrapper"),termElements=hf.selectAll(categoriesWrapper,".term"),happyFiles.canEdit&&(hf.moveAttachmentListener(),hf.contextMenuListener()),hf.showCategoriesListener(),hf.selectCategoryListener(),hf.openCurrentCategory(),!0!==happyFiles.initialized&&(hf.paginationLinksListener(),happyFiles.canEdit&&(hf.newCategoryListener(),hf.renameCategoryListener(),hf.deleteCategoryListener(),hf.sortCategoriesListener()))}}}();var HappyFiles=new HF("#hf-categories-wrapper");jQuery(document).ready((function(){document.body.classList.contains("upload-php")&&(happyFiles.debug&&console.warn("library.js"),HappyFiles.initSidebar())})),jQuery(document).ready((function(){document.body.classList.contains("wp-admin")&&document.body.classList.contains("upload-php")||(happyFiles.debug&&console.warn("modal.js"),wp.media.view.Modal.prototype.on("open",(function(e){var happyFilesWrapper=document.getElementById("hf-sidebar-wrapper"),initModal=function(html){var activeModal=jQuery('div[id^="__wp-uploader-id-"].supports-drag-drop:visible'),mediaFrameWrapper=document.querySelector("#"+activeModal.attr("id")+" .media-frame");if(!jQuery(activeModal).hasClass("image-details")){jQuery(html).appendTo("#"+activeModal.attr("id")+" .media-menu"),mediaFrameWrapper.classList.add("hf-view"),mediaFrameWrapper.classList.contains("hide-menu")&&mediaFrameWrapper.classList.remove("hide-menu"),HappyFiles.init(),happyFilesWrapper=document.getElementById("hf-sidebar-wrapper");var selectEl=jQuery(activeModal).find("#"+happyFiles.filterId);selectEl&&happyFilesWrapper&&happyFiles.open&&jQuery(selectEl).val(happyFiles.open).change(),happyFilesWrapper.classList.add("modal"),HappyFiles.refreshAttachmentsBrowser(),jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_category_terms_and_tree",postType:happyFiles.postType,taxonomy:happyFiles.taxonomy},success:function(res){res.data.hasOwnProperty("terms")&&(happyFiles.terms=res.data.terms),res.data.hasOwnProperty("tree")&&(happyFiles.tree=res.data.tree),HappyFiles.init(),HappyFiles.openCurrentCategory()}})}};if(happyFilesWrapper)var counter=0,modelInterval=setInterval((function(){var activeModal=jQuery('div[id^="__wp-uploader-id-"].supports-drag-drop:visible'),mediaFrameWrapper=document.querySelector("#"+activeModal.attr("id")+" .media-frame");activeModal&&mediaFrameWrapper?(clearInterval(modelInterval),initModal(happyFilesWrapper)):++counter>=10&&clearInterval(modelInterval)}),100);else jQuery.ajax({method:"POST",url:happyFiles.ajaxUrl,data:{action:"happyfiles_get_categories_html"},success:function(res){res.data.hasOwnProperty("html")&&initModal(res.data.html)}})})),wp.media.view.Modal.prototype.on("close",(function(e){var happyFilesWrapper=document.getElementById("hf-sidebar-wrapper");happyFilesWrapper&&(jQuery(happyFilesWrapper).appendTo("body"),jQuery(happyFilesWrapper).removeClass("modal"))})))})),window.addEventListener("DOMContentLoaded",(function(event){document.body.classList.contains("media-new-php")&&(happyFiles.debug&&console.warn("media-new.js"),uploader&&uploader.bind("BeforeUpload",(function(up,file){var termId=jQuery("#hf-category-upload").val();termId&&(up.settings.multipart_params.hfTermId=parseInt(termId))})))}));
  • happyfiles/trunk/happyfiles.php

    r2371420 r2388764  
    44 * Plugin URI:        https://happyfiles.io
    55 * Description:       Organize your WordPress media files in folders/categories via drag and drop.
    6  * Version:           1.3.1
     6 * Version:           1.4
    77 * Author:            Codeer
    88 * Author URI:        https://codeer.io
     
    1313if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    1414
    15 define( 'HAPPYFILES_VERSION', '1.3.1' );
     15define( 'HAPPYFILES_VERSION', '1.4' );
    1616define( 'HAPPYFILES_FILE', __FILE__ );
    1717define( 'HAPPYFILES_PATH', plugin_dir_path( __FILE__ ) );
     
    2828define( 'HAPPYFILES_SETTING_REMOVE_FROM_ALL_CATEGORIES', 'happyfiles_remove_from_all_categories' );
    2929define( 'HAPPYFILES_SETTING_LIST_VIEW_DISABLE_AJAX', 'happyfiles_list_view_disable_ajax' );
     30define( 'HAPPYFILES_SETTING_ALTERNATIVE_COUNT', 'happyfiles_alternative_count' );
    3031
    3132require_once HAPPYFILES_PATH . 'includes/init.php';
  • happyfiles/trunk/includes/admin.php

    r2370842 r2388764  
    310310  public function admin_init() {
    311311    // Register HappyFiles settings
    312     register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_USER_ROLES );
     312        register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_USER_ROLES );
    313313        register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_MULTIPLE_CATEGORIES );
    314314        register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_REMOVE_FROM_ALL_CATEGORIES );
    315315        register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_LIST_VIEW_DISABLE_AJAX );
     316        register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_ALTERNATIVE_COUNT );
    316317  }
    317318
     
    782783        }
    783784
    784         // STEP: Categorize media duplicated IDs created by WPML for each language
    785         // TODO: NEXT: Wait for Izzis reply about 'suppress_filters' (see helpers.php #175 & 199)
    786        
    787         // if ( class_exists( 'SitePress' ) ) {
    788         //  foreach ( $item_ids as $item_id ) {
    789         //      $trid = apply_filters( 'wpml_element_trid', null, $item_id, 'post_attachment' );
    790         //      $translations = apply_filters( 'wpml_get_element_translations', null, $trid, 'post_attachment' );
    791 
    792         //      foreach ( $translations as $lang => $post ) {
    793         //          $wmpl_lang_item_id = intval( $post->element_id );
    794 
    795         //          if ( $wmpl_lang_item_id && $wmpl_lang_item_id != $item_id ) {
    796         //              $item_ids[] = $wmpl_lang_item_id;
    797         //          }
    798         //      }
    799         //  }
    800         // }
     785        // STEP: Categorize media files duplicated by WPML for each language
     786        if ( class_exists( 'SitePress' ) ) {
     787            foreach ( $item_ids as $item_id ) {
     788                $trid = apply_filters( 'wpml_element_trid', null, $item_id, 'post_attachment' );
     789                $translations = apply_filters( 'wpml_get_element_translations', null, $trid, 'post_attachment' );
     790
     791                foreach ( $translations as $lang => $post ) {
     792                    $wmpl_lang_item_id = intval( $post->element_id );
     793
     794                    if ( $wmpl_lang_item_id && $wmpl_lang_item_id != $item_id ) {
     795                        $item_ids[] = $wmpl_lang_item_id;
     796                    }
     797                }
     798            }
     799        }
    801800
    802801    foreach ( $item_ids as $item_id ) {
     
    867866
    868867    wp_send_json_success( [
    869             'terms'    => $terms,
    870             'taxonomy' => $taxonomy,
     868            'terms'     => $terms,
     869            'taxonomy'  => $taxonomy,
    871870            'post_type' => $post_type,
    872             'term_ids' => $term_ids,
     871            'term_ids'  => $term_ids,
    873872        ] );
    874873  }
     
    934933            wp_send_json_success( $categorie_terms );
    935934        } else {
     935            $uncategorized_items = self::get_uncategorized_items( $_POST['postType'], $_POST['taxonomy'] );
     936
    936937            wp_send_json_success( [[
    937938                'term_id' => -1,
    938939                'level'   => 1,
    939940                'name'    => esc_html__( 'Uncategorized', 'happyfiles' ),
    940                 'count'   => Helpers::count_uncategorized_attachments( $_POST['postType'], $_POST['taxonomy'] ),
     941                'count'   => $uncategorized_items->found_posts,
    941942            ]] );
    942943        }
  • happyfiles/trunk/includes/admin/admin-screen-settings.php

    r2370842 r2388764  
    110110                    </tr>
    111111
     112                    <tr>
     113                        <th><?php esc_html_e( 'Alternative Count', 'happyfiles' ); ?></th>
     114                        <td>
     115                            <fieldset>
     116                                <?php $alternative_count = get_option( HAPPYFILES_SETTING_ALTERNATIVE_COUNT, false ); ?>
     117                                <label for="<?php echo esc_attr( HAPPYFILES_SETTING_ALTERNATIVE_COUNT ); ?>">
     118                                    <input type="checkbox" name="<?php echo esc_attr( HAPPYFILES_SETTING_ALTERNATIVE_COUNT ); ?>" id="<?php echo esc_attr( HAPPYFILES_SETTING_ALTERNATIVE_COUNT ); ?>" value="1" <?php checked( $alternative_count, true, true ); ?>>
     119                                    <?php esc_html_e( 'Enable alternative count calculation', 'happyfiles' ); ?>
     120                                </label>
     121                                <br>
     122                                <p class="description"><?php esc_html_e( 'Set when you experience problems using plugins alongside HappyFiles that can alter your media files (such as WPML). Requires more queries.', 'happyfiles' ); ?></p>
     123                            </fieldset>
     124                        </td>
     125                    </tr>
     126
     127                    <?php if ( HAPPYFILES_BASENAME === 'happyfiles/happyfiles.php' ) { ?>
     128                    <tr>
     129                        <th><?php esc_html_e( 'Allow SVG Files', 'happyfiles' ); ?> (PRO)</th>
     130                        <td><p class="description"><?php printf( esc_html__( 'Upgrade to %s to enable SVG uploads, sanitization, and preview.', 'happyfiles' ), '<a href="https://happyfiles.io/#download?utm_source=wp-admin&utm_medium=happyfiles-settings&utm_campaign=gopro" target="_blank">HappyFiles PRO</a>' ); ?></p></td>
     131                    </tr>
     132                    <?php } ?>
     133
    112134                    <?php do_action( 'happyfiles_admin_settings_bottom' ); ?>
    113135                </tbody>
  • happyfiles/trunk/includes/gallery.php

    r2370842 r2388764  
    4545        $dependencies = ['happyfiles', 'wp-blocks', 'wp-element', 'wp-editor', 'wp-components'];
    4646
    47     wp_register_script( 'happyfiles-block-gallery', HAPPYFILES_ASSETS_URL . '/blocks/blocks.js', $dependencies, $version );
     47        wp_register_script( 'happyfiles-block-gallery', HAPPYFILES_ASSETS_URL . '/blocks/blocks.js', $dependencies, $version );
    4848       
    4949        register_block_type( 'happyfiles/gallery', [
     
    9797
    9898                'caption' => [
     99                    'type'    => 'boolean',
     100                    'default' => false,
     101                ],
     102
     103                'lightbox' => [
     104                    'type'    => 'boolean',
     105                    'default' => false,
     106                ],
     107
     108                'lightboxFullscreen' => [
     109                    'type'    => 'boolean',
     110                    'default' => false,
     111                ],
     112
     113                'lightboxThumbnails' => [
     114                    'type'    => 'boolean',
     115                    'default' => false,
     116                ],
     117
     118                'lightboxZoom' => [
    99119                    'type'    => 'boolean',
    100120                    'default' => false,
     
    120140        $crop = true;
    121141        $show_caption = true;
     142        $lightbox = false;
     143        $lightbox_thumbnails = false;
     144        $lightbox_zoom = false;
     145        $lightbox_fullscreen = false;
    122146
    123147        if ( ! is_array( $attributes ) ) {
     
    130154            }
    131155
    132             $key = strtolower( $key ); // As shortcode atts are converted to lowercase (e.g.: imageSize > imagesize)
     156            // NOTE: As shortcode atts are converted to lowercase (e.g.: imageSize > imagesize)
     157            $key = strtolower( $key );
    133158
    134159            switch ( $key ) {
     
    171196                case 'caption':
    172197                    $show_caption = filter_var( $value, FILTER_VALIDATE_BOOLEAN );
     198                break;
     199
     200                case 'lightbox':
     201                    $lightbox = filter_var( $value, FILTER_VALIDATE_BOOLEAN );;
     202                break;
     203
     204                case 'lightboxfullscreen':
     205                    $lightbox_fullscreen = filter_var( $value, FILTER_VALIDATE_BOOLEAN );;
     206                break;
     207
     208                case 'lightboxthumbnails':
     209                    $lightbox_thumbnails = filter_var( $value, FILTER_VALIDATE_BOOLEAN );;
     210                break;
     211
     212                case 'lightboxzoom':
     213                    $lightbox_zoom = filter_var( $value, FILTER_VALIDATE_BOOLEAN );;
    173214                break;
    174215
     
    218259        }
    219260
     261        if ( $lightbox ) {
     262            $wrapper_classes[] = 'lightbox';
     263        }
     264
    220265        // Rendered in Gutenberg (wp-admin): Remove 'a' link tag
    221266        $gutenberg_requested = strpos( wp_get_referer(), admin_url() ) === 0;
     
    225270        }
    226271
     272        // Gallery element ID
     273        $gallery_id = 'happyfiles-gallery-';
     274
     275        // Generate random element ID to every gallery lightbox
     276        $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
     277        $characters_length = strlen( $characters );
     278       
     279        for ( $i = 0; $i < 6; $i++ ) {
     280            $gallery_id .= $characters[rand(0, $characters_length - 1)];
     281        }
     282
     283        if ( $lightbox ) {
     284            // https://github.com/sachinchoolur/lightgallery.js
     285            wp_enqueue_script( 'happyfiles-gallery-lightbox', HAPPYFILES_ASSETS_URL . '/lightgallery/js/lightgallery.min.js', [], filemtime( HAPPYFILES_ASSETS_PATH .'/lightgallery/js/lightgallery.min.js' ) );
     286
     287            if ( $lightbox_fullscreen ) {
     288                wp_enqueue_script( 'happyfiles-gallery-lightbox-fullscreen', HAPPYFILES_ASSETS_URL . '/lightgallery/js/lg-fullscreen.min.js', ['happyfiles-gallery-lightbox'], filemtime( HAPPYFILES_ASSETS_PATH .'/lightgallery/js/lg-fullscreen.min.js' ) );
     289            }
     290           
     291            if ( $lightbox_thumbnails ) {
     292                wp_enqueue_script( 'happyfiles-gallery-lightbox-thumbnail', HAPPYFILES_ASSETS_URL . '/lightgallery/js/lg-thumbnail.min.js', ['happyfiles-gallery-lightbox'], filemtime( HAPPYFILES_ASSETS_PATH .'/lightgallery/js/lg-thumbnail.min.js' ) );
     293            }
     294
     295            if ( $lightbox_zoom ) {
     296                wp_enqueue_script( 'happyfiles-gallery-lightbox-zoom', HAPPYFILES_ASSETS_URL . '/lightgallery/js/lg-zoom.min.js', ['happyfiles-gallery-lightbox'], filemtime( HAPPYFILES_ASSETS_PATH .'/lightgallery/js/lg-zoom.min.js' ) );
     297            }
     298
     299            wp_add_inline_script( 'happyfiles-gallery-lightbox', "
     300                lightGallery(document.querySelector('#$gallery_id ul'), {
     301                    counter: false,
     302                    download: false,
     303                    hideBarsDelay: 1000,
     304                    fullScreen: " . var_export( $lightbox_fullscreen, true ) . ",
     305                    thumbnail: " . var_export( $lightbox_thumbnails, true ) . ",
     306                    zoom: " . var_export( $lightbox_zoom, true ) . "
     307                })
     308            " );
     309           
     310            wp_enqueue_style( 'happyfiles-gallery-lightbox', HAPPYFILES_ASSETS_URL . '/lightgallery/css/lightgallery.min.css', [], filemtime( HAPPYFILES_ASSETS_PATH .'/lightgallery/css/lightgallery.min.css' ) );
     311        }
     312
    227313        ob_start();
    228314        ?>
    229         <figure class="<?php echo implode( ' ', $wrapper_classes ); ?>">
    230             <ul class="blocks-gallery-grid">
     315        <figure id="<?php echo esc_attr( $gallery_id ); ?>" class="<?php echo implode( ' ', $wrapper_classes ); ?>">
     316            <ul class="blocks-gallery-grid" style="width: 100%;">
    231317                <?php
    232318                $attr = [];
     
    243329                    }
    244330
    245                     echo '<li class="' . join( ' ', $image_classes ) . '">';
     331                    if ( $lightbox ) {
     332                        echo '<li class="' . join( ' ', $image_classes ) . '" data-src="' . wp_get_attachment_url( $attachment_id ) . '">';
     333                    } else {
     334                        echo '<li class="' . join( ' ', $image_classes ) . '">';
     335                    }
     336                   
    246337                    echo '<figure>';
    247338
  • happyfiles/trunk/includes/helpers.php

    r2370842 r2388764  
    2929     * Visual Composer: Editor already loads in wp-admin
    3030     */
    31     if (
     31       
     32        if (
    3233      isset( $_GET['bricksbuilder'] ) ||
    3334            isset( $_GET['et_fb'] ) ||
     
    4849        }
    4950
    50         // self::$post_type = get_post_type();
    5151        self::$post_type = self::get_current_post_type();
    5252       
     
    5656        add_action( 'init', [$this, 'set_taxonomy_name'], 10, 2 );
    5757        add_action( 'init', [$this, 'get_category_terms'], 11, 2 );
     58
     59        $alternative_count = get_option( HAPPYFILES_SETTING_ALTERNATIVE_COUNT, false );
     60
     61        if ( $alternative_count ) {
     62            add_filter( 'get_terms', [$this, 'set_terms_count'], 10, 4 );
     63        }
    5864    }
    5965
     
    133139        $wp_query_args = [];
    134140
    135     // Add 'all' and 'uncategorized' terms to attachment terms (easier to update DOM with all list items)
     141    // Add 'all' terms to category terms (easier to update DOM with all list items)
    136142        $default_terms = [];
    137143
     
    142148            $name = sprintf( esc_html__( 'All %s', 'happyfiles' ), ucwords( $post_type_object->label ) );
    143149        }
     150
     151        $all_items = self::get_all_items( $post_type, $wp_query_args );
    144152   
    145     $term_all = new \stdClass();
    146         $term_all->term_id = 'all';
    147         $term_all->parent  = 0;
    148     $term_all->slug    = 'all';
    149     $term_all->name    = $name;
    150     $term_all->count   = self::count_all_attachment_ids( $post_type, $wp_query_args );
    151         $term_all->value   = ''; // Empty value to show all attachments
    152 
    153     $default_terms[] = $term_all;
    154 
    155     $term_uncategorized = new \stdClass();
    156     $term_uncategorized->term_id = -1;
    157     $term_uncategorized->parent  = 0;
    158     $term_uncategorized->slug    = 'uncategorized';
    159     $term_uncategorized->name    = esc_html__( 'Uncategorized', 'happyfiles' );
    160     $term_uncategorized->count   = self::count_uncategorized_attachments( $post_type, $taxonomy, $wp_query_args );
    161     $term_uncategorized->value   = -1; // = Identifier for uncategorized attachment in 'ajax_query_attachments_args' filter
    162 
     153        $term_all = new \stdClass();
     154       
     155        $term_all->term_id  = 'all';
     156        $term_all->parent   = 0;
     157    $term_all->slug     = 'all';
     158        $term_all->name     = $name;
     159        $term_all->value    = ''; // Empty value to show all attachments
     160        $term_all->count    = $all_items->found_posts;
     161        $term_all->item_ids = $all_items->posts;
     162
     163        if ( isset( $_GET['debug'] ) ) {
     164            foreach ( $all_items->posts as $post_id ) {
     165                $term_all->items[] = [
     166                    'id'  => $post_id,
     167                    'url' => get_post_type( $post_id ) === 'attachment' ? wp_get_attachment_url( $post_id ) : get_the_permalink( $post_id ),
     168                ];
     169            }
     170        }
     171
     172        $default_terms[] = $term_all;
     173       
     174        // Add 'all' and 'uncategorized' terms to category terms (easier to update DOM with all list items)
     175        $uncategorized_items = self::get_uncategorized_items( $post_type, $taxonomy, $wp_query_args );
     176
     177        $term_uncategorized = new \stdClass();
     178       
     179    $term_uncategorized->term_id  = -1;
     180    $term_uncategorized->parent   = 0;
     181    $term_uncategorized->slug     = 'uncategorized';
     182    $term_uncategorized->name     = esc_html__( 'Uncategorized', 'happyfiles' );
     183        $term_uncategorized->value    = -1; // = Identifier for uncategorized items in 'ajax_query_attachments_args' filter
     184        $term_uncategorized->count    = $uncategorized_items->found_posts;
     185        $term_uncategorized->item_ids = $uncategorized_items->posts;
     186
     187        if ( isset( $_GET['debug'] ) ) {
     188            foreach ( $uncategorized_items->posts as $post_id ) {
     189                $term_uncategorized->items[] = [
     190                    'id'  => $post_id,
     191                    'url' => get_post_type( $post_id ) === 'attachment' ? wp_get_attachment_url( $post_id ) : get_the_permalink( $post_id ),
     192                ];
     193            }
     194        }
     195 
    163196        $default_terms[] = $term_uncategorized;
    164197
    165198        // Sort by category position: Terms with position
    166199        // TODO: Apply WP date_query, search query, etc. (see: $wp_query_args)
    167     $attachments_with_terms = get_terms( [
     200    $terms_with_position = get_terms( [
    168201      'taxonomy'   => $taxonomy,
    169202            'hide_empty' => false,
     
    179212      'orderby'    => 'meta_value_num',
    180213            'order'      => 'ASC',
    181 
    182             // 'suppress_filters' => false, // TODO: NEXT: Not working. Wait for Izzis reply
    183214        ] );
    184215
    185216        // Check if taxonomy exists
    186         if ( is_wp_error( $attachments_with_terms ) ) {
    187             $attachments_with_terms = [];
    188         }
    189 
    190         self::$category_terms = array_merge( $default_terms, $attachments_with_terms );
    191 
    192     $attachments_without_terms = get_terms( [
     217        if ( is_wp_error( $terms_with_position ) ) {
     218            $terms_with_position = [];
     219        }
     220
     221        self::$category_terms = array_merge( $default_terms, $terms_with_position );
     222
     223    $terms_without_position = get_terms( [
    193224      'taxonomy'   => $taxonomy,
    194225            'hide_empty' => false,
     
    203234      'orderby'    => 'terms_not_exists',
    204235            'order'      => 'ASC',
    205 
    206             // 'suppress_filters' => false, // TODO: NEXT: Not working. Wait for Izzis reply
    207236        ] );
    208237       
    209238        // Check if taxonomy exists
    210         if ( is_wp_error( $attachments_without_terms ) ) {
    211             $attachments_without_terms = [];
    212         }
    213 
    214         self::$category_terms = array_merge( self::$category_terms, $attachments_without_terms );
     239        if ( is_wp_error( $terms_without_position ) ) {
     240            $terms_without_position = [];
     241        }
     242
     243        self::$category_terms = array_merge( self::$category_terms, $terms_without_position );
    215244
    216245    return self::$category_terms;
     246    }
     247
     248    /**
     249     * Fix term count for WPML, etc.
     250     *
     251     * Doesn't work with get_posts().
     252     *
     253     * @since 1.4
     254     */
     255  public function set_terms_count( $terms ) {
     256    foreach ( $terms as $index => $term ) {
     257            // Return terms if we aren't looping through a HappyFiles taxonomy
     258            if (
     259                ! is_object( $term ) ||
     260                ( is_object( $term ) && $term->taxonomy !== self::$taxonomy_name )
     261            ) {
     262                return $terms;
     263            }
     264
     265      $term_query_results = new \WP_Query( [
     266                'post_type'      => self::$post_type,
     267                'posts_per_page' => -1,
     268                'post_status'    => self::$post_type === 'attachment' ? ['inherit', 'private'] : ['any'],
     269                'fields'         => 'ids',
     270                'tax_query'      => [
     271                    [
     272                        'taxonomy' => $term->taxonomy,
     273                        'terms'    => [$term->term_id],
     274                        'field'    => 'term_id',
     275                    ],
     276                ],
     277            ] );
     278           
     279            $terms[$index]->count = $term_query_results->found_posts;
     280
     281            // Get term IDs for debugging
     282            $terms[$index]->term_ids = $term_query_results->posts;
     283           
     284            wp_reset_postdata();
     285        }
     286
     287    return $terms;
    217288    }
    218289
     
    244315  }
    245316
    246   public static function count_all_attachment_ids( $post_type = 'attachment', $wp_query_args = [] ) {
     317  public static function get_all_items( $post_type = 'attachment', $wp_query_args = [] ) {
    247318        $attachment_args = array_merge( $wp_query_args, [
    248319            'post_type'      => $post_type,
     
    253324
    254325        $query = new \WP_Query( $attachment_args );
     326
    255327        wp_reset_postdata();
    256328       
    257         return $query->found_posts;
     329        return $query;
    258330  }
    259331
    260   public static function count_uncategorized_attachments( $post_type = 'attachment', $taxonomy, $wp_query_args = [] ) {
     332  public static function get_uncategorized_items( $post_type = 'attachment', $taxonomy, $wp_query_args = [] ) {
    261333        $attachment_args = array_merge( $wp_query_args, [
    262334            'post_type'      => $post_type,
     
    272344        ] );
    273345       
    274     $query = new \WP_Query( $attachment_args );
     346        $results = new \WP_Query( $attachment_args );
     347       
    275348        wp_reset_postdata();
    276349       
    277     return $query->found_posts;
     350    return $results;
    278351  }
    279352
  • happyfiles/trunk/includes/import.php

    r2370842 r2388764  
    66class Import {
    77
     8    public static $post_types = [];
    89    public static $plugins = [
    910        'filebird' => [
     
    4243            'attachments' => [],
    4344        ],
     45
     46        'wp-media-folder' => [
     47            'name'        => 'WP Media Folder (by JoomUnited)',
     48            'taxonomy'    => 'wpmf-category',
     49            'folders'     => [],
     50            'attachments' => [],
     51        ],
    4452    ];
    4553
     
    6270        if (
    6371            ( ! isset( $_GET['page'] ) || ( isset( $_GET['page'] ) && $_GET['page'] !== 'happyfiles_settings' ) ) && // Run on HappyFiles Settings page
    64             ( ! isset( $_POST['plugin'] ) && ! wp_doing_ajax() ) && // Run when on import/delete third-party plugin data via AJAX
     72            ( ! isset( $_POST['plugin'] ) && ! wp_doing_ajax() ) && // Run on import/delete third-party plugin data via AJAX
    6573            get_option( 'happyfiles_hide_import_folders_notification', false ) // Run when "Import folders" admin notification hasn't been dismissed
    6674        ) {
     
    6876        }
    6977
     78        self::$post_types = array_keys( get_post_types( ['show_ui' => true] ) );
     79
    7080        // Get plugins folder and attachments data to import into HappyFiles
    7181        foreach ( self::$plugins as $slug => $plugin_data ) {
    7282            $taxonomy = $plugin_data['taxonomy'];
    73             $folders = self::get_folders( $taxonomy );
     83
     84            if ( $slug === 'wicked-folders' ) {
     85                // Run for all registered post types
     86               
     87                $folders = [];
     88
     89                foreach ( self::$post_types as $post_type ) {
     90                    $wicked_folders = self::get_folders( 'wf_' . $post_type . '_folders', $slug );
     91
     92                    if ( is_array( $wicked_folders ) ) {
     93                        $folders = array_merge( $folders, $wicked_folders );
     94                    }
     95                }
     96            }
     97           
     98            else {
     99                $folders = self::get_folders( $taxonomy, $slug );
     100            }
    74101
    75102            if ( in_array( $taxonomy, ['filebird', 'rml'] ) ) {
     
    92119     * Get folders from third-party plugins
    93120     */
    94     public static function get_folders( $taxonomy ) {
     121    public static function get_folders( $taxonomy, $slug ) {
    95122        global $wpdb;
    96123
     
    117144        // Default: Plugins with custom taxonomy terms
    118145        else {
    119             return $wpdb->get_results(
     146            $folders = $wpdb->get_results(
    120147                    "SELECT * FROM " . $wpdb->term_taxonomy . "
    121148                    LEFT JOIN  " . $wpdb->terms . "
     
    124151                    ORDER BY parent ASC"
    125152            );
     153
     154            // WP Media Folder (JoomUnited): Remove root folder
     155            if ( $slug === 'wp-media-folder' ) {
     156                foreach ( $folders as $index => $folder ) {
     157                    if ( $folder->slug === 'wp-media-folder-root' ) {
     158                        unset( $folders[$index] );
     159                    }
     160                }
     161            }
     162
     163            return array_values( $folders );
    126164        }
    127165    }
     
    244282            $folder_id = $folder->term_id;
    245283            $parent = intval( $folder->parent );
     284            $taxonomy = HAPPYFILES_TAXONOMY;
     285
     286            // Get correct taxonomy of folder to import by post type (e.g. 'wf_page_folders')
     287            foreach ( self::$post_types as $post_type ) {
     288                if ( strpos( $folder->taxonomy, $post_type ) !== false ) {
     289                    $taxonomy = $post_type === 'attachment' ? HAPPYFILES_TAXONOMY : 'hf_cat_' . $post_type;
     290                }
     291            }
    246292           
    247293            if ( $parent && isset( $new_cat_by_id[$parent]['term_id'] ) ) {
     
    250296           
    251297            // Create new HF term from plugin folder
    252             $new_hf_term = wp_insert_term( $folder->name, HAPPYFILES_TAXONOMY, ['parent' => $parent] );
     298            $new_hf_term = wp_insert_term( $folder->name, $taxonomy, ['parent' => $parent] );
    253299
    254300            // Skip if category couldn't be created
     
    292338            }
    293339
    294             $term_ids = wp_get_object_terms( $attachment_id, HAPPYFILES_TAXONOMY, ['fields' => 'ids'] );
     340            // Get attachment taxonomy by post type
     341            $post_type = get_post_type( $attachment_id );
     342            $taxonomy = $post_type === 'attachment' ? HAPPYFILES_TAXONOMY : 'hf_cat_' . $post_type;
     343
     344            $term_ids = wp_get_object_terms( $attachment_id, $taxonomy, ['fields' => 'ids'] );
    295345            $term_ids[] = $hf_category_id;
    296346
    297             $term_set = wp_set_object_terms( $attachment_id, $term_ids, HAPPYFILES_TAXONOMY );
     347            $term_set = wp_set_object_terms( $attachment_id, $term_ids, $taxonomy );
    298348
    299349            if ( is_wp_error( $term_set ) ) {
  • happyfiles/trunk/includes/setup.php

    r2370842 r2388764  
    2323        add_action( 'plugins_loaded', [$this, 'load_plugin_textdomain'] );
    2424    }
    25    
     25
    2626    public function load_plugin_textdomain() {
    2727        load_plugin_textdomain(
     
    104104                        'crop'               => esc_html__( 'Crop images', 'happyfiles' ),
    105105                        'caption'            => esc_html__( 'Caption', 'happyfiles' ),
     106                        'lightbox'           => esc_html__( 'Lightbox', 'happyfiles' ),
     107                        'lightboxFullscreen' => esc_html__( 'Lightbox: Fullscreen', 'happyfiles' ),
     108                        'lightboxThumbnails' => esc_html__( 'Lightbox: Thumbnails', 'happyfiles' ),
     109                        'lightboxZoom'       => esc_html__( 'Lightbox: Zoom', 'happyfiles' ),
    106110                    ],
    107111                ],
  • happyfiles/trunk/readme.txt

    r2370842 r2388764  
    3434Simply select the category you'd like to assign your files to, then upload them. HappyFiles also displays an upload progress bar.
    3535
    36 **Create Dynamic Galleries From Folders**
    37 Display images of one or multiple categories in a beautiful and highly customizable gallery. Available as a shortcode (happyfiles_gallery) and as a Gutenberg block (HappyFiles Gallery).
     36**Create Dynamic Galleries (with built-in lightbox) From Folders**
     37Display images of one or multiple HappyFiles categories in a beautiful and highly customizable gallery. Available as a shortcode (happyfiles_gallery) and as a Gutenberg block (HappyFiles Gallery). You can enable a gallery lightbox, too.
    3838
    3939**Toggle & Resizable Sidebar**
     
    5555HappyFiles is optimized for RTL languages such as Arabic, Hebrew, etc.
    5656
    57 **Public Roadmap & Idea Board**
     57**Public Roadmap, Idea Board & Changelog **
    5858HappyFiles' product development is 100% transparent, open, and user-driven. If you think anything missing, feel free to submit your idea for upvoting, or upvote existing ideas of other HappyFiles users over at [https://happyfiles.io/roadmap/](https://happyfiles.io/roadmap/).
    5959
     
    6868* Wicked Folders
    6969* Real Media Library (by DevOwl)
     70* WP Media Folder (by JoomUnited)
    7071
    7172You can also delete all data generated by HappyFiles by clicking the "Delete Plugin Data" button on the HappyFiles settings page.
    7273
    73 > This free version of HappyFiles allows you to manage up to 10 media categories. [Upgrade to HappyFiles PRO](https://happyfiles.io/#download?utm_source=wp&utm_medium=repo) (one-time payment) to manage unlimited folders for all your media files, and any post type(posts, pages, custom post types, WooCommerce products/orders/coupons, etc.). Receive update notifications and one-click plugin downloads right from your WordPress dashboard. Access to beta releases before everyone else.
     74> This free version of HappyFiles allows you to manage up to 10 media categories. [Upgrade to HappyFiles PRO](https://happyfiles.io/#download?utm_source=wp&utm_medium=repo) (one-time payment) to manage unlimited folders for all your media files, and any post type (posts, pages, custom post types, WooCommerce products/orders/coupons, etc.). SVG upload, sanitization, and preview. Receive update notifications and one-click plugin downloads right from your WordPress dashboard. Access to beta releases before everyone else.
    7475
    7576== Frequently Asked Questions ==
     
    7778= How many media folders can I create and manage? =
    7879
    79 The free version of HappyFiles allows you to categorize unlimited files, but the creation and management of categories is limited to 10. If you need to manage more than 10 media categories, please [upgrade to HappyFiles Pro](https://happyfiles.io/#download?utm_source=wp&utm_medium=repo). The Pro version also comes with premium support.
     80The free version of HappyFiles allows you to categorize unlimited files, but the creation and management of categories is limited to 10. If you need to manage more than 10 media categories, please [upgrade to HappyFiles Pro](https://happyfiles.io/#download?utm_source=wp&utm_medium=repo). HappyFiles Pro also comes with premium support, early access to beta releases, and additional features such as categorization of all your post types. SVG upload, sanitization, and preview.
    8081
    8182= Does HappyFiles modify my files or folders? =
     
    8586= Can I use HappyFiles on more than one domain? =
    8687
    87 Yes. You can use HappyFiles Free & Pro on all your and your client domains.
     88Yes. You can use HappyFiles Free on all your and your client sites. For the usage limit of HappyFiles Pro please have a look at [https://happyfiles.io/#download](https://happyfiles.io/#download)
     89
     90= Does HappyFiles handle SVG uploads? =
     91
     92The free version doesn't add SVG support. But HappyFiles PRO let's you enable SVG upload, auto-sanitization, and SVG previews via the HappyFiles settings.
    8893
    8994= Where can I find a live demo of HappyFiles? =
Note: See TracChangeset for help on using the changeset viewer.