2020-12-03 16:35:44 +01:00
/ * !
* elFinder - file manager for web
* Version 2.1 . 57 ( 2020 - 06 - 05 )
* http : //elfinder.org
*
* Copyright 2009 - 2020 , Studio 42
* Licensed under a 3 - clauses BSD license
* /
! 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></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" ] , j = "" , O = { path : "" , url : "" , tmbUrl : "" , disabled : [ ] , separator : "/" , archives : [ ] , extract : [ ] , copyOverwrite : ! 0 , uploadOverwrite : ! 0 , uploadMaxSize : 0 , jpgQuality : 100 , tmbCrop : ! 1 , tmbReqCustomData : ! 1 , tmb : ! 1 } , S = { } , I = { } , M = { } , E = { } , F = [ ] , D = { } , U = { } , P = [ ] , q = { } , R = [ ] , H = [ ] , _ = new u . command ( u ) , N = "auto" , L = 400 , W = null , B = "sounds/" , $ = "" , V = ! 1 , K = e ( document . createElement ( "audio" ) ) . hide ( ) . appendTo ( "body" ) [ 0 ] , X = 0 , J = "" , G = null , Y = function ( t ) { var n , i , a , o , r , s , l , c , d = { } , p = { } ; u . api >= 2.1 ? ( u . commandMap = t . options . uiCmdMap && Object . keys ( t . options . uiCmdMap ) . length ? t . options . uiCmdMap : { } , J !== JSON . stringify ( u . commandMap ) && ( J = JSON . stringify ( u . commandMap ) ) ) : u . options . sync = 0 , t . init ? ( I = { } , E = { } ) : ( s = j , n = "elfinder-subtree-loaded " + u . res ( "class" , "navexpand" ) , r = u . res ( "class" , "navcollapse" ) , i = Object . keys ( I ) , a = function ( e ) { if ( ! I [ e ] ) return ! 0 ; var t = "directory" === I [ e ] . mime , i = I [ e ] . phash ; ! ( ! t || d [ i ] || ! p [ i ] && u . navHash2Elm ( I [ e ] . hash ) . is ( ":hidden" ) && u . navHash2Elm ( i ) . next ( ".elfinder-navbar-subtree" ) . children ( ) . length > 100 ) || ! t && i === j || q [ e ] ? t && ( p [ i ] = ! 0 ) : ( t && ! d [ i ] && ( d [ i ] = ! 0 , u . navHash2Elm ( i ) . removeClass ( n ) . next ( ".elfinder-navbar-subtree" ) . empty ( ) ) , ee ( I [ e ] ) ) } , o = function ( ) { i . length && ( G && G . _abort ( ) , G = 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 !== j && ( m . data ( "lazycnt" ) ? u . one ( "lazydone" , o ) : o ( ) ) } ) ) , u . sorters = { } , j = t . cwd . hash , Q ( t . files ) , I [ j ] ? ( c = u . diff ( [ t . cwd ] , ! 0 ) , c . changed . length && ( Q ( c . changed , "change" ) , u . change ( { changed : c . changed } ) ) ) : Q ( [ t . cwd ] ) , t . changed && t . changed . length && Q ( t . changed , "change" ) , l = JSON . stringify ( u . sorters ) , $ !== l && ( u . trigger ( "sorterupdate" ) , $ = l ) , u . lastDir ( j ) , u . autoSync ( ) } , Q = function ( t , n ) { var i , a , o , r , s , n = n || "files" , l = [ "sizeInfo" , "encoding" ] , c = { name : ! 0 , perm : ! 0 , date : ! 0 , size : ! 0 , kind : ! 0 } , d = ! u . sorters . _checked && "files" === n , p = t . length , h = function ( t ) { var n = t || { } , i = [ ] ; e . each ( u . sortRules , function ( e ) { ( c [ e ] || "undefined" != typeof n [ e ] || "mode" === e && "undefined" != typeof n . perm ) && i . push ( e ) } ) , u . sorters = u . arrayFlip ( i , ! 0 ) , u . sorters . _checked = ! 0 } , f = { } , m = u . storage ( "hide" ) || { } , g = m . items || { } ; for ( a = 0 ; a < p ; a ++ ) if ( i = Object . assign ( { } , t [ a ] ) , s = ! ( m . show || ! g [ i . hash ] ) , i . name && i . hash && i . mime ) { if ( s || ( d && i . phash === j && ( h ( i ) , d = ! 1 ) , ! i . phash || "add" !== n && ( "change" !== n || I [ i . hash ] && i . size === I [ i . hash ] ) || ( r = u . parents ( i . phash ) ) && e . each ( r , function ( ) { f [ this ] = ! 0 } ) ) , I [ i . hash ] ) { for ( o = 0 ; o < l . length ; o ++ ) I [ i . hash ] [ l [ o ] ] && ! i [ l [ o ] ] && ( i [ l [ o ] ] = I [ i . hash ] [ l [ o ] ] ) ; i . sizeInfo && ! i . size && ( i . size = i . sizeInfo . size ) , ee ( I [ i . hash ] , ! 0 ) } g [ i . hash ] && ( M [ i . hash ] = i ) , s ? ( p -- , t . splice ( a -- , 1 ) ) : ( I [ i . hash ] = i , "directory" !== i . mime || E [ i . hash ] || ( E [ i . hash ] = { } ) , i . phash && ( E [ i . phash ] || ( E [ i . phash ] = { } ) , E [ i . phash ] [ i . hash ] = ! 0 ) ) } e . each ( Object . keys ( f ) , function ( ) { var e = I [ this ] ; e && e . sizeInfo && delete e . sizeInfo } ) , d && h ( ) } , Z = function ( t ) { var n , i = t . length , a = { } , o = function ( t ) { var i = I [ 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 ( { } , I [ n ] ) ) && o . _realStats && ( e . each ( o . _realStats , function ( e , t ) { o [ e ] = t } ) , Z ( I [ n ] . _realStats ) , u . change ( { changed : [ o ] } ) ) , delete u . leafRoots [ n ] ) : u . leafRoots [ n ] . splice ( a , 1 ) ) } ) , u . searchStatus . state < 2 && e . each ( I , funct
data : { cmd : "parents" , target : j } , preventDefault : ! 0 } ) ) , e . each ( c ( ) , function ( e , t ) { l . push ( a . request ( { data : { cmd : t . cmd , target : t . target } , preventDefault : ! 0 } ) ) } ) ) , e . when . apply ( e , l ) . fail ( function ( t , o ) { i = o && 200 != o . status , n && e . inArray ( "errOpen" , t ) === - 1 ? s . reject ( t && 0 != o . status ? t : void 0 ) : ( s . reject ( t ) , a . parseError ( t ) && a . request ( { data : { cmd : "open" , target : a . lastDir ( "" ) || a . root ( ) , tree : 1 , init : 1 } , notify : { type : "open" , cnt : 1 , hideCnt : ! 0 } } ) ) } ) . done ( function ( e ) { var n , i , o ; if ( e . cwd . compare && r === e . cwd . compare ) return s . reject ( ) ; if ( n = { tree : [ ] } , i = arguments . length , i > 1 ) for ( o = 1 ; o < i ; o ++ ) arguments [ o ] . tree && arguments [ o ] . tree . length && n . tree . push . apply ( n . tree , arguments [ o ] . tree ) ; if ( a . api < 2.1 && ( n . tree || ( n . tree = [ ] ) , n . tree . push ( e . cwd ) ) , e = a . normalize ( e ) , ! a . validResponse ( "open" , e ) ) return s . reject ( e . norError || "errResponse" ) ; if ( n = a . normalize ( n ) , ! a . validResponse ( "tree" , n ) ) return s . reject ( n . norError || "errResponse" ) ; var l = a . diff ( e . files . concat ( n && n . tree ? n . tree : [ ] ) , t ) ; return l . added . push ( e . cwd ) , a . updateCache ( l ) , l . removed . length && a . remove ( l ) , l . added . length && a . add ( l ) , l . changed . length && a . change ( l ) , s . resolve ( l ) } ) . always ( function ( ) { a . autoSync ( ) } ) , s } , this . upload = function ( e ) { return this . transport . upload ( e , this ) } , this . shortcut = function ( t ) { var n , i , a , o , r ; if ( this . options . allowShortcuts && t . pattern && e . isFunction ( t . callback ) ) for ( n = t . pattern . toUpperCase ( ) . split ( /\s+/ ) , o = 0 ; o < n . length ; o ++ ) i = n [ o ] , r = i . split ( "+" ) , a = 1 == ( a = r . pop ( ) ) . length ? a > 0 ? a : a . charCodeAt ( 0 ) : a > 0 ? a : e . ui . keyCode [ a ] , a && ! U [ i ] && ( U [ i ] = { keyCode : a , 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 ( ) } ) , q = { } , P = e . map ( t || [ ] , function ( e ) { var t = I [ e ] ; return t ? ( q [ 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 ) ? S . 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></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"></div>' ) . 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"
i = m . width ( ) , c && ( e = ! 1 , c . is ( ":hidden" ) ? ( l || ( l = Math . max ( 50 , i / 10 ) ) , ( A ? z - n . left : i + n . left - z ) < l && ( e = z ) ) : s . originalEvent . _preventSwipeX || ( o = c . width ( ) , y = A ? z < n . left + o : z > n . left + i - o , y ? ( l = Math . max ( 50 , i / 10 ) , e = z ) : e = ! 1 ) ) , d && ( t = ! 1 , s . originalEvent . _preventSwipeY || ( r = d . height ( ) , a = n . top , T - a < ( d . is ( ":hidden" ) ? v : r + 30 ) && ( t = T , m . on ( p , d . is ( ":hidden" ) ? f : h ) ) ) ) ) : ( c && e !== ! 1 && ( b = ( A ? e > z : e < z ) ? "navhide" : "navshow" , w = Math . abs ( e - z ) , ( "navhide" === b && w > . 6 * o || w > ( "navhide" === b ? o / 3 : 45 ) && ( "navshow" === b || ( A ? z < n . left + 20 : z > n . left + i - 20 ) ) ) && ( u . getUI ( "navbar" ) . trigger ( b , { handleW : l } ) , e = ! 1 ) ) , d && t !== ! 1 && ( x = d . offset ( ) . top , Math . abs ( t - T ) > Math . min ( 45 , r / 3 ) && ( k = t > T ? "slideUp" : "slideDown" , ( "slideDown" === k || x + 20 > T ) && ( d . is ( "slideDown" === k ? ":hidden" : ":visible" ) && d . stop ( ! 0 , ! 0 ) . trigger ( "toggle" , { duration : 100 , handleH : v } ) , t = ! 1 ) ) ) ) ) } ) } ( ) , u . dragUpload && ! function ( ) { var t , n , i = function ( t ) { return "TEXTAREA" !== t . target . nodeName && "INPUT" !== t . target . nodeName && 0 === e ( t . target ) . closest ( "div.ui-dialog-content" ) . length } , a = "native-drag-enter" , o = "native-drag-disable" , r = "class" , s = u . res ( r , "navdir" ) , l = ( u . res ( r , "droppable" ) , u . res ( r , "adroppable" ) , u . res ( r , "navarrow" ) , u . res ( r , "adroppable" ) ) , c = u . getUI ( "workzone" ) , d = "ltr" === u . direction , p = function ( ) { n && cancelAnimationFrame ( n ) , n = null } ; m . on ( "dragenter" , function ( e ) { p ( ) , i ( e ) && ( e . preventDefault ( ) , e . stopPropagation ( ) , t = c . data ( "rectangle" ) ) } ) . on ( "dragleave" , function ( e ) { p ( ) , i ( e ) && ( e . preventDefault ( ) , e . stopPropagation ( ) ) } ) . on ( "dragover" , function ( e ) { var a ; i ( e ) ? ( e . preventDefault ( ) , e . stopPropagation ( ) , e . originalEvent . dataTransfer . dropEffect = "none" , n || ( n = requestAnimationFrame ( function ( ) { var i , o = t . top + t . height , r = o - u . getUI ( "navdock" ) . outerHeight ( ! 0 ) ; ( ( a = e . pageY < t . top ) || e . pageY > r ) && ( i = t . cwdEdge > e . pageX ? ( d ? "navbar" : "cwd" ) + ( a ? "Up" : "Down" ) : ( d ? "cwd" : "navbar" ) + ( a ? "Up" : "Down" ) , a || "cwd" === i . substr ( 0 , 3 ) && ( o < e . pageY ? r = o : i = "" ) , i && u . autoScroll [ i ] ( Math . pow ( a ? t . top - e . pageY : e . pageY - r , 1.3 ) ) ) , n = null } ) ) ) : p ( ) } ) . on ( "drop" , function ( e ) { p ( ) , i ( e ) && ( e . stopPropagation ( ) , e . preventDefault ( ) ) } ) , m . on ( "dragenter" , ".native-droppable" , function ( t ) { if ( t . originalEvent . dataTransfer ) { var n , i = e ( t . currentTarget ) , r = t . currentTarget . id || null , s = null ; if ( ! r ) { s = u . cwd ( ) , i . data ( o , ! 1 ) ; try { e . each ( t . originalEvent . dataTransfer . types , function ( e , t ) { "elfinderfrom:" === t . substr ( 0 , 13 ) && ( n = t . substr ( 13 ) . toLowerCase ( ) ) } ) } catch ( t ) { } } s && ( ! s . write || n && n === ( window . location . href + s . hash ) . toLowerCase ( ) ) ? i . data ( o , ! 0 ) : ( t . preventDefault ( ) , t . stopPropagation ( ) , i . data ( a , ! 0 ) , i . addClass ( l ) ) } } ) . on ( "dragleave" , ".native-droppable" , function ( t ) { if ( t . originalEvent . dataTransfer ) { var n = e ( t . currentTarget ) ; t . preventDefault ( ) , t . stopPropagation ( ) , 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 ( "" ) , D = { } , 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" ) , re && u . options . enableAlways && e ( window ) . trigger ( "focus" ) , e . each ( u . trashes , function ( e ) { var t = u . file ( e ) ; t ? "directory" === t . mime && t . writ
return i < 1 ? d . reject ( ) : ( u . append ( '<input type="hidden" name="' + ( s . newAPI ? "target" : "current" ) + '" value="' + g + '"/>' ) . append ( '<input type="hidden" name="html" value="1"/>' ) . append ( '<input type="hidden" name="node" value="' + s . id + '"/>' ) . append ( e ( l ) . attr ( "name" , "upload[]" ) ) , y . length > 0 && ( e . each ( y , function ( e , t ) { u . append ( '<input type="hidden" name="renames[]" value="' + s . escape ( t ) + '"/>' ) } ) , u . append ( '<input type="hidden" name="suffix" value="' + n . options . backupSuffix + '"/>' ) ) , w && e . each ( y , function ( e , t ) { u . append ( '<input type="hidden" name="[' + e + ']" value="' + s . escape ( t ) + '"/>' ) } ) , 0 === t . overwrite && u . append ( '<input type="hidden" name="overwrite" value="0"/>' ) , e . each ( s . options . onlyMimes || [ ] , function ( e , t ) { u . append ( '<input type="hidden" name="mimes[]" value="' + s . escape ( t ) + '"/>' ) } ) , e . each ( s . customData , function ( e , t ) { u . append ( '<input type="hidden" name="' + e + '" value="' + s . escape ( t ) + '"/>' ) } ) , u . appendTo ( "body" ) , void m . appendTo ( "body" ) ) } ) , d } } , one : function ( e , t , n ) { var i = this , a = e . toLowerCase ( ) , o = function ( e , n ) { return i . toUnbindEvents [ a ] || ( i . toUnbindEvents [ a ] = [ ] ) , i . toUnbindEvents [ a ] . push ( { type : a , callback : o } ) , ( t . done ? t . done : t ) . apply ( this , arguments ) } ; return t . done && ( o = { done : o } ) , this . bind ( a , o , n ) } , localStorage : function ( t , n ) { var i , a , o , r , s , l = this , c = window . localStorage , d = "elfinder-" + ( t || "" ) + this . id , p = window . location . pathname + "-elfinder-" , u = this . id , h = [ ] ; if ( "undefined" == typeof t ) return r = p . length , s = u . length * - 1 , e . each ( c , function ( e ) { e . substr ( 0 , r ) === p && e . substr ( s ) === u && h . push ( e ) } ) , e . each ( h , function ( e , t ) { c . removeItem ( t ) } ) , ! 0 ; if ( t = p + t + u , null === n ) return c . removeItem ( t ) ; if ( void 0 === n && ! ( i = c . getItem ( t ) ) && ( a = c . getItem ( d ) ) && ( n = a , c . removeItem ( d ) ) , void 0 !== n ) { o = typeof n , "string" !== o && "number" !== o && ( n = JSON . stringify ( n ) ) ; try { c . setItem ( t , n ) } catch ( f ) { try { c . clear ( ) , c . setItem ( t , n ) } catch ( f ) { l . debug ( "error" , f . toString ( ) ) } } i = c . getItem ( t ) } if ( i && ( "{" === i . substr ( 0 , 1 ) || "[" === i . substr ( 0 , 1 ) ) ) try { return JSON . parse ( i ) } catch ( f ) { } return i } , sessionStorage : function ( e , t ) { var n , i , a , o = this ; try { n = window . sessionStorage } catch ( r ) { } if ( n ) { if ( null === t ) return n . removeItem ( e ) ; if ( void 0 !== t ) { a = typeof t , "string" !== a && "number" !== a && ( t = JSON . stringify ( t ) ) ; try { n . setItem ( e , t ) } catch ( r ) { try { n . clear ( ) , n . setItem ( e , t ) } catch ( r ) { o . debug ( "error" , r . toString ( ) ) } } } if ( i = n . getItem ( e ) , i && ( "{" === i . substr ( 0 , 1 ) || "[" === i . substr ( 0 , 1 ) ) ) try { return JSON . parse ( i ) } catch ( r ) { } return i } } , cookie : function ( t , n ) { var i , a , o , r , s , l ; if ( t = "elfinder-" + t + this . id , void 0 === n ) { if ( this . cookieEnabled && document . cookie && "" != document . cookie ) for ( o = document . cookie . split ( ";" ) , t += "=" , r = 0 ; r < o . length ; r ++ ) if ( o [ r ] = e . trim ( o [ r ] ) , o [ r ] . substring ( 0 , t . length ) == t ) { if ( s = decodeURIComponent ( o [ r ] . substring ( t . length ) ) , "{" === s . substr ( 0 , 1 ) || "[" === s . substr ( 0 , 1 ) ) try { return JSON . parse ( s ) } catch ( c ) { } return s } return null } if ( ! this . cookieEnabled ) return "" ; if ( a = Object . assign ( { } , this . options . cookie ) , null === n ? ( n = "" , a . expires = - 1 ) : ( l = typeof n , "string" !== l && "number" !== l && ( n = JSON . stringify ( n ) ) ) , "number" == typeof a . expires && ( i = new Date , i . setTime ( i . getTime ( ) + 864e5 * a . expires ) , a . expires = i ) , document . cookie = t + "=" + encodeURIComponent ( n ) + "; expires=" + a . expires . toUTCString ( ) + ( a . path ? "; path=" + a . path : "" ) + ( a . domain ? "; domain=" + a . domain : "" ) + ( a . secure ? "; secure" : "" ) , n && ( "{" === n . substr ( 0 , 1 ) || "[" === n . substr ( 0 , 1 ) ) ) try { return JSON . parse ( n ) } catch ( c ) { } return n } , startDir : function ( ) { var e = window . location . hash ; return e && e . match ( /^#elf_/ ) ? e . replace ( /^#elf_/ , "" ) : this . options . startPathHash ? this . options . startPathHash : this . lastDir ( ) } , lastDir : function ( e ) { return this . options . rememberLastDir ? this . storage ( "lastdir" , e ) : "" } , _node : e ( "<span></c.length;>" ) , escape : function ( e ) { return this . _node . text ( e ) . html ( ) . replace ( /"/g , """ ) . replace ( /'/g , "'" ) } , normalize : function ( t ) { 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 =
2021-09-12 07:10:20 +02:00
c . push . apply ( c , d ) , e . when . apply ( e , c ) . fail ( function ( ) { o . reject ( ) } ) . done ( function ( ) { var t , i , r , s = function ( t , i ) { var a ; ( a = n . file ( t ) ) && ( a . sizeInfo = { isCache : ! 0 } , e . each ( [ "size" , "dirCnt" , "fileCnt" ] , function ( ) { a . sizeInfo [ this ] = i [ this ] || 0 } ) , a . size = parseInt ( a . sizeInfo . size ) , m . push ( a ) ) } , l = 0 , c = 0 , d = 0 , u = arguments . length , h = [ ] , f = "" , m = [ ] ; for ( t = 0 ; t < u ; t ++ ) r = arguments [ t ] , i = null , r . isCache || ( p [ t ] && ( i = n . file ( p [ t ] ) ) ? s ( p [ t ] , r ) : r . sizes && e . isPlainObject ( r . sizes ) && e . each ( r . sizes , function ( e , t ) { s ( e , t ) } ) ) , l += parseInt ( r . size ) , c !== ! 1 && ( "undefined" == typeof r . fileCnt ? c = ! 1 : c += parseInt ( r . fileCnt || 0 ) ) , d !== ! 1 && ( "undefined" == typeof r . dirCnt ? d = ! 1 : d += parseInt ( r . dirCnt || 0 ) ) ; m . length && n . change ( { changed : m } ) , d !== ! 1 && h . push ( n . i18n ( "folders" ) + ": " + ( d - ( a > 1 ? 0 : 1 ) ) ) , c !== ! 1 && h . push ( n . i18n ( "files" ) + ": " + c ) , h . length && ( f = "<br>" + h . join ( ", " ) ) , o . resolve ( { size : l , fileCnt : c , dirCnt : d , formated : ( l >= 0 ? n . formatSize ( l ) : n . i18n ( "unknown" ) ) + f } ) } ) , n . autoSync ( ) } ) , o } , wkObjUrl : null , getWorker : function ( e ) { function t ( ) { self . onmessage = function ( e ) { var t = e . data ; try { if ( self . data = t . data , t . scripts ) for ( var n = 0 ; n < t . scripts . length ; n ++ ) importScripts ( t . scripts [ n ] ) ; self . postMessage ( self . res ) } catch ( e ) { self . postMessage ( { error : e . toString ( ) } ) } } } var n ; try { this . wkObjUrl || ( this . wkObjUrl = ( window . URL || window . webkitURL ) . createObjectURL ( new Blob ( [ t . toString ( ) . replace ( /\s+/g , " " ) . replace ( / *([^\w]) */g , "$1" ) . replace ( /^function\b.+?\{|\}$/g , "" ) ] , { type : "text/javascript" } ) ) ) , n = new Worker ( this . wkObjUrl , e ) } catch ( i ) { this . debug ( "error" , i . toString ( ) ) } return n } , getWorkerUrl : function ( e ) { return this . convAbsUrl ( this . baseUrl + "data/javascript/elFinder-current/worker/" + e ) } , getTheme : function ( t ) { var n , i , a = this , o = e . Deferred ( ) , r = function ( t , n ) { return n || ( n = a . convAbsUrl ( a . baseUrl ) ) , Array . isArray ( t ) ? e . map ( t , function ( e ) { return r ( e , n ) } ) : t . match ( /^(?:http|\/\/)/i ) ? t : n + t . replace ( /^(?:\.\/|\/)/ , "" ) } ; return t && ( n = a . options . themes [ t ] ) ? "string" == typeof n ? ( url = r ( n ) , ( i = url . match ( /^(.+\/)[^\/]+\.json$/i ) ) ? e . getJSON ( url ) . done ( function ( e ) { n = e , n . id = t , n . cssurls && ( n . cssurls = r ( n . cssurls , i [ 1 ] ) ) , o . resolve ( n ) } ) . fail ( function ( ) { o . reject ( ) } ) : o . resolve ( { id : t , name : t , cssurls : [ url ] } ) ) : e . isPlainObject ( n ) && n . cssurls ? ( n . id = t , n . cssurls = r ( n . cssurls ) , Array . isArray ( n . cssurls ) || ( n . cssurls = [ n . cssurls ] ) , n . name || ( n . name = t ) , o . resolve ( n ) ) : o . reject ( ) : o . reject ( ) , o } , changeTheme : function ( t ) { var n = this ; return t && ( ! n . options . themes [ t ] || n . theme && n . theme . id === t ? "default" === t && n . theme && "default" !== n . theme . id && ( e ( "head>link.elfinder-theme-ext" ) . remove ( ) , n . theme = null , n . trigger && n . trigger ( "themechange" ) ) : n . getTheme ( t ) . done ( function ( t ) { t . cssurls && ( e ( "head>link.elfinder-theme-ext" ) . remove ( ) , n . loadCss ( t . cssurls , { className : "elfinder-theme-ext" , dfd : e . Deferred ( ) . done ( function ( ) { n . theme = t , n . trigger && n . trigger ( "themechange" ) } ) } ) ) } ) ) , this } , applyLeafRootStats : function ( t , n ) { var i = this , a = n ? t : i . file ( t . hash ) || t , o = a . ts , r = ! 1 ; return ! n && t . _realStats || ( t . _realStats = { locked : t . locked || 0 , dirs : t . dirs || 0 , ts : t . ts } ) , t . locked = 1 , a . locked || ( r = ! 0 ) , t . dirs = 1 , a . dirs || ( r = ! 0 ) , e . each ( i . leafRoots [ t . hash ] , function ( ) { var e = i . file ( this ) ; e && e . ts && ( t . ts || 0 ) < e . ts && ( t . ts = e . ts ) } ) , o !== t . ts && ( r = ! 0 ) , r } , abortXHR : function ( e , t ) { var n = t || { } ; e && ( n . quiet && ( e . quiet = ! 0 ) , n . abort && e . _requestId && this . request ( { data : { cmd : "abort" , id : e . _requestId } , preventDefault : ! 0 } ) , e . abort ( ) , e = void 0 ) } , setCustomHeaderByXhr : function ( t ) { var n = this ; t . getResponseHeader && n . parrotHeaders && n . parrotHeaders . length && e . each ( n . parrotHeaders , function ( e , i ) { var a = t . getResponseHeader ( i ) ; a ? ( n . customHeaders [ i ] = a , n . sessionStorage ( "core-ph:" + i , a ) ) : "string" == typeof a && ( delete n . customHeaders [ i ] , n . sessionStorage ( "core-ph:" + i , null ) ) } ) } , hasParrotHeaders : function ( ) { var e = ! 1 , t = this . parrotHeaders ; if ( Object . keys ( this . customHeaders ) . length ) for ( var n = 0 ; n < t . length ; n ++ ) if ( this . customHeaders [ t [ n ] ] ) { e = ! 0 ; break } return e } , getRequestId : function ( ) { return ( + new Date ) . toString ( 16 ) + Math . floor ( 1e3 * Math . random ( ) ) . toString ( 16 ) } , arrayFlip : function ( t , n ) { var i , a = { } , o = e . isArray ( t ) ; for ( i in t ) ( o || t . hasOwnProperty ( i ) ) && ( a [ t [ i ] ] = n || i ) ; return a } , splitFileExtention : function ( e ) { var t ; return ( t = e . match ( /^(.+?)?\.((?:tar\.(?:gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(?:gz|bz2)|[a-z0-9]{1,10})$/i ) ) ? ( "undefined" == typeof t [ 1 ] && ( t [ 1 ]
2020-12-03 16:35:44 +01:00
"application/x-font-snf" : "snf" , "application/x-font-type1" : "pfa" , "application/x-freearc" : "arc" , "application/x-futuresplash" : "spl" , "application/x-gca-compressed" : "gca" , "application/x-glulx" : "ulx" , "application/x-gnumeric" : "gnumeric" , "application/x-gramps-xml" : "gramps" , "application/x-gtar" : "gtar" , "application/x-hdf" : "hdf" , "application/x-install-instructions" : "install" , "application/x-iso9660-image" : "iso" , "application/x-java-jnlp-file" : "jnlp" , "application/x-latex" : "latex" , "application/x-lzh-compressed" : "lzh" , "application/x-mie" : "mie" , "application/x-mobipocket-ebook" : "prc" , "application/x-ms-application" : "application" , "application/x-ms-shortcut" : "lnk" , "application/x-ms-wmd" : "wmd" , "application/x-ms-wmz" : "wmz" , "application/x-ms-xbap" : "xbap" , "application/x-msaccess" : "mdb" , "application/x-msbinder" : "obd" , "application/x-mscardfile" : "crd" , "application/x-msclip" : "clp" , "application/x-msdownload" : "dll" , "application/x-msmediaview" : "mvb" , "application/x-msmetafile" : "wmf" , "application/x-msmoney" : "mny" , "application/x-mspublisher" : "pub" , "application/x-msschedule" : "scd" , "application/x-msterminal" : "trm" , "application/x-mswrite" : "wri" , "application/x-netcdf" : "nc" , "application/x-nzb" : "nzb" , "application/x-pkcs12" : "p12" , "application/x-pkcs7-certificates" : "p7b" , "application/x-pkcs7-certreqresp" : "p7r" , "application/x-research-info-systems" : "ris" , "application/x-shar" : "shar" , "application/x-shockwave-flash" : "swf" , "application/x-silverlight-app" : "xap" , "application/x-sql" : "sql" , "application/x-stuffit" : "sit" , "application/x-stuffitx" : "sitx" , "application/x-subrip" : "srt" , "application/x-sv4cpio" : "sv4cpio" , "application/x-sv4crc" : "sv4crc" , "application/x-t3vm-image" : "t3" , "application/x-tads" : "gam" , "application/x-tar" : "tar" , "application/x-tcl" : "tcl" , "application/x-tex" : "tex" , "application/x-tex-tfm" : "tfm" , "application/x-texinfo" : "texinfo" , "application/x-tgif" : "obj" , "application/x-ustar" : "ustar" , "application/x-wais-source" : "src" , "application/x-x509-ca-cert" : "der" , "application/x-xfig" : "fig" , "application/x-xliff+xml" : "xlf" , "application/x-xpinstall" : "xpi" , "application/x-xz" : "xz" , "application/x-zmachine" : "z1" , "application/xaml+xml" : "xaml" , "application/xcap-diff+xml" : "xdf" , "application/xenc+xml" : "xenc" , "application/xhtml+xml" : "xhtml" , "application/xml" : "xsl" , "application/xml-dtd" : "dtd" , "application/xop+xml" : "xop" , "application/xproc+xml" : "xpl" , "application/xslt+xml" : "xslt" , "application/xspf+xml" : "xspf" , "application/xv+xml" : "mxml" , "application/yang" : "yang" , "application/yin+xml" : "yin" , "application/zip" : "zip" , "audio/adpcm" : "adp" , "audio/basic" : "au" , "audio/midi" : "mid" , "audio/mp4" : "m4a" , "audio/mpeg" : "mpga" , "audio/ogg" : "oga" , "audio/s3m" : "s3m" , "audio/silk" : "sil" , "audio/vnd.dece.audio" : "uva" , "audio/vnd.digital-winds" : "eol" , "audio/vnd.dra" : "dra" , "audio/vnd.dts" : "dts" , "audio/vnd.dts.hd" : "dtshd" , "audio/vnd.lucent.voice" : "lvp" , "audio/vnd.ms-playready.media.pya" : "pya" , "audio/vnd.nuera.ecelp4800" : "ecelp4800" , "audio/vnd.nuera.ecelp7470" : "ecelp7470" , "audio/vnd.nuera.ecelp9600" : "ecelp9600" , "audio/vnd.rip" : "rip" , "audio/webm" : "weba" , "audio/x-aac" : "aac" , "audio/x-aiff" : "aif" , "audio/x-caf" : "caf" , "audio/x-flac" : "flac" , "audio/x-matroska" : "mka" , "audio/x-mpegurl" : "m3u" , "audio/x-ms-wax" : "wax" , "audio/x-ms-wma" : "wma" , "audio/x-pn-realaudio" : "ram" , "audio/x-pn-realaudio-plugin" : "rmp" , "audio/xm" : "xm" , "chemical/x-cdx" : "cdx" , "chemical/x-cif" : "cif" , "chemical/x-cmdf" : "cmdf" , "chemical/x-cml" : "cml" , "chemical/x-csml" : "csml" , "chemical/x-xyz" : "xyz" , "font/collection" : "ttc" , "font/otf" : "otf" , "font/ttf" : "ttf" , "font/woff" : "woff" , "font/woff2" : "woff2" , "image/cgm" : "cgm" , "image/g3fax" : "g3" , "image/gif" : "gif" , "image/ief" : "ief" , "image/jpeg" : "jpeg" , "image/ktx" : "ktx" , "image/png" : "png" , "image/prs.btif" : "btif" , "image/sgi" : "sgi" , "image/svg+xml" : "svg" , "image/tiff" : "tiff" , "image/vnd.adobe.photoshop" : "psd" , "image/vnd.dece.graphic" : "uvi" , "image/vnd.djvu" : "djvu" , "image/vnd.dvb.subtitle" : "sub" , "image/vnd.dwg" : "dwg" , "image/vnd.dxf" : "dxf" , "image/vnd.fastbidsheet" : "fbs" , "image/vnd.fpx" : "fpx" , "image/vnd.fst" : "fst" , "image/vnd.fujixerox.edmics-mmr" : "mmr" , "image/vnd.fujixerox.edmics-rlc" : "rlc" , "image/vnd.ms-modi" : "mdi" , "image/vnd.ms-photo" : "wdp" , " i
errNotReplace : 'Object "$1" already exists at this location and can not be replaced by object with another type.' , errReplace : 'Unable to replace "$1".' , errSave : 'Unable to save "$1".' , errCopy : 'Unable to copy "$1".' , errMove : 'Unable to move "$1".' , errCopyInItself : 'Unable to copy "$1" into itself.' , errRm : 'Unable to remove "$1".' , errTrash : "Unable into trash." , errRmSrc : "Unable remove source file(s)." , errExtract : 'Unable to extract files from "$1".' , errArchive : "Unable to create archive." , errArcType : "Unsupported archive type." , errNoArchive : "File is not archive or has unsupported archive type." , errCmdNoSupport : "Backend does not support this command." , errReplByChild : 'The folder "$1" can\'t be replaced by an item it contains.' , errArcSymlinks : "For security reason denied to unpack archives contains symlinks or files with not allowed names." , errArcMaxSize : "Archive files exceeds maximum allowed size." , errResize : 'Unable to resize "$1".' , errResizeDegree : "Invalid rotate degree." , errResizeRotate : "Unable to rotate image." , errResizeSize : "Invalid image size." , errResizeNoChange : "Image size not changed." , errUsupportType : "Unsupported file type." , errNotUTF8Content : 'File "$1" is not in UTF-8 and cannot be edited.' , errNetMount : 'Unable to mount "$1".' , errNetMountNoDriver : "Unsupported protocol." , errNetMountFailed : "Mount failed." , errNetMountHostReq : "Host required." , errSessionExpires : "Your session has expired due to inactivity." , errCreatingTempDir : 'Unable to create temporary directory: "$1"' , errFtpDownloadFile : 'Unable to download file from FTP: "$1"' , errFtpUploadFile : 'Unable to upload file to FTP: "$1"' , errFtpMkdir : 'Unable to create remote directory on FTP: "$1"' , errArchiveExec : 'Error while archiving files: "$1"' , errExtractExec : 'Error while extracting files: "$1"' , errNetUnMount : "Unable to unmount." , errConvUTF8 : "Not convertible to UTF-8" , errFolderUpload : "Try the modern browser, If you'd like to upload the folder." , errSearchTimeout : 'Timed out while searching "$1". Search result is partial.' , errReauthRequire : "Re-authorization is required." , errMaxTargets : "Max number of selectable items is $1." , errRestore : "Unable to restore from the trash. Can't identify the restore destination." , errEditorNotFound : "Editor not found to this file type." , errServerError : "Error occurred on the server side." , errEmpty : 'Unable to empty folder "$1".' , moreErrors : "There are $1 more errors." , cmdarchive : "Create archive" , cmdback : "Back" , cmdcopy : "Copy" , cmdcut : "Cut" , cmddownload : "Download" , cmdduplicate : "Duplicate" , cmdedit : "Edit file" , cmdextract : "Extract files from archive" , cmdforward : "Forward" , cmdgetfile : "Select files" , cmdhelp : "About this software" , cmdhome : "Root" , cmdinfo : "Get info" , cmdmkdir : "New folder" , cmdmkdirin : "Into New Folder" , cmdmkfile : "New file" , cmdopen : "Open" , cmdpaste : "Paste" , cmdquicklook : "Preview" , cmdreload : "Reload" , cmdrename : "Rename" , cmdrm : "Delete" , cmdtrash : "Into trash" , cmdrestore : "Restore" , cmdsearch : "Find files" , cmdup : "Go to parent folder" , cmdupload : "Upload files" , cmdview : "View" , cmdresize : "Resize & Rotate" , cmdsort : "Sort" , cmdnetmount : "Mount network volume" , cmdnetunmount : "Unmount" , cmdplaces : "To Places" , cmdchmod : "Change mode" , cmdopendir : "Open a folder" , cmdcolwidth : "Reset column width" , cmdfullscreen : "Full Screen" , cmdmove : "Move" , cmdempty : "Empty the folder" , cmdundo : "Undo" , cmdredo : "Redo" , cmdpreference : "Preferences" , cmdselectall : "Select all" , cmdselectnone : "Select none" , cmdselectinvert : "Invert selection" , cmdopennew : "Open in new window" , cmdhide : "Hide (Preference)" , btnClose : "Close" , btnSave : "Save" , btnRm : "Remove" , btnApply : "Apply" , btnCancel : "Cancel" , btnNo : "No" , btnYes : "Yes" , btnMount : "Mount" , btnApprove : "Goto $1 & approve" , btnUnmount : "Unmount" , btnConv : "Convert" , btnCwd : "Here" , btnVolume : "Volume" , btnAll : "All" , btnMime : "MIME Type" , btnFileName : "Filename" , btnSaveClose : "Save & Close" , btnBackup : "Backup" , btnRename : "Rename" , btnRenameAll : "Rename(All)" , btnPrevious : "Prev ($1/$2)" , btnNext : "Next ($1/$2)" , btnSaveAs : "Save As" , ntfopen : "Open folder" , ntffile : "Open file" , ntfreload : "Reload folder content" , ntfmkdir : "Creating folder" , ntfmkfile : "Creating files" , ntfrm : "Delete items" , ntfcopy : "Copy items" , ntfmove : "Move items" , n
return e . mime && "directory" !== e . mime && ! V [ e . mime ] && K ( e . mime , e . name ) , N [ p ? "row" : "icon" ] . replace ( /\{([a-z0-9_]+)\}/g , function ( n , i ) { return $ [ i ] ? $ [ i ] ( e , t ) : e [ i ] ? e [ i ] : "" } ) } , J = e ( ) , G = ! 1 , Y = function ( t , n ) { function i ( e , t ) { return e [ t + "All" ] ( "[id]:not(." + w + "):not(.elfinder-cwd-parent):first" ) } var a , o , r , s , l , c = e . ui . keyCode , d = t == c . LEFT || t == c . UP , f = Ue . find ( "[id]." + y ) ; if ( f . length ) if ( a = f . filter ( d ? ":first" : ":last" ) , r = i ( a , d ? "prev" : "next" ) , r . length ) if ( p || t == c . LEFT || t == c . RIGHT ) o = r ; else if ( s = a . position ( ) . top , l = a . position ( ) . left , o = a , d ) { do o = o . prev ( "[id]" ) ; while ( o . length && ! ( o . position ( ) . top < s && o . position ( ) . left <= l ) ) ; o . hasClass ( w ) && ( o = i ( o , "next" ) ) } else { do o = o . next ( "[id]" ) ; while ( o . length && ! ( o . position ( ) . top > s && o . position ( ) . left >= l ) ) ; o . hasClass ( w ) && ( o = i ( o , "prev" ) ) , o . length || ( r = Ue . find ( "[id]:not(." + w + "):last" ) , r . position ( ) . top > s && ( o = r ) ) } else o = a ; else o = J . length ? d ? J . prev ( ) : J : Ue . find ( "[id]:not(." + w + "):not(.elfinder-cwd-parent):" + ( d ? "last" : "first" ) ) ; o && o . length && ! o . hasClass ( "elfinder-cwd-parent" ) && ( a && n ? o = a . add ( a [ d ? "prevUntil" : "nextUntil" ] ( "#" + o . attr ( "id" ) ) ) . add ( o ) : f . trigger ( h ) , o . trigger ( u ) , re ( o . filter ( d ? ":first" : ":last" ) ) , oe ( ) ) } , Q = { } , Z = function ( e ) { t . cwdHash2Elm ( e ) . trigger ( u ) } , ee = ! 1 , te = function ( ) { t . cwd ( ) . hash ; R && Re . find ( "input" ) . prop ( "checked" , ! 0 ) , t . lazy ( function ( ) { var n ; t . maxTargets && ( F || E ) . length > t . maxTargets ? ( ne ( { notrigger : ! 0 } ) , n = e . map ( F || E , function ( e ) { return t . file ( e ) || null } ) , n = n . slice ( 0 , t . maxTargets ) , Q = { } , e . each ( n , function ( e , n ) { Q [ n . hash ] = ! 0 , t . cwdHash2Elm ( n . hash ) . trigger ( u ) } ) , t . toast ( { mode : "warning" , msg : t . i18n ( [ "errMaxTargets" , t . maxTargets ] ) } ) ) : ( Ue . find ( "[id]:not(." + y + "):not(.elfinder-cwd-parent)" ) . trigger ( u ) , Q = t . arrayFlip ( F || E , ! 0 ) ) , oe ( ) , R && Re . data ( "pending" , ! 1 ) } , 0 , { repaint : ! 0 } ) } , ne = function ( e ) { var t = e || { } ; R && Re . find ( "input" ) . prop ( "checked" , ! 1 ) , Object . keys ( Q ) . length && ( G = ! 1 , Q = { } , Ue . find ( "[id]." + y ) . trigger ( h ) , R && Ue . find ( "input:checkbox." + j ) . prop ( "checked" , ! 1 ) ) , ! t . notrigger && oe ( ) , R && Re . data ( "pending" , ! 1 ) , Ue . removeClass ( "elfinder-cwd-allselected" ) } , ie = function ( ) { var n = { } ; ee ? ne ( ) : Object . keys ( Q ) . length ? ( e . each ( F || E , function ( e , i ) { var a = t . cwdHash2Elm ( i ) ; Q [ i ] ? a . length && a . trigger ( h ) : ( n [ i ] = ! 0 , a . length && a . trigger ( u ) ) } ) , Q = n , oe ( ) ) : te ( ) } , ae = void 0 , oe = function ( ) { var e = Object . keys ( Q ) , n = { selected : e , origin : "cwd" } ; ge && ( e . length > 1 || e [ 0 ] !== t . cwdId2Hash ( ge . attr ( "id" ) ) ) && ge . hasClass ( y ) && ge . trigger ( h ) , ee = e . length && e . length === ( F || E ) . length && ( ! t . maxTargets || e . length <= t . maxTargets ) , R && ( Re . find ( "input" ) . prop ( "checked" , ee ) , Ue [ ee ? "addClass" : "removeClass" ] ( "elfinder-cwd-allselected" ) ) , ee ? n . selectall = ! 0 : e . length || ( n . unselectall = ! 0 ) , t . trigger ( "select" , n ) } , re = function ( e , n ) { if ( e . length ) { var i = e . position ( ) . top , a = e . outerHeight ( ! 0 ) , o = Pe . scrollTop ( ) , r = Pe . get ( 0 ) . clientHeight , s = we ? we . outerHeight ( ! 0 ) : 0 ; i + s + a > o + r ? Pe . scrollTop ( parseInt ( i + s + a - r ) ) : i < o && Pe . scrollTop ( i ) , p && Pe . scrollLeft ( 0 ) , ! ! n && t . resources . blink ( e , "lookme" ) } } , se = [ ] , le = { } , ce = function ( e ) { for ( var t = se . length ; t -- ; ) if ( se [ t ] . hash == e ) return t ; return - 1 } , de = "elfscrstart" , pe = "elfscrstop" , ue = ! 1 , he = { disabled : ! 0 , filter : "[id]:first" , stop : oe , delay : 250 , appendTo : "body" , autoRefresh : ! 1 , selected : function ( t , n ) { e ( n . selected ) . trigger ( u ) } , unselected : function ( t , n ) { e ( n . unselected ) . trigger ( h ) } } , fe = { } , me = function ( a , o ) { if ( le . renderd ) { var r = ( p ? Ue . find ( "tbody:first" ) : Ue ) . children ( "[id]" + ( n . oldSchool ? ":not(.elfinder-cwd-parent)" : "" ) + ":first" ) ; if ( r . length ) { var s , l , c = Ue . data ( "selectable" ) , d = function ( ) { var n = Pe . offset ( ) , a = Pe . width ( ) , o = e ( window ) , s = r . width ( ) / 2 , l = Math . min ( n . left - o . scrollLeft ( ) + ( "ltr" === t . direction ? s : a - s ) , n . left + a - 10 ) , c = n . top - o . scrollTop ( ) + 10 + ( p ? i : 0 ) ; return { left : Math . max ( 0 , Math . round ( l ) ) , top : Math . max ( 0 , Math . round ( c ) ) } } ( ) , u = a ? r : e ( document . elementFromPoint ( d . left , d . top ) ) , h = { } , f = { } , m = 5 , g = Math . ceil ( ( le . hpi ? Math . ceil ( Le . data ( "rectangle" ) . height / le . hpi * 1.5 ) : be ) / m ) , y = function ( ) { var e , n , i ; for ( i = 0 ; i < m && ( e = u . attr ( "id" ) , e && ( le . getTmbs = [ ] , n = t . cwdId2Hash ( e ) , fe [ n ] = e , le . attachTmbs [ n ] && ( f [ n ] = le . attachTmbs [ n ] ) , c && ( h [ e ] = ! 0 ) ) , u = u . next ( ) , u . length ) ; i ++ ) ; } , w = function ( ) { var e ; Ue . data ( "selectable" ) && ( Object . assign ( h , Q ) , e = Object . keys ( h ) , e . length && ( he . filter = "#" + e . join ( ", #" ) , Ue . selectable ( "enable" ) . selectable ( "option" , { filter : he . filter } ) . selectable ( "refresh" ) ) ) , Object . keys ( f ) . leng
i . insertRule ( '.elfinder-cwd-wrapper-empty .ui-droppable-disabled .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"' + t . i18n ( "emptyFolder" ) + '" }' , c ++ ) , i . insertRule ( '.elfinder-cwd-wrapper-empty.elfinder-search-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"' + t . i18n ( "emptySearch" ) + '" }' , c ++ ) , i . insertRule ( '.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-incsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"' + t . i18n ( "emptyIncSearch" ) + '" }' , c ++ ) , i . insertRule ( '.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-letsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"' + t . i18n ( "emptyLetSearch" ) + '" }' , c ++ ) ) , ( s = t . storage ( "iconsize" ) || n . iconsView . size || 0 ) && ( s = Math . min ( s , n . iconsView . sizeMax ) , Ue . trigger ( "iconpref" , { size : s } ) ) , d || ( t . one ( "open" , function ( ) { i && t . zIndex && i . insertRule ( ".ui-selectable-helper{z-index:" + t . zIndex + ";}" , c ++ ) } ) , o = e ( '<div style="position:absolute"></div>' ) , a = t . getUI ( ) , a . on ( "resize" , function ( e , t ) { var n ; e . preventDefault ( ) , e . stopPropagation ( ) , t && t . fullscreen && ( n = a . offset ( ) , "on" === t . fullscreen ? ( o . css ( { top : n . top * - 1 , left : n . left * - 1 } ) . appendTo ( a ) , he . appendTo = o ) : ( o . detach ( ) , he . appendTo = "body" ) , Ue . data ( "selectable" ) && Ue . selectable ( "option" , { appendTo : he . appendTo } ) ) } ) ) , r = t . getUI ( "tree" ) . length } ) . bind ( "enable" , function ( ) { _e ( ) } ) . bind ( "request.open" , function ( ) { le . getTmbs = [ ] } ) . one ( "open" , function ( ) { t . maxTargets && ( O = Math . min ( t . maxTargets , O ) ) } ) . bind ( "open add remove searchend" , function ( ) { var n = t . cwd ( ) . hash , i = this . type ; if ( ( "open" === i || "searchend" === i || t . searchStatus . state < 2 ) && ( E = e . map ( t . files ( n ) , function ( e ) { return e . hash } ) , t . trigger ( "cwdhasheschange" , E ) ) , "open" === i ) { var a = function ( ) { var n = ! 1 ; return e . each ( M , function ( e , i ) { if ( t . trashes [ i ] ) return n = ! 0 , ! 1 } ) , n } , o = n && ( ! t . file ( n ) || r ) ? r ? function ( ) { var n = e . Deferred ( ) ; return t . one ( "treesync" , function ( e ) { e . data . always ( function ( ) { n . resolve ( ) } ) } ) , n } ( ) : t . request ( { data : { cmd : "parents" , target : t . cwd ( ) . hash } , preventFail : ! 0 } ) : null , s = t . cwd ( ) ; s . volumeid !== l && ( Be . empty ( ) . hide ( ) , l && Pe . removeClass ( "elfinder-cwd-wrapper-" + l ) , l = s . volumeid , $e ( ) , Pe . addClass ( "elfinder-cwd-wrapper-" + l ) ) , e . when ( o ) . done ( function ( ) { M = t . parents ( s . hash ) , Pe [ a ( ) ? "addClass" : "removeClass" ] ( "elfinder-cwd-wrapper-trash" ) } ) , F = void 0 , ne ( { notrigger : ! 0 } ) , De ( ) } } ) . bind ( "search" , function ( n ) { E = e . map ( n . data . files , function ( e ) { return e . hash } ) , t . trigger ( "cwdhasheschange" , E ) , F = void 0 , t . searchStatus . ininc = ! 1 , De ( ) , t . autoSync ( "stop" ) } ) . bind ( "searchend" , function ( e ) { ( S || F ) && ( S = "" , F ? t . trigger ( "incsearchend" , e . data ) : e . data && e . data . noupdate || De ( ) ) , t . autoSync ( ) } ) . bind ( "searchstart" , function ( e ) { ne ( ) , S = e . data . query } ) . bind ( "incsearchstart" , function ( n ) { var i = n . data . query || "" , a = n . data . type || "SearchName" , o = t . options . commandsOptions . search . searchTypes || { } ; ( o [ a ] && o [ a ] . incsearch || "SearchName" === a ) && ( Q = { } , t . lazy ( function ( ) { var n , r , s = "" ; if ( S = i , i ) { if ( "/" === i . substr ( 0 , 1 ) && ( i = i . substr ( 1 ) , s = "^" ) , n = new RegExp ( s + i . replace ( /([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g , "\\$1" ) , "i" ) , "SearchName" === a ) F = e . grep ( E , function ( e ) { var i = t . file ( e ) ; return ! ( ! i || ! ( i . name . match ( n ) || i . i18 && i . i18 . match ( n ) ) ) } ) ; else if ( r = o [ a ] . incsearch , "string" == typeof r ) F = e . grep ( E , function ( e ) { var i = t . file ( e ) ; return ! ! ( i && i [ r ] && ( i [ r ] + "" ) . match ( n ) ) } ) ; else if ( "function" == typeof r ) try { F = e . grep ( r ( { val : i , regex : n } , E , t ) , function ( e ) { return ! ! t . file ( e ) } ) } catch ( l ) { F = [ ] } t . trigger ( "incsearch" , { hashes : F , query : i } ) . searchStatus . ininc = ! 0 , De ( ) , t . autoSync ( "stop" ) } else t . trigger ( "incsearchend" ) } ) ) } ) . bind ( "incsearchend" , function ( e ) { S = "" , t . searchStatus . ininc = ! 1 , F = void 0 , e . data && e . data . noupdate || De ( ) , t . autoSync ( ) } ) . bind ( "sortchange" , function ( ) { var e = Pe . scrollLeft ( ) , n = Ue . hasClass ( "elfinder-cwd-allselected" ) ; De ( ) , t . one ( "cwdrender" , function ( ) { Pe . scrollLeft ( e ) , n && ( Q = t . arrayFlip ( F || E , ! 0 ) ) , ( n || Object . keys ( Q ) . length ) && oe ( ) } ) } ) . bind ( "viewchange" , function ( ) { var e = "list" != t . viewType , n = Ue . hasClass ( "elfinder-cwd-allselected" ) ; e != p && ( p = e , t . viewType = p ? "list" : "icons" , s && t . one ( "cwdinit" , function ( ) { Ue . trigger ( "iconpref" , { size : s } ) } ) , De ( ) , _e ( ) , n && ( Ue . addClass ( "elfinder-cwd-allselected" ) , Re . find ( "input" ) . prop ( "checked" , ! 0 ) ) , Object . keys ( Q ) . length && oe ( ) ) } ) . bi
var i = e ( this ) . attr ( "id" ) . substr ( p . length ) ; n . preventDefault ( ) , i != t . cwd ( ) . hash && ( e ( this ) . addClass ( d ) , r ? t . exec ( "search" , r , { target : i , mime : l . join ( " " ) } ) : t . trigger ( "select" , { selected : [ i ] } ) . exec ( "open" , i ) ) } ) . prependTo ( t . getUI ( "statusbar" ) . show ( ) ) , f = e ( '<div class="elfinder-path-roots"></div>' ) . on ( "click" , function ( n ) { n . stopPropagation ( ) , n . preventDefault ( ) ; var i = e . map ( t . roots , function ( e ) { return t . file ( e ) } ) , a = [ ] ; e . each ( i , function ( e , n ) { n . phash || t . root ( t . cwd ( ) . hash , ! 0 ) === n . hash || a . push ( { label : t . escape ( n . i18 || n . name ) , icon : "home" , callback : function ( ) { t . exec ( "open" , n . hash ) } , options : { iconClass : n . csscls || "" , iconImg : n . icon || "" } } ) } ) , t . trigger ( "contextmenu" , { raw : a , x : n . pageX , y : n . pageY } ) } ) . append ( '<span class="elfinder-button-icon elfinder-button-icon-menu" ></span>' ) . appendTo ( u ) , m = function ( n ) { var i = [ ] , a = [ ] ; return e . each ( t . parents ( n ) , function ( e , o ) { var r = n === o ? "elfinder-path-dir elfinder-path-cwd" : "elfinder-path-dir" , s = t . file ( o ) , l = t . escape ( s . i18 || s . name ) ; a . push ( l ) , i . push ( '<span id="' + p + o + '" class="' + r + '" title="' + a . join ( t . option ( "separator" ) ) + '">' + l + "</span>" ) } ) , i . join ( '<span class="elfinder-path-other">' + t . option ( "separator" ) + "</span>" ) } , g = function ( ) { var n ; h . children ( "span.elfinder-path-dir" ) . attr ( "style" , "" ) , n = "ltr" === t . direction ? e ( "#" + p + t . cwd ( ) . hash ) . prevAll ( "span.elfinder-path-dir:first" ) : e ( ) , h . scrollLeft ( n . length ? n . position ( ) . left : 0 ) } , v = function ( ) { if ( ! t . UA . CSS . flex ) { var n , i , a = h . children ( "span.elfinder-path-dir" ) , o = a . length ; if ( "workzone" === c || o < 2 ) return void a . attr ( "style" , "" ) ; h . width ( h . css ( "max-width" ) ) , a . css ( { maxWidth : 100 / o + "%" , display : "inline-block" } ) , n = h . width ( ) - 9 , h . children ( "span.elfinder-path-other" ) . each ( function ( ) { n -= e ( this ) . width ( ) } ) , i = [ ] , a . each ( function ( t ) { var a = e ( this ) , o = a . width ( ) ; n -= o , o < this . scrollWidth && i . push ( t ) } ) , h . width ( "" ) , i . length ? ( n > 0 && ( n /= i . length , e . each ( i , function ( t , i ) { var o = e ( a [ i ] ) ; o . css ( "max-width" , o . width ( ) + n ) } ) ) , a . last ( ) . attr ( "style" , "" ) ) : a . attr ( "style" , "" ) } } ; t . one ( "init" , function ( ) { a = t . getUI ( "tree" ) . length , o = t . getUI ( "stat" ) . length , ! a && n . toWorkzoneWithoutNavbar && ( u . append ( h ) . insertBefore ( t . getUI ( "workzone" ) ) , c = "workzone" , t . bind ( "open" , g ) . one ( "opendone" , function ( ) { t . getUI ( ) . trigger ( "resize" ) } ) ) } ) . bind ( "open searchend parents" , function ( ) { r = "" , s = "" , l = [ ] , h . html ( m ( t . cwd ( ) . hash ) ) , Object . keys ( t . roots ) . length > 1 ? ( h . css ( "margin" , "" ) , f . show ( ) ) : ( h . css ( "margin" , 0 ) , f . hide ( ) ) , ! o && v ( ) } ) . bind ( "searchstart" , function ( e ) { e . data && ( r = e . data . query || "" , s = e . data . target || "" , l = e . data . mimes || [ ] ) } ) . bind ( "search" , function ( e ) { var n = "" ; n = s ? m ( s ) : t . i18n ( "btnAll" ) , h . html ( '<span class="elfinder-path-other">' + t . i18n ( "searcresult" ) + ": </span>" + n ) , v ( ) } ) . bind ( "navbarshow navbarhide" , function ( ) { var e = t . getUI ( "workzone" ) ; "navbarshow" === this . type ? ( t . unbind ( "open" , g ) , h . prependTo ( t . getUI ( "statusbar" ) ) , u . detach ( ) , c = "statusbar" ) : ( u . append ( h ) . insertBefore ( e ) , c = "workzone" , g ( ) , t . bind ( "open" , g ) ) , t . trigger ( "uiresize" ) } ) . bind ( "resize uistatchange" , v ) } ) } , e . fn . elfinderplaces = function ( t , n ) { return this . each ( function ( ) { var i = { } , a = "class" , o = t . res ( a , "navdir" ) , r = t . res ( a , "navcollapse" ) , s = t . res ( a , "navexpand" ) , l = t . res ( a , "hover" ) , c = t . res ( a , "treeroot" ) , d = t . res ( a , "adroppable" ) , p = t . res ( "tpl" , "placedir" ) , u = t . res ( "tpl" , "perms" ) , h = e ( t . res ( "tpl" , "navspinner" ) ) , f = n . suffix ? n . suffix : "" , m = "places" + f , g = null , v = function ( e ) { return e . substr ( 6 ) } , b = function ( e ) { return "place-" + e } , y = function ( t ) { return e ( document . getElementById ( b ( t ) ) ) } , w = function ( ) { var n = [ ] , a = { } ; n = e . map ( E . children ( ) . find ( "[id]" ) , function ( e ) { return v ( e . id ) } ) , n . length ? e . each ( n . reverse ( ) , function ( e , t ) { a [ t ] = i [ t ] } ) : a = null , t . storage ( m , a ) } , x = function ( ) { var a , o ; m = "places" + ( n . suffix ? n . suffix : "" ) , i = { } , a = t . storage ( m ) , "string" == typeof a ? ( a = e . grep ( a . split ( "," ) , function ( e ) { return ! ! e } ) , e . each ( a , function ( e , t ) { var n = t . split ( "#" ) ; i [ n [ 0 ] ] = n [ 1 ] ? n [ 1 ] : n [ 0 ] } ) ) : e . isPlainObject ( a ) && ( i = a ) , t . trigger ( "placesload" , { dirs : i , storageKey : m } , ! 0 ) , o = Object . keys ( i ) , o . length && ( M . prepend ( h ) , t . request ( { data : { cmd : "info" , targets : o } , preventDefault : ! 0 } ) . done ( function ( n ) { var a = { } ; n . files && n . files . length && t . cache ( n . files ) , e . each ( n . files , function ( e , t ) { var n = t . hash ; a [ n ] = t } ) , e . each ( i , function ( e , t ) { C ( a [ e ] || Object . assign ( { notfound : ! 0 } , t ) ) } ) , t . storage ( "placesState" ) > 0 && M . trigger ( "click"
} } ) , N = e ( t . res ( "tpl" , "navspinner" ) ) , L = t . res ( "tpl" , "navdir" ) , W = t . res ( "tpl" , "perms" ) , B = ( t . res ( "tpl" , "lock" ) , t . res ( "tpl" , "symlink" ) ) , $ = { } , V = { id : function ( e ) { return t . navHash2Id ( e . hash ) } , name : function ( e ) { return t . escape ( e . i18 || e . name ) } , cssclass : function ( e ) { var i = ( e . phash && ! e . isroot ? "" : d ) + " " + m + " " + t . perms2class ( e ) ; return e . dirs && ! e . link && ( i += " " + v ) && e . dirs == - 1 && ( i += " " + w ) , n . getClass && ( i += " " + n . getClass ( e ) ) , e . csscls && ( i += " " + t . escape ( e . csscls ) ) , i } , title : function ( e ) { return n . attrTitle ? ' title="' + t . escape ( t . path ( e . hash , ! 0 ) || e . i18 || e . name ) + '"' : "" } , root : function ( t ) { var n = "" ; return ! t . phash || t . isroot ? ( n += " " + O , ! t . disabled || t . disabled . length < 1 ? n += " " + S + " " + I : ( e . inArray ( "paste" , t . disabled ) === - 1 && ( n += " " + S ) , e . inArray ( "upload" , t . disabled ) === - 1 && ( n += " " + I ) ) , n ) : "" } , permissions : function ( e ) { return e . read && e . write ? "" : W } , symlink : function ( e ) { return e . alias ? B : "" } , style : function ( e ) { return e . icon ? t . getIconStyle ( e ) : "" } } , K = function ( e ) { return L . replace ( /(?:\{([a-z]+)\})/gi , function ( t , n ) { var i = V [ n ] ? V [ n ] ( e ) : e [ n ] || "" ; return "id" === n && e . dirs == - 1 && ( E [ i ] = i ) , i } ) } , X = function ( n , i ) { return e . map ( n || [ ] , function ( e ) { return "directory" !== e . mime || i && ! t . navHash2Elm ( e . hash ) . length ? null : e } ) } , J = function ( e ) { return e ? t . navHash2Elm ( e ) . next ( "." + f ) : oe } , G = function ( e , n ) { for ( var i , a = e . children ( ":first" ) ; a . length ; ) { if ( i = t . file ( t . navId2Hash ( a . children ( "[id]" ) . attr ( "id" ) ) ) , ( i = t . file ( t . navId2Hash ( a . children ( "[id]" ) . attr ( "id" ) ) ) ) && Q ( n , i ) < 0 ) return a ; a = a . next ( ) } return e . children ( "button.elfinder-navbar-pager-next" ) } , Y = function ( i ) { for ( var a , o , r , s , l , d , p , u = i . length , h = [ ] , f = u , m = e ( ) , g = { } , v = t . cwd ( ) , b = function ( i , a , o , r ) { var s = { } , l = 0 , d = t . newAPI ? Math . min ( 1e4 , Math . max ( 10 , n . subTreeMax ) ) : 1e4 , p = function ( ) { s = { } , e . each ( a , function ( e , t ) { s [ t . hash ] = e } ) } , u = function ( t ) { "prepare" === t ? e . each ( a , function ( e , t ) { t . node && i . append ( t . node . hide ( ) ) } ) : "done" === t && e . each ( a , function ( e , t ) { t . node && t . node . detach ( ) . show ( ) } ) } , h = function ( t , n ) { var i ; return t . stopPropagation ( ) , n . select ? void g ( f ( n . select ) ) : n . change ? void u ( n . change ) : ( n . removed && n . removed . length && ( a = e . grep ( a , function ( e ) { return n . removed . indexOf ( e . hash ) === - 1 || ( ! i && ( i = ! 0 ) , ! 1 ) } ) ) , n . added && n . added . length && ( a = a . concat ( e . grep ( n . added , function ( e ) { return void 0 === s [ e . hash ] && ( ! i && ( i = ! 0 ) , ! 0 ) } ) ) ) , void ( i && ( a . sort ( Q ) , p ( ) , g ( l ) ) ) ) } , f = function ( e ) { if ( void 0 !== s [ e ] ) return Math . floor ( s [ e ] / d ) * d } , m = t . navId2Hash ( i . prev ( "[id]" ) . attr ( "id" ) ) , g = function ( n , o ) { var r , s , u , y , w , x , k , C , z = [ ] , T = { } ; delete $ [ m ] , l = n , i . off ( "update." + t . namespace , h ) , a . length > d && ( i . on ( "update." + t . namespace , h ) , void 0 === n && ( u = 0 , p ( ) , n = f ( v . hash ) , void 0 === n && ( n = 0 ) ) , y = a . slice ( n , n + d ) , $ [ m ] = i , w = n ? Math . max ( - 1 , n - d ) : - 1 , x = n + d >= a . length ? 0 : n + d , r = Math . ceil ( a . length / d ) , s = Math . ceil ( n / d ) ) , e . each ( y || a , function ( e , t ) { z . push ( K ( t ) ) , t . node && ( T [ t . hash ] = t . node ) } ) , k = w > - 1 ? e ( '<button class="elfinder-navbar-pager elfinder-navbar-pager-prev"></button>' ) . text ( t . i18n ( "btnPrevious" , s , r ) ) . button ( { icons : { primary : "ui-icon-caret-1-n" } } ) . on ( "click" , function ( e ) { e . preventDefault ( ) , e . stopPropagation ( ) , g ( w , "up" ) } ) : e ( ) , C = x ? e ( '<button class="elfinder-navbar-pager elfinder-navbar-pager-next"></button>' ) . text ( t . i18n ( "btnNext" , s + 2 , r ) ) . button ( { icons : { primary : "ui-icon-caret-1-s" } } ) . on ( "click" , function ( e ) { e . preventDefault ( ) , e . stopPropagation ( ) , g ( x , "down" ) } ) : e ( ) , b ( ) , i . empty ( ) [ y ? "addClass" : "removeClass" ] ( "elfinder-navbar-hasmore" ) . append ( k , z . join ( "" ) , C ) , e . each ( T , function ( e , n ) { t . navHash2Elm ( e ) . parent ( ) . replaceWith ( n ) } ) , o && Z ( t . navHash2Id ( y [ "up" === o ? y . length - 1 : 0 ] . hash ) ) , ! c && t . lazy ( function ( ) { ie ( null , i ) } ) } , b = function ( ) { e . each ( i . children ( ".elfinder-navbar-wrapper" ) , function ( n , i ) { var o , r , l = e ( i ) , c = l . children ( "[id]:first" ) ; c . hasClass ( y ) && ( o = t . navId2Hash ( c . attr ( "id" ) ) , o && void 0 !== ( r = s [ o ] ) && ( a [ r ] . node = l . detach ( ) ) ) } ) } ; g ( ) } , w = { } , x = [ ] , k = { } ; f -- ; ) a = i [ f ] , g [ a . hash ] || t . navHash2Elm ( a . hash ) . length || ( g [ a . hash ] = ! 0 , ( o = J ( a . phash ) ) . length ? ( p = a . phash || "treeroot" , "undefined" == typeof k [ p ] && ( k [ p ] = o . children ( ":last" ) ) , s = ! k [ p ] . length , a . phash && ( s || o . hasClass ( "elfinder-navbar-hasmore" ) || ( r = G ( o , a ) ) . length ) ? s ? ( w [ a . phash ] || ( w [ a . phash ] = [ ] ) , w [ a . phash ] . push ( a ) ) : r ? ( d = K ( a ) , r . before ( d ) , ! c && ( m = m . add ( d ) ) ) : x . push ( a ) : ( d = K ( a ) , s ? o . prepend ( d ) : k [ p ] . after ( d ) , a . phash && ! a . isroot || ( l = t . navHash2Elm ( a . hash ) . parent ( ) ) , ! c && ie ( null , l ) ) )
} , 100 ) : x += '<iframe class="downloader" id="downloader-' + y [ i ] . hash + '" style="display:none" src="' + c + '"></iframe>' ; d . remove ( ) , e ( x ) . appendTo ( "body" ) . ready ( function ( ) { setTimeout ( function ( ) { e ( x ) . each ( function ( ) { e ( "#" + e ( this ) . attr ( "id" ) ) . remove ( ) } ) } , 2e4 + 1e4 * i ) } ) , b . trigger ( "download" , { files : y } ) , w . resolve ( ) } ) , u = y . length , g = [ ] , i = 0 ; i < y . length ; i ++ ) b . openUrl ( y [ i ] . hash , ! 0 , function ( e ) { e && g . push ( e ) , -- u < 1 && m . resolve ( g ) } ) ; return w } } , i . prototype . commands . duplicate = function ( ) { var t = this . fm ; this . getstate = function ( n ) { var i = this . files ( n ) , a = i . length ; return a && t . cwd ( ) . write && e . grep ( i , function ( e ) { return ! ( ! e . read || e . phash !== t . cwd ( ) . hash || t . isRoot ( e ) ) } ) . length == a ? 0 : - 1 } , this . exec = function ( t ) { var n = this . fm , i = this . files ( t ) , a = i . length , o = e . Deferred ( ) . fail ( function ( e ) { e && n . error ( e ) } ) ; return a ? ( e . each ( i , function ( e , t ) { if ( ! t . read || ! n . file ( t . phash ) . write ) return ! o . reject ( [ "errCopy" , t . name , "errPerm" ] ) } ) , "rejected" == o . state ( ) ? o : n . request ( { data : { cmd : "duplicate" , targets : this . hashes ( t ) } , notify : { type : "copy" , cnt : a } , navigate : { toast : { inbuffer : { msg : n . i18n ( [ "complete" , n . i18n ( "cmdduplicate" ) ] ) } } } } ) ) : o . reject ( ) } } , i . prototype . commands . edit = function ( ) { var t , n = this , i = this . fm , a = i . res ( "class" , "editing" ) , o = [ ] , r = [ ] , s = ! 1 , l = function ( e ) { return e . replace ( /\s+$/ , "" ) } , c = function ( t ) { var a , o = e ( '<select class="ui-corner-all"></select>' ) ; return t && e . each ( t , function ( e , t ) { a = i . escape ( t . value ) , o . append ( '<option value="' + a + '">' + ( t . caption ? i . escape ( t . caption ) : a ) + "</option>" ) } ) , e . each ( n . options . encodings , function ( e , t ) { o . append ( '<option value="' + t + '">' + t + "</option>" ) } ) , o } , d = function ( ) { var t , a , o = i . options . dialogContained ? i . getUI ( ) : e ( window ) ; return a = "string" == typeof n . options . dialogWidth && ( t = n . options . dialogWidth . match ( /(\d+)%/ ) ) ? parseInt ( o . width ( ) * ( t [ 1 ] / 100 ) ) : parseInt ( n . options . dialogWidth || 650 ) , Math . min ( a , o . width ( ) ) } , p = function ( ) { if ( n . options . dialogHeight ) { var t , a , o = i . options . dialogContained ? i . getUI ( ) : e ( window ) ; return a = "string" == typeof n . options . dialogHeight && ( t = n . options . dialogHeight . match ( /(\d+)%/ ) ) ? parseInt ( o . height ( ) * ( t [ 1 ] / 100 ) ) : parseInt ( n . options . dialogHeight || o . height ( ) ) , Math . min ( a , o . height ( ) ) } } , u = function ( t ) { var a , l , c , d = t . length ; return d > 1 && ( a = t [ 0 ] . mime , l = t [ 0 ] . name . replace ( /^.*(\.[^.]+)$/ , "$1" ) ) , e . grep ( t , function ( t ) { var p ; return ! c && "directory" !== t . mime && ( p = t . read && ( s || i . mimeIsText ( t . mime ) || e . inArray ( t . mime , 1 === d ? o : r ) !== - 1 ) && ( ! n . onlyMimes . length || e . inArray ( t . mime , n . onlyMimes ) !== - 1 ) && ( 1 === d || t . mime === a && t . name . substr ( l . length * - 1 ) === l ) && ! ! i . uploadMimeCheck ( t . mime , t . phash ) && b ( t , d ) && Object . keys ( g ) . length , p || ( c = ! 0 ) , p ) } ) } , h = function ( e ) { var t , n = i . file ( e ) ; i . request ( { cmd : "info" , targets : [ e ] , preventDefault : ! 0 } ) . done ( function ( e ) { var a ; e && e . files && e . files . length && ( t = e . files [ 0 ] , n . ts == t . ts && n . size == t . size || ( a = { changed : [ t ] } , i . updateCache ( a ) , i . change ( a ) ) ) } ) } , f = function ( t , o , r , s , u , f ) { var g , v , b , y , w , k , C = e . Deferred ( ) , z = ! 1 , T = function ( ) { return ! ! z || ( i . toast ( { mode : "warning" , msg : i . i18n ( "nowLoading" ) } ) , ! 1 ) } , A = function ( ) { f && Array . isArray ( f ) && e . each ( f , function ( ) { this . msg && i . toast ( this ) } ) } , j = function ( ) { var t , n , a , o = y ? y . val ( ) : void 0 , r = e . Deferred ( ) . fail ( function ( e ) { b . show ( ) . find ( "button.elfinder-btncnt-0,button.elfinder-btncnt-1" ) . hide ( ) } ) ; return T ( ) ? ( g . editor && ( g . editor . save ( g [ 0 ] , g . editor . instance ) , t = g . editor . confObj , t . info && ( t . info . schemeContent || t . info . arrayBufferContent ) && ( o = "scheme" ) ) , n = D ( ) , U ( n ) , n . promise ? ( a = setTimeout ( function ( ) { i . notify ( { type : "chkcontent" , cnt : 1 , hideCnt : ! 0 , cancel : function ( ) { n . reject ( ) } } ) } , 100 ) , n . always ( function ( ) { a && clearTimeout ( a ) , i . notify ( { type : "chkcontent" , cnt : - 1 } ) } ) . done ( function ( e ) { C . notifyWith ( g , [ o , g . data ( "hash" ) , v , r ] ) } ) . fail ( function ( e ) { r . reject ( e ) } ) ) : C . notifyWith ( g , [ o , g . data ( "hash" ) , v , r ] ) , r ) : r . resolve ( ) } , O = function ( ) { T ( ) && j ( ) . fail ( function ( e ) { e && i . error ( e ) } ) } , S = function ( ) { g . elfinderdialog ( "close" ) } , I = function ( ) { T ( ) && ( b . hide ( ) , j ( ) . done ( function ( ) { z = ! 1 , b . show ( ) , S ( ) } ) . fail ( function ( e ) { b . show ( ) , e && i . error ( e ) } ) ) } , M = function ( ) { if ( T ( ) ) { var t = v , r = o . phash , s = function ( e ) { p . addClass ( a ) . fadeIn ( function ( ) { e && i . error ( e ) } ) , v = t , i . disable ( ) } , l = function ( ) { n . mime = R . mime || o . mime , n . prefix = ( R . name || o . name ) . replace ( / \d+(\.[^.]+)?$/ , "$1" ) , n . requestCmd = "mkfile" , n . nextAction = { } , n . data = { target : r } , e . proxy ( i . res ( "mixin"
e . inArray ( "shortcuts" , g ) !== - 1 && j ( ) , e . inArray ( "help" , g ) !== - 1 && ( d = s . i18nBaseUrl + "help/%s.html.js" , O ( ) ) , e . inArray ( "integrations" , g ) !== - 1 && I ( ) , e . inArray ( "debug" , g ) !== - 1 && E ( ) , w . push ( "</div>" ) , D = e ( w . join ( "" ) ) , D . find ( ".ui-tabs-nav li" ) . on ( "mouseenter mouseleave" , function ( t ) { e ( this ) . toggleClass ( "ui-state-hover" , "mouseenter" === t . type ) } ) . on ( "focus blur" , "a" , function ( t ) { e ( t . delegateTarget ) . toggleClass ( "ui-state-focus" , "focusin" === t . type ) } ) . children ( ) . on ( "click" , function ( t ) { var n = e ( this ) ; t . preventDefault ( ) , t . stopPropagation ( ) , n . parent ( ) . addClass ( z ) . siblings ( ) . removeClass ( z ) , D . children ( ".ui-tabs-panel" ) . hide ( ) . filter ( n . attr ( "href" ) ) . show ( ) } ) . filter ( ":first" ) . trigger ( "click" ) , S && ( n = D . find ( ".elfinder-help-tab-integrations" ) . hide ( ) , i = D . find ( "#" + s . namespace + "-help-integrations" ) . hide ( ) . append ( e ( '<div class="elfinder-help-integrations-desc"></div>' ) . html ( s . i18n ( "integrationWith" ) ) ) , s . bind ( "helpIntegration" , function ( t ) { var a , o , r , l , c = i . children ( "ul:first" ) ; t . data && ( e . isPlainObject ( t . data ) ? ( a = Object . assign ( { link : "" , title : "" , banner : "" } , t . data ) , ( a . title || a . link ) && ( a . title || ( a . title = a . link ) , o = a . link ? e ( "<a></a>" ) . attr ( "href" , a . link ) . attr ( "target" , "_blank" ) . text ( a . title ) : e ( "<span></span>" ) . text ( a . title ) , a . banner && ( o = e ( "<span></span>" ) . append ( e ( "<img/>" ) . attr ( a . banner ) , o ) ) ) ) : ( o = e ( t . data ) , o . filter ( "a" ) . each ( function ( ) { var t = e ( this ) ; t . attr ( "target" ) || t . attr ( "target" , "_blank" ) } ) ) , o && ( n . show ( ) , c . length || ( c = e ( '<ul class="elfinder-help-integrations"></ul>' ) . appendTo ( i ) ) , a && a . cmd ? ( l = "elfinder-help-integration-" + a . cmd , r = c . find ( "ul." + l ) , r . length || ( r = e ( '<ul class="' + l + '"></ul>' ) , c . append ( e ( "<li></li>" ) . append ( e ( "<span></span>" ) . html ( s . i18n ( "cmd" + a . cmd ) ) ) . append ( r ) ) ) , o = r . append ( e ( "<li></li>" ) . append ( o ) ) ) : c . append ( e ( "<li></li>" ) . append ( o ) ) ) ) } ) . bind ( "themechange" , function ( ) { D . find ( "div.elfinder-help-term-theme" ) . replaceWith ( T ( ) ) } ) ) , M && ( a = D . find ( ".elfinder-help-tab-debug" ) . hide ( ) , o = D . find ( "#" + s . namespace + "-help-debug" ) . children ( "div:first" ) , r = o . children ( "ul:first" ) . on ( "click" , function ( e ) { e . preventDefault ( ) , e . stopPropagation ( ) } ) , l . debug = { } , s . bind ( "backenddebug" , function ( e ) { M && e . data && e . data . debug && ( l . debug = { options : e . data . options , debug : Object . assign ( { cmd : s . currentReqCmd } , e . data . debug ) } , l . dialog && F ( ) ) } ) ) , D . find ( "#" + s . namespace + "-help-about" ) . find ( ".apiver" ) . text ( s . api ) , l . dialog = l . fmDialog ( D , { title : l . title , width : 530 , maxWidth : "window" , maxHeight : "window" , autoOpen : ! 1 , destroyOnClose : ! 1 , close : function ( ) { M && ( a . hide ( ) , o . tabs ( "destroy" ) ) , t = ! 1 } } ) . on ( "click" , function ( e ) { e . stopPropagation ( ) } ) . css ( { overflow : "hidden" } ) , p = l . dialog . children ( ".ui-tabs" ) , u = p . children ( ".ui-tabs-nav:first" ) , h = p . children ( ".ui-tabs-panel" ) , f = l . dialog . outerHeight ( ! 0 ) - l . dialog . height ( ) , l . dialog . closest ( ".ui-dialog" ) . on ( "resize" , function ( ) { h . height ( l . dialog . height ( ) - f - u . outerHeight ( ! 0 ) - 20 ) } ) , d && l . dialog . one ( "initContents" , function ( ) { e . ajax ( { url : l . options . helpSource ? l . options . helpSource : d . replace ( "%s" , s . lang ) , dataType : "html" } ) . done ( function ( t ) { e ( "#" + s . namespace + "-help-help" ) . html ( t ) } ) . fail ( function ( ) { e . ajax ( { url : d . replace ( "%s" , "en" ) , dataType : "html" } ) . done ( function ( t ) { e ( "#" + s . namespace + "-help-help" ) . html ( t ) } ) } ) } ) , l . state = 0 , s . trigger ( "helpBuilded" , l . dialog ) } ) . one ( "open" , function ( ) { var e = ! 1 ; s . one ( "backenddebug" , function ( ) { e = ! 0 } ) . one ( "opendone" , function ( ) { requestAnimationFrame ( function ( ) { ! e && M && ( M = ! 1 , a . hide ( ) , o . hide ( ) , r . hide ( ) ) } ) } ) } ) , this . getstate = function ( ) { return 0 } , this . exec = function ( n , i ) { var s = i ? i . tab : void 0 , l = function ( ) { M && ( o . tabs ( ) , r . find ( "a:first" ) . trigger ( "click" ) , a . show ( ) , t = ! 0 ) } ; return l ( ) , this . dialog . trigger ( "initContents" ) . elfinderdialog ( "open" ) . find ( ( s ? ".elfinder-help-tab-" + s : ".ui-tabs-nav li" ) + " a:first" ) . trigger ( "click" ) , e . Deferred ( ) . resolve ( ) } } ) . prototype = { forceLoad : ! 0 } , i . prototype . commands . hidden = function ( ) { this . hidden = ! 0 , this . updateOnSelect = ! 1 , this . getstate = function ( ) { return - 1 } } , i . prototype . commands . hide = function ( ) { var t , n , i , a , o = this , r = { } ; this . syncTitleOnChange = ! 0 , this . shortcuts = [ { pattern : "ctrl+shift+dot" , description : this . fm . i18n ( "toggleHidden" ) } ] , this . init = function ( ) { var e = this . fm ; t = e . storage ( "hide" ) || { items : { } } , n = Object . keys ( t . items ) . length , this . title = e . i18n ( t . show ? "hideHidden" : " showHidden
return a && n && n == i ( t ) . length ? 0 : - 1 } , this . exec = function ( t ) { var n = this . files ( t ) ; return a . trigger ( "regist" , [ n ] ) , e . Deferred ( ) . resolve ( ) } , n . one ( "load" , function ( ) { a = n . ui . places } ) } , i . prototype . commands . preference = function ( ) { var t , n , i = this , a = this . fm , o = "replace" , r = '<li class="' + a . res ( "class" , "tabstab" ) + ' elfinder-preference-tab-{id}"><a href="#' + a . namespace + '-preference-{id}" id="' + a . namespace + '-preference-tab-{id}" class="ui-tabs-anchor {class}">{title}</a></li>' , s = e ( '<div class="ui-tabs ui-widget ui-widget-content ui-corner-all elfinder-preference">' ) , l = e ( '<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-top">' ) , c = e ( '<div class="elfinder-preference-tabs ui-tabs-panel ui-widget-content ui-corner-bottom"></div>' ) , d = ( e ( "base" ) . length ? document . location . href . replace ( /#.*$/ , "" ) : "" , function ( t ) { e ( "#" + a . namespace + "-preference-tab-" + t ) . trigger ( "mouseover" ) . trigger ( "click" ) , n = t } ) , p = a . res ( "class" , "tabsactive" ) , u = function ( ) { var u = i . options . categories || { language : [ "language" ] , theme : [ "theme" ] , toolbar : [ "toolbarPref" ] , workspace : [ "iconSize" , "columnPref" , "selectAction" , "makefileTypes" , "useStoredEditor" , "editorMaximized" , "useFullscreen" , "showHidden" ] , dialog : [ "autoFocusDialog" ] , selectionInfo : [ "infoItems" , "hashChecker" ] , reset : [ "clearBrowserData" ] , all : ! 0 } , h = i . options . prefs || [ "language" , "theme" , "toolbarPref" , "iconSize" , "columnPref" , "selectAction" , "makefileTypes" , "useStoredEditor" , "editorMaximized" , "useFullscreen" , "showHidden" , "infoItems" , "hashChecker" , "autoFocusDialog" , "clearBrowserData" ] ; a . cookieEnabled || delete u . language , h = a . arrayFlip ( h , ! 0 ) , a . options . getFileCallback && delete h . selectAction , a . UA . Fullscreen || delete h . useFullscreen , h . language && ( h . language = function ( ) { var t = e ( "<select></select>" ) . on ( "change" , function ( ) { var t = e ( this ) . val ( ) ; a . storage ( "lang" , t ) , e ( "#" + a . id ) . elfinder ( "reload" ) } ) , n = [ ] , o = i . options . langs || { ar : "العربية" , bg : "Български" , ca : "Català" , cs : "Čeština" , da : "Dansk" , de : "Deutsch" , el : "Ελληνικά" , en : "English" , es : "Español" , fa : "فارسی" , fo : "Føroyskt" , fr : "Français" , fr _CA : "Français (Canada)" , he : "עברית" , hr : "Hrvatski" , hu : "Magyar" , id : "Bahasa Indonesia" , it : "Italiano" , ja : "日本語" , ko : "한국어" , nl : "Nederlands" , no : "Norsk" , pl : "Polski" , pt _BR : "Português" , ro : "Română" , ru : "Pу с с кий" , si : "සිංහල" , sk : "Slovenčina" , sl : "Slovenščina" , sr : "Srpski" , sv : "Svenska" , tr : "Türkçe" , ug _CN : "ئۇيغۇرچە" , uk : "Український" , vi : "Tiếng Việt" , zh _CN : "简体中文" , zh _TW : "正體中文" } ; return a . cookieEnabled ? ( e . each ( o , function ( e , t ) { n . push ( '<option value="' + e + '">' + t + "</option>" ) } ) , t . append ( n . join ( "" ) ) . val ( a . lang ) ) : e ( ) } ( ) ) , h . theme && ( h . theme = function ( ) { var t = a . options . themes ? Object . keys ( a . options . themes ) . length : 0 ; if ( 0 === t || 1 === t && a . options . themes [ "default" ] ) return null ; var n = e ( "<select></select>" ) . on ( "change" , function ( ) { var t = e ( this ) . val ( ) ; a . changeTheme ( t ) . storage ( "theme" , t ) } ) , i = { image : '<img class="elfinder-preference-theme elfinder-preference-theme-image" src="$2" />' , link : '<a href="$1" target="_blank" title="$3">$2</a>' , data : '<dt>$1</dt><dd><span class="elfinder-preference-theme elfinder-preference-theme-$0">$2</span></dd>' } , o = [ "image" , "description" , "author" , "email" , "license" ] , r = e ( '<button class="ui-button ui-corner-all ui-widget elfinder-preference-theme-default"></button>' ) . text ( a . i18n ( "default" ) ) . on ( "click" , function ( e ) { n . val ( "default" ) . trigger ( "change" ) } ) , s = e ( '<div class="elfinder-reference-hide-taball"></div>' ) . on ( "click" , "button" , function ( ) { var t = e ( this ) . data ( "themeid" ) ; n . val ( t ) . trigger ( "change" ) } ) ; return a . options . themes [ "default" ] || n . append ( '<option value="default">' + a . i18n ( "default" ) + "</option>" ) , e . each ( a . options . themes , function ( t , r ) { var l , c = e ( '<option class="elfinder-theme-option-' + t + '" value="' + t + '">' + a . i18n ( t ) + "</option>" ) , d = e ( '<fieldset class="ui-widget ui-widget-content ui-corner-all elfinder-theme-list-' + t + '"><legend>' + a . i18n ( t ) + '</legend><div><span class="elfinder-spinner"></span></div></fieldset>' ) ; n . append ( c ) , s . append ( d ) , l = setTimeout ( function ( ) { d . find ( "span.elfinder-spinner" ) . replaceWith ( a . i18n ( [ "errRead" , t ] ) ) } , 1e4 ) , a . getTheme ( t ) . always ( function ( ) { l && clearTime
} ) . trigger ( "changesize" ) , r . remove ( ) , t . hideinfo ( ) , a . fadeIn ( 100 ) } ) } , function ( ) { r . remove ( ) , a . remove ( ) } ) , i . restoreXhrSend ( ) } catch ( s ) { i . restoreXhrSend ( ) , r . remove ( ) , a . remove ( ) } } ; o . on ( t . evUpdate , function ( s ) { var l , c , d , p , u , h , f = s . file ; a [ f . mime ] && i . options . cdns . psd && ! i . UA . ltIE10 && t . dispInlineRegex . test ( f . mime ) && ( s . stopImmediatePropagation ( ) , c = e ( '<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">' + i . i18n ( "nowLoading" ) + '</span><span class="elfinder-spinner"></span></div>' ) . appendTo ( t . info . find ( ".elfinder-quicklook-info" ) ) , d = e ( '<div class="elfinder-quicklook-info-progress"></div>' ) . appendTo ( c ) , h = i . openUrl ( f . hash , "sameorigin" , function ( t ) { t && ( l = e ( "<img/>" ) . hide ( ) . appendTo ( o ) , n ? r ( t , l , c ) : ( p = window . define , u = window . require , window . require = null , window . define = null , i . loadScript ( [ i . options . cdns . psd ] , function ( ) { n = require ( "psd" ) , p ? window . define = p : delete window . define , u ? window . require = u : delete window . require , r ( t , l , c ) } ) ) ) } , { progressBar : d } ) , o . one ( "change" , function ( ) { h && h . state && "pending" === h . state ( ) && h . reject ( ) } ) ) } ) } , function ( t ) { var n = t . fm , i = n . arrayFlip ( [ "text/html" , "application/xhtml+xml" ] ) , a = t . preview ; a . on ( t . evUpdate , function ( o ) { var r , s , l , c = o . file ; i [ c . mime ] && t . dispInlineRegex . test ( c . mime ) && ( ! t . options . getSizeMax || c . size <= t . options . getSizeMax ) && ( o . stopImmediatePropagation ( ) , s = e ( '<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">' + n . i18n ( "nowLoading" ) + '</span><span class="elfinder-spinner"></span></div>' ) . appendTo ( t . info . find ( ".elfinder-quicklook-info" ) ) , l = e ( '<div class="elfinder-quicklook-info-progress"></div>' ) . appendTo ( s ) , a . one ( "change" , function ( ) { "pending" == r . state ( ) && r . reject ( ) } ) . addClass ( "elfinder-overflow-auto" ) , r = n . request ( { data : { cmd : "get" , target : c . hash , conv : 1 , _t : c . ts } , options : { type : "get" , cache : ! 0 } , preventDefault : ! 0 , progressBar : l } ) . done ( function ( n ) { t . hideinfo ( ) ; var i = e ( '<iframe class="elfinder-quicklook-preview-html"></iframe>' ) . appendTo ( a ) [ 0 ] . contentWindow . document ; i . open ( ) , i . write ( n . content ) , i . close ( ) } ) . always ( function ( ) { s . remove ( ) } ) ) } ) } , function ( t ) { var n = t . fm , i = n . arrayFlip ( [ "text/x-markdown" ] ) , a = t . preview , o = null , r = function ( n , i ) { t . hideinfo ( ) ; var r = e ( '<iframe class="elfinder-quicklook-preview-html"></iframe>' ) . appendTo ( a ) [ 0 ] . contentWindow . document ; r . open ( ) , r . write ( o ( n . content ) ) , r . close ( ) , i . remove ( ) } , s = function ( e ) { o = ! 1 , e . remove ( ) } ; a . on ( t . evUpdate , function ( l ) { var c , d , p , u = l . file ; i [ u . mime ] && n . options . cdns . marked && o !== ! 1 && t . dispInlineRegex . test ( u . mime ) && ( ! t . options . getSizeMax || u . size <= t . options . getSizeMax ) && ( l . stopImmediatePropagation ( ) , d = e ( '<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">' + n . i18n ( "nowLoading" ) + '</span><span class="elfinder-spinner"></span></div>' ) . appendTo ( t . info . find ( ".elfinder-quicklook-info" ) ) , p = e ( '<div class="elfinder-quicklook-info-progress"></div>' ) . appendTo ( d ) , a . one ( "change" , function ( ) { "pending" == c . state ( ) && c . reject ( ) } ) . addClass ( "elfinder-overflow-auto" ) , c = n . request ( { data : { cmd : "get" , target : u . hash , conv : 1 , _t : u . ts } , options : { type : "get" , cache : ! 0 } , preventDefault : ! 0 , progressBar : p } ) . done ( function ( e ) { o || window . marked ? ( o || ( o = window . marked ) , r ( e , d ) ) : n . loadScript ( [ n . options . cdns . marked ] , function ( t ) { o = t || window . marked || ! 1 , delete window . marked , o ? r ( e , d ) : s ( d ) } , { tryRequire : ! 0 , error : function ( ) { s ( d ) } } ) } ) . fail ( function ( ) { s ( d ) } ) ) } ) } , function ( t ) { if ( t . options . viewerjs ) { var n = t . fm , i = t . preview , a = t . options . viewerjs , o = a . url ? n . arrayFlip ( a . mimes || [ ] ) : [ ] , r = t . window , s = t . navbar , l = function ( ) { s . css ( "bottom" , r . hasClass ( "elfinder-quicklook-fullscreen" ) ? "30px" : "" ) } ; a . url && i . on ( "update" , function ( s ) { var c , d , p , u , h = s . file ; ! o [ h . mime ] || "application/pdf" === h . mime && a . pdfNative && t . flags . pdfNative || ( s . stopImmediatePropagation ( ) , d = e ( '<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">' + n . i18n ( "nowLoading" ) + '</span><span class="elfinder-spinner"></span></div>' ) . appendTo ( t . info . find ( ".elfinder-quicklook-info" ) ) , p = e ( '<div class="elfinder-quicklook-info-progress"></div>' ) . appendTo ( d ) , u = n . openUrl ( h . hash , "sameorigin" , function ( n ) { n && ( c = e ( '<iframe class="elfinder-quicklook-preview-iframe"></iframe>' ) . css ( "background-color" , "transparent" ) . on ( "load" , function ( ) { t . hidei
title : n . i18n ( "batchRename" ) , modal : ! 0 , destroyOnClose : ! 0 , width : Math . min ( 380 , n . getUI ( ) . width ( ) - 20 ) , buttons : { } , open : function ( ) { c . on ( "input" , y ) . trigger ( "focus" ) } } , b = function ( ) { var e = c . val ( ) , t = n . splitFileExtention ( n . file ( r [ 0 ] ) . name ) [ 1 ] ; return ( "" !== e || d . is ( ":checked" ) ) && ( p . is ( ":checked" ) ? e += "*" : u . is ( ":checked" ) ? e = "*" + e + "." + t : h . is ( ":checked" ) ? e = "*." + e : t && ( e += "." + t ) ) , e } , y = function ( ) { var e = b ( ) ; "" !== e ? m . html ( n . i18n ( [ "renameMultiple" , r . length , a ( e ) ] ) ) : m . empty ( ) } , w = f . find ( "input:radio" ) . on ( "change" , y ) ; v . buttons [ n . i18n ( "btnApply" ) ] = function ( ) { var e , t , a = b ( ) ; "" !== a && ( o . elfinderdialog ( "close" ) , t = r , e = n . file ( t . shift ( ) ) , i ( void 0 , t , e , a ) ) } , v . buttons [ n . i18n ( "btnCancel" ) ] = function ( ) { o . elfinderdialog ( "close" ) } , e . fn . checkboxradio ? w . checkboxradio ( { create : function ( e , t ) { this === d . get ( 0 ) && d . prop ( "checked" , ! 0 ) . change ( ) } } ) : f . buttonset ( { create : function ( e , t ) { d . prop ( "checked" , ! 0 ) . change ( ) } } ) , o = t . fmDialog ( g , v ) } ; this . noChangeDirOnRemovedCwd = ! 0 , this . shortcuts = [ { pattern : "f2" + ( "mac" == n . OS ? " enter" : "" ) } , { pattern : "shift+f2" , description : "batchRename" , callback : function ( ) { n . selected ( ) . length > 1 && o ( ) } } ] , this . getstate = function ( i ) { var a , r , s , l , c , d , p = this . files ( i ) , u = p . length ; return u ? ( u > 1 && p [ 0 ] . phash && ( a = p [ 0 ] . phash , r = n . splitFileExtention ( p [ 0 ] . name ) [ 1 ] . toLowerCase ( ) , s = p [ 0 ] . mime ) , 1 === u && ( d = n . isRoot ( p [ 0 ] ) ) , c = 1 === u && ( n . cookieEnabled && d || ! p [ 0 ] . locked ) || n . api > 2.103 && u === e . grep ( p , function ( e ) { return ! ( l || e . locked || e . phash !== a || n . isRoot ( e ) || s !== e . mime && r !== n . splitFileExtention ( e . name ) [ 1 ] . toLowerCase ( ) ) || ( l && ( l = ! 0 ) , ! 1 ) } ) . length ? 0 : - 1 , ! d && 0 === c && n . option ( "disabledFlip" , p [ 0 ] . hash ) . rename && ( c = - 1 ) , c !== - 1 && u > 1 ? t . extra = { icon : "preference" , node : e ( "<span></span>" ) . attr ( { title : n . i18n ( "batchRename" ) } ) . on ( "click touchstart" , function ( e ) { "touchstart" === e . type && e . originalEvent . touches . length > 1 || ( e . stopPropagation ( ) , e . preventDefault ( ) , n . getUI ( ) . trigger ( "click" ) , o ( ) ) } ) } : delete t . extra , c ) : - 1 } , this . exec = function ( t , o ) { var r , s = ( n . getUI ( "cwd" ) , t || ! ! n . selected ( ) . length && n . selected ( ) || [ n . cwd ( ) . hash ] ) , l = s . length , c = n . file ( s . shift ( ) ) , d = ".elfinder-cwd-filename" , p = o || { } , u = n . cwd ( ) . hash == c . hash , h = "navbar" === p . _currentType || "files" === p . _currentType ? p . _currentType : u ? "navbar" : "files" , f = "files" !== h , m = n [ f ? "navHash2Elm" : "cwdHash2Elm" ] ( c . hash ) , g = ! f && "list" != n . storage ( "view" ) , v = function ( ) { requestAnimationFrame ( function ( ) { x && x . trigger ( "blur" ) } ) } , b = function ( ) { T . is ( ":hidden" ) || T . elfinderoverlay ( "hide" ) . off ( "click close" , A ) , z . removeClass ( "ui-front" ) . css ( "position" , "" ) . off ( "unselect." + n . namespace , v ) , g ? C && C . css ( "max-height" , "" ) : f || z . css ( "width" , "" ) . parent ( "td" ) . css ( "overflow" , "" ) } , y = e . Deferred ( ) . fail ( function ( e ) { var t = x . parent ( ) , i = n . escape ( c . i18 || c . name ) ; x . off ( ) , g && ( i = i . replace ( /([_.])/g , "​$1" ) ) , requestAnimationFrame ( function ( ) { f ? x . replaceWith ( i ) : t . length ? ( x . remove ( ) , t . html ( i ) ) : m . find ( d ) . html ( i ) } ) , e && n . error ( e ) } ) . always ( function ( ) { b ( ) , n . unbind ( "resize" , j ) , n . enable ( ) } ) , w = function ( t ) { var o = e . trim ( x . val ( ) ) , r = ( n . splitFileExtention ( o ) , ! 0 ) , d = function ( ) { x . off ( ) , b ( ) , f ? x . replaceWith ( n . escape ( o ) ) : C . html ( n . escape ( o ) ) , i ( y , s , c , o ) } ; if ( T . is ( ":hidden" ) || z . css ( "z-index" , "" ) , "" === o ) { if ( ! n . isRoot ( c ) ) return A ( ) ; f ? x . replaceWith ( n . escape ( c . name ) ) : C . html ( n . escape ( c . name ) ) } if ( ! O && z . length ) { if ( x . off ( "blur" ) , 1 === l && o === c . name ) return y . reject ( ) ; if ( n . options . validName && n . options . validName . test ) try { r = n . options . validName . test ( o ) } catch ( t ) { r = ! 1 } if ( "." === o || ".." === o || ! r ) return O = ! 0 , n . error ( "directory" === c . mime ? "errInvDirname" : "errInvName" , { modal : ! 0 , close : function ( ) { setTimeout ( k , 120 ) } } ) , ! 1 ; if ( 1 === l && n . fileByName ( o , c . phash ) ) return O = ! 0 , n . error ( [ "errExists" , o ] , { modal : ! 0 , close : function ( ) { setTimeout ( k , 120 ) } } ) , ! 1 ; 1 === l ? d ( ) : ( n . confirm ( { title : "cmdrename" , text : [ "renameMultiple" , l , a ( o , [ c . hash ] . concat ( s ) ) ] , accept : { label : "btnYes" , callback : d } , cancel : { label : "btnCancel" , callback : function ( ) { setTimeout ( function ( ) { O = ! 0 , k ( ) } , 120 ) } } } ) , setTimeout ( function ( ) { n . trigger ( "unselectfiles" , { files : n . selected ( ) } ) . trigger ( "selectfiles" , { files : [ c . hash ] . concat ( s ) } ) } , 120 ) ) } } , x = e ( g ? "<textarea></textarea>" : '<input type="text"/>' ) . on ( "keyup text" , function ( ) { g ? ( this . style . height = "1px" , this . style . height = this . scrollHeight + "px" ) : r && ( this . style . width = r + "px" , this . scrollWidth > r && ( this . style . width =
var t = function ( e , t ) { var n = 0 ; for ( n in t ) if ( "undefined" != typeof e [ t [ n ] ] ) return t [ n ] ; return e [ t [ n ] ] = "" , t [ n ] } ; if ( e . cssHooks . rotate = { get : function ( t , n , i ) { return e ( t ) . rotate ( ) } , set : function ( t , n ) { return e ( t ) . rotate ( n ) , n } } , e . cssHooks . transform = { get : function ( e , n , i ) { var a = t ( e . style , [ "WebkitTransform" , "MozTransform" , "OTransform" , "msTransform" , "transform" ] ) ; return e . style [ a ] } , set : function ( e , n ) { var i = t ( e . style , [ "WebkitTransform" , "MozTransform" , "OTransform" , "msTransform" , "transform" ] ) ; return e . style [ i ] = n , n } } , e . fn . rotate = function ( e ) { var t ; return "undefined" == typeof e ? window . opera ? ( t = this . css ( "transform" ) . match ( /rotate\((.*?)\)/ ) , t && t [ 1 ] ? Math . round ( 180 * parseFloat ( t [ 1 ] ) / Math . PI ) : 0 ) : ( t = this . css ( "transform" ) . match ( /rotate\((.*?)\)/ ) , t && t [ 1 ] ? parseInt ( t [ 1 ] ) : 0 ) : ( this . css ( "transform" , this . css ( "transform" ) . replace ( /none|rotate\(.*?\)/ , "" ) + "rotate(" + parseInt ( e ) + "deg)" ) , this ) } , e . fx . step . rotate = function ( t ) { 0 == t . state && ( t . start = e ( t . elem ) . rotate ( ) , t . now = t . start ) , e ( t . elem ) . rotate ( t . now ) } , "undefined" == typeof window . addEventListener && "undefined" == typeof document . getElementsByClassName ) { var n = function ( e ) { for ( var t = e , n = t . offsetLeft , i = t . offsetTop ; t . offsetParent && ( t = t . offsetParent , t == document . body || "static" == t . currentStyle . position ) ; ) t != document . body && t != document . documentElement && ( n -= t . scrollLeft , i -= t . scrollTop ) , n += t . offsetLeft , i += t . offsetTop ; return { x : n , y : i } } , i = function ( e ) { if ( "static" == e . currentStyle . position ) { var t = n ( e ) ; e . style . position = "absolute" , e . style . left = t . x + "px" , e . style . top = t . y + "px" } } , a = function ( e , t ) { var n , a = 1 , o = 1 , r = 1 , s = 1 ; if ( "undefined" != typeof e . style . msTransform ) return ! 0 ; i ( e ) , n = t . match ( /rotate\((.*?)\)/ ) ; var l = n && n [ 1 ] ? parseInt ( n [ 1 ] ) : 0 ; l %= 360 , l < 0 && ( l = 360 + l ) ; var c = l * Math . PI / 180 , d = Math . cos ( c ) , p = Math . sin ( c ) ; a *= d , o *= - p , r *= p , s *= d , e . style . filter = ( e . style . filter || "" ) . replace ( /progid:DXImageTransform\.Microsoft\.Matrix\([^)]*\)/ , "" ) + ( "progid:DXImageTransform.Microsoft.Matrix(M11=" + a + ",M12=" + o + ",M21=" + r + ",M22=" + s + ",FilterType='bilinear',sizingMethod='auto expand')" ) ; var u = parseInt ( e . style . width || e . width || 0 ) , h = parseInt ( e . style . height || e . height || 0 ) ; c = l * Math . PI / 180 ; var f = Math . abs ( Math . cos ( c ) ) , m = Math . abs ( Math . sin ( c ) ) , g = ( u - ( u * f + h * m ) ) / 2 , v = ( h - ( u * m + h * f ) ) / 2 ; return e . style . marginLeft = Math . floor ( g ) + "px" , e . style . marginTop = Math . floor ( v ) + "px" , ! 0 } , o = e . cssHooks . transform . set ; e . cssHooks . transform . set = function ( e , t ) { return o . apply ( this , [ e , t ] ) , a ( e , t ) , t } } } ( jQuery ) , ( i . prototype . commands . restore = function ( ) { "use strict" ; var t = this , n = this . fm , i = 0 , a = function ( t ) { var o , r = e . Deferred ( ) , s = [ ] , l = [ ] , c = [ ] , d = [ ] ; return r . _xhrReject = function ( ) { e . each ( c , function ( ) { this && this . reject && this . reject ( ) } ) , o && o . _xhrReject ( ) } , e . each ( t , function ( e , t ) { "directory" === t . mime ? s . push ( t ) : l . push ( t ) } ) , s . length ? ( e . each ( s , function ( e , t ) { c . push ( n . request ( { data : { cmd : "open" , target : t . hash } , preventDefault : ! 0 , asNotOpen : ! 0 } ) ) , d [ e ] = t . hash } ) , e . when . apply ( e , c ) . fail ( function ( ) { r . reject ( ) } ) . done ( function ( ) { var t = [ ] ; e . each ( arguments , function ( e , n ) { n . files && ( n . files . length ? t = t . concat ( n . files ) : t . push ( { hash : "fakefile_" + i ++ , phash : d [ e ] , mime : "fakefile" , name : "fakefile" , ts : 0 } ) ) } ) , n . cache ( t ) , o = a ( t ) . done ( function ( e ) { l = l . concat ( e ) , r . resolve ( l ) } ) } ) ) : r . resolve ( l ) , r } , o = function ( t , o , r , s ) { var l , c , d = { } , p = [ ] , u = ! 1 , h = [ ] , f = s || { } , m = + new Date ; n . lockfiles ( { files : r } ) , h = e . map ( o , function ( e ) { return "directory" === e . mime ? e . hash : null } ) , t . done ( function ( ) { h && n . exec ( "rm" , h , { forceRm : ! 0 , quiet : ! 0 } ) } ) . always ( function ( ) { n . unlockfiles ( { files : r } ) } ) , l = setTimeout ( function ( ) { n . notify ( { type : "search" , id : m , cnt : 1 , hideCnt : ! 0 , cancel : function ( ) { c && c . _xhrReject ( ) , t . reject ( ) } } ) } , n . notifyDelay ) , i = 0 , c = a ( o ) . always ( function ( ) { l && clearTimeout ( l ) , n . notify ( { type : "search" , id : m , cnt : - 1 , hideCnt : ! 0 } ) } ) . fail ( function ( ) { t . reject ( "errRestore" , "errFileNotFound" ) } ) . done ( function ( i ) { var a = [ "errRestore" , "errFolderNotFound" ] , o = "" ; i . length ? ( e . each ( i , function ( t , i ) { for ( var a , r , s , l = i . phash ; l ; ) { if ( r = n . trashes [ l ] ) { if ( ! d [ r ] ) { if ( u ) return p . push ( i . hash ) , null ; d [ r ] = { } , u = ! 0 } s = n . path ( i . hash ) . substr ( n . path ( l ) . length ) . replace ( /\\/g , "/" ) , s = s . replace ( /\/[^\/]+?$/ , "" ) , "" === s && ( s = "/" ) , d [ r ] [ s ] || ( d [ r ] [ s ] = [ ] ) , "fakefile" === i . mime ? n . updateCache ( { removed : [ i . hash ] } ) : d [ r ] [ s ] . push ( i . hash ) , ( ! o || o . length > s . length ) && ( o = s ) ; break } a = n . fil