Changeset 2388764
- Timestamp:
- 09/26/2020 08:24:51 AM (6 years ago)
- Location:
- happyfiles
- Files:
-
- 16 added
- 13 edited
- 20 copied
-
tags/1.3.1 (copied) (copied from happyfiles/trunk)
-
tags/1.3.1/assets/blocks (copied) (copied from happyfiles/trunk/assets/blocks)
-
tags/1.3.1/assets/blocks/blocks.asset.php (copied) (copied from happyfiles/trunk/assets/blocks/blocks.asset.php)
-
tags/1.3.1/assets/blocks/blocks.js (copied) (copied from happyfiles/trunk/assets/blocks/blocks.js)
-
tags/1.3.1/assets/css/admin.min.css (copied) (copied from happyfiles/trunk/assets/css/admin.min.css)
-
tags/1.3.1/assets/css/hf-rtl.min.css (copied) (copied from happyfiles/trunk/assets/css/hf-rtl.min.css)
-
tags/1.3.1/assets/css/hf.min.css (copied) (copied from happyfiles/trunk/assets/css/hf.min.css)
-
tags/1.3.1/assets/fonts (copied) (copied from happyfiles/trunk/assets/fonts)
-
tags/1.3.1/assets/js/admin.js (copied) (copied from happyfiles/trunk/assets/js/admin.js)
-
tags/1.3.1/assets/js/hf.min.js (copied) (copied from happyfiles/trunk/assets/js/hf.min.js)
-
tags/1.3.1/happyfiles.php (copied) (copied from happyfiles/trunk/happyfiles.php)
-
tags/1.3.1/includes/admin.php (copied) (copied from happyfiles/trunk/includes/admin.php)
-
tags/1.3.1/includes/admin/admin-screen-settings.php (copied) (copied from happyfiles/trunk/includes/admin/admin-screen-settings.php)
-
tags/1.3.1/includes/feedback.php (copied) (copied from happyfiles/trunk/includes/feedback.php)
-
tags/1.3.1/includes/gallery.php (copied) (copied from happyfiles/trunk/includes/gallery.php)
-
tags/1.3.1/includes/helpers.php (copied) (copied from happyfiles/trunk/includes/helpers.php)
-
tags/1.3.1/includes/import.php (copied) (copied from happyfiles/trunk/includes/import.php)
-
tags/1.3.1/includes/init.php (copied) (copied from happyfiles/trunk/includes/init.php)
-
tags/1.3.1/includes/setup.php (copied) (copied from happyfiles/trunk/includes/setup.php)
-
tags/1.3.1/readme.txt (copied) (copied from happyfiles/trunk/readme.txt)
-
trunk/assets/blocks/blocks.asset.php (modified) (1 diff)
-
trunk/assets/blocks/blocks.js (modified) (1 diff)
-
trunk/assets/css/admin.min.css (modified) (1 diff)
-
trunk/assets/css/hf.min.css (modified) (1 diff)
-
trunk/assets/js/hf.min.js (modified) (1 diff)
-
trunk/assets/lightgallery (added)
-
trunk/assets/lightgallery/css (added)
-
trunk/assets/lightgallery/css/lightgallery.min.css (added)
-
trunk/assets/lightgallery/fonts (added)
-
trunk/assets/lightgallery/fonts/lg.ttf (added)
-
trunk/assets/lightgallery/fonts/lg.woff (added)
-
trunk/assets/lightgallery/img (added)
-
trunk/assets/lightgallery/img/loading.gif (added)
-
trunk/assets/lightgallery/img/video-play.png (added)
-
trunk/assets/lightgallery/img/vimeo-play.png (added)
-
trunk/assets/lightgallery/img/youtube-play.png (added)
-
trunk/assets/lightgallery/js (added)
-
trunk/assets/lightgallery/js/lg-fullscreen.min.js (added)
-
trunk/assets/lightgallery/js/lg-thumbnail.min.js (added)
-
trunk/assets/lightgallery/js/lg-zoom.min.js (added)
-
trunk/assets/lightgallery/js/lightgallery.min.js (added)
-
trunk/happyfiles.php (modified) (3 diffs)
-
trunk/includes/admin.php (modified) (4 diffs)
-
trunk/includes/admin/admin-screen-settings.php (modified) (1 diff)
-
trunk/includes/gallery.php (modified) (8 diffs)
-
trunk/includes/helpers.php (modified) (10 diffs)
-
trunk/includes/import.php (modified) (10 diffs)
-
trunk/includes/setup.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (5 diffs)
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}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}.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 11 11 * @author owenm <[email protected]> 12 12 * @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&¤tParent!==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&¤tParent!==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 4 4 * Plugin URI: https://happyfiles.io 5 5 * Description: Organize your WordPress media files in folders/categories via drag and drop. 6 * Version: 1. 3.16 * Version: 1.4 7 7 * Author: Codeer 8 8 * Author URI: https://codeer.io … … 13 13 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 14 14 15 define( 'HAPPYFILES_VERSION', '1. 3.1' );15 define( 'HAPPYFILES_VERSION', '1.4' ); 16 16 define( 'HAPPYFILES_FILE', __FILE__ ); 17 17 define( 'HAPPYFILES_PATH', plugin_dir_path( __FILE__ ) ); … … 28 28 define( 'HAPPYFILES_SETTING_REMOVE_FROM_ALL_CATEGORIES', 'happyfiles_remove_from_all_categories' ); 29 29 define( 'HAPPYFILES_SETTING_LIST_VIEW_DISABLE_AJAX', 'happyfiles_list_view_disable_ajax' ); 30 define( 'HAPPYFILES_SETTING_ALTERNATIVE_COUNT', 'happyfiles_alternative_count' ); 30 31 31 32 require_once HAPPYFILES_PATH . 'includes/init.php'; -
happyfiles/trunk/includes/admin.php
r2370842 r2388764 310 310 public function admin_init() { 311 311 // Register HappyFiles settings 312 register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_USER_ROLES );312 register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_USER_ROLES ); 313 313 register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_MULTIPLE_CATEGORIES ); 314 314 register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_REMOVE_FROM_ALL_CATEGORIES ); 315 315 register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_LIST_VIEW_DISABLE_AJAX ); 316 register_setting( HAPPYFILES_SETTINGS_GROUP, HAPPYFILES_SETTING_ALTERNATIVE_COUNT ); 316 317 } 317 318 … … 782 783 } 783 784 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 } 801 800 802 801 foreach ( $item_ids as $item_id ) { … … 867 866 868 867 wp_send_json_success( [ 869 'terms' => $terms,870 'taxonomy' => $taxonomy,868 'terms' => $terms, 869 'taxonomy' => $taxonomy, 871 870 'post_type' => $post_type, 872 'term_ids' => $term_ids,871 'term_ids' => $term_ids, 873 872 ] ); 874 873 } … … 934 933 wp_send_json_success( $categorie_terms ); 935 934 } else { 935 $uncategorized_items = self::get_uncategorized_items( $_POST['postType'], $_POST['taxonomy'] ); 936 936 937 wp_send_json_success( [[ 937 938 'term_id' => -1, 938 939 'level' => 1, 939 940 'name' => esc_html__( 'Uncategorized', 'happyfiles' ), 940 'count' => Helpers::count_uncategorized_attachments( $_POST['postType'], $_POST['taxonomy'] ),941 'count' => $uncategorized_items->found_posts, 941 942 ]] ); 942 943 } -
happyfiles/trunk/includes/admin/admin-screen-settings.php
r2370842 r2388764 110 110 </tr> 111 111 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 112 134 <?php do_action( 'happyfiles_admin_settings_bottom' ); ?> 113 135 </tbody> -
happyfiles/trunk/includes/gallery.php
r2370842 r2388764 45 45 $dependencies = ['happyfiles', 'wp-blocks', 'wp-element', 'wp-editor', 'wp-components']; 46 46 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 ); 48 48 49 49 register_block_type( 'happyfiles/gallery', [ … … 97 97 98 98 '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' => [ 99 119 'type' => 'boolean', 100 120 'default' => false, … … 120 140 $crop = true; 121 141 $show_caption = true; 142 $lightbox = false; 143 $lightbox_thumbnails = false; 144 $lightbox_zoom = false; 145 $lightbox_fullscreen = false; 122 146 123 147 if ( ! is_array( $attributes ) ) { … … 130 154 } 131 155 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 ); 133 158 134 159 switch ( $key ) { … … 171 196 case 'caption': 172 197 $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 );; 173 214 break; 174 215 … … 218 259 } 219 260 261 if ( $lightbox ) { 262 $wrapper_classes[] = 'lightbox'; 263 } 264 220 265 // Rendered in Gutenberg (wp-admin): Remove 'a' link tag 221 266 $gutenberg_requested = strpos( wp_get_referer(), admin_url() ) === 0; … … 225 270 } 226 271 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 227 313 ob_start(); 228 314 ?> 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%;"> 231 317 <?php 232 318 $attr = []; … … 243 329 } 244 330 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 246 337 echo '<figure>'; 247 338 -
happyfiles/trunk/includes/helpers.php
r2370842 r2388764 29 29 * Visual Composer: Editor already loads in wp-admin 30 30 */ 31 if ( 31 32 if ( 32 33 isset( $_GET['bricksbuilder'] ) || 33 34 isset( $_GET['et_fb'] ) || … … 48 49 } 49 50 50 // self::$post_type = get_post_type();51 51 self::$post_type = self::get_current_post_type(); 52 52 … … 56 56 add_action( 'init', [$this, 'set_taxonomy_name'], 10, 2 ); 57 57 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 } 58 64 } 59 65 … … 133 139 $wp_query_args = []; 134 140 135 // Add 'all' and 'uncategorized' terms to attachmentterms (easier to update DOM with all list items)141 // Add 'all' terms to category terms (easier to update DOM with all list items) 136 142 $default_terms = []; 137 143 … … 142 148 $name = sprintf( esc_html__( 'All %s', 'happyfiles' ), ucwords( $post_type_object->label ) ); 143 149 } 150 151 $all_items = self::get_all_items( $post_type, $wp_query_args ); 144 152 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 163 196 $default_terms[] = $term_uncategorized; 164 197 165 198 // Sort by category position: Terms with position 166 199 // TODO: Apply WP date_query, search query, etc. (see: $wp_query_args) 167 $ attachments_with_terms= get_terms( [200 $terms_with_position = get_terms( [ 168 201 'taxonomy' => $taxonomy, 169 202 'hide_empty' => false, … … 179 212 'orderby' => 'meta_value_num', 180 213 'order' => 'ASC', 181 182 // 'suppress_filters' => false, // TODO: NEXT: Not working. Wait for Izzis reply183 214 ] ); 184 215 185 216 // 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( [ 193 224 'taxonomy' => $taxonomy, 194 225 'hide_empty' => false, … … 203 234 'orderby' => 'terms_not_exists', 204 235 'order' => 'ASC', 205 206 // 'suppress_filters' => false, // TODO: NEXT: Not working. Wait for Izzis reply207 236 ] ); 208 237 209 238 // 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 ); 215 244 216 245 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; 217 288 } 218 289 … … 244 315 } 245 316 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 = [] ) { 247 318 $attachment_args = array_merge( $wp_query_args, [ 248 319 'post_type' => $post_type, … … 253 324 254 325 $query = new \WP_Query( $attachment_args ); 326 255 327 wp_reset_postdata(); 256 328 257 return $query ->found_posts;329 return $query; 258 330 } 259 331 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 = [] ) { 261 333 $attachment_args = array_merge( $wp_query_args, [ 262 334 'post_type' => $post_type, … … 272 344 ] ); 273 345 274 $query = new \WP_Query( $attachment_args ); 346 $results = new \WP_Query( $attachment_args ); 347 275 348 wp_reset_postdata(); 276 349 277 return $ query->found_posts;350 return $results; 278 351 } 279 352 -
happyfiles/trunk/includes/import.php
r2370842 r2388764 6 6 class Import { 7 7 8 public static $post_types = []; 8 9 public static $plugins = [ 9 10 'filebird' => [ … … 42 43 'attachments' => [], 43 44 ], 45 46 'wp-media-folder' => [ 47 'name' => 'WP Media Folder (by JoomUnited)', 48 'taxonomy' => 'wpmf-category', 49 'folders' => [], 50 'attachments' => [], 51 ], 44 52 ]; 45 53 … … 62 70 if ( 63 71 ( ! isset( $_GET['page'] ) || ( isset( $_GET['page'] ) && $_GET['page'] !== 'happyfiles_settings' ) ) && // Run on HappyFiles Settings page 64 ( ! isset( $_POST['plugin'] ) && ! wp_doing_ajax() ) && // Run whenon import/delete third-party plugin data via AJAX72 ( ! isset( $_POST['plugin'] ) && ! wp_doing_ajax() ) && // Run on import/delete third-party plugin data via AJAX 65 73 get_option( 'happyfiles_hide_import_folders_notification', false ) // Run when "Import folders" admin notification hasn't been dismissed 66 74 ) { … … 68 76 } 69 77 78 self::$post_types = array_keys( get_post_types( ['show_ui' => true] ) ); 79 70 80 // Get plugins folder and attachments data to import into HappyFiles 71 81 foreach ( self::$plugins as $slug => $plugin_data ) { 72 82 $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 } 74 101 75 102 if ( in_array( $taxonomy, ['filebird', 'rml'] ) ) { … … 92 119 * Get folders from third-party plugins 93 120 */ 94 public static function get_folders( $taxonomy ) {121 public static function get_folders( $taxonomy, $slug ) { 95 122 global $wpdb; 96 123 … … 117 144 // Default: Plugins with custom taxonomy terms 118 145 else { 119 return$wpdb->get_results(146 $folders = $wpdb->get_results( 120 147 "SELECT * FROM " . $wpdb->term_taxonomy . " 121 148 LEFT JOIN " . $wpdb->terms . " … … 124 151 ORDER BY parent ASC" 125 152 ); 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 ); 126 164 } 127 165 } … … 244 282 $folder_id = $folder->term_id; 245 283 $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 } 246 292 247 293 if ( $parent && isset( $new_cat_by_id[$parent]['term_id'] ) ) { … … 250 296 251 297 // 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] ); 253 299 254 300 // Skip if category couldn't be created … … 292 338 } 293 339 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'] ); 295 345 $term_ids[] = $hf_category_id; 296 346 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 ); 298 348 299 349 if ( is_wp_error( $term_set ) ) { -
happyfiles/trunk/includes/setup.php
r2370842 r2388764 23 23 add_action( 'plugins_loaded', [$this, 'load_plugin_textdomain'] ); 24 24 } 25 25 26 26 public function load_plugin_textdomain() { 27 27 load_plugin_textdomain( … … 104 104 'crop' => esc_html__( 'Crop images', 'happyfiles' ), 105 105 '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' ), 106 110 ], 107 111 ], -
happyfiles/trunk/readme.txt
r2370842 r2388764 34 34 Simply select the category you'd like to assign your files to, then upload them. HappyFiles also displays an upload progress bar. 35 35 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** 37 Display 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. 38 38 39 39 **Toggle & Resizable Sidebar** … … 55 55 HappyFiles is optimized for RTL languages such as Arabic, Hebrew, etc. 56 56 57 **Public Roadmap & Idea Board**57 **Public Roadmap, Idea Board & Changelog ** 58 58 HappyFiles' 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/). 59 59 … … 68 68 * Wicked Folders 69 69 * Real Media Library (by DevOwl) 70 * WP Media Folder (by JoomUnited) 70 71 71 72 You can also delete all data generated by HappyFiles by clicking the "Delete Plugin Data" button on the HappyFiles settings page. 72 73 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. 74 75 75 76 == Frequently Asked Questions == … … 77 78 = How many media folders can I create and manage? = 78 79 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.80 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). 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. 80 81 81 82 = Does HappyFiles modify my files or folders? = … … 85 86 = Can I use HappyFiles on more than one domain? = 86 87 87 Yes. You can use HappyFiles Free & Pro on all your and your client domains. 88 Yes. 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 92 The 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. 88 93 89 94 = Where can I find a live demo of HappyFiles? =
Note: See TracChangeset
for help on using the changeset viewer.