2017-03-15 19:43:10 +00:00
/ * !
* elFinder - file manager for web
* Version 2.0 rc1 ( 2012 - 04 - 10 )
* http : //elfinder.org
*
* Copyright 2009 - 2012 , Studio 42
* Licensed under a 3 clauses BSD license
* /
( function ( a ) { window . elFinder = function ( b , c ) { this . time ( "load" ) ; var d = this , b = a ( b ) , e = a ( "<div/>" ) . append ( b . contents ( ) ) , f = b . attr ( "style" ) , g = b . attr ( "id" ) || "" , h = "elfinder-" + ( g || Math . random ( ) . toString ( ) . substr ( 2 , 7 ) ) , i = "mousedown." + h , j = "keydown." + h , k = "keypress." + h , l = ! 0 , m = ! 0 , n = [ "enable" , "disable" , "load" , "open" , "reload" , "select" , "add" , "remove" , "change" , "dblclick" , "getfile" , "lockfiles" , "unlockfiles" , "dragstart" , "dragstop" ] , o = { } , p = "" , q = { path : "" , url : "" , tmbUrl : "" , disabled : [ ] , separator : "/" , archives : [ ] , extract : [ ] , copyOverwrite : ! 0 , tmb : ! 1 } , r = { } , s = [ ] , t = { } , u = { } , v = [ ] , w = [ ] , x = [ ] , y = new d . command ( d ) , z = "auto" , A = 400 , B = a ( document . createElement ( "audio" ) ) . hide ( ) . appendTo ( "body" ) [ 0 ] , C , D = function ( b ) { if ( b . init ) r = { } ; else for ( var c in r ) r . hasOwnProperty ( c ) && r [ c ] . mime != "directory" && r [ c ] . phash == p && a . inArray ( c , w ) === - 1 && delete r [ c ] ; p = b . cwd . hash , E ( b . files ) , r [ p ] || E ( [ b . cwd ] ) , d . lastDir ( p ) } , E = function ( a ) { var b = a . length , c ; while ( b -- ) c = a [ b ] , c . name && c . hash && c . mime && ( r [ c . hash ] = c ) } , F = function ( b ) { var c = b . keyCode , e = ! ! b . ctrlKey || ! ! b . metaKey ; l && ( a . each ( u , function ( a , f ) { f . type == b . type && f . keyCode == c && f . shiftKey == b . shiftKey && f . ctrlKey == e && f . altKey == b . altKey && ( b . preventDefault ( ) , b . stopPropagation ( ) , f . callback ( b , d ) , d . debug ( "shortcut-exec" , a + " : " + f . description ) ) } ) , c == 9 && b . preventDefault ( ) ) } , G = new Date , H , I ; this . api = null , this . newAPI = ! 1 , this . oldAPI = ! 1 , this . OS = navigator . userAgent . indexOf ( "Mac" ) !== - 1 ? "mac" : navigator . userAgent . indexOf ( "Win" ) !== - 1 ? "win" : "other" , this . options = a . extend ( ! 0 , { } , this . _options , c || { } ) , c . ui && ( this . options . ui = c . ui ) , c . commands && ( this . options . commands = c . commands ) , c . uiOptions && c . uiOptions . toolbar && ( this . options . uiOptions . toolbar = c . uiOptions . toolbar ) , a . extend ( this . options . contextmenu , c . contextmenu ) , this . requestType = /^(get|post)$/i . test ( this . options . requestType ) ? this . options . requestType . toLowerCase ( ) : "get" , this . customData = a . isPlainObject ( this . options . customData ) ? this . options . customData : { } , this . id = g , this . uploadURL = c . urlUpload || c . url , this . namespace = h , this . lang = this . i18 [ this . options . lang ] && this . i18 [ this . options . lang ] . messages ? this . options . lang : "en" , I = this . lang == "en" ? this . i18 . en : a . extend ( ! 0 , { } , this . i18 . en , this . i18 [ this . lang ] ) , this . direction = I . direction , this . messages = I . messages , this . dateFormat = this . options . dateFormat || I . dateFormat , this . fancyFormat = this . options . fancyDateFormat || I . fancyDateFormat , this . today = ( new Date ( G . getFullYear ( ) , G . getMonth ( ) , G . getDate ( ) ) ) . getTime ( ) / 1e3 , this . yesterday = this . today - 86400 , H = this . options . UTCDate ? "UTC" : "" , this . getHours = "get" + H + "Hours" , this . getMinutes = "get" + H + "Minutes" , this . getSeconds = "get" + H + "Seconds" , this . getDate = "get" + H + "Date" , this . getDay = "get" + H + "Day" , this . getMonth = "get" + H + "Month" , this . getFullYear = "get" + H + "FullYear" , this . cssClass = "ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-" + ( this . direction == "rtl" ? "rtl" : "ltr" ) + " " + this . options . cssClass , this . storage = function ( ) { try { return "localStorage" in window && window . localStorage !== null ? d . localStorage : d . cookie } catch ( a ) { return d . cookie } } ( ) , this . notifyDelay = this . options . notifyDelay > 0 ? parseInt ( this . options . notifyDelay ) : 500 , this . draggable = { appendTo : "body" , addClasses : ! 0 , delay : 30 , revert : ! 0 , refreshPositions : ! 0 , cursor : "move" , cursorAt : { left : 50 , top : 47 } , drag : function ( a , b ) { b . helper . toggleClass ( "elfinder-drag-helper-plus" , a . shiftKey || a . ctrlKey || a . metaKey ) } , stop : function ( ) { d . trigger ( "focus" ) . trigger ( "dragstop" ) } , helper : function ( b , c ) { var e = this . id ? a ( this ) : a ( this ) . parents ( "[id]:first" ) , f = a ( '<div class="elfinder-drag-helper"><span class="elfinder-drag-helper-icon-plus"/></div>' ) , g = function ( a ) { return '<div class="elfinder-cwd-icon ' + d . mime2class ( a ) + ' ui-corner-all"/>' } , h , i ; return d . trigger ( "dragstart" , { target : e [ 0 ] , originalEvent : b } ) , h = e . is ( "." + d . res ( "class" , "cwdfile" ) ) ? d . selected ( ) : [ d . navId2Hash ( e . attr ( "id" ) ) ] , f . append ( g ( r [ h [ 0 ] ] . mime ) ) . data ( "files" , h ) , ( i = h . length ) > 1 && f . append ( g ( r [ h [ i - 1 ] ] . mime ) + '<span class="elfinder-drag-num">' + i + "</span>" ) , f } } , this . droppable = { tolerance : "pointer" , accept : ".elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file" , hoverClass : this . res ( "class" , "adroppable" ) , drop : function ( b , c ) { var e = a ( this ) , f = a . map ( c . helper . data ( "files" ) || [ ] , function ( a ) { retu
e . push ( a ) } ) , a . each ( c , function ( b , c ) { var e = r [ b ] ; e ? a . each ( c , function ( a ) { if ( c [ a ] != e [ a ] ) return f . push ( c ) , ! 1 } ) : d . push ( c ) } ) , a . each ( e , function ( b , d ) { var h = r [ d ] , i = h . phash ; i && h . mime == "directory" && a . inArray ( i , e ) === - 1 && c [ i ] && ! g ( i ) && f . push ( c [ i ] ) } ) , { added : d , removed : e , changed : f } } , this . sync = function ( ) { var b = this , c = a . Deferred ( ) . done ( function ( ) { b . trigger ( "sync" ) } ) , d = { data : { cmd : "open" , init : 1 , target : p , tree : this . ui . tree ? 1 : 0 } , preventDefault : ! 0 } , e = { data : { cmd : "parents" , target : p } , preventDefault : ! 0 } ; return a . when ( this . request ( d ) , this . request ( e ) ) . fail ( function ( a ) { c . reject ( a ) , a && b . request ( { data : { cmd : "open" , target : b . lastDir ( "" ) , tree : 1 , init : 1 } , notify : { type : "open" , cnt : 1 , hideCnt : ! 0 } } ) } ) . done ( function ( a , d ) { var e = b . diff ( a . files . concat ( d && d . tree ? d . tree : [ ] ) ) ; return e . removed . length && b . remove ( e ) , e . added . length && b . add ( e ) , e . changed . length && b . change ( e ) , c . resolve ( e ) } ) , c } , this . upload = function ( a ) { return this . transport . upload ( a , this ) } , this . bind = function ( a , b ) { var c ; if ( typeof b == "function" ) { a = ( "" + a ) . toLowerCase ( ) . split ( /\s+/ ) ; for ( c = 0 ; c < a . length ; c ++ ) t [ a [ c ] ] === void 0 && ( t [ a [ c ] ] = [ ] ) , t [ a [ c ] ] . push ( b ) } return this } , this . unbind = function ( a , b ) { var c = t [ ( "" + a ) . toLowerCase ( ) ] || [ ] , d = c . indexOf ( b ) ; return d > - 1 && c . splice ( d , 1 ) , b = null , this } , this . trigger = function ( b , c ) { var b = b . toLowerCase ( ) , d = t [ b ] || [ ] , e , f ; this . debug ( "event-" + b , c ) ; if ( d . length ) { b = a . Event ( b ) ; for ( e = 0 ; e < d . length ; e ++ ) { b . data = a . extend ( ! 0 , { } , c ) ; try { if ( d [ e ] ( b , this ) === ! 1 || b . isDefaultPrevented ( ) ) { this . debug ( "event-stoped" , b . type ) ; break } } catch ( g ) { window . console && window . console . log && window . console . log ( g ) } } } return this } , this . shortcut = function ( b ) { var c , d , e , f , g ; if ( this . options . allowShortcuts && b . pattern && a . isFunction ( b . callback ) ) { c = b . pattern . toUpperCase ( ) . split ( /\s+/ ) ; for ( f = 0 ; f < c . length ; f ++ ) d = c [ f ] , g = d . split ( "+" ) , e = ( e = g . pop ( ) ) . length == 1 ? e > 0 ? e : e . charCodeAt ( 0 ) : a . ui . keyCode [ e ] , e && ! u [ d ] && ( u [ d ] = { keyCode : e , altKey : a . inArray ( "ALT" , g ) != - 1 , ctrlKey : a . inArray ( "CTRL" , g ) != - 1 , shiftKey : a . inArray ( "SHIFT" , g ) != - 1 , type : b . type || "keydown" , callback : b . callback , description : b . description , pattern : d } ) } return this } , this . shortcuts = function ( ) { var b = [ ] ; return a . each ( u , function ( a , c ) { b . push ( [ c . pattern , d . i18n ( c . description ) ] ) } ) , b } , this . clipboard = function ( b , c ) { var d = function ( ) { return a . map ( v , function ( a ) { return a . hash } ) } ; return b !== void 0 && ( v . length && this . trigger ( "unlockfiles" , { files : d ( ) } ) , w = [ ] , v = a . map ( b || [ ] , function ( a ) { var b = r [ a ] ; return b ? ( w . push ( a ) , { hash : a , phash : b . phash , name : b . name , mime : b . mime , read : b . read , locked : b . locked , cut : ! ! c } ) : null } ) , this . trigger ( "changeclipboard" , { clipboard : v . slice ( 0 , v . length ) } ) , c && this . trigger ( "lockfiles" , { files : d ( ) } ) ) , v . slice ( 0 , v . length ) } , this . isCommandEnabled = function ( b ) { return this . _commands [ b ] ? a . inArray ( b , q . disabled ) === - 1 : ! 1 } , this . exec = function ( b , c , d ) { return this . _commands [ b ] && this . isCommandEnabled ( b ) ? this . _commands [ b ] . exec ( c , d ) : a . Deferred ( ) . reject ( "No such command" ) } , this . dialog = function ( c , d ) { return a ( "<div/>" ) . append ( c ) . appendTo ( b ) . elfinderdialog ( d ) } , this . getUI = function ( a ) { return this . ui [ a ] || b } , this . command = function ( a ) { return a === void 0 ? this . _commands : this . _commands [ a ] } , this . resize = function ( a , c ) { b . css ( "width" , a ) . height ( c ) . trigger ( "resize" ) , this . trigger ( "resize" , { width : b . width ( ) , height : b . height ( ) } ) } , this . restoreSize = function ( ) { this . resize ( z , A ) } , this . show = function ( ) { b . show ( ) , this . enable ( ) . trigger ( "show" ) } , this . hide = function ( ) { this . disable ( ) . trigger ( "hide" ) , b . hide ( ) } , this . destroy = function ( ) { b && b [ 0 ] . elfinder && ( this . trigger ( "destroy" ) . disable ( ) , t = { } , u = { } , a ( document ) . add ( b ) . unbind ( "." + this . namespace ) , d . trigger = function ( ) { } , b . children ( ) . remove ( ) , b . append ( e . contents ( ) ) . removeClass ( this . cssClass ) . attr ( "style" , f ) , b [ 0 ] . elfinder = null , C && clearInterval ( C ) ) } , this . setSort ( this . options . sort , this . options . sortDirect ) ; if ( ! ( a . fn . selectable && a . fn . draggable && a . fn . droppable ) ) return alert ( this . i18n ( "errJqui" ) ) ; if ( ! b . length ) return alert ( this . i18n ( "errNode" ) ) ; if ( ! this . options . url ) return alert ( this . i18n ( "errURL" ) ) ; a . extend ( a . ui . keyCode , { F1 : 112 , F2 : 113 , F3 : 114 , F4 : 115 , F5 : 116 , F6 : 117 , F7 : 118 , F8 : 119 , F9 : 120 } ) , this . dragUpload = ! 1 , this . xhrUpload = typeof XMLHttpRequestUpload != "undefined" && typeof File != "undefined" && typeof FormData != "undefined" , this . transport = { } , typeof this . options . transp
[ ] , function ( c , e ) { var f = "elfinder" + e , g = d . options . uiOptions [ e ] || { } ; ! d . ui [ e ] && a . fn [ f ] && ( d . ui [ e ] = a ( "<" + ( g . tag || "div" ) + "/>" ) . appendTo ( b ) [ f ] ( d , g ) ) } ) , b [ 0 ] . elfinder = this , this . options . resizable && a . fn . resizable && b . resizable ( { handles : "se" , minWidth : 300 , minHeight : 200 } ) , this . options . width && ( z = this . options . width ) , this . options . height && ( A = parseInt ( this . options . height ) ) , d . resize ( z , A ) , a ( document ) . bind ( "click." + this . namespace , function ( c ) { l && ! a ( c . target ) . closest ( b ) . length && d . disable ( ) } ) . bind ( j + " " + k , F ) , this . trigger ( "init" ) . request ( { data : { cmd : "open" , target : d . lastDir ( ) , init : 1 , tree : this . ui . tree ? 1 : 0 } , preventDone : ! 0 , notify : { type : "open" , cnt : 1 , hideCnt : ! 0 } , freeze : ! 0 } ) . fail ( function ( ) { d . trigger ( "fail" ) . disable ( ) . lastDir ( "" ) , t = { } , u = { } , a ( document ) . add ( b ) . unbind ( "." + this . namespace ) , d . trigger = function ( ) { } } ) . done ( function ( b ) { d . load ( ) . debug ( "api" , d . api ) , b = a . extend ( ! 0 , { } , b ) , D ( b ) , d . trigger ( "open" , b ) } ) , this . one ( "load" , function ( ) { b . trigger ( "resize" ) , d . options . sync > 1e3 && ( C = setInterval ( function ( ) { d . sync ( ) } , d . options . sync ) ) } ) } , elFinder . prototype = { res : function ( a , b ) { return this . resources [ a ] && this . resources [ a ] [ b ] } , i18 : { en : { translator : "" , language : "English" , direction : "ltr" , dateFormat : "d.m.Y H:i" , fancyDateFormat : "$1 H:i" , messages : { } } , months : [ "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" ] , monthsShort : [ "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" ] , days : [ "Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" ] , daysShort : [ "Sun" , "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat" ] } , kinds : { unknown : "Unknown" , directory : "Folder" , symlink : "Alias" , "symlink-broken" : "AliasBroken" , "application/x-empty" : "TextPlain" , "application/postscript" : "Postscript" , "application/vnd.ms-office" : "MsOffice" , "application/vnd.ms-word" : "MsWord" , "application/vnd.ms-excel" : "MsExcel" , "application/vnd.ms-powerpoint" : "MsPP" , "application/pdf" : "PDF" , "application/xml" : "XML" , "application/vnd.oasis.opendocument.text" : "OO" , "application/x-shockwave-flash" : "AppFlash" , "application/flash-video" : "Flash video" , "application/x-bittorrent" : "Torrent" , "application/javascript" : "JS" , "application/rtf" : "RTF" , "application/rtfd" : "RTF" , "application/x-font-ttf" : "TTF" , "application/x-font-otf" : "OTF" , "application/x-rpm" : "RPM" , "application/x-web-config" : "TextPlain" , "application/xhtml+xml" : "HTML" , "application/docbook+xml" : "DOCBOOK" , "application/x-awk" : "AWK" , "application/x-gzip" : "GZIP" , "application/x-bzip2" : "BZIP" , "application/zip" : "ZIP" , "application/x-zip" : "ZIP" , "application/x-rar" : "RAR" , "application/x-tar" : "TAR" , "application/x-7z-compressed" : "7z" , "application/x-jar" : "JAR" , "text/plain" : "TextPlain" , "text/x-php" : "PHP" , "text/html" : "HTML" , "text/javascript" : "JS" , "text/css" : "CSS" , "text/rtf" : "RTF" , "text/rtfd" : "RTF" , "text/x-c" : "C" , "text/x-csrc" : "C" , "text/x-chdr" : "CHeader" , "text/x-c++" : "CPP" , "text/x-c++src" : "CPP" , "text/x-c++hdr" : "CPPHeader" , "text/x-shellscript" : "Shell" , "application/x-csh" : "Shell" , "text/x-python" : "Python" , "text/x-java" : "Java" , "text/x-java-source" : "Java" , "text/x-ruby" : "Ruby" , "text/x-perl" : "Perl" , "text/x-sql" : "SQL" , "text/xml" : "XML" , "text/x-comma-separated-values" : "CSV" , "image/x-ms-bmp" : "BMP" , "image/jpeg" : "JPEG" , "image/gif" : "GIF" , "image/png" : "PNG" , "image/tiff" : "TIFF" , "image/x-targa" : "TGA" , "image/vnd.adobe.photoshop" : "PSD" , "image/xbm" : "XBITMAP" , "image/pxm" : "PXM" , "audio/mpeg" : "AudioMPEG" , "audio/midi" : "AudioMIDI" , "audio/ogg" : "AudioOGG" , "audio/mp4" : "AudioMPEG4" , "audio/x-m4a" : "AudioMPEG4" , "audio/wav" : "AudioWAV" , "audio/x-mp3-playlist" : "AudioPlaylist" , "video/x-dv" : "VideoDV" , "video/mp4" : "VideoMPEG4" , "video/mpeg" : "VideoMPEG" , "video/x-msvideo" : "VideoAVI" , "video/quicktime" : "VideoMOV" , "video/x-ms-wmv" : "VideoWM" , "video/x-flv" : "VideoFlash" , "video/x-matroska" : "VideoMKV" , "video/ogg" : "VideoOGG" } , rules : { defaults : function ( b ) { return ! b || b . added && ! a . isArray ( b . added ) || b . removed && ! a . isArray ( b . removed ) || b . changed && ! a . isArray ( b . changed ) ? ! 1 : ! 0 } , open : function ( b ) { return b && b . cwd && b . files && a . isPlainObject ( b . cwd ) && a . isArray ( b . files ) } , tree : function ( b ) { return b && b . tree && a . isArray ( b . tree ) } , parents : function ( b ) { return b && b . tree && a . isArray ( b . tree ) } , tmb : function ( b ) { return b && b . image
e . reject ( [ "errConnect" , "errAbort" ] ) } , f . send ( g ) ; if ( ! a . browser . safari || ! b . files ) m = l ( ) ; return e } } , one : function ( b , c ) { var d = this , e = a . proxy ( c , function ( a ) { return setTimeout ( function ( ) { d . unbind ( a . type , e ) } , 3 ) , c . apply ( this , arguments ) } ) ; return this . bind ( b , e ) } , localStorage : function ( a , b ) { var c = window . localStorage ; return a = "elfinder-" + a + this . id , b !== void 0 && c . setItem ( a , b ) , c . getItem ( a ) || "" } , cookie : function ( b , c ) { var d , e , f , g ; b = "elfinder-" + b + this . id ; if ( c === void 0 ) { if ( document . cookie && document . cookie != "" ) { f = document . cookie . split ( ";" ) , b += "=" ; for ( g = 0 ; g < f . length ; g ++ ) { f [ g ] = a . trim ( f [ g ] ) ; if ( f [ g ] . substring ( 0 , b . length ) == b ) return decodeURIComponent ( f [ g ] . substring ( b . length ) ) } } return "" } return e = a . extend ( { } , this . options . cookie ) , c === null && ( c = "" , e . expires = - 1 ) , typeof e . expires == "number" && ( d = new Date , d . setTime ( d . getTime ( ) + e . expires * 864e5 ) , e . expires = d ) , document . cookie = b + "=" + encodeURIComponent ( c ) + "; expires=" + e . expires . toUTCString ( ) + ( e . path ? "; path=" + e . path : "" ) + ( e . domain ? "; domain=" + e . domain : "" ) + ( e . secure ? "; secure" : "" ) , c } , lastDir : function ( a ) { return this . options . rememberLastDir ? this . storage ( "lastdir" , a ) : "" } , _node : a ( "<span/>" ) , escape : function ( a ) { return this . _node . text ( a ) . html ( ) } , normalize : function ( b ) { var c = function ( a ) { return a && a . hash && a . name && a . mime ? ( a . mime == "application/x-empty" && ( a . mime = "text/plain" ) , a ) : null } ; return b . files && ( b . files = a . map ( b . files , c ) ) , b . tree && ( b . tree = a . map ( b . tree , c ) ) , b . added && ( b . added = a . map ( b . added , c ) ) , b . changed && ( b . changed = a . map ( b . changed , c ) ) , b . api && ( b . init = ! 0 ) , b } , compare : function ( a , b ) { var c = this . sort , d = this . sortDirect == "asc" , e = d ? a : b , f = d ? b : a , g = this . mime2kind ( e . mime ) . toLowerCase ( ) , h = this . mime2kind ( f . mime ) . toLowerCase ( ) , i = a . mime == "directory" , j = b . mime == "directory" , k = e . name . toLowerCase ( ) , l = f . name . toLowerCase ( ) , m = i ? 0 : parseInt ( e . size ) || 0 , n = j ? 0 : parseInt ( f . size ) || 0 , o = e . ts || e . date || "" , p = f . ts || f . date || "" ; if ( c <= 4 ) { if ( i && ! j ) return - 1 ; if ( ! i && j ) return 1 } return c != 2 && c != 6 || g == h ? c != 3 && c != 7 || m == n ? c != 4 && c != 8 || o == p ? e . name . localeCompare ( f . name ) : o > p ? 1 : - 1 : m > n ? 1 : - 1 : g . localeCompare ( h ) } , sortFiles : function ( b ) { return b . sort ( a . proxy ( this . compare , this ) ) } , notify : function ( b ) { var c = b . type , d = this . messages [ "ntf" + c ] ? this . i18n ( "ntf" + c ) : this . i18n ( "ntfsmth" ) , e = this . ui . notify , f = e . children ( ".elfinder-notify-" + c ) , g = '<div class="elfinder-notify elfinder-notify-{type}"><span class="elfinder-dialog-icon elfinder-dialog-icon-{type}"/><span class="elfinder-notify-msg">{msg}</span> <span class="elfinder-notify-cnt"/><div class="elfinder-notify-progressbar"><div class="elfinder-notify-progress"/></div></div>' , h = b . cnt , i = b . progress >= 0 && b . progress <= 100 ? b . progress : 0 , j , k , l ; return c ? ( f . length || ( f = a ( g . replace ( /\{type\}/g , c ) . replace ( /\{msg\}/g , d ) ) . appendTo ( e ) . data ( "cnt" , 0 ) , i && f . data ( { progress : 0 , total : 0 } ) ) , j = h + parseInt ( f . data ( "cnt" ) ) , j > 0 ? ( ! b . hideCnt && f . children ( ".elfinder-notify-cnt" ) . text ( "(" + j + ")" ) , e . is ( ":hidden" ) && e . elfinderdialog ( "open" ) , f . data ( "cnt" , j ) , i < 100 && ( k = f . data ( "total" ) ) >= 0 && ( l = f . data ( "progress" ) ) >= 0 && ( k = h + parseInt ( f . data ( "total" ) ) , l = i + l , i = parseInt ( l / k ) , f . data ( { progress : l , total : k } ) , e . find ( ".elfinder-notify-progress" ) . animate ( { width : ( i < 100 ? i : 100 ) + "%" } , 20 ) ) ) : ( f . remove ( ) , ! e . children ( ) . length && e . elfinderdialog ( "close" ) ) , this ) : this } , confirm : function ( b ) { var c = ! 1 , d = { cssClass : "elfinder-dialog-confirm" , modal : ! 0 , resizable : ! 1 , title : this . i18n ( b . title || "confirmReq" ) , buttons : { } , close : function ( ) { ! c && b . cancel . callback ( ) , a ( this ) . elfinderdialog ( "destroy" ) } } , e = this . i18n ( "apllyAll" ) , f , g ; return b . reject && ( d . buttons [ this . i18n ( b . reject . label ) ] = function ( ) { b . reject . callback ( ! ! g && ! ! g . prop ( "checked" ) ) , c = ! 0 , a ( this ) . elfinderdialog ( "close" ) } ) , d . buttons [ this . i18n ( b . accept . label ) ] = function ( ) { b . accept . callback ( ! ! g && ! ! g . prop ( "checked" ) ) , c = ! 0 , a ( this ) . elfinderdialog ( "close" ) } , d . buttons [ this . i18n ( b . cancel . label ) ] = function ( ) { a ( this ) . elfinderdialog ( "close" ) } , b . all && ( b . reject && ( d . width = 370 ) , d . create = function ( ) { g = a ( '<input type="checkbox" />' ) , a ( this ) . next ( ) . children ( ) . before ( a ( "<label>" + e + "</label>" ) . prepend ( g ) ) } , d . open = function ( ) { var b = a ( this ) . next ( ) , c = parseInt ( b . children ( ":first" ) . outerWidth ( ) + b . children ( ":last" ) . outerWidth ( ) ) ; c > parseInt ( b . width ( ) ) && a ( this ) . closest ( ".elfinder-dialog" ) . width ( c + 30 ) } ) , this . dialog ( ' < span c
: 0 , customData : { } , handlers : { } , lang : "en" , cssClass : "" , commands : [ "open" , "reload" , "home" , "up" , "back" , "forward" , "getfile" , "quicklook" , "download" , "rm" , "duplicate" , "rename" , "mkdir" , "mkfile" , "upload" , "copy" , "cut" , "paste" , "edit" , "extract" , "archive" , "search" , "info" , "view" , "help" , "resize" , "sort" ] , commandsOptions : { getfile : { onlyURL : ! 0 , multiple : ! 1 , folders : ! 1 , oncomplete : "" } , upload : { ui : "uploadbutton" } , quicklook : { autoplay : ! 0 , jplayer : "extensions/jplayer" } , edit : { mimes : [ ] , editors : [ ] } , help : { view : [ "about" , "shortcuts" , "help" ] } } , getFileCallback : null , ui : [ "toolbar" , "tree" , "path" , "stat" ] , uiOptions : { toolbar : [ [ "back" , "forward" ] , [ "mkdir" , "mkfile" , "upload" ] , [ "open" , "download" , "getfile" ] , [ "info" ] , [ "quicklook" ] , [ "copy" , "cut" , "paste" ] , [ "rm" ] , [ "duplicate" , "rename" , "edit" , "resize" ] , [ "extract" , "archive" ] , [ "search" ] , [ "view" , "sort" ] , [ "help" ] ] , tree : { openRootOnLoad : ! 0 , syncTree : ! 0 } , navbar : { minWidth : 150 , maxWidth : 500 } } , onlyMimes : [ ] , sort : "nameDirsFirst" , sortDirect : "asc" , clientFormatDate : ! 0 , UTCDate : ! 1 , dateFormat : "" , fancyDateFormat : "" , width : "auto" , height : 400 , resizable : ! 0 , notifyDelay : 500 , allowShortcuts : ! 0 , rememberLastDir : ! 0 , showFiles : 30 , showThreshold : 50 , validName : ! 1 , sync : 0 , loadTmbs : 5 , cookie : { expires : 30 , domain : "" , path : "/" , secure : ! 1 } , contextmenu : { navbar : [ "open" , "|" , "copy" , "cut" , "paste" , "duplicate" , "|" , "rm" , "|" , "info" ] , cwd : [ "reload" , "back" , "|" , "upload" , "mkdir" , "mkfile" , "paste" , "|" , "sort" , "|" , "info" ] , files : [ "getfile" , "|" , "open" , "quicklook" , "|" , "download" , "|" , "copy" , "cut" , "paste" , "duplicate" , "|" , "rm" , "|" , "edit" , "rename" , "resize" , "|" , "archive" , "extract" , "|" , "info" ] } , debug : [ "error" , "warning" , "event-destroy" ] } , elFinder . prototype . history = function ( b ) { var c = this , d = ! 0 , e = [ ] , f , g = function ( ) { e = [ b . cwd ( ) . hash ] , f = 0 , d = ! 0 } , h = function ( h ) { return h && c . canForward ( ) || ! h && c . canBack ( ) ? ( d = ! 1 , b . exec ( "open" , e [ h ? ++ f : -- f ] ) . fail ( g ) ) : a . Deferred ( ) . reject ( ) } ; this . canBack = function ( ) { return f > 0 } , this . canForward = function ( ) { return f < e . length - 1 } , this . back = h , this . forward = function ( ) { return h ( ! 0 ) } , b . open ( function ( a ) { var c = e . length , g = b . cwd ( ) . hash ; d && ( f >= 0 && c > f + 1 && e . splice ( f + 1 ) , e [ e . length - 1 ] != g && e . push ( g ) , f = e . length - 1 ) , d = ! 0 } ) . reload ( g ) } , elFinder . prototype . command = function ( b ) { this . fm = b , this . name = "" , this . title = "" , this . state = - 1 , this . alwaysEnabled = ! 1 , this . _disabled = ! 1 , this . disableOnSearch = ! 1 , this . updateOnSelect = ! 0 , this . _handlers = { enable : function ( ) { this . update ( void 0 , this . value ) } , disable : function ( ) { this . update ( - 1 , this . value ) } , "open reload load" : function ( a ) { this . _disabled = ! this . alwaysEnabled && ! this . fm . isCommandEnabled ( this . name ) , this . update ( void 0 , this . value ) , this . change ( ) } } , this . handlers = { } , this . shortcuts = [ ] , this . options = { ui : "button" } , this . setup = function ( b , c ) { var d = this , e = this . fm , f , g ; this . name = b , this . title = e . messages [ "cmd" + b ] ? e . i18n ( "cmd" + b ) : b , this . options = a . extend ( { } , this . options , c ) , this . listeners = [ ] , this . updateOnSelect && ( this . _handlers . select = function ( ) { this . update ( void 0 , this . value ) } ) , a . each ( a . extend ( { } , d . _handlers , d . handlers ) , function ( b , c ) { e . bind ( b , a . proxy ( c , d ) ) } ) ; for ( f = 0 ; f < this . shortcuts . length ; f ++ ) g = this . shortcuts [ f ] , g . callback = a . proxy ( g . callback || function ( ) { this . exec ( ) } , this ) , ! g . description && ( g . description = this . title ) , e . shortcut ( g ) ; this . disableOnSearch && e . bind ( "search searchend" , function ( a ) { d . _disabled = a . type == "search" , d . update ( void 0 , d . value ) } ) , this . init ( ) } , this . init = function ( ) { } , this . exec = function ( b , c ) { return a . Deferred ( ) . reject ( ) } , this . disabled = function ( ) { return this . state < 0 } , this . enabled = function ( ) { return this . state > - 1 } , this . active = function ( ) { return this . state > 0 } , this . getstate = function ( ) { return - 1 } , this . update = function ( a , b ) { var c = this . state , d = this . value ; this . _disabled ? this . state = - 1 : this . state = a !== void 0 ? a : this . getstate ( ) , this . value = b , ( c != this . state || d != this . value ) && this . change ( ) } , this . change = function ( a ) { var b , c ; if ( typeof a == "function" ) this . listeners . push ( a ) ; else for ( c = 0 ; c < this . listeners . length ; c ++ ) { b = this . listeners [ c ] ; try { b ( this . state , this . value ) } catch ( d ) { this . fm . debug ( "error" , d ) } } return this } , this . hashes = function ( c ) { return c ? a . map ( a . isArray ( c ) ? c : [ c ] , function ( a ) { return b . file ( a ) ? a : null } ) : b . selected ( ) } , this . files = function ( b ) { var c = this . fm ; return b ? a . map ( a . isArray ( b ) ? b : [ b ] , function ( a ) { return c . file ( a ) || null } ) : c
. i18 . en = { translator : "Troex Nevelin <troex@fury.scancode.ru>" , language : "English" , direction : "ltr" , dateFormat : "M d, Y h:i A" , fancyDateFormat : "$1 h:i A" , messages : { error : "Error" , errUnknown : "Unknown error." , errUnknownCmd : "Unknown command." , errJqui : "Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included." , errNode : "elFinder requires DOM Element to be created." , errURL : "Invalid elFinder configuration! URL option is not set." , errAccess : "Access denied." , errConnect : "Unable to connect to backend." , errAbort : "Connection aborted." , errTimeout : "Connection timeout." , errNotFound : "Backend not found." , errResponse : "Invalid backend response." , errConf : "Invalid backend configuration." , errJSON : "PHP JSON module not installed." , errNoVolumes : "Readable volumes not available." , errCmdParams : 'Invalid parameters for command "$1".' , errDataNotJSON : "Data is not JSON." , errDataEmpty : "Data is empty." , errCmdReq : "Backend request requires command name." , errOpen : 'Unable to open "$1".' , errNotFolder : "Object is not a folder." , errNotFile : "Object is not a file." , errRead : 'Unable to read "$1".' , errWrite : 'Unable to write into "$1".' , errPerm : "Permission denied." , errLocked : '"$1" is locked and can not be renamed, moved or removed.' , errExists : 'File named "$1" already exists.' , errInvName : "Invalid file name." , errFolderNotFound : "Folder not found." , errFileNotFound : "File not found." , errTrgFolderNotFound : 'Target folder "$1" not found.' , errPopup : "Browser prevented opening popup window. To open file enable it in browser options." , errMkdir : 'Unable to create folder "$1".' , errMkfile : 'Unable to create file "$1".' , errRename : 'Unable to rename "$1".' , errCopyFrom : 'Copying files from volume "$1" not allowed.' , errCopyTo : 'Copying files to volume "$1" not allowed.' , errUpload : "Upload error." , errUploadFile : 'Unable to upload "$1".' , errUploadNoFiles : "No files found for upload." , errUploadTotalSize : "Data exceeds the maximum allowed size." , errUploadFileSize : "File exceeds maximum allowed size." , errUploadMime : "File type not allowed." , errUploadTransfer : '"$1" transfer error.' , 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".' , 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." , errArcMaxSize : "Archive files exceeds maximum allowed size." , errResize : 'Unable to resize "$1".' , errUsupportType : "Unsupported file type." , errNotUTF8Content : 'File "$1" is not in UTF-8 and cannot be edited.' , 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 : "Home" , cmdinfo : "Get info" , cmdmkdir : "New folder" , cmdmkfile : "New text file" , cmdopen : "Open" , cmdpaste : "Paste" , cmdquicklook : "Preview" , cmdreload : "Reload" , cmdrename : "Rename" , cmdrm : "Delete" , cmdsearch : "Find files" , cmdup : "Go to parent directory" , cmdupload : "Upload files" , cmdview : "View" , cmdresize : "Resize & Rotate" , cmdsort : "Sort" , btnClose : "Close" , btnSave : "Save" , btnRm : "Remove" , btnApply : "Apply" , btnCancel : "Cancel" , btnNo : "No" , btnYes : "Yes" , ntfopen : "Open folder" , ntffile : "Open file" , ntfreload : "Reload folder content" , ntfmkdir : "Creating directory" , ntfmkfile : "Creating files" , ntfrm : "Delete files" , ntfcopy : "Copy files" , ntfmove : "Move files" , ntfprepare : "Prepare to copy files" , ntfrename : "Rename files" , ntfupload : "Uploading files" , ntfdownload : "Downloading files" , ntfsave : "Save files" , ntfarchive : "
function ( b ) { return this . each ( function ( ) { var c = "class" , d = b . fm , e = d . res ( c , "disabled" ) , f = d . res ( c , "active" ) , g = d . res ( c , "hover" ) , h = "elfinder-button-menu-item" , i = "elfinder-button-menu-item-selected" , j , k = a ( this ) . addClass ( "ui-state-default elfinder-button" ) . attr ( "title" , b . title ) . append ( '<span class="elfinder-button-icon elfinder-button-icon-' + b . name + '"/>' ) . hover ( function ( a ) { ! k . is ( "." + e ) && k [ a . type == "mouseleave" ? "removeClass" : "addClass" ] ( g ) } ) . click ( function ( a ) { k . is ( "." + e ) || ( j && b . variants . length > 1 ? ( j . is ( ":hidden" ) && b . fm . getUI ( ) . click ( ) , a . stopPropagation ( ) , j . slideToggle ( 100 ) ) : b . exec ( ) ) } ) , l = function ( ) { j . hide ( ) } ; a . isArray ( b . variants ) && ( k . addClass ( "elfinder-menubutton" ) , j = a ( '<div class="ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>' ) . hide ( ) . appendTo ( k ) . zIndex ( 10 + k . zIndex ( ) ) . delegate ( "." + h , "hover" , function ( ) { a ( this ) . toggleClass ( g ) } ) . delegate ( "." + h , "click" , function ( c ) { c . preventDefault ( ) , c . stopPropagation ( ) , k . removeClass ( g ) , b . exec ( b . fm . selected ( ) , a ( this ) . data ( "value" ) ) } ) , b . fm . bind ( "disable select" , l ) . getUI ( ) . click ( l ) , b . change ( function ( ) { j . html ( "" ) , a . each ( b . variants , function ( c , d ) { j . append ( a ( '<div class="' + h + '">' + d [ 1 ] + "</div>" ) . data ( "value" , d [ 0 ] ) . addClass ( d [ 0 ] == b . value ? i : "" ) ) } ) } ) ) , b . change ( function ( ) { b . disabled ( ) ? k . removeClass ( f + " " + g ) . addClass ( e ) : ( k . removeClass ( e ) , k [ b . active ( ) ? "addClass" : "removeClass" ] ( f ) ) } ) . change ( ) } ) } , a . fn . elfindercontextmenu = function ( b ) { return this . each ( function ( ) { var c = a ( this ) . addClass ( "ui-helper-reset ui-widget ui-state-default ui-corner-all elfinder-contextmenu elfinder-contextmenu-" + b . direction ) . hide ( ) . appendTo ( "body" ) . delegate ( ".elfinder-contextmenu-item" , "hover" , function ( ) { a ( this ) . toggleClass ( "ui-state-hover" ) } ) , d = b . direction == "ltr" ? "left" : "right" , e = a . extend ( { } , b . options . contextmenu ) , f = '<div class="elfinder-contextmenu-item"><span class="elfinder-button-icon {icon} elfinder-contextmenu-icon"/><span>{label}</span></div>' , g = function ( b , c , d ) { return a ( f . replace ( "{icon}" , c ? "elfinder-button-icon-" + c : "" ) . replace ( "{label}" , b ) ) . click ( function ( a ) { a . stopPropagation ( ) , a . stopPropagation ( ) , d ( ) } ) } , h = function ( e , f ) { var g = a ( window ) , h = c . outerWidth ( ) , i = c . outerHeight ( ) , j = g . width ( ) , k = g . height ( ) , l = g . scrollTop ( ) , m = g . scrollLeft ( ) , n = { top : ( f + i < k ? f : f - i > 0 ? f - i : f ) + l , left : ( e + h < j ? e : e - h ) + m , "z-index" : 100 + b . getUI ( "workzone" ) . zIndex ( ) } ; c . css ( n ) . show ( ) , n = { "z-index" : n [ "z-index" ] + 10 } , n [ d ] = parseInt ( c . width ( ) ) , c . find ( ".elfinder-contextmenu-sub" ) . css ( n ) } , i = function ( ) { c . hide ( ) . empty ( ) } , j = function ( d , f ) { var h = ! 1 ; a . each ( e [ d ] || [ ] , function ( d , e ) { var j , k , l ; if ( e == "|" && h ) { c . append ( '<div class="elfinder-contextmenu-separator"/>' ) , h = ! 1 ; return } j = b . command ( e ) ; if ( j && j . getstate ( f ) != - 1 ) { if ( j . variants ) { if ( ! j . variants . length ) return ; k = g ( j . title , j . name , function ( ) { } ) , l = a ( '<div class="ui-corner-all elfinder-contextmenu-sub"/>' ) . appendTo ( k . append ( '<span class="elfinder-contextmenu-arrow"/>' ) ) , k . addClass ( "elfinder-contextmenu-group" ) . hover ( function ( ) { l . toggle ( ) } ) , a . each ( j . variants , function ( b , c ) { l . append ( a ( '<div class="elfinder-contextmenu-item"><span>' + c [ 1 ] + "</span></div>" ) . click ( function ( a ) { a . stopPropagation ( ) , i ( ) , j . exec ( f , c [ 0 ] ) } ) ) } ) } else k = g ( j . title , j . name , function ( ) { i ( ) , j . exec ( f ) } ) ; c . append ( k ) , h = ! 0 } } ) } , k = function ( b ) { a . each ( b , function ( a , b ) { var d ; b . label && typeof b . callback == "function" && ( d = g ( b . label , b . icon , function ( ) { i ( ) , b . callback ( ) } ) , c . append ( d ) ) } ) } ; b . one ( "load" , function ( ) { b . bind ( "contextmenu" , function ( a ) { var b = a . data ; i ( ) , b . type && b . targets ? j ( b . type , b . targets ) : b . raw && k ( b . raw ) , c . children ( ) . length && h ( b . x , b . y ) } ) . one ( "destroy" , function ( ) { c . remove ( ) } ) . bind ( "disable select" , i ) . getUI ( ) . click ( i ) } ) } ) } , a . fn . elfindercwd = function ( b ) { return this . not ( ".elfinder-cwd" ) . each ( function ( ) { var c = b . storage ( "view" ) == "list" , d = "undefined" , e = "select." + b . namespace , f = "unselect." + b . namespace , g = "disable." + b . namespace , h = "enable." + b . namespace , i = "class" , j = b . res ( i , "cwdfile" ) , k = "." + j , l = "ui-selected" , m = b . res ( i , "disabled" ) , n = b . res ( i , "draggable" ) , o = b . res ( i , "droppable" ) , p = b . res ( i , "hover" ) , q = b . res ( i , "adroppable" ) , r = j + "-tmp" , s = b . options . loadTmbs > 0 ? b . options . loadTmbs : 5 , t = "" , u = { icon : '<div id="{hash}" class="' + j + ' { permsclass } { dirclass } ui - corner - all "><div class=" elfinder - cwd - file - wrapper ui - corner - all " >
. length ) continue ; ( m = i ( k ) ) && m . length ? m . before ( y ( k ) ) : ( n = j ( k ) ) >= 0 ? G . splice ( n , 0 , k ) : d . append ( y ( k ) ) , S . find ( "#" + l ) . length && ( k . mime == "directory" ? h = ! 0 : k . tmb && ( k . tmb === 1 ? f . push ( l ) : g [ l ] = k . tmb ) ) } M ( g ) , f . length && N ( f ) , h && L ( ) } , P = function ( a ) { var c = a . length , d , e , f ; while ( c -- ) { d = a [ c ] ; if ( ( e = S . find ( "#" + d ) ) . length ) try { e . detach ( ) } catch ( g ) { b . debug ( "error" , g ) } else ( f = H ( d ) ) != - 1 && G . splice ( f , 1 ) } } , Q = { name : b . i18n ( "name" ) , perm : b . i18n ( "perms" ) , mod : b . i18n ( "modify" ) , size : b . i18n ( "size" ) , kind : b . i18n ( "kind" ) } , R = function ( d , e ) { var f = b . cwd ( ) . hash ; try { S . children ( "table," + k ) . remove ( ) . end ( ) } catch ( g ) { S . html ( "" ) } S . removeClass ( "elfinder-cwd-view-icons elfinder-cwd-view-list" ) . addClass ( "elfinder-cwd-view-" + ( c ? "list" : "icons" ) ) , T [ c ? "addClass" : "removeClass" ] ( "elfinder-cwd-wrapper-list" ) , c && S . html ( '<table><thead><tr class="ui-state-default"><td >' + Q . name + "</td><td>" + Q . perm + "</td><td>" + Q . mod + "</td><td>" + Q . size + "</td><td>" + Q . kind + "</td></tr></thead><tbody/></table>" ) , G = a . map ( d , function ( a ) { return e || a . phash == f ? a : null } ) , G = b . sortFiles ( G ) , T . bind ( I , J ) . trigger ( I ) , E ( ) } , S = a ( this ) . addClass ( "ui-helper-clearfix elfinder-cwd" ) . attr ( "unselectable" , "on" ) . delegate ( k , "click." + b . namespace , function ( b ) { var c = this . id ? a ( this ) : a ( this ) . parents ( "[id]:first" ) , d = c . prevAll ( "." + l + ":first" ) , g = c . nextAll ( "." + l + ":first" ) , h = d . length , i = g . length , j ; b . stopImmediatePropagation ( ) , b . shiftKey && ( h || i ) ? ( j = h ? c . prevUntil ( "#" + d . attr ( "id" ) ) : c . nextUntil ( "#" + g . attr ( "id" ) ) , j . add ( c ) . trigger ( e ) ) : b . ctrlKey || b . metaKey ? c . trigger ( c . is ( "." + l ) ? f : e ) : ( S . find ( "[id]." + l ) . trigger ( f ) , c . trigger ( e ) ) , E ( ) } ) . delegate ( k , "dblclick." + b . namespace , function ( a ) { b . dblclick ( { file : this . id } ) } ) . delegate ( k , "mouseenter." + b . namespace , function ( d ) { var e = a ( this ) , f = c ? e : e . children ( ) ; ! e . is ( "." + r ) && ! f . is ( "." + n + ",." + m ) && f . draggable ( b . draggable ) } ) . delegate ( k , e , function ( b ) { var c = a ( this ) ; ! z && ! c . is ( "." + m ) && c . addClass ( l ) . children ( ) . addClass ( p ) } ) . delegate ( k , f , function ( b ) { ! z && a ( this ) . removeClass ( l ) . children ( ) . removeClass ( p ) } ) . delegate ( k , g , function ( ) { var b = a ( this ) . removeClass ( l ) . addClass ( m ) , d = ( c ? b : b . children ( ) ) . removeClass ( p ) ; b . is ( "." + o ) && b . droppable ( "disable" ) , d . is ( "." + n ) && d . draggable ( "disable" ) , ! c && d . removeClass ( m ) } ) . delegate ( k , h , function ( ) { var b = a ( this ) . removeClass ( m ) , d = c ? b : b . children ( ) ; b . is ( "." + o ) && b . droppable ( "enable" ) , d . is ( "." + n ) && d . draggable ( "enable" ) } ) . delegate ( k , "scrolltoview" , function ( ) { F ( a ( this ) ) } ) . delegate ( k , "hover" , function ( c ) { b . trigger ( "hover" , { hash : a ( this ) . attr ( "id" ) , type : c . type } ) } ) . bind ( "contextmenu." + b . namespace , function ( c ) { var d = a ( c . target ) . closest ( "." + j ) ; d . length && ( c . stopPropagation ( ) , c . preventDefault ( ) , d . is ( "." + m ) || ( d . is ( "." + l ) || ( S . trigger ( "unselectall" ) , d . trigger ( e ) , E ( ) ) , b . trigger ( "contextmenu" , { type : "files" , targets : b . selected ( ) , x : c . clientX , y : c . clientY } ) ) ) } ) . selectable ( { filter : k , stop : E , selected : function ( b , c ) { a ( c . selected ) . trigger ( e ) } , unselected : function ( b , c ) { a ( c . unselected ) . trigger ( f ) } } ) . droppable ( K ) . bind ( "create." + b . namespace , function ( b , d ) { var e = c ? S . find ( "tbody" ) : S ; S . trigger ( "unselectall" ) , e . prepend ( a ( y ( d ) ) . addClass ( r ) ) , S . scrollTop ( 0 ) } ) . bind ( "unselectall" , function ( ) { S . find ( "[id]." + l + "" ) . trigger ( f ) , E ( ) } ) . bind ( "selectfile" , function ( a , b ) { S . find ( "#" + b ) . trigger ( e ) , E ( ) } ) , T = a ( '<div class="elfinder-cwd-wrapper"/>' ) . bind ( "contextmenu" , function ( a ) { a . preventDefault ( ) , b . trigger ( "contextmenu" , { type : "cwd" , targets : [ b . cwd ( ) . hash ] , x : a . clientX , y : a . clientY } ) } ) , U = function ( ) { var b = 0 ; T . siblings ( ".elfinder-panel:visible" ) . each ( function ( ) { b += a ( this ) . outerHeight ( ! 0 ) } ) , T . height ( W . height ( ) - b ) } , V = a ( this ) . parent ( ) . resize ( U ) , W = V . children ( ".elfinder-workzone" ) . append ( T . append ( this ) ) ; b . dragUpload && ( T [ 0 ] . addEventListener ( "dragenter" , function ( a ) { a . preventDefault ( ) , a . stopPropagation ( ) , T . addClass ( q ) } , ! 1 ) , T [ 0 ] . addEventListener ( "dragleave" , function ( a ) { a . preventDefault ( ) , a . stopPropagation ( ) , a . target == S [ 0 ] && T . removeClass ( q ) } , ! 1 ) , T [ 0 ] . addEventListener ( "dragover" , function ( a ) { a . preventDefault ( ) , a . stopPropagation ( ) } , ! 1 ) , T [ 0 ] . addEventListener ( "drop" , function ( a ) { a . preventDefault ( ) , T . removeClass ( q ) , a . dataTransfer && a . dataTransfer . files && a . dataTransfer . files . length && b . exec ( "upload" , { files : a . dataTransfer . files } ) } , ! 1 ) ) , b . bind ( "open search" , function ( a ) { R ( a . data . files , a . type == "search" ) } ) . bind ( " searchend
} ) . bind ( "totop" , function ( ) { a ( this ) . mousedown ( ) . find ( ".ui-button:first" ) . focus ( ) . end ( ) . find ( ":text:first" ) . focus ( ) } ) , n = function ( ) { var b = d . zIndex ( ) + 10 ; return d . find ( "." + f + ":visible" ) . each ( function ( ) { var c ; this != m [ 0 ] && ( c = a ( this ) . zIndex ( ) , c > b && ( b = c ) ) } ) , b } , o ; b . position || ( o = parseInt ( ( d . height ( ) - m . outerHeight ( ) ) / 2 - 42 ) , b . position = { top : ( o > 0 ? o : 0 ) + "px" , left : parseInt ( ( d . width ( ) - m . outerWidth ( ) ) / 2 ) + "px" } ) , m . css ( b . position ) , b . closeOnEscape && a ( document ) . bind ( "keyup." + i , function ( b ) { b . keyCode == a . ui . keyCode . ESCAPE && m . is ( "." + e ) && ( c . elfinderdialog ( "close" ) , a ( document ) . unbind ( "keyup." + i ) ) } ) , m . prepend ( a ( '<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">' + b . title + "</div>" ) . prepend ( a ( '<a href="#" class="ui-dialog-titlebar-close ui-corner-all"><span class="ui-icon ui-icon-closethick"/></a>' ) . mousedown ( function ( a ) { a . preventDefault ( ) , c . elfinderdialog ( "close" ) } ) ) ) , a . each ( b . buttons , function ( b , d ) { var e = a ( '<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text">' + b + "</span></button>" ) . click ( a . proxy ( d , c [ 0 ] ) ) . hover ( function ( b ) { a ( this ) [ b . type == "mouseenter" ? "focus" : "blur" ] ( ) } ) . focus ( function ( ) { a ( this ) . addClass ( h ) } ) . blur ( function ( ) { a ( this ) . removeClass ( h ) } ) . keydown ( function ( b ) { var c ; b . keyCode == a . ui . keyCode . ENTER ? a ( this ) . click ( ) : b . keyCode == a . ui . keyCode . TAB && ( c = a ( this ) . next ( ".ui-button" ) , c . length ? c . focus ( ) : a ( this ) . parent ( ) . children ( ".ui-button:first" ) . focus ( ) ) } ) ; k . append ( e ) } ) , k . children ( ) . length && m . append ( l ) , b . resizable && a . fn . resizable && m . resizable ( { minWidth : b . minWidth , minHeight : b . minHeight , alsoResize : this } ) , typeof b . create == "function" && a . proxy ( b . create , this ) ( ) , b . autoOpen && c . elfinderdialog ( "open" ) } ) , this } , a . fn . elfinderdialog . defaults = { cssClass : "" , title : "" , modal : ! 1 , resizable : ! 0 , autoOpen : ! 0 , closeOnEscape : ! 0 , destroyOnClose : ! 1 , buttons : { } , position : null , width : 320 , height : "auto" , minWidth : 200 , minHeight : 110 } , a . fn . elfindernavbar = function ( b , c ) { return this . not ( ".elfinder-navbar" ) . each ( function ( ) { var d = a ( this ) . addClass ( "ui-state-default elfinder-navbar" ) , e = d . parent ( ) . resize ( function ( ) { d . height ( f . height ( ) - g ) } ) , f = e . children ( ".elfinder-workzone" ) . append ( d ) , g = d . outerHeight ( ) - d . height ( ) , h = b . direction == "ltr" , i ; a . fn . resizable && ( i = d . resizable ( { handles : h ? "e" : "w" , minWidth : c . minWidth || 150 , maxWidth : c . maxWidth || 500 } ) . bind ( "resize scroll" , function ( ) { i . css ( { top : parseInt ( d . scrollTop ( ) ) + "px" , left : parseInt ( h ? d . width ( ) + d . scrollLeft ( ) - i . width ( ) - 2 : d . scrollLeft ( ) + 2 ) } ) } ) . find ( ".ui-resizable-handle" ) . zIndex ( d . zIndex ( ) + 10 ) , h || d . resize ( function ( ) { d . css ( "left" , null ) . css ( "right" , 0 ) } ) , b . one ( "open" , function ( ) { setTimeout ( function ( ) { d . trigger ( "resize" ) } , 150 ) } ) ) } ) , this } , a . fn . elfinderoverlay = function ( b ) { this . filter ( ":not(.elfinder-overlay)" ) . each ( function ( ) { b = a . extend ( { } , b ) , a ( this ) . addClass ( "ui-widget-overlay elfinder-overlay" ) . hide ( ) . mousedown ( function ( a ) { a . preventDefault ( ) , a . stopPropagation ( ) } ) . data ( { cnt : 0 , show : typeof b . show == "function" ? b . show : function ( ) { } , hide : typeof b . hide == "function" ? b . hide : function ( ) { } } ) } ) ; if ( b == "show" ) { var c = this . eq ( 0 ) , d = c . data ( "cnt" ) + 1 , e = c . data ( "show" ) ; c . data ( "cnt" , d ) , c . is ( ":hidden" ) && ( c . zIndex ( c . parent ( ) . zIndex ( ) + 1 ) , c . show ( ) , e ( ) ) } if ( b == "hide" ) { var c = this . eq ( 0 ) , d = c . data ( "cnt" ) - 1 , f = c . data ( "hide" ) ; c . data ( "cnt" , d ) , d == 0 && c . is ( ":visible" ) && ( c . hide ( ) , f ( ) ) } return this } , a . fn . elfinderpanel = function ( b ) { return this . each ( function ( ) { var c = a ( this ) . addClass ( "elfinder-panel ui-state-default ui-corner-all" ) , d = "margin-" + ( b . direction == "ltr" ? "left" : "right" ) ; b . one ( "load" , function ( a ) { var e = b . getUI ( "navbar" ) ; c . css ( d , parseInt ( e . outerWidth ( ! 0 ) ) ) , e . bind ( "resize" , function ( ) { c . is ( ":visible" ) && c . css ( d , parseInt ( e . outerWidth ( ! 0 ) ) ) } ) } ) } ) } , a . fn . elfinderpath = function ( b ) { return this . each ( function ( ) { var c = a ( this ) . addClass ( "elfinder-path" ) . html ( " " ) . delegate ( "a" , "click" , function ( c ) { var d = a ( this ) . attr ( "href" ) . substr ( 1 ) ; c . preventDefault ( ) , d != b . cwd ( ) . hash && b . exec ( "open" , d ) } ) . prependTo ( b . getUI ( "statusbar" ) . show ( ) ) ; b . bind ( "open searchend" , function ( ) { var d = [ ] ; a . each ( b . parents ( b . cwd ( ) . hash ) , function ( a , c ) { d . push ( '<a href="#' + c + '">' + b . escape ( b . file ( c ) . name ) + "</a>" ) } ) , c . html ( d . join ( b . option ( "separator" ) ) ) } ) . bind ( " sear
detach ( ) , b . fm . getUI ( "toolbar" ) . prepend ( d . show ( ) ) ; if ( a . browser . msie ) { var c = d . children ( b . fm . direction == "ltr" ? ".ui-icon-close" : ".ui-icon-search" ) ; c . css ( { right : "" , left : parseInt ( d . width ( ) ) - c . outerWidth ( ! 0 ) } ) } } , 200 ) , b . fm . error ( function ( ) { g . unbind ( "keydown" ) } ) . select ( function ( ) { g . blur ( ) } ) . bind ( "searchend" , function ( ) { g . val ( "" ) } ) . viewchange ( f ) . shortcut ( { pattern : "ctrl+f f3" , description : b . title , callback : function ( ) { g . select ( ) . focus ( ) } } ) } ) } , a . fn . elfindersortbutton = function ( b ) { return this . each ( function ( ) { var c = "class" , d = b . fm , e = d . res ( c , "disabled" ) , f = d . res ( c , "active" ) , g = d . res ( c , "hover" ) , h = "elfinder-button-menu-item" , i = "elfinder-button-menu-item-selected" , j , k = a ( this ) . addClass ( "ui-state-default elfinder-button elfiner-button-" + b . name ) . attr ( "title" , b . title ) . append ( '<span class="elfinder-button-icon elfinder-button-icon-' + b . name + '"/>' ) . hover ( function ( a ) { ! k . is ( "." + e ) && k . toggleClass ( g ) } ) . click ( function ( a ) { k . is ( "." + e ) || ( j && b . variants . length > 1 ? ( j . is ( ":hidden" ) && b . fm . getUI ( ) . click ( ) , a . stopPropagation ( ) , j . slideToggle ( 100 ) ) : b . exec ( ) ) } ) , l = function ( ) { j . hide ( ) } ; a . isArray ( b . variants ) && ( k . addClass ( "elfinder-menubutton" ) , j = a ( '<div class="ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>' ) . hide ( ) . appendTo ( k ) . zIndex ( 10 + k . zIndex ( ) ) . delegate ( "." + h , "hover" , function ( ) { a ( this ) . toggleClass ( g ) } ) . delegate ( "." + h , "click" , function ( c ) { c . preventDefault ( ) , c . stopPropagation ( ) , k . removeClass ( g ) , b . exec ( b . fm . selected ( ) , a ( this ) . data ( "value" ) ) } ) , b . fm . bind ( "disable select" , l ) . getUI ( ) . click ( l ) , b . change ( function ( ) { j . html ( "" ) , a . each ( b . variants , function ( c , d ) { j . append ( a ( '<div class="' + h + " " + ( d [ 0 ] == b . value ? i : "" ) + " elfinder-menu-item-sort-" + b . fm . sortDirect + '"><span class="elfinder-menu-item-sort-dir"/>' + d [ 1 ] + "</div>" ) . data ( "value" , d [ 0 ] ) ) } ) } ) ) , b . change ( function ( ) { b . disabled ( ) ? k . removeClass ( f + " " + g ) . addClass ( e ) : ( k . removeClass ( e ) , k [ b . active ( ) ? "addClass" : "removeClass" ] ( f ) ) } ) . change ( ) } ) } , a . fn . elfinderstat = function ( b ) { return this . each ( function ( ) { var c = a ( this ) . addClass ( "elfinder-stat-size" ) , d = a ( '<div class="elfinder-stat-selected"/>' ) , e = b . i18n ( "size" ) . toLowerCase ( ) , f = b . i18n ( "items" ) . toLowerCase ( ) , g = b . i18n ( "selected" ) , h = function ( d , g ) { var h = 0 , i = 0 ; a . each ( d , function ( a , b ) { if ( ! g || b . phash == g ) h ++ , i += parseInt ( b . size ) || 0 } ) , c . html ( f + ": " + h + ", " + e + ": " + b . formatSize ( i ) ) } ; b . getUI ( "statusbar" ) . prepend ( c ) . append ( d ) . show ( ) , b . bind ( "open reload add remove change searchend" , function ( ) { h ( b . files ( ) , b . cwd ( ) . hash ) } ) . search ( function ( a ) { h ( a . data . files ) } ) . select ( function ( ) { var c = 0 , f = 0 , h = b . selectedFiles ( ) ; if ( h . length == 1 ) { c = h [ 0 ] . size , d . html ( b . escape ( h [ 0 ] . name ) + ( c > 0 ? ", " + b . formatSize ( c ) : "" ) ) ; return } a . each ( h , function ( a , b ) { f ++ , c += parseInt ( b . size ) || 0 } ) , d . html ( f ? g + ": " + f + ", " + e + ": " + b . formatSize ( c ) : " " ) } ) } ) } , a . fn . elfindertoolbar = function ( b , c ) { return this . not ( ".elfinder-toolbar" ) . each ( function ( ) { var d = b . _commands , e = a ( this ) . addClass ( "ui-helper-clearfix ui-widget-header ui-corner-top elfinder-toolbar" ) , f = c || [ ] , g = f . length , h , i , j , k ; e . prev ( ) . length && e . parent ( ) . prepend ( this ) ; while ( g -- ) if ( f [ g ] ) { j = a ( '<div class="ui-widget-content ui-corner-all elfinder-buttonset"/>' ) , h = f [ g ] . length ; while ( h -- ) if ( i = d [ f [ g ] [ h ] ] ) k = "elfinder" + i . options . ui , a . fn [ k ] && j . prepend ( a ( "<div/>" ) [ k ] ( i ) ) ; j . children ( ) . length && e . prepend ( j ) , j . children ( ":not(:last),:not(:first):not(:last)" ) . after ( '<span class="ui-widget-content elfinder-toolbar-button-separator"/>' ) } e . children ( ) . length && e . show ( ) } ) , this } , a . fn . elfindertree = function ( b , c ) { var d = b . res ( "class" , "tree" ) ; return this . not ( "." + d ) . each ( function ( ) { var e = "class" , f = b . res ( e , "treeroot" ) , g = c . openRootOnLoad , h = b . res ( e , "navsubtree" ) , i = b . res ( e , "treedir" ) , j = b . res ( e , "navcollapse" ) , k = b . res ( e , "navexpand" ) , l = "elfinder-subtree-loaded" , m = b . res ( e , "navarrow" ) , n = b . res ( e , "active" ) , o = b . res ( e , "adroppable" ) , p = b . res ( e , "hover" ) , q = b . res ( e , "disabled" ) , r = b . res ( e , "draggable" ) , s = b . res ( e , "droppable" ) , t = a . extend ( { } , b . droppable , { hoverClass : p + " " + o , over : function ( ) { var b = a ( this ) ; b . is ( "." + j + ":not(." + k + ")" ) && setTimeout ( function ( ) { b . is ( "." + o ) && b . children ( "." + m ) . click ( ) } , 500 ) } } ) , u = a ( b . res ( "tpl" , "navspinner" ) ) , v = b . res ( "tpl" , "navdir" ) , w = b . res ( "tpl" , "perms" ) , x = b . res ( "tpl" , "symlink" ) , y = { id : function ( a ) { return b . navHash2Id ( a . hash ) } , cssclass : f
( n ) , f [ d ? "addClass" : "removeClass" ] ( q ) ) } ) } ) } ) , this } , a . fn . elfinderuploadbutton = function ( b ) { return this . each ( function ( ) { var c = a ( this ) . elfinderbutton ( b ) . unbind ( "click" ) , d = a ( "<form/>" ) . appendTo ( c ) , e = a ( '<input type="file" multiple="true"/>' ) . change ( function ( ) { var c = a ( this ) ; c . val ( ) && ( b . exec ( { input : c . remove ( ) [ 0 ] } ) , e . clone ( ! 0 ) . appendTo ( d ) ) } ) ; d . append ( e . clone ( ! 0 ) ) , b . change ( function ( ) { d [ b . disabled ( ) ? "hide" : "show" ] ( ) } ) . change ( ) } ) } , a . fn . elfinderviewbutton = function ( b ) { return this . each ( function ( ) { var c = a ( this ) . elfinderbutton ( b ) , d = c . children ( ".elfinder-button-icon" ) ; b . change ( function ( ) { var a = b . value == "icons" ; d . toggleClass ( "elfinder-button-icon-view-list" , a ) , c . attr ( "title" , b . fm . i18n ( a ? "viewlist" : "viewicons" ) ) } ) } ) } , a . fn . elfinderworkzone = function ( b ) { var c = "elfinder-workzone" ; return this . not ( "." + c ) . each ( function ( ) { var b = a ( this ) . addClass ( c ) , d = b . outerHeight ( ! 0 ) - b . height ( ) , e = b . parent ( ) ; e . add ( window ) . bind ( "resize" , function ( ) { var f = e . height ( ) ; e . children ( ":visible:not(." + c + ")" ) . each ( function ( ) { var b = a ( this ) ; b . css ( "position" ) != "absolute" && ( f -= b . outerHeight ( ! 0 ) ) } ) , b . height ( f - d ) } ) } ) , this } , elFinder . prototype . commands . archive = function ( ) { var b = this , c = b . fm , d = [ ] ; this . variants = [ ] , this . disableOnSearch = ! 0 , c . bind ( "open reload" , function ( ) { b . variants = [ ] , a . each ( d = c . option ( "archivers" ) . create || [ ] , function ( a , d ) { b . variants . push ( [ d , c . mime2kind ( d ) ] ) } ) , b . change ( ) } ) , this . getstate = function ( ) { return ! this . _disabled && d . length && c . selected ( ) . length && c . cwd ( ) . write ? 0 : - 1 } , this . exec = function ( b , e ) { var f = this . files ( b ) , g = f . length , h = e || d [ 0 ] , i = c . cwd ( ) , j = [ "errArchive" , "errPerm" ] , k = a . Deferred ( ) . fail ( function ( a ) { a && c . error ( a ) } ) , l ; if ( ! ( this . enabled ( ) && g && d . length && a . inArray ( h , d ) !== - 1 ) ) return k . reject ( ) ; if ( ! i . write ) return k . reject ( j ) ; for ( l = 0 ; l < g ; l ++ ) if ( ! f [ l ] . read ) return k . reject ( j ) ; return c . request ( { data : { cmd : "archive" , targets : this . hashes ( b ) , type : h } , notify : { type : "archive" , cnt : 1 } , syncOnFail : ! 0 } ) } } , elFinder . prototype . commands . back = function ( ) { this . alwaysEnabled = ! 0 , this . updateOnSelect = ! 1 , this . shortcuts = [ { pattern : "ctrl+left backspace" } ] , this . getstate = function ( ) { return this . fm . history . canBack ( ) ? 0 : - 1 } , this . exec = function ( ) { return this . fm . history . back ( ) } } , elFinder . prototype . commands . copy = function ( ) { this . shortcuts = [ { pattern : "ctrl+c ctrl+insert" } ] , this . getstate = function ( b ) { var b = this . files ( b ) , c = b . length ; return c && a . map ( b , function ( a ) { return a . phash && a . read ? a : null } ) . length == c ? 0 : - 1 } , this . exec = function ( b ) { var c = this . fm , d = a . Deferred ( ) . fail ( function ( a ) { c . error ( a ) } ) ; return a . each ( this . files ( b ) , function ( a , b ) { if ( ! b . read || ! b . phash ) return ! d . reject ( [ "errCopy" , b . name , "errPerm" ] ) } ) , d . isRejected ( ) ? d : d . resolve ( c . clipboard ( this . hashes ( b ) ) ) } } , elFinder . prototype . commands . cut = function ( ) { this . shortcuts = [ { pattern : "ctrl+x shift+insert" } ] , this . getstate = function ( b ) { var b = this . files ( b ) , c = b . length ; return c && a . map ( b , function ( a ) { return a . phash && a . read && ! a . locked ? a : null } ) . length == c ? 0 : - 1 } , this . exec = function ( b ) { var c = this . fm , d = a . Deferred ( ) . fail ( function ( a ) { c . error ( a ) } ) ; return a . each ( this . files ( b ) , function ( a , b ) { if ( ! b . read || ! b . phash ) return ! d . reject ( [ "errCopy" , b . name , "errPerm" ] ) ; if ( b . locked ) return ! d . reject ( [ "errLocked" , b . name ] ) } ) , d . isRejected ( ) ? d : d . resolve ( c . clipboard ( this . hashes ( b ) , ! 0 ) ) } } , elFinder . prototype . commands . download = function ( ) { var b = this , c = this . fm , d = function ( c ) { return a . map ( b . files ( c ) , function ( a ) { return a . mime == "directory" ? null : a } ) } ; this . shortcuts = [ { pattern : "shift+enter" } ] , this . getstate = function ( ) { var b = this . fm . selected ( ) , c = b . length ; return ! this . _disabled && c && ( ! a . browser . msie || c == 1 ) && c == d ( b ) . length ? 0 : - 1 } , this . exec = function ( b ) { var c = this . fm , e = c . options . url , f = d ( b ) , g = a . Deferred ( ) , h = "" , i = "" , j , k ; if ( this . disabled ( ) ) return g . reject ( ) ; if ( c . oldAPI ) return c . error ( "errCmdNoSupport" ) , g . reject ( ) ; a . each ( c . options . customData || { } , function ( a , b ) { i += "&" + a + "=" + b } ) , e += e . indexOf ( "?" ) === - 1 ? "?" : "&" ; for ( j = 0 ; j < f . length ; j ++ ) h += '<iframe class="downloader" id="downloader-' + f [ j ] . hash + '" style="display:none" src="' + e + "cmd=file&target=" + f [ j ] . hash + "&download=1" + i + '"/>' ; return a ( h ) . appendTo ( "body" ) . ready ( function ( ) { setTimeout ( function ( ) { a ( h ) . each ( function ( ) { a ( "#" + a ( this ) . attr ( "id" ) ) . remove ( ) } ) } , a . browser . mozilla ? 2e4 + 1e4 * j : 1e3 ) } ) , c . trigger ( "download" , { files :
, notify : { type : "extract" , cnt : 1 } , syncOnFail : ! 0 } ) . fail ( function ( a ) { f . isRejected ( ) || f . reject ( a ) } ) . done ( function ( ) { h -- , h == 0 && f . resolve ( ) } ) } return f } } , elFinder . prototype . commands . forward = function ( ) { this . alwaysEnabled = ! 0 , this . updateOnSelect = ! 0 , this . shortcuts = [ { pattern : "ctrl+right" } ] , this . getstate = function ( ) { return this . fm . history . canForward ( ) ? 0 : - 1 } , this . exec = function ( ) { return this . fm . history . forward ( ) } } , elFinder . prototype . commands . getfile = function ( ) { var b = this , c = this . fm , d = function ( c ) { var d = b . options ; return c = a . map ( c , function ( a ) { return a . mime != "directory" || d . folders ? a : null } ) , d . multiple || c . length == 1 ? c : [ ] } ; this . alwaysEnabled = ! 0 , this . callback = c . options . getFileCallback , this . _disabled = typeof this . callback == "function" , this . getstate = function ( a ) { var a = this . files ( a ) , b = a . length ; return this . callback && b && d ( a ) . length == b ? 0 : - 1 } , this . exec = function ( c ) { var d = this . fm , e = this . options , f = this . files ( c ) , g = f . length , h = d . option ( "url" ) , i = d . option ( "tmbUrl" ) , j = a . Deferred ( ) . done ( function ( a ) { d . trigger ( "getfile" , { files : a } ) , b . callback ( a , d ) , e . oncomplete == "close" ? d . hide ( ) : e . oncomplete == "destroy" && d . destroy ( ) } ) , k = function ( b ) { return e . onlyURL ? e . multiple ? a . map ( f , function ( a ) { return a . url } ) : f [ 0 ] . url : e . multiple ? f : f [ 0 ] } , l = [ ] , m , n , o ; if ( this . getstate ( ) == - 1 ) return j . reject ( ) ; for ( m = 0 ; m < g ; m ++ ) { n = f [ m ] ; if ( n . mime == "directory" && ! e . folders ) return j . reject ( ) ; n . baseUrl = h , n . url = d . url ( n . hash ) , n . path = d . path ( n . hash ) , n . tmb && n . tmb != 1 && ( n . tmb = i + n . tmb ) , ! n . width && ! n . height && ( n . dim ? ( o = n . dim . split ( "x" ) , n . width = o [ 0 ] , n . height = o [ 1 ] ) : n . mime . indexOf ( "image" ) !== - 1 && l . push ( d . request ( { data : { cmd : "dim" , target : n . hash } , preventDefault : ! 0 } ) . done ( a . proxy ( function ( a ) { a . dim && ( o = a . dim . split ( "x" ) , this . width = o [ 0 ] , this . height = o [ 1 ] ) , this . dim = a . dim } , f [ m ] ) ) ) ) } return l . length ? ( a . when . apply ( null , l ) . always ( function ( ) { j . resolve ( k ( f ) ) } ) , j ) : j . resolve ( k ( f ) ) } } , elFinder . prototype . commands . help = function ( ) { var b = this . fm , c = this , d = '<div class="elfinder-help-link"> <a href="{url}">{link}</a></div>' , e = '<div class="elfinder-help-team"><div>{author}</div>{work}</div>' , f = /\{url\}/ , g = /\{link\}/ , h = /\{author\}/ , i = /\{work\}/ , j = "replace" , k = "ui-priority-primary" , l = "ui-priority-secondary" , m = "elfinder-help-license" , n = '<li class="ui-state-default ui-corner-top"><a href="#{id}">{title}</a></li>' , o = [ '<div class="ui-tabs ui-widget ui-widget-content ui-corner-all elfinder-help">' , '<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">' ] , p = '<div class="elfinder-help-shortcut"><div class="elfinder-help-shortcut-pattern">{pattern}</div> {descrip}</div>' , q = '<div class="elfinder-help-separator"/>' , r = function ( ) { o . push ( '<div id="about" class="ui-tabs-panel ui-widget-content ui-corner-bottom"><div class="elfinder-help-logo"/>' ) , o . push ( "<h3>elFinder</h3>" ) , o . push ( '<div class="' + k + '">' + b . i18n ( "webfm" ) + "</div>" ) , o . push ( '<div class="' + l + '">' + b . i18n ( "ver" ) + ": " + b . version + ", " + b . i18n ( "protocol" ) + ": " + b . api + "</div>" ) , o . push ( '<div class="' + l + '">jQuery/jQuery UI: ' + a ( ) . jquery + "/" + a . ui . version + "</div>" ) , o . push ( q ) , o . push ( d [ j ] ( f , "http://elfinder.org/" ) [ j ] ( g , b . i18n ( "homepage" ) ) ) , o . push ( d [ j ] ( f , "https://github.com/Studio-42/elFinder/wiki" ) [ j ] ( g , b . i18n ( "docs" ) ) ) , o . push ( d [ j ] ( f , "https://github.com/Studio-42/elFinder" ) [ j ] ( g , b . i18n ( "github" ) ) ) , o . push ( d [ j ] ( f , "http://twitter.com/elrte_elfinder" ) [ j ] ( g , b . i18n ( "twitter" ) ) ) , o . push ( q ) , o . push ( '<div class="' + k + '">' + b . i18n ( "team" ) + "</div>" ) , o . push ( e [ j ] ( h , 'Dmitry "dio" Levashov <dio@std42.ru>' ) [ j ] ( i , b . i18n ( "chiefdev" ) ) ) , o . push ( e [ j ] ( h , "Troex Nevelin <troex@fury.scancode.ru>" ) [ j ] ( i , b . i18n ( "maintainer" ) ) ) , o . push ( e [ j ] ( h , "Alexey Sukhotin <strogg@yandex.ru>" ) [ j ] ( i , b . i18n ( "contributor" ) ) ) , o . push ( e [ j ] ( h , "Naoki Sawada <hypweb@gmail.com>" ) [ j ] ( i , b . i18n ( "contributor" ) ) ) , b . i18 [ b . lang ] . translator && o . push ( e [ j ] ( h , b . i18 [ b . lang ] . translator ) [ j ] ( i , b . i18n ( "translator" ) + " (" + b . i18 [ b . lang ] . language + ")" ) ) , o . push ( q ) , o . push ( '<div class="' + m + '">' + b . i18n ( "icons" ) + ': <a href="http://pixelmixer.ru/" target="_blank">Pixelmixer</a>, <a href="http://p.yusukekamiyamane.com" target="_blank">Fugue</a></div>' ) , o . push ( q ) , o . push ( '<div class="' + m + '">Licence: BSD Licence</div>' ) , o . push ( '<div class="' + m + ' " > Copyright ©
( v . hash ) ) ) ) , v . read && k . push ( h . replace ( m , e . link ) . replace ( n , '<a href="' + f . url ( v . hash ) + '" target="_blank">' + v . name + "</a>" ) ) , v . dim ? k . push ( h . replace ( m , e . dim ) . replace ( n , v . dim ) ) : v . mime . indexOf ( "image" ) !== - 1 && ( v . width && v . height ? k . push ( h . replace ( m , e . dim ) . replace ( n , v . width + "x" + v . height ) ) : ( k . push ( h . replace ( m , e . dim ) . replace ( n , g . spinner . replace ( "{text}" , e . calc ) ) ) , f . request ( { data : { cmd : "dim" , target : v . hash } , preventDefault : ! 0 } ) . fail ( function ( ) { q ( e . unknown ) } ) . done ( function ( a ) { q ( a . dim || e . unknown ) } ) ) ) , k . push ( h . replace ( m , e . modify ) . replace ( n , f . formatDate ( v ) ) ) , k . push ( h . replace ( m , e . perms ) . replace ( n , f . formatPermissions ( v ) ) ) , k . push ( h . replace ( m , e . locked ) . replace ( n , v . locked ? e . yes : e . no ) ) ) : ( l = l . replace ( "{class}" , "elfinder-cwd-icon-group" ) , w = g . groupTitle . replace ( "{items}" , e . items ) . replace ( "{num}" , j ) , x = a . map ( i , function ( a ) { return a . mime == "directory" ? 1 : null } ) . length , x ? ( k . push ( h . replace ( m , e . kind ) . replace ( n , x == j ? e . folders : e . folders + " " + x + ", " + e . files + " " + ( j - x ) ) ) , k . push ( h . replace ( m , e . size ) . replace ( n , g . spinner . replace ( "{text}" , e . calc ) ) ) , p = a . map ( i , function ( a ) { return a . hash } ) ) : ( t = 0 , a . each ( i , function ( a , b ) { var c = parseInt ( b . size ) ; c >= 0 && t >= 0 ? t += c : t = "unknown" } ) , k . push ( h . replace ( m , e . kind ) . replace ( n , e . files ) ) , k . push ( h . replace ( m , e . size ) . replace ( n , f . formatSize ( t ) ) ) ) ) , l = l . replace ( "{title}" , w ) . replace ( "{content}" , k . join ( "" ) ) , s = f . dialog ( l , o ) , s . attr ( "id" , r ) , u && a ( "<img/>" ) . load ( function ( ) { s . find ( ".elfinder-cwd-icon" ) . css ( "background" , 'url("' + u + '") center center no-repeat' ) } ) . attr ( "src" , u ) , p . length && f . request ( { data : { cmd : "size" , targets : p } , preventDefault : ! 0 } ) . fail ( function ( ) { q ( e . unknown ) } ) . done ( function ( a ) { var b = parseInt ( a . size ) ; f . log ( a . size ) , q ( b >= 0 ? f . formatSize ( b ) : e . unknown ) } ) } } , elFinder . prototype . commands . mkdir = function ( ) { this . disableOnSearch = ! 0 , this . updateOnSelect = ! 1 , this . mime = "directory" , this . prefix = "untitled folder" , this . exec = a . proxy ( this . fm . res ( "mixin" , "make" ) , this ) , this . shortcuts = [ { pattern : "ctrl+shift+n" } ] , this . getstate = function ( ) { return ! this . _disabled && this . fm . cwd ( ) . write ? 0 : - 1 } } , elFinder . prototype . commands . mkfile = function ( ) { this . disableOnSearch = ! 0 , this . updateOnSelect = ! 1 , this . mime = "text/plain" , this . prefix = "untitled file.txt" , this . exec = a . proxy ( this . fm . res ( "mixin" , "make" ) , this ) , this . getstate = function ( ) { return ! this . _disabled && this . fm . cwd ( ) . write ? 0 : - 1 } } , elFinder . prototype . commands . open = function ( ) { this . alwaysEnabled = ! 0 , this . _handlers = { dblclick : function ( a ) { a . preventDefault ( ) , this . exec ( ) } , "select enable disable reload" : function ( a ) { this . update ( a . type == "disable" ? - 1 : void 0 ) } } , this . shortcuts = [ { pattern : "ctrl+down numpad_enter" + ( this . fm . OS != "mac" && " enter" ) } ] , this . getstate = function ( b ) { var b = this . files ( b ) , c = b . length ; return c == 1 ? 0 : c ? a . map ( b , function ( a ) { return a . mime == "directory" ? null : a } ) . length == c ? 0 : - 1 : - 1 } , this . exec = function ( b ) { var c = this . fm , d = a . Deferred ( ) . fail ( function ( a ) { a && c . error ( a ) } ) , e = this . files ( b ) , f = e . length , g , h , i , j ; if ( ! f ) return d . reject ( ) ; if ( f == 1 && ( g = e [ 0 ] ) && g . mime == "directory" ) return g && ! g . read ? d . reject ( [ "errOpen" , g . name , "errPerm" ] ) : c . request ( { data : { cmd : "open" , target : g . thash || g . hash } , notify : { type : "open" , cnt : 1 , hideCnt : ! 0 } , syncOnFail : ! 0 } ) ; e = a . map ( e , function ( a ) { return a . mime != "directory" ? a : null } ) ; if ( f != e . length ) return d . reject ( ) ; f = e . length ; while ( f -- ) { g = e [ f ] ; if ( ! g . read ) return d . reject ( [ "errOpen" , g . name , "errPerm" ] ) ; ( h = c . url ( g . hash ) ) || ( h = c . options . url , h = h + ( h . indexOf ( "?" ) === - 1 ? "?" : "&" ) + ( c . oldAPI ? "cmd=open¤t=" + g . phash : "cmd=file" ) + "&target=" + g . hash ) , j = "" , g . dim && ( i = g . dim . split ( "x" ) , j = "width=" + ( parseInt ( i [ 0 ] ) + 20 ) + ",height=" + ( parseInt ( i [ 1 ] ) + 20 ) ) ; if ( ! window . open ( h , "_blank" , j + ",top=50,left=50,scrollbars=yes,resizable=yes" ) ) return d . reject ( "errPopup" ) } return d . resolve ( b ) } } , elFinder . prototype . commands . paste = function ( ) { this . disableOnSearch = ! 0 , this . updateOnSelect = ! 1 , this . handlers = { changeclipboard : function ( ) { this . update ( ) } } , this . shortcuts = [ { pattern : "ctrl+v shift+insert" } ] , this . getstate = function ( b ) { if ( this . _disabled ) return - 1 ; if ( b ) { if ( a . isArray ( b ) ) { if ( b . length != 1 ) return - 1 ; b = this . fm . file ( b [ 0 ] ) } } else b = this . fm . cwd ( ) ; return this . fm . clipboard ( ) . length && b . mime == "directory" && b . write ? 0 : - 1 } , this . exec = function ( b ) { var c = this , d = c . fm , b = b ? this . files ( b ) [ 0 ] : d . cwd ( ) , e = d . clipboard ( ) , f = e . length , g = f ? e [ 0 ] . cut : !
) . append ( a ( '<div class="' + h + " " + h + '-close"/>' ) . mousedown ( function ( ) { b . window . trigger ( "close" ) } ) ) ; this . resize = "resize." + c . namespace , this . info = a ( '<div class="elfinder-quicklook-info-wrapper"/>' ) . append ( s ) . append ( t ) , this . preview = a ( '<div class="elfinder-quicklook-preview ui-helper-clearfix"/>' ) . bind ( "change" , function ( a ) { b . info . attr ( "style" , "" ) . hide ( ) , s . removeAttr ( "class" ) . attr ( "style" , "" ) , t . html ( "" ) } ) . bind ( "update" , function ( c ) { var d = b . fm , e = b . preview , f = c . file , g = '<div class="elfinder-quicklook-info-data">{value}</div>' , h ; f ? ( ! f . read && c . stopImmediatePropagation ( ) , b . window . data ( "hash" , f . hash ) , b . preview . unbind ( "changesize" ) . trigger ( "change" ) . children ( ) . remove ( ) , r . html ( d . escape ( f . name ) ) , t . html ( g . replace ( /\{value\}/ , f . name ) + g . replace ( /\{value\}/ , d . mime2kind ( f ) ) + ( f . mime == "directory" ? "" : g . replace ( /\{value\}/ , d . formatSize ( f . size ) ) ) + g . replace ( /\{value\}/ , d . i18n ( "modify" ) + ": " + d . formatDate ( f . date ) ) ) , s . addClass ( "elfinder-cwd-icon ui-corner-all " + d . mime2class ( f . mime ) ) , f . tmb && a ( "<img/>" ) . hide ( ) . appendTo ( b . preview ) . load ( function ( ) { s . css ( "background" , 'url("' + h + '") center center no-repeat' ) , a ( this ) . remove ( ) } ) . attr ( "src" , h = d . tmb ( f . hash ) ) , b . info . delay ( 100 ) . fadeIn ( 10 ) ) : c . stopImmediatePropagation ( ) } ) , this . window = a ( '<div class="ui-helper-reset ui-widget elfinder-quicklook" style="position:absolute"/>' ) . click ( function ( a ) { a . stopPropagation ( ) } ) . append ( a ( '<div class="elfinder-quicklook-titlebar"/>' ) . append ( r ) . append ( a ( '<span class="ui-icon ui-icon-circle-close"/>' ) . mousedown ( function ( a ) { a . stopPropagation ( ) , b . window . trigger ( "close" ) } ) ) ) . append ( this . preview . add ( v ) ) . append ( b . info . hide ( ) ) . draggable ( { handle : "div.elfinder-quicklook-titlebar" } ) . bind ( "open" , function ( a ) { var c = b . window , d = b . value , h ; b . closed ( ) && d && ( h = q . find ( "#" + d . hash ) ) . length && ( g = e , h . trigger ( "scrolltoview" ) , c . css ( k ( h ) ) . show ( ) . animate ( l ( ) , 550 , function ( ) { g = f , b . update ( 1 , b . value ) } ) ) } ) . bind ( "close" , function ( a ) { var c = b . window , f = b . preview . trigger ( "change" ) , h = b . value , j = q . find ( "#" + c . data ( "hash" ) ) , l = function ( ) { g = d , c . hide ( ) , f . children ( ) . remove ( ) , b . update ( 0 , b . value ) } ; b . opened ( ) && ( g = e , c . is ( "." + i ) && u . mousedown ( ) , j . length ? c . animate ( k ( j ) , 500 , l ) : l ( ) ) } ) , this . alwaysEnabled = ! 0 , this . value = null , this . handlers = { select : function ( ) { this . update ( void 0 , this . fm . selectedFiles ( ) [ 0 ] ) } , error : function ( ) { b . window . is ( ":visible" ) && b . window . data ( "hash" , "" ) . trigger ( "close" ) } , "searchshow searchhide" : function ( ) { this . opened ( ) && this . window . trigger ( "close" ) } } , this . shortcuts = [ { pattern : "space" } ] , this . support = { audio : { ogg : m ( 'audio/ogg; codecs="vorbis"' ) , mp3 : m ( "audio/mpeg;" ) , wav : m ( 'audio/wav; codecs="1"' ) , m4a : m ( "audio/x-m4a;" ) || m ( "audio/aac;" ) } , video : { ogg : m ( 'video/ogg; codecs="theora"' ) , webm : m ( 'video/webm; codecs="vp8, vorbis"' ) , mp4 : m ( 'video/mp4; codecs="avc1.42E01E"' ) || m ( 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"' ) } } , this . closed = function ( ) { return g == d } , this . opened = function ( ) { return g == f } , this . init = function ( ) { var d = this . options , e = this . window , f = this . preview , g , h ; n = d . width > 0 ? parseInt ( d . width ) : 450 , o = d . height > 0 ? parseInt ( d . height ) : 300 , c . one ( "load" , function ( ) { p = c . getUI ( ) , q = c . getUI ( "cwd" ) , e . appendTo ( "body" ) . zIndex ( 100 + p . zIndex ( ) ) , a ( document ) . keydown ( function ( a ) { a . keyCode == 27 && b . opened ( ) && e . trigger ( "close" ) } ) , a . fn . resizable && e . resizable ( { handles : "se" , minWidth : 350 , minHeight : 120 , resize : function ( ) { f . trigger ( "changesize" ) } } ) , b . change ( function ( ) { b . opened ( ) && ( b . value ? f . trigger ( a . Event ( "update" , { file : b . value } ) ) : e . trigger ( "close" ) ) } ) , a . each ( c . commands . quicklook . plugins || [ ] , function ( a , c ) { typeof c == "function" && new c ( b ) } ) , f . bind ( "update" , function ( ) { b . info . show ( ) } ) } ) } , this . getstate = function ( ) { return this . fm . selected ( ) . length == 1 ? g == f ? 1 : 0 : - 1 } , this . exec = function ( ) { this . enabled ( ) && this . window . trigger ( this . opened ( ) ? "close" : "open" ) } , this . hideinfo = function ( ) { this . info . stop ( ! 0 ) . hide ( ) } } , elFinder . prototype . commands . quicklook . plugins = [ function ( b ) { var c = [ "image/jpeg" , "image/png" , "image/gif" ] , d = b . preview ; a . each ( navigator . mimeTypes , function ( b , d ) { var e = d . type ; e . indexOf ( "image/" ) === 0 && a . inArray ( e , c ) && c . push ( e ) } ) , d . bind ( "update" , function ( e ) { var f = e . file , g ; a . inArray ( f . mime , c ) !== - 1 && ( e . stopImmediatePropagation ( ) , g = a ( "<img/>" ) . hide ( ) . appendTo ( d ) . load ( function ( ) { setTimeout ( function ( )
, this . updateOnSelect = ! 0 , this . shortcuts = [ { pattern : "ctrl+shift+r f5" } ] , this . getstate = function ( ) { return 0 } , this . exec = function ( ) { var a = this . fm , b = a . sync ( ) , c = setTimeout ( function ( ) { a . notify ( { type : "reload" , cnt : 1 , hideCnt : ! 0 } ) , b . always ( function ( ) { a . notify ( { type : "reload" , cnt : - 1 } ) } ) } , a . notifyDelay ) ; return b . always ( function ( ) { clearTimeout ( c ) , a . trigger ( "reload" ) } ) } } , elFinder . prototype . commands . rename = function ( ) { this . shortcuts = [ { pattern : "f2" + ( this . fm . OS == "mac" ? " enter" : "" ) } ] , this . getstate = function ( ) { var a = this . fm . selectedFiles ( ) ; return ! this . _disabled && a . length == 1 && a [ 0 ] . phash && ! a [ 0 ] . locked ? 0 : - 1 } , this . exec = function ( ) { var b = this . fm , c = b . getUI ( "cwd" ) , d = b . selected ( ) , e = d . length , f = b . file ( d . shift ( ) ) , g = ".elfinder-cwd-filename" , h = a . Deferred ( ) . fail ( function ( a ) { var d = i . parent ( ) , e = b . escape ( f . name ) ; d . length ? ( i . remove ( ) , d . html ( e ) ) : ( c . find ( "#" + f . hash ) . find ( g ) . html ( e ) , setTimeout ( function ( ) { c . find ( "#" + f . hash ) . click ( ) } , 50 ) ) , a && b . error ( a ) } ) . always ( function ( ) { b . enable ( ) } ) , i = a ( '<input type="text"/>' ) . keydown ( function ( b ) { b . stopPropagation ( ) , b . stopImmediatePropagation ( ) , b . keyCode == a . ui . keyCode . ESCAPE ? h . reject ( ) : b . keyCode == a . ui . keyCode . ENTER && i . blur ( ) } ) . mousedown ( function ( a ) { a . stopPropagation ( ) } ) . dblclick ( function ( a ) { a . stopPropagation ( ) , a . preventDefault ( ) } ) . blur ( function ( ) { var c = a . trim ( i . val ( ) ) , d = i . parent ( ) ; if ( d . length ) { i [ 0 ] . setSelectionRange && i [ 0 ] . setSelectionRange ( 0 , 0 ) ; if ( c == f . name ) return h . reject ( ) ; if ( ! c ) return h . reject ( "errInvName" ) ; if ( b . fileByName ( c , f . phash ) ) return h . reject ( [ "errExists" , c ] ) ; d . html ( b . escape ( c ) ) , b . lockfiles ( { files : [ f . hash ] } ) , b . request ( { data : { cmd : "rename" , target : f . hash , name : c } , notify : { type : "rename" , cnt : 1 } } ) . fail ( function ( a ) { h . reject ( ) , b . sync ( ) } ) . done ( function ( a ) { h . resolve ( a ) } ) . always ( function ( ) { b . unlockfiles ( { files : [ f . hash ] } ) } ) } } ) , j = c . find ( "#" + f . hash ) . find ( g ) . empty ( ) . append ( i . val ( f . name ) ) , k = i . val ( ) . replace ( /\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/ig , "" ) ; return this . disabled ( ) ? h . reject ( ) : ! f || e > 1 || ! j . length ? h . reject ( "errCmdParams" , this . title ) : f . locked ? h . reject ( [ "errLocked" , f . name ] ) : ( b . one ( "select" , function ( ) { i . parent ( ) . length && f && a . inArray ( f . hash , b . selected ( ) ) === - 1 && i . blur ( ) } ) , i . select ( ) . focus ( ) , i [ 0 ] . setSelectionRange && i [ 0 ] . setSelectionRange ( 0 , k . length ) , h ) } } , elFinder . prototype . commands . resize = function ( ) { this . updateOnSelect = ! 1 , this . getstate = function ( ) { var a = this . fm . selectedFiles ( ) ; return ! this . _disabled && a . length == 1 && a [ 0 ] . read && a [ 0 ] . write && a [ 0 ] . mime . indexOf ( "image/" ) !== - 1 ? 0 : - 1 } , this . exec = function ( b ) { var c = this . fm , d = this . files ( b ) , e = a . Deferred ( ) , f = function ( b , d ) { var f = a ( '<div class="elfinder-dialog-resize"/>' ) , g = '<input type="text" size="5"/>' , h = '<div class="elfinder-resize-row"/>' , i = '<div class="elfinder-resize-label"/>' , j = a ( '<div class="elfinder-resize-control"/>' ) , k = a ( '<div class="elfinder-resize-preview"/>' ) , l = a ( '<div class="elfinder-resize-spinner">' + c . i18n ( "ntfloadimg" ) + "</div>" ) , m = a ( '<div class="elfinder-resize-handle"/>' ) , n = a ( '<div class="elfinder-resize-handle"/>' ) , o = a ( '<div class="elfinder-resize-uiresize"/>' ) , p = a ( '<div class="elfinder-resize-uicrop"/>' ) , q = '<div class="ui-widget-content ui-corner-all elfinder-buttonset"/>' , r = '<div class="ui-state-default elfinder-button"/>' , s = '<span class="ui-widget-content elfinder-toolbar-button-separator"/>' , t = a ( '<div class="elfinder-resize-rotate"/>' ) , u = a ( r ) . attr ( "title" , c . i18n ( "rotate-cw" ) ) . append ( a ( '<span class="elfinder-button-icon elfinder-button-icon-rotate-l"/>' ) . click ( function ( ) { S -= 90 , ab . update ( S ) } ) ) , v = a ( r ) . attr ( "title" , c . i18n ( "rotate-ccw" ) ) . append ( a ( '<span class="elfinder-button-icon elfinder-button-icon-rotate-r"/>' ) . click ( function ( ) { S += 90 , ab . update ( S ) } ) ) , w = a ( "<span />" ) , x = a ( '<div class="ui-state-default ui-corner-all elfinder-resize-reset"><span class="ui-icon ui-icon-arrowreturnthick-1-w"/></div>' ) , y = a ( '<div class="elfinder-resize-type"/>' ) . append ( '<input type="radio" name="type" id="type-resize" value="resize" checked="checked" /><label for="type-resize">' + c . i18n ( "resize" ) + "</label>" ) . append ( '<input type="radio" name="type" id="type-crop" value="crop"/><label for="type-crop">' + c . i18n ( "crop" ) + "</label>" ) . append ( ' < input type = "radio" name = "type" id = " type - ro
( b ? ( n . resizable ( "destroy" ) , n . draggable ( "destroy" ) , U . hide ( ) ) : ( V . width ( T . width ( ) ) . height ( T . height ( ) ) , W . width ( T . width ( ) ) . height ( T . height ( ) ) , n . width ( V . width ( ) ) . height ( V . height ( ) ) . offset ( V . offset ( ) ) . resizable ( { containment : U , resize : _ . resize _update , handles : "all" } ) . draggable ( { handle : n , containment : V , drag : _ . update } ) , U . show ( ) . width ( T . width ( ) ) . height ( T . height ( ) ) , _ . update ( ) ) ) } , db = function ( b ) { a . fn . draggable && a . fn . resizable && ( b ? X . hide ( ) : X . show ( ) . width ( Q ) . height ( R ) . css ( "margin-top" , ( P - R ) / 2 + "px" ) . css ( "margin-left" , ( O - Q ) / 2 + "px" ) ) } , eb = function ( ) { var d , g , h , i , j , k = a ( "input:checked" , y ) . val ( ) ; B . add ( C ) . change ( ) ; if ( k == "resize" ) d = parseInt ( B . val ( ) ) || 0 , g = parseInt ( C . val ( ) ) || 0 ; else if ( k == "crop" ) d = parseInt ( F . val ( ) ) || 0 , g = parseInt ( G . val ( ) ) || 0 , h = parseInt ( D . val ( ) ) || 0 , i = parseInt ( E . val ( ) ) || 0 ; else if ( k = "rotate" ) { d = L , g = M , j = parseInt ( H . val ( ) ) || 0 ; if ( j < 0 || j > 360 ) return c . error ( "Invalid rotate degree" ) ; if ( j == 0 || j == 360 ) return c . error ( "Image dose not rotated" ) } if ( k != "rotate" ) { if ( d <= 0 || g <= 0 ) return c . error ( "Invalid image size" ) ; if ( d == L && g == M ) return c . error ( "Image size not changed" ) } f . elfinderdialog ( "close" ) , c . request ( { data : { cmd : "resize" , target : b . hash , width : d , height : g , x : h , y : i , degree : j , mode : k } , notify : { type : "resize" , cnt : 1 } } ) . fail ( function ( a ) { e . reject ( a ) } ) . done ( function ( ) { e . resolve ( ) } ) } , fb = { } , gb = "elfinder-resize-handle-hline" , hb = "elfinder-resize-handle-vline" , ib = "elfinder-resize-handle-point" , jb = c . url ( b . hash ) ; X . mousedown ( ab . start ) , a ( document ) . mouseup ( ab . stop ) , o . append ( a ( h ) . append ( a ( i ) . text ( c . i18n ( "width" ) ) ) . append ( B ) . append ( x ) ) . append ( a ( h ) . append ( a ( i ) . text ( c . i18n ( "height" ) ) ) . append ( C ) ) . append ( a ( h ) . append ( a ( "<label/>" ) . text ( c . i18n ( "aspectRatio" ) ) . prepend ( A ) ) ) . append ( a ( h ) . append ( c . i18n ( "scale" ) + " " ) . append ( w ) ) , p . append ( a ( h ) . append ( a ( i ) . text ( "X" ) ) . append ( D ) ) . append ( a ( h ) . append ( a ( i ) . text ( "Y" ) ) . append ( E ) ) . append ( a ( h ) . append ( a ( i ) . text ( c . i18n ( "width" ) ) ) . append ( F ) ) . append ( a ( h ) . append ( a ( i ) . text ( c . i18n ( "height" ) ) ) . append ( G ) ) , t . append ( a ( h ) . append ( a ( i ) . text ( c . i18n ( "rotate" ) ) ) . append ( a ( '<div style="float:left; width: 130px;">' ) . append ( a ( '<div style="float:left;">' ) . append ( H ) . append ( a ( "<span/>" ) . text ( c . i18n ( "degree" ) ) ) ) . append ( a ( q ) . append ( u ) . append ( a ( s ) ) . append ( v ) ) ) . append ( I ) ) , f . append ( y ) , j . append ( a ( h ) ) . append ( o ) . append ( p . hide ( ) ) . append ( t . hide ( ) ) . find ( "input,select" ) . attr ( "disabled" , "disabled" ) , m . append ( '<div class="' + gb + " " + gb + '-top"/>' ) . append ( '<div class="' + gb + " " + gb + '-bottom"/>' ) . append ( '<div class="' + hb + " " + hb + '-left"/>' ) . append ( '<div class="' + hb + " " + hb + '-right"/>' ) . append ( '<div class="' + ib + " " + ib + '-e"/>' ) . append ( '<div class="' + ib + " " + ib + '-se"/>' ) . append ( '<div class="' + ib + " " + ib + '-s"/>' ) , k . append ( l ) . append ( m . hide ( ) ) . append ( T . hide ( ) ) , n . css ( "position" , "absolute" ) . append ( '<div class="' + gb + " " + gb + '-top"/>' ) . append ( '<div class="' + gb + " " + gb + '-bottom"/>' ) . append ( '<div class="' + hb + " " + hb + '-left"/>' ) . append ( '<div class="' + hb + " " + hb + '-right"/>' ) . append ( '<div class="' + ib + " " + ib + '-n"/>' ) . append ( '<div class="' + ib + " " + ib + '-e"/>' ) . append ( '<div class="' + ib + " " + ib + '-s"/>' ) . append ( '<div class="' + ib + " " + ib + '-w"/>' ) . append ( '<div class="' + ib + " " + ib + '-ne"/>' ) . append ( '<div class="' + ib + " " + ib + '-se"/>' ) . append ( '<div class="' + ib + " " + ib + '-sw"/>' ) . append ( '<div class="' + ib + " " + ib + '-nw"/>' ) , k . append ( U . css ( "position" , "absolute" ) . hide ( ) . append ( V ) . append ( n . append ( W ) ) ) , k . append ( X . hide ( ) ) , k . css ( "overflow" , "hidden" ) , f . append ( k ) . append ( j ) , fb [ c . i18n ( "btnCancel" ) ] = function ( ) { f . elfinderdialog ( "close" ) } , fb [ c . i18n ( "btnApply" ) ] = eb , c . dialog ( f , { title : b . name , width : 650 , resizable : ! 1 , destroyOnClose : ! 0 , buttons : fb , open : function ( ) { k . zIndex ( 1 + a ( this ) . parent ( ) . zIndex ( ) ) } } ) . attr ( "id" , d ) , a . browser . msie && parseInt ( a . browser . version ) < 9 && a ( ".elfinder-dialog" ) . css ( "filter" , "" ) , x . css ( "left" , B . position ( ) . left + B . width ( ) + 12 ) , W . css ( { opacity : . 2 , "background-color" : "#fff" , position : "absolute" } ) , n . css ( "cursor" , "move" ) , n . find ( ".elfinder-resize-handle-point" ) . css ( { "background-color" : "#fff" , opacity : . 5 , "border-color" : "#000" } ) , X . css ( "cursor" , "pointer" ) , y . buttonset ( ) , O = k . width ( ) - ( m . outerWidth ( ) - m . width ( ) ) , P = k . height ( ) - ( m . outerHeight ( ) - m . height ( ) ) , T . attr ( "src" , jb + ( jb . indexOf ( "?" ) === - 1 ? "?" : "&" ) + "_=" + Math . random ( ) ) , V . attr ( "src" , T . attr ( "src" ) ) , X . attr ( "src" , T . at
2013-06-15 14:01:11 +00:00
this , c = [ "nameDirsFirst" , "kindDirsFirst" , "sizeDirsFirst" , "dateDirsFirst" , "name" , "kind" , "size" , "date" ] , d ; this . options = { ui : "sortbutton" } , this . value = 1 , this . variants = [ ] ; for ( d = 0 ; d < c . length ; d ++ ) this . variants . push ( [ c [ d ] , this . fm . i18n ( "sort" + c [ d ] ) ] ) ; this . disableOnSearch = ! 0 , this . fm . bind ( "load sortchange" , function ( ) { b . value = c [ b . fm . sort - 1 ] , b . change ( ) } ) , this . getstate = function ( ) { return 0 } , this . exec = function ( b , d ) { var e = a . inArray ( d , c ) + 1 == this . fm . sort ? this . fm . sortDirect == "asc" ? "desc" : "asc" : this . fm . sortDirect ; this . fm . setSort ( d , e ) } } , elFinder . prototype . commands . up = function ( ) { this . alwaysEnabled = ! 0 , this . updateOnSelect = ! 1 , this . shortcuts = [ { pattern : "ctrl+up" } ] , this . getstate = function ( ) { return this . fm . cwd ( ) . phash ? 0 : - 1 } , this . exec = function ( ) { return this . fm . cwd ( ) . phash ? this . fm . exec ( "open" , this . fm . cwd ( ) . phash ) : a . Deferred ( ) . reject ( ) } } , elFinder . prototype . commands . upload = function ( ) { var b = this . fm . res ( "class" , "hover" ) ; this . disableOnSearch = ! 0 , this . updateOnSelect = ! 1 , this . shortcuts = [ { pattern : "ctrl+u" } ] , this . getstate = function ( ) { return ! this . _disabled && this . fm . cwd ( ) . write ? 0 : - 1 } , this . exec = function ( c ) { var d = this . fm , e = function ( a ) { g . elfinderdialog ( "close" ) , d . upload ( a ) . fail ( function ( a ) { f . reject ( a ) } ) . done ( function ( a ) { f . resolve ( a ) } ) } , f , g , h , i , j ; return this . disabled ( ) ? a . Deferred ( ) . reject ( ) : c && ( c . input || c . files ) ? d . upload ( c ) : ( f = a . Deferred ( ) , h = a ( '<input type="file" multiple="true"/>' ) . change ( function ( ) { e ( { input : h [ 0 ] } ) } ) , i = a ( '<div class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text">' + d . i18n ( "selectForUpload" ) + "</span></div>" ) . append ( a ( "<form/>" ) . append ( h ) ) . hover ( function ( ) { i . toggleClass ( b ) } ) , g = a ( '<div class="elfinder-upload-dialog-wrapper"/>' ) . append ( i ) , d . dragUpload && ( j = a ( '<div class="ui-corner-all elfinder-upload-dropbox">' + d . i18n ( "dropFiles" ) + "</div>" ) . prependTo ( g ) . after ( '<div class="elfinder-upload-dialog-or">' + d . i18n ( "or" ) + "</div>" ) [ 0 ] , j . addEventListener ( "dragenter" , function ( c ) { c . stopPropagation ( ) , c . preventDefault ( ) , a ( j ) . addClass ( b ) } , ! 1 ) , j . addEventListener ( "dragleave" , function ( c ) { c . stopPropagation ( ) , c . preventDefault ( ) , a ( j ) . removeClass ( b ) } , ! 1 ) , j . addEventListener ( "dragover" , function ( a ) { a . stopPropagation ( ) , a . preventDefault ( ) } , ! 1 ) , j . addEventListener ( "drop" , function ( a ) { a . stopPropagation ( ) , a . preventDefault ( ) , e ( { files : a . dataTransfer . files } ) } , ! 1 ) ) , d . dialog ( g , { title : this . title , modal : ! 0 , resizable : ! 1 , destroyOnClose : ! 0 } ) , f ) } } , elFinder . prototype . commands . view = function ( ) { this . value = this . fm . storage ( "view" ) , this . alwaysEnabled = ! 0 , this . updateOnSelect = ! 1 , this . options = { ui : "viewbutton" } , this . getstate = function ( ) { return 0 } , this . exec = function ( ) { var a = this . fm . storage ( "view" , this . value == "list" ? "icons" : "list" ) ; this . fm . viewchange ( ) , this . update ( void 0 , a ) } } } ) ( jQuery )