2018-09-21 08:37:33 +00:00
/ * !
* elFinder - file manager for web
2019-09-11 10:57:42 +00:00
* Version 2.1 . 50 ( 2019 - 08 - 20 )
2018-09-21 08:37:33 +00:00
* http : //elfinder.org
*
2019-09-11 10:57:42 +00:00
* Copyright 2009 - 2019 , Studio 42
2018-09-21 08:37:33 +00:00
* Licensed under a 3 - clauses BSD license
* /
2019-09-11 10:57:42 +00:00
! function ( e , t ) { if ( "function" == typeof define && define . amd ) define ( [ "jquery" , "jquery-ui" ] , t ) ; else if ( "undefined" != typeof exports ) { var n , i ; try { n = require ( "jquery" ) , i = require ( "jquery-ui" ) } catch ( a ) { } module . exports = t ( n , i ) } else t ( e . jQuery , e . jQuery . ui , ! 0 ) } ( this , function ( e , t , n ) { n = n || ! 1 ; var i = function ( t , n , a ) { var o , r , s , l , c , d , p , u = this , h = [ ] , f = [ "button" , "tooltip" ] , m = e ( t ) , g = e . extend ( ! 0 , { } , e . _data ( m . get ( 0 ) , "events" ) ) , v = e ( "<div/>" ) . append ( m . contents ( ) ) . attr ( "class" , m . attr ( "class" ) || "" ) . attr ( "style" , m . attr ( "style" ) || "" ) , b = m . attr ( "id" ) || m . attr ( "id" , "elfauto" + e ( ".elfinder" ) . length ) . attr ( "id" ) , y = "elfinder-" + b , w = "mousedown." + y , x = "keydown." + y , k = "keypress." + y , C = "keyup." + y , z = ! 1 , T = ! 1 , A = [ "enable" , "disable" , "load" , "open" , "reload" , "select" , "add" , "remove" , "change" , "dblclick" , "getfile" , "lockfiles" , "unlockfiles" , "selectfiles" , "unselectfiles" , "dragstart" , "dragstop" , "search" , "searchend" , "viewchange" ] , S = "" , O = { path : "" , url : "" , tmbUrl : "" , disabled : [ ] , separator : "/" , archives : [ ] , extract : [ ] , copyOverwrite : ! 0 , uploadOverwrite : ! 0 , uploadMaxSize : 0 , jpgQuality : 100 , tmbCrop : ! 1 , tmb : ! 1 } , I = { } , j = { } , M = { } , F = { } , D = [ ] , E = { } , U = { } , P = [ ] , R = { } , q = [ ] , H = [ ] , _ = new u . command ( u ) , N = "auto" , L = 400 , W = null , B = "sounds/" , $ = "" , K = ! 1 , V = e ( document . createElement ( "audio" ) ) . hide ( ) . appendTo ( "body" ) [ 0 ] , X = 0 , G = "" , J = null , Y = function ( t ) { var n , i , a , o , r , s , l , c = { } , d = { } ; u . api >= 2.1 ? ( u . commandMap = t . options . uiCmdMap && Object . keys ( t . options . uiCmdMap ) . length ? t . options . uiCmdMap : { } , G !== JSON . stringify ( u . commandMap ) && ( G = JSON . stringify ( u . commandMap ) ) ) : u . options . sync = 0 , t . init ? ( j = { } , F = { } ) : ( s = S , n = "elfinder-subtree-loaded " + u . res ( "class" , "navexpand" ) , r = u . res ( "class" , "navcollapse" ) , i = Object . keys ( j ) , a = function ( e ) { if ( ! j [ e ] ) return ! 0 ; var t = "directory" === j [ e ] . mime , i = j [ e ] . phash ; ! ( ! t || c [ i ] || ! d [ i ] && u . navHash2Elm ( j [ e ] . hash ) . is ( ":hidden" ) && u . navHash2Elm ( i ) . next ( ".elfinder-navbar-subtree" ) . children ( ) . length > 100 ) || ! t && i === S || R [ e ] ? t && ( d [ i ] = ! 0 ) : ( t && ! c [ i ] && ( c [ i ] = ! 0 , u . navHash2Elm ( i ) . removeClass ( n ) . next ( ".elfinder-navbar-subtree" ) . empty ( ) ) , te ( j [ e ] ) ) } , o = function ( ) { i . length && ( J && J . _abort ( ) , J = u . asyncJob ( a , i , { interval : 20 , numPerOnce : 100 } ) . done ( function ( ) { var t = u . storage ( "hide" ) || { items : { } } ; Object . keys ( M ) . length && e . each ( M , function ( e ) { t . items [ e ] || delete M [ e ] } ) } ) ) } , u . trigger ( "filesgc" ) . one ( "filesgc" , function ( ) { i = [ ] } ) , u . one ( "opendone" , function ( ) { s !== S && ( m . data ( "lazycnt" ) ? u . one ( "lazydone" , o ) : o ( ) ) } ) ) , u . sorters = { } , S = t . cwd . hash , Q ( t . files ) , j [ S ] || Q ( [ t . cwd ] ) , l = JSON . stringify ( u . sorters ) , $ !== l && ( u . trigger ( "sorterupdate" ) , $ = l ) , u . lastDir ( S ) , u . autoSync ( ) } , Q = function ( t , n ) { var i , a , o , r , s = { name : ! 0 , perm : ! 0 , date : ! 0 , size : ! 0 , kind : ! 0 } , l = ! u . sorters . _checked , c = t . length , d = function ( t ) { var n = t || { } , i = [ ] ; e . each ( u . sortRules , function ( e ) { ( s [ e ] || "undefined" != typeof n [ e ] || "mode" === e && "undefined" != typeof n . perm ) && i . push ( e ) } ) , u . sorters = u . arrayFlip ( i , ! 0 ) , u . sorters . _checked = ! 0 } , p = [ "sizeInfo" ] , h = { } , f = u . storage ( "hide" ) || { } , m = f . items || { } ; for ( a = 0 ; a < c ; a ++ ) i = Object . assign ( { } , t [ a ] ) , r = ! ( f . show || ! m [ i . hash ] ) , i . name && i . hash && i . mime && ( r || ( l && i . phash === S && ( d ( i ) , l = ! 1 ) , ! i . phash || "add" !== n && "change" !== n || ( o = u . parents ( i . phash ) ) && e . each ( o , function ( ) { h [ this ] = ! 0 } ) ) , j [ i . hash ] && ( e . each ( p , function ( ) { j [ i . hash ] [ this ] && ! i [ this ] && ( i [ this ] = j [ i . hash ] [ this ] ) } ) , i . sizeInfo && ! i . size && ( i . size = i . sizeInfo . size ) , te ( j [ i . hash ] , ! 0 ) ) , m [ i . hash ] && ( M [ i . hash ] = i ) , r ? ( c -- , t . splice ( a -- , 1 ) ) : ( j [ i . hash ] = i , "directory" !== i . mime || F [ i . hash ] || ( F [ i . hash ] = { } ) , i . phash && ( F [ i . phash ] || ( F [ i . phash ] = { } ) , F [ i . phash ] [ i . hash ] = ! 0 ) ) ) ; e . each ( Object . keys ( h ) , function ( ) { var e = j [ this ] ; e && e . sizeInfo && delete e . sizeInfo } ) , l && d ( ) } , Z = function ( t ) { var n , i = t . length , a = { } , o = function ( t ) { var i = j [ t ] ; i && ( "directory" === i . mime && ( a [ t ] && delete u . roots [ a [ t ] ] , e . each ( u . leafRoots , function ( n , i ) { var a , o ; ( a = e . inArray ( t , i ) ) !== - 1 && ( 1 === i . length ? ( ( o = Object . assign ( { } , j [ n ] ) ) && o . _realStats && ( e . each ( o . _realStats , function ( e , t ) { o [ e ] = t } ) , Z ( j [ n ] . _realStats ) , u . change ( { changed : [ o ] } ) ) , delete u . leafRoots [ n ] ) : u . leafRoots [ n ] . splice ( a , 1 ) ) } ) , u . searchStatus . state < 2 && e . each ( j , function ( e , n ) { n . phash == t && o ( e ) } ) ) , i . phash && ( n = u . parents ( i . phash ) ) && e . each ( n , function ( ) { r [ this ] = ! 0 } ) , te ( j [ t ] ) ) } , r = { } ; for ( e . each ( u . roots , function ( e , t ) { a [ t ] = e } ) ; i -- ; ) o ( t [ i ] ) ; e . each ( Object . keys ( r ) , function ( ) { var e = j [ this ] ; e && e . sizeInfo && delete e . sizeInfo } )
altKey : e . inArray ( "ALT" , r ) != - 1 , ctrlKey : e . inArray ( "CTRL" , r ) != - 1 , shiftKey : e . inArray ( "SHIFT" , r ) != - 1 , type : t . type || "keydown" , callback : t . callback , description : t . description , pattern : i } ) ; return this } , this . shortcuts = function ( ) { var t = [ ] ; return e . each ( U , function ( e , n ) { t . push ( [ n . pattern , u . i18n ( n . description ) ] ) } ) , t } , this . clipboard = function ( t , n ) { var i = function ( ) { return e . map ( P , function ( e ) { return e . hash } ) } ; return void 0 !== t && ( P . length && this . trigger ( "unlockfiles" , { files : i ( ) } ) , R = { } , P = e . map ( t || [ ] , function ( e ) { var t = j [ e ] ; return t ? ( R [ e ] = ! 0 , { hash : e , phash : t . phash , name : t . name , mime : t . mime , read : t . read , locked : t . locked , cut : ! ! n } ) : null } ) , this . trigger ( "changeclipboard" , { clipboard : P . slice ( 0 , P . length ) } ) , n && this . trigger ( "lockfiles" , { files : i ( ) } ) ) , P . slice ( 0 , P . length ) } , this . isCommandEnabled = function ( e , t ) { var n , i , a = u . cwd ( ) . volumeid || "" ; return ! t && u . searchStatus . state > 1 && u . selected ( ) . length && ( t = u . selected ( ) [ 0 ] ) , n = ! t || a && 0 === t . indexOf ( a ) ? I . disabledFlip : u . option ( "disabledFlip" , t ) , i = this . _commands [ e ] , ! ! i && ( i . alwaysEnabled || ! n [ e ] ) } , this . exec = function ( t , n , i , a ) { var o , r ; return ! a && this . commandMap [ t ] && "hidden" !== this . commandMap [ t ] && ( t = this . commandMap [ t ] ) , "open" === t && ( ( this . searchStatus . state || this . searchStatus . ininc ) && this . trigger ( "searchend" , { noupdate : ! 0 } ) , this . autoSync ( "stop" ) ) , ! a && n && ( e . isArray ( n ) ? n . length && ( a = n [ 0 ] ) : a = n ) , o = this . _commands [ t ] && this . isCommandEnabled ( t , a ) ? this . _commands [ t ] . exec ( n , i ) : e . Deferred ( ) . reject ( "errUnknownCmd" ) , r = typeof o , "object" === r && o . promise || ( u . debug ( "warning" , '"cmd.exec()" should be returned "$.Deferred" but cmd "' + t + '" returned "' + r + '"' ) , o = e . Deferred ( ) . resolve ( ) ) , this . trigger ( "exec" , { dfrd : o , cmd : t , files : n , opts : i , dstHash : a } ) , o } , this . dialog = function ( t , n ) { var i = e ( "<div/>" ) . append ( t ) . appendTo ( m ) . elfinderdialog ( n , u ) , a = i . closest ( ".ui-dialog" ) , o = function ( ) { ! i . data ( "draged" ) && i . is ( ":visible" ) && i . elfinderdialog ( "posInit" ) } ; return a . length && ( u . bind ( "resize" , o ) , a . on ( "remove" , function ( ) { u . unbind ( "resize" , o ) } ) ) , i } , this . toast = function ( t ) { return e ( '<div class="ui-front"/>' ) . appendTo ( this . ui . toast ) . elfindertoast ( t || { } , this ) } , this . getUI = function ( t ) { return t ? this . ui [ t ] || e ( ) : m } , this . getCommand = function ( e ) { return void 0 === e ? this . _commands : this . _commands [ e ] } , this . resize = function ( t , n ) { var i , a = function ( ) { for ( var e = m . outerHeight ( ! 0 ) - m . innerHeight ( ) , t = m ; t . get ( 0 ) !== W . get ( 0 ) && ( t = t . parent ( ) , e += t . outerHeight ( ! 0 ) - t . innerHeight ( ) , t . parent ( ) . length ) ; ) ; return e } , o = ! m . hasClass ( "ui-resizable" ) , r = m . data ( "resizeSize" ) || { w : 0 , h : 0 } , s = { } ; W && W . data ( "resizeTm" ) && clearTimeout ( W . data ( "resizeTm" ) ) , "string" == typeof n && ( i = n . match ( /^([0-9.]+)%$/ ) ) && ( W && W . length || ( W = e ( window ) ) , W . data ( "marginToMyNode" ) || W . data ( "marginToMyNode" , a ( ) ) , W . data ( "fitToBaseFunc" ) || W . data ( "fitToBaseFunc" , function ( e ) { var t = W . data ( "resizeTm" ) ; e . preventDefault ( ) , e . stopPropagation ( ) , t && cancelAnimationFrame ( t ) , m . hasClass ( "elfinder-fullscreen" ) || u . UA . Mobile && W . data ( "rotated" ) === u . UA . Rotated || ( W . data ( "rotated" , u . UA . Rotated ) , W . data ( "resizeTm" , requestAnimationFrame ( function ( ) { u . restoreSize ( ) } ) ) ) } ) , "undefined" == typeof W . data ( "rotated" ) && W . data ( "rotated" , u . UA . Rotated ) , n = W . height ( ) * ( i [ 1 ] / 100 ) - W . data ( "marginToMyNode" ) , W . off ( "resize." + u . namespace , W . data ( "fitToBaseFunc" ) ) , o && W . on ( "resize." + u . namespace , W . data ( "fitToBaseFunc" ) ) ) , m . css ( { width : t , height : parseInt ( n ) } ) , s . w = Math . round ( m . width ( ) ) , s . h = Math . round ( m . height ( ) ) , m . data ( "resizeSize" , s ) , s . w === r . w && s . h === r . h || ( m . trigger ( "resize" ) , this . trigger ( "resize" , { width : s . w , height : s . h } ) ) } , this . restoreSize = function ( ) { this . resize ( N , L ) } , this . show = function ( ) { m . show ( ) , this . enable ( ) . trigger ( "show" ) } , this . hide = function ( ) { this . options . enableAlways && ( T = z , z = ! 1 ) , this . disable ( ) , this . trigger ( "hide" ) , m . hide ( ) } , this . lazy = function ( t , n , i ) { var a = function ( e ) { var t , n = m . data ( "lazycnt" ) ; e ? ( t = ! m . data ( "lazyrepaint" ) && i . repaint , n ? m . data ( "lazycnt" , ++ n ) : m . data ( "lazycnt" , 1 ) . addClass ( "elfinder-processing" ) , t && m . data ( "lazyrepaint" , ! 0 ) . css ( "display" ) ) : n && n > 1 ? m . data ( "lazycnt" , -- n ) : ( t = m . data ( "lazyrepaint" ) , m . data ( "lazycnt" , 0 ) . removeData ( "lazyrepaint" ) . removeClass ( "elfinder-processing" ) , t && m . css ( "display" ) , u . trigger ( "lazydone" ) ) } , o = e . Deferred ( ) , r = function ( ) { o . resolve ( t . call ( o ) ) , a ( ! 1 ) } ; return n = n || 0 , i = i || { } , a ( ! 0 ) , n ? setTimeout ( r ,
n . data ( a ) ? n . data ( a , ! 1 ) : n . removeClass ( l ) } } ) . on ( "dragover" , ".native-droppable" , function ( t ) { if ( t . originalEvent . dataTransfer ) { var n = e ( t . currentTarget ) ; t . preventDefault ( ) , t . stopPropagation ( ) , t . originalEvent . dataTransfer . dropEffect = n . data ( o ) ? "none" : "copy" , n . data ( a , ! 1 ) } } ) . on ( "drop" , ".native-droppable" , function ( t ) { if ( t . originalEvent && t . originalEvent . dataTransfer ) { var n , i = e ( t . currentTarget ) ; t . preventDefault ( ) , t . stopPropagation ( ) , i . removeClass ( l ) , n = t . currentTarget . id ? i . hasClass ( s ) ? u . navId2Hash ( t . currentTarget . id ) : u . cwdId2Hash ( t . currentTarget . id ) : u . cwd ( ) . hash , t . originalEvent . _target = n , u . exec ( "upload" , { dropEvt : t . originalEvent , target : n } , void 0 , n ) } } ) } ( ) , u . cssloaded === ! 1 && ( u . cssloaded = ! 0 , u . trigger ( "cssloaded" ) ) , u . zIndexCalc ( ) , void u . trigger ( "init" ) . request ( { data : { cmd : "open" , target : u . startDir ( ) , init : 1 , tree : 1 } , preventDone : ! 0 , notify : { type : "open" , cnt : 1 , hideCnt : ! 0 } , freeze : ! 0 } ) . fail ( function ( ) { u . trigger ( "fail" ) . disable ( ) . lastDir ( "" ) , E = { } , U = { } , e ( document ) . add ( m ) . off ( "." + y ) , u . trigger = function ( ) { } } ) . done ( function ( t ) { var n = function ( e ) { var t = u . file ( u . trashes [ e ] ) ; u . options . debug ; t && t . volumeid && delete u . volOptions [ t . volumeid ] . trashHash , u . trashes [ e ] = ! 1 , u . debug ( "backend-error" , 'Trash hash "' + e + '" was not found or not writable.' ) } , i = { } ; u . options . rawStringDecoder && u . registRawStringDecoder ( u . options . rawStringDecoder ) , u . zIndexCalc ( ) , u . load ( ) . debug ( "api" , u . api ) , m . trigger ( "resize" ) , Y ( t ) , u . trigger ( "open" , t , ! 1 ) , u . trigger ( "opendone" ) , se && u . options . enableAlways && e ( window ) . trigger ( "focus" ) , e . each ( u . trashes , function ( e ) { var t = u . file ( e ) ; t ? "directory" === t . mime && t . write || n ( e ) : i [ e ] = ! 0 } ) , Object . keys ( i ) . length && u . request ( { data : { cmd : "info" , targets : Object . keys ( i ) } , preventDefault : ! 0 } ) . done ( function ( t ) { t && t . files && e . each ( t . files , function ( e , t ) { "directory" === t . mime && t . write && delete i [ t . hash ] } ) } ) . always ( function ( ) { e . each ( i , n ) } ) , u [ u . options . enableAlways ? "enable" : "disable" ] ( ) } ) ) : alert ( u . i18n ( "errURL" ) ) : alert ( u . i18n ( "errNode" ) ) : alert ( u . i18n ( "errJqui" ) ) } , a && "function" == typeof a && ( u . bootCallback = a , a . call ( m . get ( 0 ) , u , { dfrdsBeforeBootup : h } ) ) , e . when . apply ( null , h ) . done ( function ( ) { d ( ) } ) . fail ( function ( e ) { u . error ( e ) } ) } ; return ( "undefined" == typeof n || n ) && ( window . elFinder = i ) , i . prototype = { uniqueid : 0 , res : function ( e , t ) { return this . resources [ e ] && this . resources [ e ] [ t ] } , OS : navigator . userAgent . indexOf ( "Mac" ) !== - 1 ? "mac" : navigator . userAgent . indexOf ( "Win" ) !== - 1 ? "win" : "other" , UA : function ( ) { var e = ! document . unqueID && ! window . opera && ! window . sidebar && window . localStorage && "WebkitAppearance" in document . documentElement . style , t = e && window . chrome , n = { ltIE6 : "undefined" == typeof window . addEventListener && "undefined" == typeof document . documentElement . style . maxHeight , ltIE7 : "undefined" == typeof window . addEventListener && "undefined" == typeof document . querySelectorAll , ltIE8 : "undefined" == typeof window . addEventListener && "undefined" == typeof document . getElementsByClassName , ltIE9 : document . uniqueID && document . documentMode <= 9 , ltIE10 : document . uniqueID && document . documentMode <= 10 , gtIE11 : document . uniqueID && document . documentMode >= 11 , IE : document . uniqueID , Firefox : window . sidebar , Opera : window . opera , Webkit : e , Chrome : t , Edge : ! ( ! t || ! window . msCredentials ) , Safari : e && ! window . chrome , Mobile : "undefined" != typeof window . orientation , Touch : "undefined" != typeof window . ontouchstart , iOS : navigator . platform . match ( /^iP(?:[ao]d|hone)/ ) , Fullscreen : "undefined" != typeof ( document . exitFullscreen || document . webkitExitFullscreen || document . mozCancelFullScreen || document . msExitFullscreen ) , Angle : 0 , Rotated : ! 1 , CSS : function ( ) { var e , t = document . createElement ( "a" ) . style , n = document . createElement ( "p" ) . style ; return e = "position:sticky;position:-webkit-sticky;" , e += "width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;" , t . cssText = e , { positionSticky : t . position . indexOf ( "sticky" ) !== - 1 , widthMaxContent : t . width . indexOf ( "max-content" ) !== - 1 , flex : "undefined" != typeof n . flex } } ( ) } ; return n } ( ) , hasRequire : "function" == typeof define && define . amd , currentReqCmd : "" , keyState : { } , i18 : { en : { translator : "" , language : "English" , direction : "ltr" , dateFormat : "d.m.Y H:i" , fancyDateFormat : "$1 H:i" , nonameDateFormat : "ymd-His" , messages : { } } , months : [ "January" , "February" , "March" , "April" , "May" , " June
var n , i , a , o , r , s = this , l = function ( ) { var e , t ; return ( t = s . options . fileFilter ) && ( "function" == typeof t ? e = function ( e ) { return t . call ( s , e ) } : t instanceof RegExp && ( e = function ( e ) { return t . test ( e . name ) } ) ) , e ? e : null } ( ) , c = function ( t ) { var n ; t . uiCmdMap && ( e . isPlainObject ( t . uiCmdMap ) && Object . keys ( t . uiCmdMap ) . length ? ( t . disabledFlip || ( t . disabledFlip = { } ) , n = t . disabledFlip , e . each ( t . uiCmdMap , function ( e , i ) { "hidden" !== i || n [ e ] || ( t . disabled . push ( e ) , t . disabledFlip [ e ] = ! 0 ) } ) ) : delete t . uiCmdMap ) } , d = function ( t ) { var n = function ( e ) { var t = typeof e ; return "object" === t && Array . isArray ( e ) && ( t = "array" ) , t } ; return e . each ( s . optionProperties , function ( e , i ) { void 0 !== i && t [ e ] && n ( t [ e ] ) !== n ( i ) && ( t [ e ] = i ) } ) , t . disabled ? t . disabledFlip = s . arrayFlip ( t . disabled , ! 0 ) : t . disabledFlip = { } , t } , p = function ( t , r , p ) { var u , h , m , g , v = ! r || t , b = ! ! r && null ; if ( t && t . hash && t . name && t . mime ) { if ( "application/x-empty" === t . mime && ( t . mime = "text/plain" ) , m = s . isRoot ( t ) , m && ! t . volumeid && s . debug ( "warning" , "The volume root statuses requires `volumeid` property." ) , m || "directory" === t . mime ) { if ( t . phash ) { if ( t . phash === t . hash ) return f = f . concat ( [ 'Parent folder of "$1" is itself.' , t . name ] ) , b ; if ( m && t . volumeid && 0 === t . phash . indexOf ( t . volumeid ) ) return f = f . concat ( [ 'Parent folder of "$1" is inner itself.' , t . name ] ) , b } t . volumeid && ( u = t . volumeid , m && ( t . phash && ( s . leafRoots [ t . phash ] ? e . inArray ( t . hash , s . leafRoots [ t . phash ] ) === - 1 && s . leafRoots [ t . phash ] . push ( t . hash ) : s . leafRoots [ t . phash ] = [ t . hash ] ) , s . hasVolOptions = ! 0 , s . volOptions [ u ] || ( s . volOptions [ u ] = { dispInlineRegex : s . options . dispInlineRegex } ) , h = s . volOptions [ u ] , t . options && Object . assign ( h , t . options ) , t . disabled && ( h . disabled = t . disabled , h . disabledFlip = s . arrayFlip ( t . disabled , ! 0 ) ) , t . tmbUrl && ( h . tmbUrl = t . tmbUrl ) , h . url && "/" !== h . url . substr ( - 1 ) && ( h . url += "/" ) , c ( h ) , h . trashHash && ( s . trashes [ h . trashHash ] === ! 1 ? delete h . trashHash : s . trashes [ h . trashHash ] = t . hash ) , e . each ( s . optionProperties , function ( e ) { h [ e ] && ( t [ e ] = h [ e ] ) } ) , "cwd" !== p && ( s . roots [ u ] = t . hash ) , t . expires && ( s . volumeExpires [ u ] = t . expires ) ) , o !== u && ( o = u , a = s . option ( "i18nFolderName" , u ) ) ) , m && ! t . i18 && ( n = "volume_" + t . name , i = s . i18n ( ! 1 , n ) , n !== i && ( t . i18 = i ) ) , a && ! t . i18 && ( n = "folder_" + t . name , i = s . i18n ( ! 1 , n ) , n !== i && ( t . i18 = i ) ) , m && ( g = s . storage ( "rootNames" ) ) && ( g [ t . hash ] && ( t . _name = t . name , t . _i18 = t . i18 , t . name = g [ t . hash ] = g [ t . hash ] , delete t . i18 ) , s . storage ( "rootNames" , g ) ) , s . trashes [ t . hash ] && ( t . locked = ! 0 ) } else { if ( l ) try { if ( ! l ( t ) ) return b } catch ( y ) { s . debug ( y ) } 0 == t . size && ( t . mime = s . getMimetype ( t . name , t . mime ) ) } return t . options && ( s . optionsByHashes [ t . hash ] = d ( t . options ) ) , delete t . options , v } return b } , u = function ( t ) { var n = [ ] ; return e . each ( s . files ( ) , function ( i , a ) { e . each ( s . parents ( i ) , function ( a , o ) { if ( e . inArray ( o , t ) !== - 1 && e . inArray ( i , t ) === - 1 ) return n . push ( i ) , ! 1 } ) } ) , n } , h = function ( n , i ) { e . each ( n , function ( n , a ) { var o , r ; s . leafRoots [ a . hash ] && s . applyLeafRootStats ( a ) , "change" !== i && a . phash && s . isRoot ( a ) && ( o = s . file ( a . phash ) ) && ( s . applyLeafRootStats ( o ) , t . changed ? ( e . each ( t . changed , function ( e , n ) { if ( n . hash === o . hash ) return t . changed [ e ] = o , r = ! 0 , ! 1 } ) , r || t . changed . push ( o ) ) : t . changed = [ o ] ) } ) } , f = [ ] ; if ( t . customData && t . customData !== s . prevCustomData ) { s . prevCustomData = t . customData ; try { r = JSON . parse ( t . customData ) , e . isPlainObject ( r ) && ( s . prevCustomData = r , e . each ( Object . keys ( r ) , function ( e , t ) { null === r [ t ] && ( delete r [ t ] , delete s . optsCustomData [ t ] ) } ) , s . customData = Object . assign ( { } , s . optsCustomData , r ) ) } catch ( m ) { } } return t . options && d ( t . options ) , t . cwd && ( t . cwd . volumeid && t . options && Object . keys ( t . options ) . length && s . isRoot ( t . cwd ) && ( s . hasVolOptions = ! 0 , s . volOptions [ t . cwd . volumeid ] = t . options ) , t . cwd = p ( t . cwd , ! 0 , "cwd" ) ) , t . files && ( t . files = e . grep ( t . files , p ) ) , t . tree && ( t . tree = e . grep ( t . tree , p ) ) , t . added && ( t . added = e . grep ( t . added , p ) ) , t . changed && ( t . changed = e . grep ( t . changed , p ) ) , t . removed && t . removed . length && 2 === s . searchStatus . state && ( t . removed = t . removed . concat ( u ( t . removed ) ) ) , t . api && ( t . init = ! 0 ) , Object . keys ( s . leafRoots ) . length && ( t . files && h ( t . files ) , t . tree && h ( t . tree ) , t . added && h ( t . added ) , t . changed && h ( t . changed , "change" ) ) , t . cwd && t . cwd . options && t . options && Object . assign ( t . options , d ( t . cwd . options ) ) , t . options && t . options . url && "/" !== t . options . url . substr ( - 1 ) && ( t . options . url += "/" ) , f . length && ( t . norError = [ "errResponse" ] . concat ( f ) ) , t } , setSort : function ( e , t , n , i ) { this . storage ( "sortType" , this
window . cancelAnimationFrame = window [ t [ n ] + "CancelAnimationFrame" ] || window [ t [ n ] + "CancelRequestAnimationFrame" ] ; window . requestAnimationFrame || ( window . requestAnimationFrame = function ( t , n ) { var i = ( new Date ) . getTime ( ) , a = Math . max ( 0 , 16 - ( i - e ) ) , o = window . setTimeout ( function ( ) { t ( i + a ) } , a ) ; return e = i + a , o } ) , window . cancelAnimationFrame || ( window . cancelAnimationFrame = function ( e ) { clearTimeout ( e ) } ) } ( ) , i . prototype . version = "2.1.50" , function ( ) { if ( e . ui && e . ui . ddmanager ) { var t = e . ui . ddmanager . prepareOffsets ; e . ui . ddmanager . prepareOffsets = function ( n , i ) { var a = function ( e ) { if ( e . is ( ":hidden" ) ) return ! 0 ; var t = e [ 0 ] . getBoundingClientRect ( ) ; return ! document . elementFromPoint ( t . left , t . top ) && ! document . elementFromPoint ( t . left + t . width , t . top + t . height ) } ; if ( "mousedown" === i . type || n . options . elfRefresh ) { var o , r , s = e . ui . ddmanager . droppables [ n . options . scope ] || [ ] , l = s . length ; for ( o = 0 ; o < l ; o ++ ) r = s [ o ] , r . options . autoDisable && ( ! r . options . disabled || r . options . autoDisable > 1 ) && ( r . options . disabled = a ( r . element ) , r . options . autoDisable = r . options . disabled ? 2 : 1 ) } return t ( n , i ) } } } ( ) , e . ajaxTransport ( "+binary" , function ( e , t , n ) { if ( window . FormData && ( e . dataType && "binary" == e . dataType || e . data && ( window . ArrayBuffer && e . data instanceof ArrayBuffer || window . Blob && e . data instanceof Blob ) ) ) { var i ; return { send : function ( t , n ) { i = new XMLHttpRequest ; var a = e . url , o = e . type , r = e . async || ! 0 , s = e . responseType || "blob" , l = e . data || null , c = e . username , d = e . password ; i . addEventListener ( "load" , function ( ) { var t = { } ; t [ e . dataType ] = i . response , n ( i . status , i . statusText , t , i . getAllResponseHeaders ( ) ) } ) , i . open ( o , a , r , c , d ) ; for ( var p in t ) i . setRequestHeader ( p , t [ p ] ) ; if ( e . xhrFields ) for ( var u in e . xhrFields ) u in i && ( i [ u ] = e . xhrFields [ u ] ) ; i . responseType = s , i . send ( l ) } , abort : function ( ) { i . abort ( ) } } } } ) , function ( e ) { function t ( t , n ) { if ( ! ( t . originalEvent . touches . length > 1 ) ) { e ( t . currentTarget ) . hasClass ( "touch-punch-keep-default" ) || t . preventDefault ( ) ; var i = t . originalEvent . changedTouches [ 0 ] , a = document . createEvent ( "MouseEvents" ) ; a . initMouseEvent ( n , ! 0 , ! 0 , window , 1 , i . screenX , i . screenY , i . clientX , i . clientY , ! 1 , ! 1 , ! 1 , ! 1 , 0 , null ) , t . target . dispatchEvent ( a ) } } if ( e . support . touch = "ontouchend" in document , e . support . touch ) { var n , i , a , o = e . ui . mouse . prototype , r = o . _mouseInit , s = o . _mouseDestroy ; o . _touchStart = function ( e ) { var o = this ; ! n && o . _mouseCapture ( e . originalEvent . changedTouches [ 0 ] ) && ( i = e . originalEvent . changedTouches [ 0 ] . screenX . toFixed ( 0 ) , a = e . originalEvent . changedTouches [ 0 ] . screenY . toFixed ( 0 ) , n = ! 0 , o . _touchMoved = ! 1 , t ( e , "mouseover" ) , t ( e , "mousemove" ) , t ( e , "mousedown" ) ) } , o . _touchMove = function ( e ) { if ( n ) { var o = e . originalEvent . changedTouches [ 0 ] . screenX . toFixed ( 0 ) , r = e . originalEvent . changedTouches [ 0 ] . screenY . toFixed ( 0 ) ; Math . abs ( i - o ) <= 4 && Math . abs ( a - r ) <= 4 || ( this . _touchMoved = ! 0 , t ( e , "mousemove" ) ) } } , o . _touchEnd = function ( e ) { n && ( t ( e , "mouseup" ) , t ( e , "mouseout" ) , this . _touchMoved || t ( e , "click" ) , n = ! 1 , this . _touchMoved = ! 1 ) } , o . _mouseInit = function ( ) { var t = this ; t . element . hasClass ( "touch-punch" ) && t . element . on ( { touchstart : e . proxy ( t , "_touchStart" ) , touchmove : e . proxy ( t , "_touchMove" ) , touchend : e . proxy ( t , "_touchEnd" ) } ) , r . call ( t ) } , o . _mouseDestroy = function ( ) { var t = this ; t . element . hasClass ( "touch-punch" ) && t . element . off ( { touchstart : e . proxy ( t , "_touchStart" ) , touchmove : e . proxy ( t , "_touchMove" ) , touchend : e . proxy ( t , "_touchEnd" ) } ) , s . call ( t ) } } } ( jQuery ) , e . fn . elfinder = function ( t , n ) { return "instance" === t ? this . getElFinder ( ) : this . each ( function ( ) { var a , o = "string" == typeof t ? t : "" , r = "function" == typeof n ? n : void 0 , s = this . elfinder ; if ( s ) switch ( o ) { case "close" : case "hide" : s . hide ( ) ; break ; case "open" : case "show" : s . show ( ) ; break ; case "destroy" : s . destroy ( ) ; break ; case "reload" : case "restart" : s && ( a = e . extend ( ! 0 , s . options , e . isPlainObject ( n ) ? n : { } ) , r = s . bootCallback , s . reloadCallback && e . isFunction ( s . reloadCallback ) ? s . reloadCallback ( a , r ) : ( s . destroy ( ) , new i ( this , a , r ) ) ) } else e . isPlainObject ( t ) && new i ( this , t , r ) } ) } , e . fn . getElFinder = function ( ) { var e ; return this . each ( function ( ) { if ( this . elfinder ) return e = this . elfinder , ! 1 } ) , e } , e . fn . elfUiWidgetInstance = function ( e ) { try { return this [ e ] ( "instance" ) } catch ( t ) { var n = this . data ( "ui-" + e ) ; return n && "object" == typeof n && n . widgetFullName === "ui-" + e ? n : null } } , e . fn . scrollRight || e . fn . extend ( { scrollRight : function ( e ) { var t = this . get ( 0 ) ; return void 0 === e ? Math .
rar : "https://cdn.jsdelivr.net/gh/nao-pon/rar.js@6cef13ec66dd67992fc7f3ea22f132d770ebaf8b/rar.min.js" , zlibUnzip : "https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/unzip.min.js" , zlibGunzip : "https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/gunzip.min.js" , marked : "https://cdnjs.cloudflare.com/ajax/libs/marked/0.7.0/marked.min.js" , sparkmd5 : "https://cdnjs.cloudflare.com/ajax/libs/spark-md5/3.0.0/spark-md5.min.js" , jssha : "https://cdnjs.cloudflare.com/ajax/libs/jsSHA/2.3.1/sha.js" , amr : "https://cdn.jsdelivr.net/gh/yxl/opencore-amr-js@dcf3d2b5f384a1d9ded2a54e4c137a81747b222b/js/amrnb.js" } , url : "" , requestType : "get" , cors : null , requestMaxConn : 3 , transport : { } , urlUpload : "" , dragUploadAllow : "auto" , overwriteUploadConfirm : ! 0 , uploadMaxChunkSize : 10485760 , folderUploadExclude : { win : /^(?:desktop\.ini|thumbs\.db)$/i , mac : /^\.ds_store$/i } , iframeTimeout : 0 , customData : { } , handlers : { } , customHeaders : { } , xhrFields : { } , lang : "en" , baseUrl : "" , i18nBaseUrl : "" , cssAutoLoad : ! 0 , themes : { } , theme : null , maxErrorDialogs : 5 , cssClass : "" , commands : [ "*" ] , commandsOptions : { getfile : { onlyURL : ! 1 , multiple : ! 1 , folders : ! 1 , oncomplete : "" , onerror : "" , getPath : ! 0 , getImgSize : ! 1 } , open : { method : "post" , into : "window" , selectAction : "open" } , opennew : { url : "" , useOriginQuery : ! 0 } , upload : { ui : "button" } , download : { maxRequests : 10 , minFilesZipdl : 2 } , quicklook : { autoplay : ! 0 , width : 450 , height : 300 , mediaControlsList : "" , pdfToolbar : ! 0 , textMaxlen : 2e3 , contain : ! 1 , docked : 0 , dockHeight : "auto" , dockAutoplay : ! 1 , googleMapsApiKey : "" , googleMapsOpts : { maps : { } , kml : { suppressInfoWindows : ! 1 , preserveViewport : ! 1 } } , viewerjs : { url : "" , mimes : [ "application/pdf" , "application/vnd.oasis.opendocument.text" , "application/vnd.oasis.opendocument.spreadsheet" , "application/vnd.oasis.opendocument.presentation" ] } , sharecadMimes : [ ] , googleDocsMimes : [ ] , officeOnlineMimes : [ ] , getDimThreshold : 2e5 , mimeRegexNotEmptyCheck : /^application\/vnd\.google-apps\./ } , edit : { dialogWidth : void 0 , mimes : [ ] , makeTextMimes : [ "text/plain" , "text/css" , "text/html" ] , useStoredEditor : ! 1 , editorMaximized : ! 1 , editors : [ ] , encodings : [ "Big5" , "Big5-HKSCS" , "Cp437" , "Cp737" , "Cp775" , "Cp850" , "Cp852" , "Cp855" , "Cp857" , "Cp858" , "Cp862" , "Cp866" , "Cp874" , "EUC-CN" , "EUC-JP" , "EUC-KR" , "GB18030" , "ISO-2022-CN" , "ISO-2022-JP" , "ISO-2022-KR" , "ISO-8859-1" , "ISO-8859-2" , "ISO-8859-3" , "ISO-8859-4" , "ISO-8859-5" , "ISO-8859-6" , "ISO-8859-7" , "ISO-8859-8" , "ISO-8859-9" , "ISO-8859-13" , "ISO-8859-15" , "KOI8-R" , "KOI8-U" , "Shift-JIS" , "Windows-1250" , "Windows-1251" , "Windows-1252" , "Windows-1253" , "Windows-1254" , "Windows-1257" ] , extraOptions : { uploadOpts : { } , tuiImgEditOpts : { iconsPath : void 0 , theme : { } } , pixo : { apikey : "" } , creativeCloudApiKey : "" , managerUrl : null , ckeditor : { } , ckeditor5 : { mode : "decoupled-document" } , tinymce : { } , onlineConvert : { maxSize : 100 , showLink : ! 0 } } } , fullscreen : { mode : "screen" } , search : { incsearch : { enable : ! 0 , minlen : 1 , wait : 500 } , searchTypes : { SearchMime : { name : "btnMime" , title : "searchMime" , incsearch : "mime" } } } , info : { nullUrlDirLinkSelf : ! 0 , hideItems : [ ] , showHashMaxsize : 104857600 , showHashAlgorisms : [ "md5" , "sha256" ] , custom : { } } , mkdir : { intoNewFolderToolbtn : ! 1 } , resize : { grid8px : "disable" , presetSize : [ [ 320 , 240 ] , [ 400 , 400 ] , [ 640 , 480 ] , [ 800 , 600 ] ] , getDimThreshold : 204800 , dimSubImgSize : 307200 } , rm : { quickTrash : ! 0 , infoCheckWait : 10 , toTrashMaxItems : 1e3 } , paste : { moveConfirm : ! 1 } , help : { view : [ "about" , "shortcuts" , "help" , "integrations" , "debug" ] , helpSource : "" } , preference : { width : 600 , height : 400 , categories : null , prefs : null , langs : null , selectActions : [ "open" , "edit/download" , "resize/edit/download" , "download" , "quicklook" ] } } , bootCallback : null , getFileCallback : null , defaultView : "icons" , startPathHash : "" , sound : ! 0 , ui : [ "toolbar" , "places" , "tree" , "path" , "stat" ] , uiOptions : { toolbar : [ [ "home" , "back" , "forward" , "up" , "reload" ] , [ "netmount" ] , [ "mkdir" , "mkfile" , "upload" ] , [ "open" , "download" , "getfile" ] , [ "undo" , "redo" ] , [ "copy" , "cut" , "paste" , "rm" , "empty" , "hide" ] , [ "duplicate" , "rename" , "edit" , "resize" , "chmod" ] , [ "selectall" , "selectnone" , "selectinvert" ] , [ "quicklook" , "info" ] , [ "extract" , "archive" ] , [ "search" ] , [ "view" , "sort" ] , [ "preference" , "help" ] , [ "fullscreen" ] ] , toolbarExtra : { displayTextLabel : ! 1 , labelExcludeUA : [ "Mobile" ] , autoHideUA : [ "Mobile" ] , defaultHides : [ "home" , "reload" ] , showPreferenceButton : "none" , preferenceInContextmenu : ! 0 } , tre
pass : "Password" , confirmUnmount : "Are you sure to unmount $1?" , dropFilesBrowser : "Drop or Paste files from browser" , dropPasteFiles : "Drop files, Paste URLs or images(clipboard) here" , encoding : "Encoding" , locale : "Locale" , searchTarget : "Target: $1" , searchMime : "Search by input MIME Type" , owner : "Owner" , group : "Group" , other : "Other" , execute : "Execute" , perm : "Permission" , mode : "Mode" , emptyFolder : "Folder is empty" , emptyFolderDrop : "Folder is empty\\A Drop to add items" , emptyFolderLTap : "Folder is empty\\A Long tap to add items" , quality : "Quality" , autoSync : "Auto sync" , moveUp : "Move up" , getLink : "Get URL link" , selectedItems : "Selected items ($1)" , folderId : "Folder ID" , offlineAccess : "Allow offline access" , reAuth : "To re-authenticate" , nowLoading : "Now loading..." , openMulti : "Open multiple files" , openMultiConfirm : "You are trying to open the $1 files. Are you sure you want to open in browser?" , emptySearch : "Search results is empty in search target." , editingFile : "It is editing a file." , hasSelected : "You have selected $1 items." , hasClipboard : "You have $1 items in the clipboard." , incSearchOnly : "Incremental search is only from the current view." , reinstate : "Reinstate" , complete : "$1 complete" , contextmenu : "Context menu" , pageTurning : "Page turning" , volumeRoots : "Volume roots" , reset : "Reset" , bgcolor : "Background color" , colorPicker : "Color picker" , "8pxgrid" : "8px Grid" , enabled : "Enabled" , disabled : "Disabled" , emptyIncSearch : "Search results is empty in current view.\\A Press [Enter] to expand search target." , emptyLetSearch : "First letter search results is empty in current view." , textLabel : "Text label" , minsLeft : "$1 mins left" , openAsEncoding : "Reopen with selected encoding" , saveAsEncoding : "Save with the selected encoding" , selectFolder : "Select folder" , firstLetterSearch : "First letter search" , presets : "Presets" , tooManyToTrash : "It's too many items so it can't into trash." , TextArea : "TextArea" , folderToEmpty : 'Empty the folder "$1".' , filderIsEmpty : 'There are no items in a folder "$1".' , preference : "Preference" , language : "Language" , clearBrowserData : "Initialize the settings saved in this browser" , toolbarPref : "Toolbar settings" , charsLeft : "... $1 chars left." , sum : "Sum" , roughFileSize : "Rough file size" , autoFocusDialog : "Focus on the element of dialog with mouseover" , select : "Select" , selectAction : "Action when select file" , useStoredEditor : "Open with the editor used last time" , selectinvert : "Invert selection" , renameMultiple : "Are you sure you want to rename $1 selected items like $2?<br/>This cannot be undone!" , batchRename : "Batch rename" , plusNumber : "+ Number" , asPrefix : "Add prefix" , asSuffix : "Add suffix" , changeExtention : "Change extention" , columnPref : "Columns settings (List view)" , reflectOnImmediate : "All changes will reflect immediately to the archive." , reflectOnUnmount : "Any changes will not reflect until un-mount this volume." , unmountChildren : "The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?" , selectionInfo : "Selection Info" , hashChecker : "Algorithms to show the file hash" , infoItems : "Info Items (Selection Info Panel)" , pressAgainToExit : "Press again to exit." , toolbar : "Toolbar" , workspace : "Work Space" , dialog : "Dialog" , all : "All" , iconSize : "Icon Size (Icons view)" , editorMaximized : "Open the maximized editor window" , editorConvNoApi : "Because conversion by API is not currently available, please convert on the website." , editorConvNeedUpload : "After conversion, you must be upload with the item URL or a downloaded file to save the converted file." , convertOn : "Convert on the site of $1" , integrations : "Integrations" , integrationWith : "This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it." , showHidden : "Show hidden items" , hideHidden : "Hide hidden items" , toggleHidden : "Show/Hide hidden items" , makefileTypes : 'File types to enable with "New file"' , typeOfTextfile : "Type of the Text file" , add : "Add" , theme : "Theme" , "default" : "Default" , description : "Description" , website : "Website" , author : "Author" , email : "Email" , license : "License" , exportToSave : "This item can't be saved. To avoid losing the edits you need to export to your PC." , dblclic
o = E . length + 1 ; for ( var w = 0 ; w < o && ( h = p . children ( "td:eq(" + w + ")" ) , f = u . children ( "td:eq(" + w + ")" ) , m = h . width ( ) , g = f . width ( ) , "undefined" == typeof h . data ( "delta" ) && h . data ( "delta" , h . outerWidth ( ) - m - ( f . outerWidth ( ) - g ) ) , g -= h . data ( "delta" ) , v || y . fitWidth || m !== g ) ; w ++ ) h . css ( "width" , g + "px" ) } xe || ( we . data ( "widthTimer" ) && cancelAnimationFrame ( we . data ( "widthTimer" ) ) , we . data ( "widthTimer" , requestAnimationFrame ( function ( ) { we && ( we . css ( "width" , We . width ( ) + "px" ) , "rtl" === t . direction && we . css ( "left" , Pe . data ( "width" ) - Pe . width ( ) + "px" ) ) } ) ) ) , i = l . height ( ) } } } , Ce = function ( ) { if ( p && _ ) { var t , n = "elfinder-cwd-colwidth" , i = Ue . find ( "tr[id]:first" ) ; i . hasClass ( n ) || ( t = Ue . find ( "tr." + n ) , t . removeClass ( n ) . find ( "td" ) . css ( "width" , "" ) , i . addClass ( n ) , Ue . find ( "table:first" ) . css ( "table-layout" , "fixed" ) , e . each ( e . merge ( [ "name" ] , E ) , function ( e , t ) { var n = _ [ t ] || i . find ( "td.elfinder-col-" + t ) . width ( ) ; i . find ( "td.elfinder-col-" + t ) . width ( n ) } ) ) } } , ze = Object . assign ( { } , t . droppable , { over : function ( n , i ) { var a , o , r , s = e ( this ) , l = i . helper , c = n . shiftKey || n . ctrlKey || n . metaKey ; return n . stopPropagation ( ) , l . data ( "dropover" , l . data ( "dropover" ) + 1 ) , s . data ( "dropover" , ! 0 ) , l . removeClass ( "elfinder-drag-helper-move elfinder-drag-helper-plus" ) , l . data ( "namespace" ) === t . namespace && t . insideWorkzone ( n . pageX , n . pageY ) ? ( s . hasClass ( t . res ( g , "cwdfile" ) ) ? ( a = t . cwdId2Hash ( s . attr ( "id" ) ) , s . data ( "dropover" , a ) ) : ( a = t . cwd ( ) . hash , t . cwd ( ) . write && s . data ( "dropover" , a ) ) , r = t . file ( l . data ( "files" ) [ 0 ] ) . phash === a , s . data ( "dropover" ) === a ? e . each ( l . data ( "files" ) , function ( e , t ) { if ( t === a || r && ! c && ! l . hasClass ( "elfinder-drag-helper-plus" ) ) return s . removeClass ( T ) , ! 1 } ) : s . removeClass ( T ) , l . data ( "locked" ) || r ? o = "elfinder-drag-helper-plus" : ( o = "elfinder-drag-helper-move" , c && ( o += " elfinder-drag-helper-plus" ) ) , s . hasClass ( T ) && l . addClass ( o ) , void requestAnimationFrame ( function ( ) { s . hasClass ( T ) && l . addClass ( o ) } ) ) : void s . removeClass ( T ) } , out : function ( t , n ) { var i = n . helper ; t . stopPropagation ( ) , i . removeClass ( "elfinder-drag-helper-move elfinder-drag-helper-plus" ) . data ( "dropover" , Math . max ( i . data ( "dropover" ) - 1 , 0 ) ) , e ( this ) . removeData ( "dropover" ) . removeClass ( T ) } , deactivate : function ( ) { e ( this ) . removeData ( "dropover" ) . removeClass ( T ) } , drop : function ( e , n ) { ne ( { notrigger : ! 0 } ) , t . droppable . drop . call ( this , e , n ) } } ) , Te = function ( n ) { n = n ? n : p ? Ue . find ( "tbody" ) : Ue ; var i = n . children ( ".directory:not(." + k + ",.elfinder-na,.elfinder-ro)" ) ; t . isCommandEnabled ( "paste" ) && i . droppable ( ze ) , t . isCommandEnabled ( "upload" ) && i . addClass ( "native-droppable" ) , n . children ( ".isroot" ) . each ( function ( n , i ) { var a = e ( i ) , o = t . cwdId2Hash ( i . id ) ; t . isCommandEnabled ( "paste" , o ) ? a . hasClass ( k + ",elfinder-na,elfinder-ro" ) || a . droppable ( ze ) : a . hasClass ( k ) && a . droppable ( "destroy" ) , t . isCommandEnabled ( "upload" , o ) ? a . hasClass ( "native-droppable,elfinder-na,elfinder-ro" ) || a . addClass ( "native-droppable" ) : a . hasClass ( "native-droppable" ) && a . removeClass ( "native-droppable" ) } ) } , Ae = function ( n , i ) { var a = function ( t , n ) { e ( "<img/>" ) . on ( "load" , function ( ) { t . find ( ".elfinder-cwd-icon" ) . addClass ( n . className ) . css ( "background-image" , "url('" + n . url + "')" ) } ) . attr ( "src" , n . url ) } , o = function ( e , n ) { var o , r , s = t . cwdHash2Elm ( e ) ; s . length && ( "1" != n ? ( o = t . file ( e ) , o . tmb !== n && ( o . tmb = n ) , r = t . tmb ( o ) , i ? s . find ( ".elfinder-cwd-icon" ) . addClass ( r . className ) . css ( "background-image" , "url('" + r . url + "')" ) : a ( s , r ) , delete le . attachTmbs [ e ] ) : i ? Se ( [ e ] ) : le . tmbLoading [ e ] || le . getTmbs . push ( e ) ) } ; e . isPlainObject ( n ) && Object . keys ( n ) . length && ( Object . assign ( le . attachTmbs , n ) , e . each ( n , o ) , i || ! le . getTmbs . length || Object . keys ( le . tmbLoading ) . length || Se ( ) ) } , Se = function ( n ) { var i = [ ] , a = ! 1 ; return t . oldAPI ? void t . request ( { data : { cmd : "tmb" , current : t . cwd ( ) . hash } , preventFail : ! 0 } ) . done ( function ( e ) { e . images && Object . keys ( e . images ) . length && Ae ( e . images ) , e . tmb && Se ( ) } ) : ( n ? ( a = ! 0 , i = n . splice ( 0 , O ) ) : i = le . getTmbs . splice ( 0 , O ) , void ( i . length && ( a || fe [ i [ 0 ] ] || fe [ i [ i . length - 1 ] ] ) && ( e . each ( i , function ( e , t ) { le . tmbLoading [ t ] = ! 0 } ) , t . request ( { data : { cmd : "tmb" , targets : i } , preventFail : ! 0 } ) . done ( function ( t ) { var o , r = [ ] ; t . images && ( ( o = Object . keys ( t . images ) . length ) ? ( o < i . length && e . each ( i , function ( e , n ) { t . images [ n ] || r . push ( n ) } ) , Ae ( t . images , a ) ) : r = i , r . length && e . each ( r , function ( e , t ) { delete le . attachTmbs [ t ] } ) ) , a && n . length && Se ( n ) } ) . always ( function ( ) { le . tmbLoading = { } , ! a && le . getTmbs . length && Se ( ) } ) ) ) ) } ,
enabled : ! 1 , width : ! 1 , height : ! 1 , defaultSize : null } , d = function ( t ) { var i , a ; c . enabled && ( a = n . options . dialogContained ? o : e ( window ) , i = { maxWidth : c . width ? a . width ( ) - l . width : null , maxHeight : c . height ? a . height ( ) - l . height : null } , Object . assign ( r , i ) , t . css ( i ) . trigger ( "resize" ) , t . data ( "hasResizable" ) && ( t . resizable ( "option" , "maxWidth" ) < i . maxWidth || t . resizable ( "option" , "maxHeight" ) < i . maxHeight ) && t . resizable ( "option" , i ) ) } , p = function ( e ) { var t = e . data ; i && cancelAnimationFrame ( i ) , i = requestAnimationFrame ( function ( ) { c . enabled && d ( t ) } ) } , u = function ( ) { var e = "elfinder-dialog" , t = o . children ( "." + e + "." + n . res ( "class" , "editing" ) + ":visible" ) ; n [ t . length ? "disable" : "enable" ] ( ) } , h = { } ; return n && n . ui ? o = n . getUI ( ) : ( o = this . closest ( ".elfinder" ) , n || ( n = o . elfinder ( "instance" ) ) ) , "string" == typeof t ? ( ( a = this . closest ( ".ui-dialog" ) ) . length && ( "open" === t ? "none" === a . css ( "display" ) && ( a . trigger ( "posinit" ) . show ( ) . trigger ( "open" ) . hide ( ) , a . fadeIn ( 120 , function ( ) { n . trigger ( "dialogopened" , { dialog : a } ) } ) ) : "close" === t || "destroy" === t ? ( a . stop ( ! 0 ) , ( a . is ( ":visible" ) || o . is ( ":hidden" ) ) && ( a . trigger ( "close" ) , n . trigger ( "dialogclosed" , { dialog : a } ) ) , "destroy" === t && ( a . remove ( ) , n . trigger ( "dialogremoved" , { dialog : a } ) ) ) : "toTop" === t ? ( a . trigger ( "totop" ) , n . trigger ( "dialogtotoped" , { dialog : a } ) ) : "posInit" === t ? ( a . trigger ( "posinit" ) , n . trigger ( "dialogposinited" , { dialog : a } ) ) : "tabstopsInit" === t ? ( a . trigger ( "tabstopsInit" ) , n . trigger ( "dialogtabstopsinited" , { dialog : a } ) ) : "checkEditing" === t && u ( ) ) , this ) : ( t = Object . assign ( { } , e . fn . elfinderdialog . defaults , t ) , t . allowMinimize && "auto" === t . allowMinimize && ( t . allowMinimize = ! ! this . find ( "textarea,input" ) . length ) , t . openMaximized = t . allowMinimize && t . openMaximized , t . headerBtnPos && "auto" === t . headerBtnPos && ( t . headerBtnPos = s ? "right" : "left" ) , t . headerBtnOrder && "auto" === t . headerBtnOrder && ( t . headerBtnOrder = s ? "close:maximize:minimize" : "close:minimize:maximize" ) , t . modal && t . allowMinimize && ( t . allowMinimize = ! 1 ) , n . options . dialogContained ? c . width = c . height = c . enabled = ! 0 : ( c . width = "window" === t . maxWidth , c . height = "window" === t . maxHeight , ( c . width || c . height ) && ( c . enabled = ! 0 ) ) , h = n . arrayFlip ( t . propagationEvents , ! 0 ) , this . filter ( ":not(.ui-dialog-content)" ) . each ( function ( ) { var i , a , f = e ( this ) . addClass ( "ui-dialog-content ui-widget-content" ) , m = "elfinder-dialog-active" , g = "elfinder-dialog" , v = "elfinder-dialog-notify" , b = "ui-state-hover" , y = "elfinder-tabstop" , w = "elfinder-focus" , x = "elfinder-dialog-modal" , k = parseInt ( 1e6 * Math . random ( ) ) , C = e ( '<div class="ui-dialog-titlebar ui-widget-header ui-corner-top ui-helper-clearfix"><span class="elfinder-dialog-title">' + t . title + "</span></div>" ) , z = e ( '<div class="ui-dialog-buttonset"/>' ) , T = e ( '<div class=" ui-helper-clearfix ui-dialog-buttonpane ui-widget-content"/>' ) . append ( z ) , A = 0 , S = 0 , O = e ( ) , I = e ( '<div style="width:100%;height:100%;position:absolute;top:0px;left:0px;"/>' ) . hide ( ) , j = function ( ) { t . optimizeNumber && P . find ( "input[type=number]" ) . each ( function ( ) { e ( this ) . attr ( "inputmode" , "numeric" ) , e ( this ) . attr ( "pattern" , "[0-9]*" ) } ) } , M = function ( ) { O = P . find ( "." + y ) , O . length && ( O . attr ( "tabindex" , "-1" ) , O . filter ( "." + w ) . length || z . children ( "." + y + ":" + ( s ? "first" : "last" ) ) . addClass ( w ) ) } , F = function ( t ) { var n = O . filter ( ":visible:enabled" ) , i = t ? null : n . filter ( "." + w + ":first" ) ; return i && i . length || ( i = n . first ( ) ) , t && e . each ( n , function ( e , a ) { if ( a === t && n [ e + 1 ] ) return i = n . eq ( e + 1 ) , ! 1 } ) , i } , D = function ( t ) { var n = O . filter ( ":visible:enabled" ) , i = n . last ( ) ; return e . each ( n , function ( e , a ) { if ( a === t && n [ e - 1 ] ) return i = n . eq ( e - 1 ) , ! 1 } ) , i } , E = function ( ) { e . each ( t . headerBtnOrder . split ( ":" ) . reverse ( ) , function ( e , t ) { U [ t ] && U [ t ] ( ) } ) , s && C . children ( ".elfinder-titlebar-button" ) . addClass ( "elfinder-titlebar-button-right" ) } , U = { close : function ( ) { C . prepend ( e ( '<span class="ui-widget-header ui-dialog-titlebar-close ui-corner-all elfinder-titlebar-button"><span class="ui-icon ui-icon-closethick"/></span>' ) . on ( "mousedown" , function ( e ) { e . preventDefault ( ) , e . stopPropagation ( ) , f . elfinderdialog ( "close" ) } ) ) } , maximize : function ( ) { t . allowMaximize && ( P . on ( "resize" , function ( e , t ) { var n , i ; if ( e . preventDefault ( ) , e . stopPropagation ( ) , t && t . maximize ) { if ( i = C . find ( ".elfinder-titlebar-full" ) , n = "on" === t . maximize , i . children ( "span.ui-icon" ) . toggleClass ( "ui-icon-plusthick" , ! n ) . toggleClass ( " ui - icon - arrowreturnth
l > o && l < o + r && c > a && c < c + s || ( z ( v ( i . children ( ":first" ) . attr ( "id" ) ) ) , w ( ) ) } , update : function ( e , t ) { w ( ) } } ) , e ( this ) . on ( "regist" , function ( t , n ) { var a = ! 1 ; e . each ( n , function ( e , t ) { t && "directory" == t . mime && ! i [ t . hash ] && C ( t ) && ( a = ! 0 ) } ) , a && w ( ) } ) , t . one ( "load" , function ( ) { t . oldAPI || ( D . show ( ) . parent ( ) . show ( ) , x ( ) , t . change ( function ( t ) { var n = ! 1 ; e . each ( t . data . changed , function ( e , t ) { i [ t . hash ] && ( "directory" !== t . mime ? z ( t . hash ) && ( n = ! 0 ) : A ( t ) && ( n = ! 0 ) ) } ) , n && w ( ) } ) . bind ( "rename" , function ( t ) { var n = ! 1 ; t . data . removed && e . each ( t . data . removed , function ( e , i ) { t . data . added [ e ] && A ( t . data . added [ e ] , i ) && ( n = ! 0 ) } ) , n && w ( ) } ) . bind ( "rm paste" , function ( t ) { var n = [ ] , i = ! 1 ; t . data . removed && e . each ( t . data . removed , function ( e , t ) { var i = z ( t ) ; i && n . push ( i ) } ) , n . length && ( i = ! 0 ) , t . data . added && n . length && e . each ( t . data . added , function ( t , i ) { 1 !== e . inArray ( i . name , n ) && "directory" == i . mime && C ( i ) } ) , i && w ( ) } ) . bind ( "sync netmount" , function ( ) { var a , o = this , r = n . suffix ? n . suffix : "" ; return "sync" === o . type && f !== r ? ( f = r , S ( ) , void x ( ) ) : ( a = Object . keys ( i ) , void ( a . length && ( M . prepend ( h ) , t . request ( { data : { cmd : "info" , targets : a } , preventDefault : ! 0 } ) . done ( function ( n ) { var a = { } , r = ! 1 , s = t . cwd ( ) . hash ; e . each ( n . files || [ ] , function ( e , n ) { var i = n . hash ; a [ i ] = n , t . files ( ) . hasOwnProperty ( n . hash ) || t . trigger ( "tree" , { tree : [ n ] } ) } ) , e . each ( i , function ( e , t ) { t . notfound === Boolean ( a [ e ] ) ? t . phash === s && "netmount" !== o . type || a [ e ] && "directory" !== a [ e ] . mime ? z ( e ) && ( r = ! 0 ) : A ( a [ e ] || Object . assign ( { notfound : ! 0 } , t ) ) && ( r = ! 0 ) : a [ e ] && a [ e ] . phash != s && A ( a [ e ] ) } ) , r && w ( ) } ) . always ( function ( ) { h . remove ( ) } ) ) ) ) } ) ) } ) } ) } , e . fn . elfindersearchbutton = function ( t ) { return this . each ( function ( ) { var n , i , a , o , r = ! 1 , s = t . fm , l = ( s . res ( "class" , "disabled" ) , t . options . incsearch || { enable : ! 1 } ) , c = t . options . searchTypes , d = function ( e ) { return s . namespace + s . escape ( e ) } , p = s . getUI ( "toolbar" ) , u = s . res ( "class" , "searchbtn" ) , h = e ( this ) . hide ( ) . addClass ( "ui-widget-content elfinder-button " + u ) . on ( "click" , function ( e ) { e . stopPropagation ( ) } ) , f = function ( ) { var e = s . getUI ( ) , t = e . offset ( ) , n = h . offset ( ) ; return { top : n . top - t . top , maxHeight : e . height ( ) - 40 } } , m = function ( ) { b . data ( "inctm" ) && clearTimeout ( b . data ( "inctm" ) ) ; var n = e . trim ( b . val ( ) ) , a = ! e ( "#" + d ( "SearchFromAll" ) ) . prop ( "checked" ) , o = e ( "#" + d ( "SearchMime" ) ) . prop ( "checked" ) , l = "" ; a && ( a = e ( "#" + d ( "SearchFromVol" ) ) . prop ( "checked" ) ? s . root ( s . cwd ( ) . hash ) : s . cwd ( ) . hash ) , o && ( o = n , n = "." ) , i && ( l = i . children ( "input:checked" ) . val ( ) ) , n ? ( b . trigger ( "focus" ) , t . exec ( n , a , o , l ) . done ( function ( ) { r = ! 0 } ) . fail ( function ( ) { g ( ) } ) ) : s . trigger ( "searchend" ) } , g = function ( ) { b . data ( "inctm" ) && clearTimeout ( b . data ( "inctm" ) ) , b . val ( "" ) . trigger ( "blur" ) , ( r || v ) && ( r = ! 1 , v = "" , s . lazy ( function ( ) { s . trigger ( "searchend" ) } ) ) } , v = "" , b = e ( '<input type="text" size="42"/>' ) . on ( "focus" , function ( ) { ! h . hasClass ( "ui-state-active" ) && s . getUI ( ) . click ( ) , o = ! 0 , v = "" , h . addClass ( "ui-state-active" ) , s . trigger ( "uiresize" ) , n && n . css ( f ( ) ) . slideDown ( function ( ) { h . addClass ( "ui-state-active" ) , s . toFront ( n ) } ) } ) . on ( "blur" , function ( ) { o = ! 1 , n ? n . data ( "infocus" ) ? n . data ( "infocus" , ! 1 ) : n . slideUp ( function ( ) { h . removeClass ( "ui-state-active" ) , s . trigger ( "uiresize" ) , s . toHide ( n ) } ) : h . removeClass ( "ui-state-active" ) } ) . appendTo ( h ) . on ( "keypress" , function ( e ) { e . stopPropagation ( ) } ) . on ( "keydown" , function ( t ) { t . stopPropagation ( ) , t . keyCode === e . ui . keyCode . ENTER ? m ( ) : t . keyCode === e . ui . keyCode . ESCAPE && ( t . preventDefault ( ) , g ( ) ) } ) ; l . enable && ( l . minlen = l . minlen || 2 , l . wait = l . wait || 500 , b . attr ( "title" , s . i18n ( "incSearchOnly" ) ) . on ( "compositionstart" , function ( ) { b . data ( "composing" , ! 0 ) } ) . on ( "compositionend" , function ( ) { b . removeData ( "composing" ) , b . trigger ( "input" ) } ) . on ( "input" , function ( ) { b . data ( "composing" ) || ( b . data ( "inctm" ) && clearTimeout ( b . data ( "inctm" ) ) , b . data ( "inctm" , setTimeout ( function ( ) { var e = b . val ( ) ; ( 0 === e . length || e . length >= l . minlen ) && ( v !== e && s . trigger ( "incsearchstart" , { query : e , type : i ? i . children ( "input:checked" ) . val ( ) : "searchName" } ) , v = e , "" === e && s . searchStatus . state > 1 && s . searchStatus . query && b . val ( s . searchStatus . query ) . trigger ( "select" ) ) } , l . wait ) ) ) } ) , s . UA . ltIE8 && b . on ( "keydown" , function ( e ) { 229 === e . keyCode && ( b . data ( "imetm" ) && clearTimeout ( b . data ( "imetm" ) ) , b . data ( "composing" , ! 0 ) , b . data ( "imetm" , setTimeout ( function ( ) { b . removeData ( "composing" ) } , 100 ) ) ) } ) . on ( "keyup" , function ( t ) { b . data ( "imetm" ) && clearTimeout ( b . data ( "imetm" ) ) , b . data ( "composing" ) ?
i . data ( "longtap" , ! 0 ) , t . trigger ( "contextmenu" , { type : "navbar" , targets : [ t . navId2Hash ( i . attr ( "id" ) ) ] , x : a . touches [ 0 ] . pageX , y : a . touches [ 0 ] . pageY } ) } , 500 ) ) ) } } ) . on ( "touchmove touchend" , g , function ( t ) { return "INPUT" === t . target . nodeName ? void t . stopPropagation ( ) : ( clearTimeout ( e ( this ) . data ( "tmlongtap" ) ) , e ( this ) . removeData ( "tmlongtap" ) , void ( "touchmove" == t . type && e ( this ) . removeClass ( z ) ) ) } ) . on ( "click" , g + "." + v + " ." + x , function ( i ) { var a , o = e ( this ) , r = o . parent ( g ) , s = r . next ( "." + f ) , l = e . Deferred ( ) , c = 30 ; i . stopPropagation ( ) , r . hasClass ( y ) ? ( r . toggleClass ( b ) , t . lazy ( function ( ) { a = r . hasClass ( b ) ? s . children ( ) . length + s . find ( "div.elfinder-navbar-subtree[style*=block]" ) . children ( ) . length : s . find ( "div:visible" ) . length , a > c ? ( s . toggle ( ) , t . draggingUiHelper && t . draggingUiHelper . data ( "refreshPositions" , 1 ) , P ( ) ) : s . stop ( ! 0 , ! 0 ) [ r . hasClass ( b ) ? "slideDown" : "slideUp" ] ( n . durations . slideUpDown , function ( ) { t . draggingUiHelper && t . draggingUiHelper . data ( "refreshPositions" , 1 ) , P ( ) } ) } ) . always ( function ( ) { l . resolve ( ) } ) ) : ( N . insertBefore ( o ) , r . removeClass ( v ) , t . request ( { cmd : "tree" , target : t . navId2Hash ( r . attr ( "id" ) ) } ) . done ( function ( e ) { Y ( Object . assign ( [ ] , X ( e . tree ) ) ) , s . children ( ) . length && ( r . addClass ( v + " " + b ) , s . children ( ) . length > c ? ( s . show ( ) , t . draggingUiHelper && t . draggingUiHelper . data ( "refreshPositions" , 1 ) , P ( ) ) : s . stop ( ! 0 , ! 0 ) . slideDown ( n . durations . slideUpDown , function ( ) { t . draggingUiHelper && t . draggingUiHelper . data ( "refreshPositions" , 1 ) , P ( ) } ) ) } ) . always ( function ( e ) { N . remove ( ) , r . addClass ( y ) , t . one ( "treedone" , function ( ) { l . resolve ( ) } ) } ) ) , o . data ( "dfrd" , l ) } ) . on ( "contextmenu" , g , function ( n ) { var i = e ( this ) ; return i . find ( "input:text" ) . length ? void n . stopPropagation ( ) : ( n . preventDefault ( ) , i . data ( "tmlongtap" ) || t . trigger ( "contextmenu" , { type : "navbar" , targets : [ t . navId2Hash ( e ( this ) . attr ( "id" ) ) ] , x : n . pageX , y : n . pageY } ) , i . addClass ( "ui-state-hover" ) , t . getUI ( "contextmenu" ) . children ( ) . on ( "mouseenter" , function ( ) { i . addClass ( "ui-state-hover" ) } ) , void t . bind ( "closecontextmenu" , function ( ) { i . removeClass ( "ui-state-hover" ) } ) ) } ) . on ( "scrolltoview" , g , function ( n , i ) { var a = e ( this ) ; Z ( a . attr ( "id" ) ) . done ( function ( ) { i && "undefined" !== i . blink && ! i . blink || t . resources . blink ( a , "lookme" ) } ) } ) . on ( "create." + t . namespace , function ( n , i ) { var a = G ( i . phash ) , o = i . move || ! 1 , r = e ( V ( i ) ) . addClass ( "elfinder-navbar-wrapper-tmp" ) , s = t . selected ( ) ; o && s . length && t . trigger ( "lockfiles" , { files : s } ) , a . prepend ( r ) } ) , re = ! 1 , se = t . getUI ( "navbar" ) . append ( oe ) . show ( ) . on ( "scroll" , function ( ) { re = ! 0 , s && cancelAnimationFrame ( s ) , s = requestAnimationFrame ( function ( ) { re = ! 1 , P ( ) } ) } ) , le = t . sortAlsoTreeview ; t . open ( function ( e ) { var n = e . data , i = X ( n . files ) , a = t . getUI ( "contextmenu" ) ; n . init && oe . empty ( ) , t . UA . iOS && se . removeClass ( "overflow-scrolling-touch" ) . addClass ( "overflow-scrolling-touch" ) , i . length ? t . lazy ( function ( ) { a . data ( "cmdMaps" ) || a . data ( "cmdMaps" , { } ) , Y ( i ) , ae ( i , y ) , ne ( i ) } ) : ne ( ) } ) . add ( function ( e ) { var t = X ( e . data . added ) ; t . length && ( Y ( t ) , ae ( t , v ) ) } ) . change ( function ( n ) { if ( ! r ) { var i , a , o , s , l , d , p , u , h , m , v , w , x = X ( n . data . changed , ! 0 ) , k = x . length , C = k ; e ( ) ; for ( e . each ( $ , function ( e , n ) { n . trigger ( "update." + t . namespace , { change : "prepare" } ) } ) ; C -- ; ) if ( i = x [ C ] , a = i . phash , ( o = t . navHash2Elm ( i . hash ) ) . length ) { if ( v = o . parent ( ) , a ) { if ( l = o . closest ( "." + f ) , d = G ( a ) , p = o . parent ( ) . next ( ) , u = J ( d , i ) , ! d . length ) continue ; d [ 0 ] === l [ 0 ] && p . get ( 0 ) === u . get ( 0 ) || ( u . length ? u . before ( v ) : d . append ( v ) ) } h = o . hasClass ( b ) , m = o . hasClass ( y ) , s = e ( V ( i ) ) , o . replaceWith ( s . children ( g ) ) , ! c && ie ( null , v ) , i . dirs && ( h || m ) && ( o = t . navHash2Elm ( i . hash ) ) && o . next ( "." + f ) . children ( ) . length && ( h && o . addClass ( b ) , m && o . addClass ( y ) ) , w |= i . dirs == - 1 } w && P ( ) , e . each ( $ , function ( e , n ) { n . trigger ( "update." + t . namespace , { change : "done" } ) } ) , k && ne ( void 0 , ! 1 ) } } ) . remove ( function ( n ) { var i , a , o , r = n . data . removed , s = r . length ; for ( e . each ( $ , function ( e , n ) { n . trigger ( "update." + t . namespace , { removed : r } ) , n . trigger ( "update." + t . namespace , { change : "prepare" } ) } ) ; s -- ; ) ( i = t . navHash2Elm ( r [ s ] ) ) . length && ( o = ! 0 , a = i . closest ( "." + f ) , i . parent ( ) . detach ( ) , a . children ( ) . length || a . hide ( ) . prev ( g ) . removeClass ( v + " " + b + " " + y ) ) ; o && t . getUI ( "navbar" ) . children ( ".ui-resizable-handle" ) . trigger ( "resize" ) , e . each ( $ , function ( e , n ) { n . trigger ( "update." + t . namespace , { change : "done" } ) } ) } ) . bind ( "lockfiles unlockfiles" , function ( n ) { var i = "lockfiles" == n . type , a = ! ! n . data . helper && n . data . helper . dat
e . Deferred ( ) ) , u = "edit-" + i . namespace + "-" + t . hash , m = i . getUI ( ) . find ( "#" + u ) , g = a ? a : 0 , v = ! 1 ; if ( m . length ) return m . elfinderdialog ( "toTop" ) , p . resolve ( ) ; if ( ! ( t . read && ( t . write || o . info && o . info . converter ) ) ) return s = [ "errOpen" , t . name , "errPerm" ] , p . reject ( s ) ; if ( o && o . info ) { if ( "function" == typeof o . info . edit ) return l = o . info . edit . call ( i , t , o ) , l . promise ? l . done ( function ( ) { p . resolve ( ) } ) . fail ( function ( e ) { p . reject ( e ) } ) : l ? p . resolve ( ) : p . reject ( ) , p ; v = o . info . preventGet || o . info . noContent , o . info . urlAsContent || v ? ( r = e . Deferred ( ) , o . info . urlAsContent ? i . url ( d , { async : ! 0 , onetime : ! 0 , temporary : ! 0 } ) . done ( function ( e ) { r . resolve ( { content : e } ) } ) : r . resolve ( { } ) ) : r = i . request ( { data : { cmd : "get" , target : d , conv : g , _t : t . ts } , options : { type : "get" , cache : ! 0 } , notify : { type : "file" , cnt : 1 } , preventDefault : ! 0 } ) , r . done ( function ( a ) { var r , s , l ; a . doconv ? i . confirm ( { title : n . title , text : "unknown" === a . doconv ? "confirmNonUTF8" : "confirmConvUTF8" , accept : { label : "btnConv" , callback : function ( ) { p = f ( t , r . val ( ) , o ) } } , cancel : { label : "btnCancel" , callback : function ( ) { p . reject ( ) } } , optionsCallback : function ( t ) { t . create = function ( ) { var t = e ( '<div class="elfinder-dialog-confirm-encoding"/>' ) , n = { value : a . doconv } ; "unknown" === a . doconv && ( n . caption = "-" ) , r = c ( [ n ] ) , e ( this ) . next ( ) . find ( ".ui-dialog-buttonset" ) . prepend ( t . append ( e ( "<label>" + i . i18n ( "encoding" ) + " </label>" ) . append ( r ) ) ) } } } ) : ( ! v && i . mimeIsText ( t . mime ) && ( s = new RegExp ( "^(data:" + t . mime . replace ( /([.+])/g , "\\$1" ) + ";base64,)" , "i" ) , o . info . dataScheme ? window . btoa && ! a . content . match ( s ) && ( a . content = "data:" + t . mime + ";base64," + btoa ( a . content ) ) : window . atob && ( l = a . content . match ( s ) ) && ( a . content = atob ( a . content . substr ( l [ 1 ] . length ) ) ) ) , h ( u , t , a . content , a . encoding , o ) . done ( function ( e ) { p . resolve ( e ) } ) . progress ( function ( e , t , n , a ) { var o = this ; t && ( d = t ) , i . request ( { options : { type : "post" } , data : { cmd : "put" , target : d , encoding : e || n . encoding , content : n } , notify : { type : "save" , cnt : 1 } , syncOnFail : ! 0 , preventFail : ! 0 , navigate : { target : "changed" , toast : { inbuffer : { msg : i . i18n ( [ "complete" , i . i18n ( "btnSave" ) ] ) } } } } ) . fail ( function ( e ) { p . reject ( e ) , a . reject ( ) } ) . done ( function ( e ) { requestAnimationFrame ( function ( ) { o . trigger ( "focus" ) , o . editor && o . editor . focus ( o [ 0 ] , o . editor . instance ) } ) , a . resolve ( ) } ) } ) . fail ( function ( e ) { p . reject ( e ) } ) ) } ) . fail ( function ( e ) { var t = i . parseError ( e ) ; t = Array . isArray ( t ) ? t [ 0 ] : t , "errConvUTF8" !== t && i . sync ( ) , p . reject ( e ) } ) } return p . promise ( ) } , m = { } , g = { info : { id : "textarea" , name : "TextArea" , useTextAreaEvent : ! 0 } , load : function ( t ) { this . trigger ( "Prepare" , { node : t , editorObj : void 0 , instance : void 0 , opts : { } } ) , t . setSelectionRange && t . setSelectionRange ( 0 , 0 ) , e ( t ) . trigger ( "focus" ) . show ( ) } , save : function ( ) { } } , v = function ( a , o ) { var r = function ( t , n ) { if ( n ) { if ( "*" === n [ 0 ] || e . inArray ( t , n ) !== - 1 ) return ! 0 ; var a , o ; for ( o = n . length , a = 0 ; a < o ; a ++ ) if ( 0 === t . indexOf ( n [ a ] ) ) return ! 0 ; return ! 1 } return i . mimeIsText ( t ) } , s = function ( e , t ) { if ( ! t || ! t . length ) return ! 0 ; var n , i , a = e . replace ( /^.+\.([^.]+)|(.+)$/ , "$1$2" ) . toLowerCase ( ) ; for ( i = t . length , n = 0 ; n < i ; n ++ ) if ( a === t [ n ] . toLowerCase ( ) ) return ! 0 ; return ! 1 } , l = n . options . editors || [ ] , c = i . cwd ( ) . write ; return t = i . storage ( "storedEditors" ) || { } , m = { } , l . length || ( l = [ g ] ) , e . each ( l , function ( e , t ) { var n ; ( 1 === o || ! t . info . single ) && ( t . info && t . info . converter ? c : a . write ) && ( a . size > 0 || ! t . info . converter && i . mimesCanMakeEmpty [ a . mime ] ) && ( ! t . info . maxSize || a . size <= t . info . maxSize ) && r ( a . mime , t . mimes || null ) && s ( a . name , t . exts || null ) && "function" == typeof t . load && "function" == typeof t . save && ( n = t . info . name ? t . info . name : "Editor " + e , t . id = t . info . id ? t . info . id : "editor" + e , t . name = n , t . i18n = i . i18n ( n ) , m [ t . id ] = t ) } ) , ! ! Object . keys ( m ) . length } , b = function ( n , a ) { n && a && ( e . isPlainObject ( t ) || ( t = { } ) , t [ n ] = a . id , i . storage ( "storedEditors" , t ) , i . trigger ( "selectfiles" , { files : i . selected ( ) } ) ) } , y = function ( ) { var e = i . storage ( "useStoredEditor" ) ; return e ? e > 0 : n . options . useStoredEditor } , w = function ( ) { var e = i . storage ( "editorMaximized" ) ; return e ? e > 0 : n . options . editorMaximized } , x = function ( t , n ) { var a = [ ] ; return e . each ( m , function ( e , o ) { a . push ( { label : i . escape ( o . i18n ) , icon : o . info && o . info . icon ? o . info . icon : "edit" , options : { iconImg : o . info && o . info . iconImg ? i . baseUrl + o . info . iconImg : void 0 } , callback : function ( ) { b ( t [ 0 ] . mime , o ) , n && n . call ( o ) } } ) } ) , a } , k = function ( e ) { return e . toLowerCase ( ) . replace ( / +/g , "" ) } , C = function ( e ) { var n = t [ e ] ; return n && Object
! m . owner && c . owner && k . push ( w . replace ( z , a . owner ) . replace ( T , c . owner ) ) , ! m . group && c . group && k . push ( w . replace ( z , a . group ) . replace ( T , c . group ) ) , ! m . perm && c . perm && k . push ( w . replace ( z , a . perm ) . replace ( T , v . formatFileMode ( c . perm ) ) ) , window . ArrayBuffer && ( v . options . cdns . sparkmd5 || v . options . cdns . jssha ) && "directory" !== c . mime && c . size > 0 && ( ! b . showHashMaxsize || c . size <= b . showHashMaxsize ) && ( f = [ ] , e . each ( v . storage ( "hashchekcer" ) || b . showHashAlgorisms , function ( e , t ) { c [ t ] ? k . push ( w . replace ( z , v . i18n ( t ) ) . replace ( T , c [ t ] ) . replace ( "{class}" , U ) ) : ( k . push ( w . replace ( z , v . i18n ( t ) ) . replace ( T , y . spinner . replace ( "{text}" , a . calc ) . replace ( "{name}" , t ) ) ) , f . push ( t ) ) } ) , A . push ( v . getContentsHashes ( c . hash , f ) . progress ( function ( t ) { e . each ( f , function ( e , n ) { t [ n ] && j ( t [ n ] , n , U ) } ) } ) . always ( function ( ) { e . each ( f , function ( e , t ) { j ( a . unknown , t ) } ) } ) ) ) , b . custom && e . each ( b . custom , function ( t , n ) { m [ n . label ] || n . mimes && ! e . grep ( n . mimes , function ( e ) { return c . mime === e || 0 === c . mime . indexOf ( e + "/" ) } ) . length || n . hashRegex && ! c . hash . match ( n . hashRegex ) || ( k . push ( w . replace ( z , v . i18n ( n . label ) ) . replace ( T , n . tpl . replace ( "{id}" , M ) ) ) , n . action && "function" == typeof n . action && D . push ( n . action ) ) } ) } else C = C . replace ( "{class}" , "elfinder-cwd-icon-group" ) , d = y . groupTitle . replace ( "{items}" , a . items ) . replace ( "{num}" , x ) , p = e . grep ( r , function ( e ) { return "directory" == e . mime } ) . length , p ? ( u = e . grep ( r , function ( e ) { return ! ( "directory" !== e . mime || e . phash && ! e . isroot ) } ) . length , p -= u , k . push ( w . replace ( z , a . kind ) . replace ( T , u === x || p === x ? a [ u ? "roots" : "folders" ] : e . map ( { roots : u , folders : p , files : x - u - p } , function ( e , t ) { return e ? a [ t ] + " " + e : null } ) . join ( ", " ) ) ) , ! m . size && k . push ( w . replace ( z , a . size ) . replace ( T , y . spinner . replace ( "{text}" , a . calc ) . replace ( "{name}" , "size" ) ) ) , I = e . map ( r , function ( e ) { return e . hash } ) ) : ( s = 0 , e . each ( r , function ( e , t ) { var n = parseInt ( t . size ) ; n >= 0 && s >= 0 ? s += n : s = "unknown" } ) , k . push ( w . replace ( z , a . kind ) . replace ( T , a . files ) ) , ! m . size && k . push ( w . replace ( z , a . size ) . replace ( T , v . formatSize ( s ) ) ) ) ; return C = C . replace ( "{title}" , d ) . replace ( "{content}" , k . join ( "" ) . replace ( /{class}/g , "" ) ) , F = g . fmDialog ( C , O ) , F . attr ( "id" , M ) . one ( "mousedown" , ".elfinder-info-path" , function ( ) { e ( this ) . html ( o ( e ( this ) . html ( ) , ! 0 ) ) } ) , v . UA . Mobile && e . fn . tooltip && F . children ( ".ui-dialog-content .elfinder-info-title" ) . tooltip ( { classes : { "ui-tooltip" : "elfinder-ui-tooltip ui-widget-shadow" } , tooltipClass : "elfinder-ui-tooltip ui-widget-shadow" , track : ! 0 } ) , c && "1" == c . url && F . on ( "click" , "." + n + "-url" , function ( ) { e ( this ) . parent ( ) . html ( y . spinner . replace ( "{text}" , v . i18n ( "ntfurl" ) ) . replace ( "{name}" , "url" ) ) , v . request ( { data : { cmd : "url" , target : c . hash } , preventDefault : ! 0 } ) . fail ( function ( ) { j ( R , "url" ) } ) . done ( function ( e ) { if ( e . url ) { j ( '<a href="' + e . url + '" target="_blank">' + R + "</a>" || R , "url" ) ; var t = v . file ( c . hash ) ; t . url = e . url } else j ( R , "url" ) } ) } ) , l && e ( "<img/>" ) . on ( "load" , function ( ) { F . find ( ".elfinder-cwd-icon" ) . addClass ( l . className ) . css ( "background-image" , "url('" + l . url + "')" ) } ) . attr ( "src" , l . url ) , I . length && ( S = v . getSize ( I ) . done ( function ( e ) { j ( e . formated , "size" ) } ) . fail ( function ( ) { j ( a . unknown , "size" ) } ) ) , D . length && e . each ( D , function ( e , t ) { try { t ( c , v , F ) } catch ( n ) { v . debug ( "error" , n ) } } ) , e . Deferred ( ) . resolve ( ) } } ) . prototype = { forceLoad : ! 0 } , i . prototype . commands . mkdir = function ( ) { var t , n = this . fm , i = this ; this . value = "" , this . disableOnSearch = ! 0 , this . updateOnSelect = ! 1 , this . syncTitleOnChange = ! 0 , this . mime = "directory" , this . prefix = "untitled folder" , this . exec = function ( a , o ) { var r ; return a && a . length && o && o . _currentType && "navbar" === o . _currentType ? ( this . origin = o . _currentType , this . data = { target : a [ 0 ] } ) : ( r = n . cwd ( ) . hash === a [ 0 ] , this . origin = t && ! r ? t : "cwd" , delete this . data ) , a || this . options . intoNewFolderToolbtn || n . getUI ( "cwd" ) . trigger ( "unselectall" ) , this . move = this . value === n . i18n ( "cmdmkdirin" ) , e . proxy ( n . res ( "mixin" , "make" ) , i ) ( ) } , this . shortcuts = [ { pattern : "ctrl+shift+n" } ] , this . init = function ( ) { this . options . intoNewFolderToolbtn && ( this . syncTitleOnChange = ! 0 ) } , n . bind ( "select contextmenucreate closecontextmenu" , function ( e ) { var a = ( e . data ? e . data . selected || e . data . targets : null ) || n . selected ( ) ; i . className = "mkdir" , t = e . data && a . length ? e . data . origin || e . data . type || "" : "" , i . options . intoNewFolderToolbtn || "" !== t || ( t = "cwd" ) , a . length && "navbar" !== t && "cwd" !== t && n . cwd ( ) . hash !== a [ 0 ] ? ( i . title = n . i18n ( "cmdmkdirin" ) , i . classNa
return n [ e ] } ) ) } ) } ( ) ) , h . autoFocusDialog && ( h . autoFocusDialog = e ( '<input type="checkbox"/>' ) . prop ( "checked" , function ( ) { var e = a . storage ( "autoFocusDialog" ) ; return e ? e > 0 : a . options . uiOptions . dialog . focusOnMouseOver } ( ) ) . on ( "change" , function ( t ) { a . storage ( "autoFocusDialog" , e ( this ) . is ( ":checked" ) ? 1 : - 1 ) } ) ) , h . clearBrowserData && ( h . clearBrowserData = e ( "<button/>" ) . text ( a . i18n ( "reset" ) ) . button ( ) . on ( "click" , function ( t ) { t . preventDefault ( ) , a . storage ( ) , e ( "#" + a . id ) . elfinder ( "reload" ) } ) ) , e . each ( u , function ( t , i ) { var s , d ; i === ! 0 ? d = 1 : i && ( s = e ( ) , e . each ( i , function ( t , n ) { var i , o , r , l = "" ; ( i = h [ n ] ) && ( d = 2 , o = a . i18n ( n ) , r = e ( i ) . filter ( 'input[type="checkbox"]' ) , r . length || ( r = e ( i ) . find ( 'input[type="checkbox"]' ) ) , 1 === r . length ? ( r . attr ( "id" ) || r . attr ( "id" , "elfinder-preference-" + n + "-checkbox" ) , o = '<label for="' + r . attr ( "id" ) + '">' + o + "</label>" ) : r . length > 1 && ( l = " elfinder-preference-checkboxes" ) , s = s . add ( e ( '<dt class="elfinder-preference-' + n + l + '">' + o + "</dt>" ) ) . add ( e ( '<dd class="elfinder-preference-' + n + l + '"/>' ) . append ( i ) ) ) } ) ) , d && ( l . append ( r [ o ] ( /\{id\}/g , t ) [ o ] ( /\{title\}/ , a . i18n ( t ) ) [ o ] ( /\{class\}/ , n === t ? "elfinder-focus" : "" ) ) , 2 === d && c . append ( e ( '<div id="' + a . namespace + "-preference-" + t + '" class="elfinder-preference-content"/>' ) . hide ( ) . append ( e ( "<dl/>" ) . append ( s ) ) ) ) } ) , l . on ( "click" , "a" , function ( t ) { var n = e ( t . target ) , i = n . attr ( "href" ) ; t . preventDefault ( ) , t . stopPropagation ( ) , l . children ( ) . removeClass ( p ) , n . removeClass ( "ui-state-hover" ) . parent ( ) . addClass ( p ) , i . match ( /all$/ ) ? c . addClass ( "elfinder-preference-taball" ) . children ( ) . show ( ) : ( c . removeClass ( "elfinder-preference-taball" ) . children ( ) . hide ( ) , e ( i ) . show ( ) ) } ) . on ( "focus blur" , "a" , function ( t ) { e ( this ) . parent ( ) . toggleClass ( "ui-state-focus" , "focusin" === t . type ) } ) . on ( "mouseenter mouseleave" , "li" , function ( t ) { e ( this ) . toggleClass ( "ui-state-hover" , "mouseenter" === t . type ) } ) , c . find ( "a,input,select,button" ) . addClass ( "elfinder-tabstop" ) , s . append ( l , c ) , t = i . fmDialog ( s , { title : i . title , width : i . options . width || 600 , height : i . options . height || 400 , maxWidth : "window" , maxHeight : "window" , autoOpen : ! 1 , destroyOnClose : ! 1 , allowMinimize : ! 1 , open : function ( ) { n && d ( n ) , n = null } , resize : function ( ) { c . height ( t . height ( ) - l . outerHeight ( ! 0 ) - ( c . outerHeight ( ! 0 ) - c . height ( ) ) - 5 ) } } ) . on ( "click" , function ( e ) { e . stopPropagation ( ) } ) . css ( { overflow : "hidden" } ) , t . closest ( ".ui-dialog" ) . css ( { overflow : "hidden" } ) . addClass ( "elfinder-bg-translucent" ) , n = "all" } ; this . shortcuts = [ { pattern : "ctrl+comma" , description : this . title } ] , this . alwaysEnabled = ! 0 , this . getstate = function ( ) { return 0 } , this . exec = function ( n , i ) { return ! t && u ( ) , i && ( i . tab ? d ( i . tab ) : "cwd" === i . _currentType && d ( "workspace" ) ) , t . elfinderdialog ( "open" ) , e . Deferred ( ) . resolve ( ) } } , ( i . prototype . commands . quicklook = function ( ) { var t , n , i , a , o , r , s , l , c , d , p = this , u = p . fm , h = 0 , f = 1 , m = 2 , g = 3 , v = 4 , b = h , y = Element . update ? "quicklookupdate" : "update" , w = "elfinder-quicklook-navbar-icon" , x = "elfinder-quicklook-fullscreen" , k = "elfinder-quicklook-info-wrapper" , C = function ( t ) { e ( document ) . trigger ( e . Event ( "keydown" , { keyCode : t , ctrlKey : ! 1 , shiftKey : ! 1 , altKey : ! 1 , metaKey : ! 1 } ) ) } , z = function ( e ) { var t = u . getUI ( ) . offset ( ) , n = function ( ) { var t = e . find ( ".elfinder-cwd-file-wrapper" ) ; return t . length ? t : e } ( ) , i = n . offset ( ) || { top : 0 , left : 0 } ; return { opacity : 0 , width : n . width ( ) , height : n . height ( ) - 30 , top : i . top - t . top , left : i . left - t . left } } , T = function ( ) { var i = p . options . contain , a = i ? u . getUI ( ) : e ( window ) , o = u . getUI ( ) . offset ( ) , r = Math . min ( t , a . width ( ) - 10 ) , s = Math . min ( n , a . height ( ) - 80 ) ; return { opacity : 1 , width : r , height : s , top : parseInt ( ( a . height ( ) - s - 60 ) / 2 + ( i ? 0 : a . scrollTop ( ) - o . top ) ) , left : parseInt ( ( a . width ( ) - r ) / 2 + ( i ? 0 : a . scrollLeft ( ) - o . left ) ) } } , A = { } , S = function ( e , t ) { var n = t || e . substr ( 0 , e . indexOf ( "/" ) ) , i = A [ n ] ? A [ n ] : A [ n ] = document . createElement ( n ) , a = ! 1 ; try { a = i . canPlayType && i . canPlayType ( e ) } catch ( o ) { } return ! ( ! a || "" === a || "no" == a ) } , O = window . navigator . platform . indexOf ( "Win" ) != - 1 , I = ! 1 , j = ! 1 , M = ! 1 , F = null , D = e . ui . keyCode . LEFT , E = e . ui . keyCode . RIGHT , U = "mousemove touchstart " + ( "onwheel" in document ? "wheel" : "onmousewheel" in document ? "mousewheel" : "DOMMouseScroll" ) , P = e ( '<span class="elfinder-dialog-title elfinder-quicklook-title"/>' ) , R = e ( "<div/>" ) , q = e ( '<div class="elfinder-quicklook-info"/>' ) , H = e ( '<div class="ui-front elfinder-quicklook-cover"/>' ) , _ = e ( '<div class="' + w + " " + w + ' - fullscree
window . Zlib && ( n = window . Zlib ) ? ( f ? window . Zlib = f : delete window . Zlib , m ( ) ) : error ( ) } ) ) } } ) } , function ( t ) { var n , i = t . fm , a = i . arrayFlip ( [ "application/x-rar" ] ) , o = t . preview ; window . DataView && o . on ( t . evUpdate , function ( r ) { var s = r . file ; if ( a [ s . mime ] && i . options . cdns . rar && n !== ! 1 ) { var l , c , d , p , u , h = function ( a ) { if ( p ) return void l . remove ( ) ; try { d = n ( { file : a , type : 2 , xhrHeaders : i . customHeaders , xhrFields : i . xhrFields } , function ( n ) { l . remove ( ) ; var a , r , c = [ ] ; return p || n ? void ( n && i . debug ( "error" , n ) ) : ( e . each ( d . entries , function ( ) { c . push ( this . path + ( this . size ? " (" + i . formatSize ( this . size ) + ")" : "" ) ) } ) , void ( c . length && ( c = e . map ( c , function ( e ) { return i . decodeRawString ( e ) } ) , c . sort ( ) , a = "<strong>" + i . escape ( s . mime ) + "</strong> (" + i . formatSize ( s . size ) + ")<hr/>" , r = e ( '<div class="elfinder-quicklook-preview-archive-wrapper">' + a + '<pre class="elfinder-quicklook-preview-text">' + i . escape ( c . join ( "\n" ) ) + "</pre></div>" ) . on ( "touchstart" , function ( t ) { e ( this ) [ "scroll" + ( "ltr" === i . direction ? "Right" : "Left" ) ] ( ) > 5 && ( t . originalEvent . _preventSwipeX = ! 0 ) } ) . appendTo ( o ) , t . hideinfo ( ) ) ) ) } ) } catch ( r ) { l . remove ( ) } } , f = function ( ) { n = ! 1 , l . remove ( ) } ; r . stopImmediatePropagation ( ) , l = e ( '<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">' + i . i18n ( "nowLoading" ) + '</span><span class="elfinder-spinner"/></div>' ) . appendTo ( t . info . find ( ".elfinder-quicklook-info" ) ) , o . one ( "change" , function ( ) { d && ( d . abort = ! 0 ) , l . remove ( ) , p = ! 0 } ) , c = i . openUrl ( s . hash ) , i . isSameOrigin ( c ) || ( c = i . openUrl ( s . hash , ! 0 ) ) , n ? h ( c ) : ( window . RarArchive && ( u = window . RarArchive , delete window . RarArchive ) , i . loadScript ( [ i . options . cdns . rar ] , function ( ) { i . hasRequire ? require ( [ "rar" ] , function ( e ) { n = e , h ( c ) } , f ) : ( n = window . RarArchive ) ? ( u ? window . RarArchive = u : delete window . RarArchive , h ( c ) ) : f ( ) } , { tryRequire : ! 0 , error : f } ) ) } } ) } , function ( t ) { var n , i = t . fm , a = i . arrayFlip ( t . options . sharecadMimes || [ ] ) , o = t . preview ; t . window ; t . options . sharecadMimes . length && t . addIntegration ( { title : "ShareCAD.org CAD and 3D-Models viewer" , link : "https://sharecad.org/DWGOnlinePlugin" } ) , o . on ( t . evUpdate , function ( r ) { var s = r . file ; if ( a [ s . mime . toLowerCase ( ) ] && ! i . option ( "onetimeUrl" , s . hash ) ) { var l , c ; t . window ; r . stopImmediatePropagation ( ) , "1" == s . url && ( o . hide ( ) , e ( '<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">' + i . i18n ( "getLink" ) + "</button></div>" ) . appendTo ( t . info . find ( ".elfinder-quicklook-info" ) ) . on ( "click" , function ( ) { var n = e ( this ) ; n . html ( '<span class="elfinder-spinner">' ) , i . request ( { data : { cmd : "url" , target : s . hash } , preventDefault : ! 0 } ) . always ( function ( ) { n . html ( "" ) } ) . done ( function ( e ) { var n = i . file ( s . hash ) ; s . url = n . url = e . url || "" , s . url && o . trigger ( { type : t . evUpdate , file : s , forceUpdate : ! 0 } ) } ) } ) ) , "" !== s . url && "1" != s . url && ( o . one ( "change" , function ( ) { l . remove ( ) , n . off ( "load" ) . remove ( ) , n = null } ) . addClass ( "elfinder-overflow-auto" ) , l = e ( '<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">' + i . i18n ( "nowLoading" ) + '</span><span class="elfinder-spinner"/></div>' ) . appendTo ( t . info . find ( ".elfinder-quicklook-info" ) ) , c = i . convAbsUrl ( i . url ( s . hash ) ) , n = e ( '<iframe class="elfinder-quicklook-preview-iframe" scrolling="no"/>' ) . css ( "background-color" , "transparent" ) . appendTo ( o ) . on ( "load" , function ( ) { t . hideinfo ( ) , l . remove ( ) , t . preview . after ( t . info ) , e ( this ) . css ( "background-color" , "#fff" ) . show ( ) } ) . on ( "error" , function ( ) { l . remove ( ) , t . preview . after ( t . info ) } ) . attr ( "src" , "//sharecad.org/cadframe/load?url=" + encodeURIComponent ( c ) ) , t . info . after ( t . preview ) ) } } ) } , function ( t ) { var n , i , a , o , r , s = t . fm , l = { "application/vnd.google-earth.kml+xml" : ! 0 , "application/vnd.google-earth.kmz" : ! 0 } , c = t . preview ; t . options . googleMapsApiKey && ( t . addIntegration ( { title : "Google Maps" , link : "https://www.google.com/intl/" + s . lang . replace ( "_" , "-" ) + "/help/terms_maps.html" } ) , n = window . google && google . maps , i = function ( e , i ) { var a = t . options . googleMapsOpts . maps ; s . forExternalUrl ( e . hash ) . done ( function ( e ) { if ( e ) try { new n . KmlLayer ( e , Object . assign ( { map : new n . Map ( i . get ( 0 ) , a ) } , t . options . googleMapsOpts . kml ) ) , t . hideinfo ( ) } catch ( r ) { o ( ) } else o ( ) } ) } , a = window . gm _authFailure , o = function ( ) { r = null } , r = "https://maps.googleapis.com/maps/api/js?key=" + t . options . googleMapsApiKey , window . gm _authFailure = function ( ) { o ( ) , a && a ( ) } , c . on ( t . evUpdate , function ( a ) { var o = a . file ; if ( r
t . preventDefault ( ) , n = { title : e ( "input:checked" , W ) . val ( ) , text : "confirmReq" , accept : { label : "btnApply" , callback : function ( ) { Xe ( ) } } , cancel : { label : "btnCancel" , callback : function ( ) { e ( this ) . trigger ( "focus" ) } } } , st && ( n . buttons = [ { label : "btnSaveAs" , callback : function ( ) { requestAnimationFrame ( Ge ) } } ] ) , void s . confirm ( n ) } ) . on ( "keyup" , function ( ) { var t = e ( this ) ; t . hasClass ( "elfinder-resize-bg" ) || requestAnimationFrame ( function ( ) { t . val ( t . val ( ) . replace ( /[^0-9]/g , "" ) ) } ) } ) . filter ( ":first" ) , ze ( ) , ! s . UA . Mobile && $ . trigger ( "focus" ) , Be ( ) ) } , Ee = e ( "<img/>" ) . on ( "load" , De ) . on ( "error" , function ( ) { D . text ( "Unable to load image" ) . css ( "background" , "transparent" ) } ) , Ue = e ( "<div/>" ) , Pe = e ( "<img/>" ) , Re = e ( "<div/>" ) , qe = e ( '<img class="elfinder-resize-imgrotate" />' ) , He = function ( e , t ) { return e = we ? 8 * Math . round ( e / 8 ) : Math . round ( e ) , e = Math . max ( 0 , e ) , t && e > t && ( e = we ? 8 * Math . floor ( t / 8 ) : t ) , e } , _e = function ( ) { $ . val ( pe ) , K . val ( ue ) , Ne . updateView ( pe , ue ) , V . val ( 0 ) , X . val ( 0 ) , G . val ( pe ) , J . val ( ue ) , Le . updateView ( ) , it ( ) } , Ne = { update : function ( ) { $ . val ( He ( Ee . width ( ) / de ) ) , K . val ( He ( Ee . height ( ) / de ) ) , it ( ) } , updateView : function ( e , t ) { e > me || t > ge ? e / me > t / ge ? ( de = me / e , Ee . width ( me ) . height ( He ( t * de ) ) ) : ( de = ge / t , Ee . height ( ge ) . width ( He ( e * de ) ) ) : Ee . width ( He ( e ) ) . height ( He ( t ) ) , de = Ee . width ( ) / e , N . text ( "1 : " + ( 1 / de ) . toFixed ( 2 ) ) , Ne . updateHandle ( ) } , updateHandle : function ( ) { E . width ( Ee . width ( ) ) . height ( Ee . height ( ) ) } , fixHeight : function ( ) { var e , t ; he && ( e = $ . val ( ) , t = He ( e / ce ) , Ne . updateView ( e , t ) , K . val ( t ) ) } } , Le = { update : function ( e ) { V . val ( He ( ( U . data ( "x" ) || U . position ( ) . left ) / de , pe ) ) , X . val ( He ( ( U . data ( "y" ) || U . position ( ) . top ) / de , ue ) ) , "xy" !== e && ( G . val ( He ( ( U . data ( "w" ) || U . width ( ) ) / de , pe - V . val ( ) ) ) , J . val ( He ( ( U . data ( "h" ) || U . height ( ) ) / de , ue - X . val ( ) ) ) ) , it ( ) } , updateView : function ( e ) { var t , n , i , a , o ; V . val ( He ( V . val ( ) , pe - ( we ? 8 : 1 ) ) ) , X . val ( He ( X . val ( ) , ue - ( we ? 8 : 1 ) ) ) , G . val ( He ( G . val ( ) , pe - V . val ( ) ) ) , J . val ( He ( J . val ( ) , ue - X . val ( ) ) ) , fe && ( t = Re . width ( ) / Re . height ( ) , "w" === e ? J . val ( He ( parseInt ( G . val ( ) ) / t ) ) : "h" === e && G . val ( He ( parseInt ( J . val ( ) ) * t ) ) ) , n = Math . round ( parseInt ( V . val ( ) ) * de ) , i = Math . round ( parseInt ( X . val ( ) ) * de ) , "xy" !== e ? ( a = Math . round ( parseInt ( G . val ( ) ) * de ) , o = Math . round ( parseInt ( J . val ( ) ) * de ) ) : ( a = U . data ( "w" ) , o = U . data ( "h" ) ) , U . data ( { x : n , y : i , w : a , h : o } ) . width ( a ) . height ( o ) . css ( { left : n , top : i } ) , Re . width ( a ) . height ( o ) } , resize _update : function ( e , t ) { U . data ( { x : t . position . left , y : t . position . top , w : t . size . width , h : t . size . height } ) , Le . update ( ) , Le . updateView ( ) } , drag _update : function ( e , t ) { U . data ( { x : t . position . left , y : t . position . top } ) , Le . update ( "xy" ) } } , We = { mouseStartAngle : 0 , imageStartAngle : 0 , imageBeingRotated : ! 1 , setQuality : function ( ) { q . children ( "div.elfinder-resize-quality" ) [ t > 0 && Q . val ( ) % 90 === 0 ? "hide" : "show" ] ( ) } , update : function ( e , t ) { "undefined" == typeof e && ( ye = e = parseInt ( Q . val ( ) ) ) , "undefined" == typeof t && ( t = ! 0 ) , ! t || s . UA . Opera || s . UA . ltIE8 ? qe . rotate ( e ) : qe . animate ( { rotate : e + "deg" } ) , e %= 360 , e < 0 && ( e += 360 ) , Q . val ( parseInt ( e ) ) , Z . slider ( "value" , Q . val ( ) ) , We . setQuality ( ) } , execute : function ( e ) { if ( We . imageBeingRotated ) { var t = We . getCenter ( qe ) , n = e . originalEvent . touches ? e . originalEvent . touches [ 0 ] : e , i = n . pageX - t [ 0 ] , a = n . pageY - t [ 1 ] , o = Math . atan2 ( a , i ) , r = o - We . mouseStartAngle + We . imageStartAngle ; return r = Math . round ( 180 * parseFloat ( r ) / Math . PI ) , e . shiftKey && ( r = 15 * Math . round ( ( r + 6 ) / 15 ) ) , qe . rotate ( r ) , r %= 360 , r < 0 && ( r += 360 ) , Q . val ( r ) , Z . slider ( "value" , Q . val ( ) ) , We . setQuality ( ) , ! 1 } } , start : function ( t ) { if ( ! qe . hasClass ( "elfinder-resize-picking" ) ) { I ( ) , We . imageBeingRotated = ! 0 ; var n = We . getCenter ( qe ) , i = t . originalEvent . touches ? t . originalEvent . touches [ 0 ] : t , a = i . pageX - n [ 0 ] , o = i . pageY - n [ 1 ] ; return We . mouseStartAngle = Math . atan2 ( o , a ) , We . imageStartAngle = parseFloat ( qe . rotate ( ) ) * Math . PI / 180 , e ( document ) . on ( "mousemove" , We . execute ) , qe . on ( "touchmove" , We . execute ) , ! 1 } } , stop : function ( t ) { if ( We . imageBeingRotated ) return e ( document ) . off ( "mousemove" , We . execute ) , qe . off ( "touchmove" , We . execute ) , requestAnimationFrame ( function ( ) { We . imageBeingRotated = ! 1 } ) , j ( ) , ! 1 } , getCenter : function ( e ) { var t = qe . rotate ( ) ; qe . rotate ( 0 ) ; var n = qe . offset ( ) , i = n . left + qe . width ( ) / 2 , a = n . top + qe . height ( ) / 2 ; return qe . rotate ( t ) , Array ( i , a ) } } , Be = function ( e ) { e ? ( E . filter ( ":ui-resizable" ) . resizable ( "destroy" ) , E . hide ( ) ) : ( E . show ( ) , E . resizable ( { alsoResize : Ee , aspectRatio : he , resize : Ne . update , start : I , stop : function ( e ) { Ne . fixHeight ,
l && r . setRedo ( l , t ) } ) , i ( a . length ? a [ a . length - 1 ] : void 0 ) , o = t . callback ( ) , o && o . done ? o . done ( function ( ) { s . resolve ( ) } ) . fail ( function ( ) { s . reject ( ) } ) : s . resolve ( ) , a . length ? this . update ( 0 , a [ a . length - 1 ] . name ) : this . update ( - 1 , "" ) ) : s . reject ( ) , s } , n . bind ( "exec" , function ( e ) { var n = e . data || { } ; n . opts && n . opts . _userAction && n . dfrd && n . dfrd . done && n . dfrd . done ( function ( e ) { e && e . undo && e . redo && ( e . undo . redo = e . redo , t . setUndo ( e . undo ) ) } ) } ) } , i . prototype . commands . redo = function ( ) { "use strict" ; var t = this , n = this . fm , i = function ( e ) { e && e . callback ? ( t . title = n . i18n ( "cmdredo" ) + " " + n . i18n ( "cmd" + e . cmd ) , t . state = 0 ) : ( t . title = n . i18n ( "cmdredo" ) , t . state = - 1 ) , t . change ( ) } , a = [ ] ; this . alwaysEnabled = ! 0 , this . updateOnSelect = ! 1 , this . shortcuts = [ { pattern : "shift+ctrl+z ctrl+y" } ] , this . syncTitleOnChange = ! 0 , this . getstate = function ( ) { return a . length ? 0 : - 1 } , this . setRedo = function ( e , t ) { null === e ? ( a = [ ] , i ( ) ) : e && e . cmd && e . callback && ( t && ( e . undo = t ) , a . push ( e ) , i ( e ) ) } , this . exec = function ( ) { var t , o , r = n . getCommand ( "undo" ) , s = e . Deferred ( ) , l = { } , c = { } ; return a . length ? ( t = a . pop ( ) , t . undo && ( Object . assign ( l , t . undo ) , Object . assign ( c , t ) , delete c . undo , s . done ( function ( ) { r . setUndo ( l , c ) } ) ) , i ( a . length ? a [ a . length - 1 ] : void 0 ) , o = t . callback ( ) , o && o . done ? o . done ( function ( ) { s . resolve ( ) } ) . fail ( function ( ) { s . reject ( ) } ) : s . resolve ( ) , s ) : s . reject ( ) } } , ( i . prototype . commands . up = function ( ) { "use strict" ; this . alwaysEnabled = ! 0 , this . updateOnSelect = ! 1 , this . shortcuts = [ { pattern : "ctrl+up" } ] , this . getstate = function ( ) { return this . fm . cwd ( ) . phash ? 0 : - 1 } , this . exec = function ( ) { var t = this . fm , n = t . cwd ( ) . hash ; return this . fm . cwd ( ) . phash ? this . fm . exec ( "open" , this . fm . cwd ( ) . phash ) . done ( function ( ) { t . one ( "opendone" , function ( ) { t . selectfiles ( { files : [ n ] } ) } ) } ) : e . Deferred ( ) . reject ( ) } } ) . prototype = { forceLoad : ! 0 } , i . prototype . commands . upload = function ( ) { "use strict" ; var t = this . fm . res ( "class" , "hover" ) ; this . disableOnSearch = ! 0 , this . updateOnSelect = ! 1 , this . shortcuts = [ { pattern : "ctrl+u" } ] , this . getstate = function ( e ) { var t , n = this . fm , i = e || [ n . cwd ( ) . hash ] ; return this . _disabled || 1 != i . length || ( t = n . file ( i [ 0 ] ) ) , t && "directory" == t . mime && t . write ? 0 : - 1 } , this . exec = function ( n ) { var i , a , o , r , s , l , c , d = this . fm , p = d . cwd ( ) . hash , u = function ( ) { var e , t = n && n instanceof Array ? n : null ; return ( ! n || n instanceof Array ) && ( t || 1 !== ( e = d . selected ( ) ) . length || "directory" !== d . file ( e [ 0 ] ) . mime ? t && 1 === t . length && "directory" === d . file ( t [ 0 ] ) . mime || ( t = [ p ] ) : t = e ) , t } , h = u ( ) , f = h ? h [ 0 ] : n && n . target ? n . target : null , m = f ? d . file ( f ) : d . cwd ( ) , g = function ( t ) { d . upload ( t ) . fail ( function ( e ) { w . reject ( e ) } ) . done ( function ( t ) { var n ; d . getUI ( "cwd" ) ; if ( w . resolve ( t ) , t && t . added && t . added [ 0 ] && ! d . ui . notify . children ( ".elfinder-notify-upload" ) . length ) { var i = d . findCwdNodes ( t . added ) ; i . length ? i . trigger ( "scrolltoview" ) : ( m . hash !== p ? n = e ( "<div/>" ) . append ( e ( '<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"><span class="ui-button-text">' + d . i18n ( "cmdopendir" ) + "</span></button>" ) . on ( "mouseenter mouseleave" , function ( t ) { e ( this ) . toggleClass ( "ui-state-hover" , "mouseenter" == t . type ) } ) . on ( "click" , function ( ) { d . exec ( "open" , f ) . done ( function ( ) { d . one ( "opendone" , function ( ) { d . trigger ( "selectfiles" , { files : e . map ( t . added , function ( e ) { return e . hash } ) } ) } ) } ) } ) ) : d . trigger ( "selectfiles" , { files : e . map ( t . added , function ( e ) { return e . hash } ) } ) , d . toast ( { msg : d . i18n ( [ "complete" , d . i18n ( "cmdupload" ) ] ) , extNode : n } ) ) } } ) . progress ( function ( ) { w . notifyWith ( this , Array . from ( arguments ) ) } ) } , v = function ( e ) { i . elfinderdialog ( "close" ) , h && ( e . target = h [ 0 ] ) , g ( e ) } , b = function ( ) { var t = m . hash , n = e . map ( d . files ( t ) , function ( e ) { return "directory" === e . mime && e . write ? e : null } ) ; return n . length ? e ( '<div class="elfinder-upload-dirselect elfinder-tabstop" title="' + d . i18n ( "folders" ) + '"/>' ) . on ( "click" , function ( t ) { t . stopPropagation ( ) , t . preventDefault ( ) , n = d . sortFiles ( n ) ; var a = e ( this ) , o = ( d . cwd ( ) , i . closest ( "div.ui-dialog" ) ) , r = function ( e , t ) { return { label : d . escape ( e . i18 || e . name ) , icon : t , remain : ! 1 , callback : function ( ) { var t = o . children ( ".ui-dialog-titlebar:first" ) . find ( "span.elfinder-upload-target" ) ; h = [ e . hash ] , t . html ( " - " + d . escape ( e . i18 || e . name ) ) , a . trigger ( "focus" ) } , options : { className : h && h . length && e . hash === h [ 0 ] ? "ui-state-active" : "" , iconClass : e . csscls || "" , iconImg : e . icon || "" } } } , s = [ r ( m , "opendir" ) , "|" ] ; e . each ( n , function ( e , t ) { s . push ( r ( t