2015-09-05 21:02:58 +00:00
function _taggedTemplateLiteral ( e , t ) { return Object . freeze ( Object . defineProperties ( e , { raw : { value : Object . freeze ( t ) } } ) ) } function gup ( e ) { e = e . replace ( /[\[]/ , "\\[" ) . replace ( /[\]]/ , "\\]" ) ; var t = "[\\?&]" + e + "=([^&#]*)" , n = new RegExp ( t ) , i = n . exec ( window . location . href ) ; return null === i ? "" : i [ 1 ] } ! function ( e , t ) { "object" == typeof module && "object" == typeof module . exports ? module . exports = e . document ? t ( e , ! 0 ) : function ( e ) { if ( ! e . document ) throw new Error ( "jQuery requires a window with a document" ) ; return t ( e ) } : t ( e ) } ( "undefined" != typeof window ? window : this , function ( e , t ) { function n ( e ) { var t = "length" in e && e . length , n = Z . type ( e ) ; return "function" === n || Z . isWindow ( e ) ? ! 1 : 1 === e . nodeType && t ? ! 0 : "array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e } function i ( e , t , n ) { if ( Z . isFunction ( t ) ) return Z . grep ( e , function ( e , i ) { return ! ! t . call ( e , i , e ) !== n } ) ; if ( t . nodeType ) return Z . grep ( e , function ( e ) { return e === t !== n } ) ; if ( "string" == typeof t ) { if ( se . test ( t ) ) return Z . filter ( t , e , n ) ; t = Z . filter ( t , e ) } return Z . grep ( e , function ( e ) { return X . call ( t , e ) >= 0 !== n } ) } function r ( e , t ) { for ( ; ( e = e [ t ] ) && 1 !== e . nodeType ; ) ; return e } function o ( e ) { var t = he [ e ] = { } ; return Z . each ( e . match ( fe ) || [ ] , function ( e , n ) { t [ n ] = ! 0 } ) , t } function a ( ) { Q . removeEventListener ( "DOMContentLoaded" , a , ! 1 ) , e . removeEventListener ( "load" , a , ! 1 ) , Z . ready ( ) } function s ( ) { Object . defineProperty ( this . cache = { } , 0 , { get : function ( ) { return { } } } ) , this . expando = Z . expando + s . uid ++ } function l ( e , t , n ) { var i ; if ( void 0 === n && 1 === e . nodeType ) if ( i = "data-" + t . replace ( xe , "-$1" ) . toLowerCase ( ) , n = e . getAttribute ( i ) , "string" == typeof n ) { try { n = "true" === n ? ! 0 : "false" === n ? ! 1 : "null" === n ? null : + n + "" === n ? + n : be . test ( n ) ? Z . parseJSON ( n ) : n } catch ( r ) { } ye . set ( e , t , n ) } else n = void 0 ; return n } function u ( ) { return ! 0 } function c ( ) { return ! 1 } function d ( ) { try { return Q . activeElement } catch ( e ) { } } function p ( e , t ) { return Z . nodeName ( e , "table" ) && Z . nodeName ( 11 !== t . nodeType ? t : t . firstChild , "tr" ) ? e . getElementsByTagName ( "tbody" ) [ 0 ] || e . appendChild ( e . ownerDocument . createElement ( "tbody" ) ) : e } function f ( e ) { return e . type = ( null !== e . getAttribute ( "type" ) ) + "/" + e . type , e } function h ( e ) { var t = He . exec ( e . type ) ; return t ? e . type = t [ 1 ] : e . removeAttribute ( "type" ) , e } function m ( e , t ) { for ( var n = 0 , i = e . length ; i > n ; n ++ ) ve . set ( e [ n ] , "globalEval" , ! t || ve . get ( t [ n ] , "globalEval" ) ) } function g ( e , t ) { var n , i , r , o , a , s , l , u ; if ( 1 === t . nodeType ) { if ( ve . hasData ( e ) && ( o = ve . access ( e ) , a = ve . set ( t , o ) , u = o . events ) ) { delete a . handle , a . events = { } ; for ( r in u ) for ( n = 0 , i = u [ r ] . length ; i > n ; n ++ ) Z . event . add ( t , r , u [ r ] [ n ] ) } ye . hasData ( e ) && ( s = ye . access ( e ) , l = Z . extend ( { } , s ) , ye . set ( t , l ) ) } } function v ( e , t ) { var n = e . getElementsByTagName ? e . getElementsByTagName ( t || "*" ) : e . querySelectorAll ? e . querySelectorAll ( t || "*" ) : [ ] ; return void 0 === t || t && Z . nodeName ( e , t ) ? Z . merge ( [ e ] , n ) : n } function y ( e , t ) { var n = t . nodeName . toLowerCase ( ) ; "input" === n && ke . test ( e . type ) ? t . checked = e . checked : ( "input" === n || "textarea" === n ) && ( t . defaultValue = e . defaultValue ) } function b ( t , n ) { var i , r = Z ( n . createElement ( t ) ) . appendTo ( n . body ) , o = e . getDefaultComputedStyle && ( i = e . getDefaultComputedStyle ( r [ 0 ] ) ) ? i . display : Z . css ( r [ 0 ] , "display" ) ; return r . detach ( ) , o } function x ( e ) { var t = Q , n = Ie [ e ] ; return n || ( n = b ( e , t ) , "none" !== n && n || ( Fe = ( Fe || Z ( "<iframe frameborder='0' width='0' height='0'/>" ) ) . appendTo ( t . documentElement ) , t = Fe [ 0 ] . contentDocument , t . write ( ) , t . close ( ) , n = b ( e , t ) , Fe . detach ( ) ) , Ie [ e ] = n ) , n } function w ( e , t , n ) { var i , r , o , a , s = e . style ; return n = n || Be ( e ) , n && ( a = n . getPropertyValue ( t ) || n [ t ] ) , n && ( "" !== a || Z . contains ( e . ownerDocument , e ) || ( a = Z . style ( e , t ) ) , We . test ( a ) && Re . test ( t ) && ( i = s . width , r = s . minWidth , o = s . maxWidth , s . minWidth = s . maxWidth = s . width = a , a = n . width , s . width = i , s . minWidth = r , s . maxWidth = o ) ) , void 0 !== a ? a + "" : a } function T ( e , t ) { return { get : function ( ) { return e ( ) ? void delete this . get : ( this . get = t ) . apply ( this , arguments ) } } } function C ( e , t ) { if ( t in e ) return t ; for ( var n = t [ 0 ] . toUpperCase ( ) + t . slice ( 1 ) , i = t , r = Ge . length ; r -- ; ) if ( t = Ge [ r ] + n , t in e ) return t ; return i } function k ( e , t , n ) { var i = Ue . exec ( t ) ; return i ? Math . max ( 0 , i [ 1 ] - ( n || 0 ) ) + ( i [ 2 ] || "px" ) : t } function $ ( e , t , n , i , r ) { for ( var o = n === ( i ? "border" : "content" ) ? 4 : "width" === t ? 1 : 0 , a = 0 ; 4 > o ; o += 2 ) "margin" === n && ( a += Z . css ( e , n + Te [ o ] , ! 0 , r ) ) , i ? ( "content" === n && ( a -= Z . css ( e , "padding" + Te [ o ] , ! 0 , r ) ) , "margin" !== n && ( a -= Z . css ( e , "border" + Te [ o ] + "Width" , ! 0 , r ) ) ) : ( a += Z . css ( e , "
Z . filter = function ( e , t , n ) { var i = t [ 0 ] ; return n && ( e = ":not(" + e + ")" ) , 1 === t . length && 1 === i . nodeType ? Z . find . matchesSelector ( i , e ) ? [ i ] : [ ] : Z . find . matches ( e , Z . grep ( t , function ( e ) { return 1 === e . nodeType } ) ) } , Z . fn . extend ( { find : function ( e ) { var t , n = this . length , i = [ ] , r = this ; if ( "string" != typeof e ) return this . pushStack ( Z ( e ) . filter ( function ( ) { for ( t = 0 ; n > t ; t ++ ) if ( Z . contains ( r [ t ] , this ) ) return ! 0 } ) ) ; for ( t = 0 ; n > t ; t ++ ) Z . find ( e , r [ t ] , i ) ; return i = this . pushStack ( n > 1 ? Z . unique ( i ) : i ) , i . selector = this . selector ? this . selector + " " + e : e , i } , filter : function ( e ) { return this . pushStack ( i ( this , e || [ ] , ! 1 ) ) } , not : function ( e ) { return this . pushStack ( i ( this , e || [ ] , ! 0 ) ) } , is : function ( e ) { return ! ! i ( this , "string" == typeof e && oe . test ( e ) ? Z ( e ) : e || [ ] , ! 1 ) . length } } ) ; var le , ue = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/ , ce = Z . fn . init = function ( e , t ) { var n , i ; if ( ! e ) return this ; if ( "string" == typeof e ) { if ( n = "<" === e [ 0 ] && ">" === e [ e . length - 1 ] && e . length >= 3 ? [ null , e , null ] : ue . exec ( e ) , ! n || ! n [ 1 ] && t ) return ! t || t . jquery ? ( t || le ) . find ( e ) : this . constructor ( t ) . find ( e ) ; if ( n [ 1 ] ) { if ( t = t instanceof Z ? t [ 0 ] : t , Z . merge ( this , Z . parseHTML ( n [ 1 ] , t && t . nodeType ? t . ownerDocument || t : Q , ! 0 ) ) , ae . test ( n [ 1 ] ) && Z . isPlainObject ( t ) ) for ( n in t ) Z . isFunction ( this [ n ] ) ? this [ n ] ( t [ n ] ) : this . attr ( n , t [ n ] ) ; return this } return i = Q . getElementById ( n [ 2 ] ) , i && i . parentNode && ( this . length = 1 , this [ 0 ] = i ) , this . context = Q , this . selector = e , this } return e . nodeType ? ( this . context = this [ 0 ] = e , this . length = 1 , this ) : Z . isFunction ( e ) ? "undefined" != typeof le . ready ? le . ready ( e ) : e ( Z ) : ( void 0 !== e . selector && ( this . selector = e . selector , this . context = e . context ) , Z . makeArray ( e , this ) ) } ; ce . prototype = Z . fn , le = Z ( Q ) ; var de = /^(?:parents|prev(?:Until|All))/ , pe = { children : ! 0 , contents : ! 0 , next : ! 0 , prev : ! 0 } ; Z . extend ( { dir : function ( e , t , n ) { for ( var i = [ ] , r = void 0 !== n ; ( e = e [ t ] ) && 9 !== e . nodeType ; ) if ( 1 === e . nodeType ) { if ( r && Z ( e ) . is ( n ) ) break ; i . push ( e ) } return i } , sibling : function ( e , t ) { for ( var n = [ ] ; e ; e = e . nextSibling ) 1 === e . nodeType && e !== t && n . push ( e ) ; return n } } ) , Z . fn . extend ( { has : function ( e ) { var t = Z ( e , this ) , n = t . length ; return this . filter ( function ( ) { for ( var e = 0 ; n > e ; e ++ ) if ( Z . contains ( this , t [ e ] ) ) return ! 0 } ) } , closest : function ( e , t ) { for ( var n , i = 0 , r = this . length , o = [ ] , a = oe . test ( e ) || "string" != typeof e ? Z ( e , t || this . context ) : 0 ; r > i ; i ++ ) for ( n = this [ i ] ; n && n !== t ; n = n . parentNode ) if ( n . nodeType < 11 && ( a ? a . index ( n ) > - 1 : 1 === n . nodeType && Z . find . matchesSelector ( n , e ) ) ) { o . push ( n ) ; break } return this . pushStack ( o . length > 1 ? Z . unique ( o ) : o ) } , index : function ( e ) { return e ? "string" == typeof e ? X . call ( Z ( e ) , this [ 0 ] ) : X . call ( this , e . jquery ? e [ 0 ] : e ) : this [ 0 ] && this [ 0 ] . parentNode ? this . first ( ) . prevAll ( ) . length : - 1 } , add : function ( e , t ) { return this . pushStack ( Z . unique ( Z . merge ( this . get ( ) , Z ( e , t ) ) ) ) } , addBack : function ( e ) { return this . add ( null == e ? this . prevObject : this . prevObject . filter ( e ) ) } } ) , Z . each ( { parent : function ( e ) { var t = e . parentNode ; return t && 11 !== t . nodeType ? t : null } , parents : function ( e ) { return Z . dir ( e , "parentNode" ) } , parentsUntil : function ( e , t , n ) { return Z . dir ( e , "parentNode" , n ) } , next : function ( e ) { return r ( e , "nextSibling" ) } , prev : function ( e ) { return r ( e , "previousSibling" ) } , nextAll : function ( e ) { return Z . dir ( e , "nextSibling" ) } , prevAll : function ( e ) { return Z . dir ( e , "previousSibling" ) } , nextUntil : function ( e , t , n ) { return Z . dir ( e , "nextSibling" , n ) } , prevUntil : function ( e , t , n ) { return Z . dir ( e , "previousSibling" , n ) } , siblings : function ( e ) { return Z . sibling ( ( e . parentNode || { } ) . firstChild , e ) } , children : function ( e ) { return Z . sibling ( e . firstChild ) } , contents : function ( e ) { return e . contentDocument || Z . merge ( [ ] , e . childNodes ) } } , function ( e , t ) { Z . fn [ e ] = function ( n , i ) { var r = Z . map ( this , t , n ) ; return "Until" !== e . slice ( - 5 ) && ( i = n ) , i && "string" == typeof i && ( r = Z . filter ( i , r ) ) , this . length > 1 && ( pe [ e ] || Z . unique ( r ) , de . test ( e ) && r . reverse ( ) ) , this . pushStack ( r ) } } ) ; var fe = /\S+/g , he = { } ; Z . Callbacks = function ( e ) { e = "string" == typeof e ? he [ e ] || o ( e ) : Z . extend ( { } , e ) ; var t , n , i , r , a , s , l = [ ] , u = ! e . once && [ ] , c = function ( o ) { for ( t = e . memory && o , n = ! 0 , s = r || 0 , r = 0 , a = l . length , i = ! 0 ; l && a > s ; s ++ ) if ( l [ s ] . apply ( o [ 0 ] , o [ 1 ] ) === ! 1 && e . stopOnFalse ) { t = ! 1 ; break } i = ! 1 , l && ( u ? u . length && c ( u . shift ( ) ) : t ? l = [ ] : d . disable ( ) ) } , d = { add : function ( ) { if ( l ) { var n = l . length ; ! function o ( t ) { Z . each ( t , function ( t , n ) { var i = Z . type ( n ) ; "function" === i ? e . unique && d . has ( n ) || l . push ( n ) : n && n . length && "string" !== i && o ( n ) } ) } ( arguments ) , i ? a = l . length : t && ( r = n , c
t = ! 1 , o . splice ( r , 1 ) ) ; ( t || ! n ) && Z . dequeue ( this , e ) } ) } , finish : function ( e ) { return e !== ! 1 && ( e = e || "fx" ) , this . each ( function ( ) { var t , n = ve . get ( this ) , i = n [ e + "queue" ] , r = n [ e + "queueHooks" ] , o = Z . timers , a = i ? i . length : 0 ; for ( n . finish = ! 0 , Z . queue ( this , e , [ ] ) , r && r . stop && r . stop . call ( this , ! 0 ) , t = o . length ; t -- ; ) o [ t ] . elem === this && o [ t ] . queue === e && ( o [ t ] . anim . stop ( ! 0 ) , o . splice ( t , 1 ) ) ; for ( t = 0 ; a > t ; t ++ ) i [ t ] && i [ t ] . finish && i [ t ] . finish . call ( this ) ; delete n . finish } ) } } ) , Z . each ( [ "toggle" , "show" , "hide" ] , function ( e , t ) { var n = Z . fn [ t ] ; Z . fn [ t ] = function ( e , i , r ) { return null == e || "boolean" == typeof e ? n . apply ( this , arguments ) : this . animate ( D ( t , ! 0 ) , e , i , r ) } } ) , Z . each ( { slideDown : D ( "show" ) , slideUp : D ( "hide" ) , slideToggle : D ( "toggle" ) , fadeIn : { opacity : "show" } , fadeOut : { opacity : "hide" } , fadeToggle : { opacity : "toggle" } } , function ( e , t ) { Z . fn [ e ] = function ( e , n , i ) { return this . animate ( t , e , n , i ) } } ) , Z . timers = [ ] , Z . fx . tick = function ( ) { var e , t = 0 , n = Z . timers ; for ( Je = Z . now ( ) ; t < n . length ; t ++ ) e = n [ t ] , e ( ) || n [ t ] !== e || n . splice ( t -- , 1 ) ; n . length || Z . fx . stop ( ) , Je = void 0 } , Z . fx . timer = function ( e ) { Z . timers . push ( e ) , e ( ) ? Z . fx . start ( ) : Z . timers . pop ( ) } , Z . fx . interval = 13 , Z . fx . start = function ( ) { Qe || ( Qe = setInterval ( Z . fx . tick , Z . fx . interval ) ) } , Z . fx . stop = function ( ) { clearInterval ( Qe ) , Qe = null } , Z . fx . speeds = { slow : 600 , fast : 200 , _default : 400 } , Z . fn . delay = function ( e , t ) { return e = Z . fx ? Z . fx . speeds [ e ] || e : e , t = t || "fx" , this . queue ( t , function ( t , n ) { var i = setTimeout ( t , e ) ; n . stop = function ( ) { clearTimeout ( i ) } } ) } , function ( ) { var e = Q . createElement ( "input" ) , t = Q . createElement ( "select" ) , n = t . appendChild ( Q . createElement ( "option" ) ) ; e . type = "checkbox" , J . checkOn = "" !== e . value , J . optSelected = n . selected , t . disabled = ! 0 , J . optDisabled = ! n . disabled , e = Q . createElement ( "input" ) , e . value = "t" , e . type = "radio" , J . radioValue = "t" === e . value } ( ) ; var it , rt , ot = Z . expr . attrHandle ; Z . fn . extend ( { attr : function ( e , t ) { return ge ( this , Z . attr , e , t , arguments . length > 1 ) } , removeAttr : function ( e ) { return this . each ( function ( ) { Z . removeAttr ( this , e ) } ) } } ) , Z . extend ( { attr : function ( e , t , n ) { var i , r , o = e . nodeType ; return e && 3 !== o && 8 !== o && 2 !== o ? typeof e . getAttribute === $e ? Z . prop ( e , t , n ) : ( 1 === o && Z . isXMLDoc ( e ) || ( t = t . toLowerCase ( ) , i = Z . attrHooks [ t ] || ( Z . expr . match . bool . test ( t ) ? rt : it ) ) , void 0 === n ? i && "get" in i && null !== ( r = i . get ( e , t ) ) ? r : ( r = Z . find . attr ( e , t ) , null == r ? void 0 : r ) : null !== n ? i && "set" in i && void 0 !== ( r = i . set ( e , n , t ) ) ? r : ( e . setAttribute ( t , n + "" ) , n ) : void Z . removeAttr ( e , t ) ) : void 0 } , removeAttr : function ( e , t ) { var n , i , r = 0 , o = t && t . match ( fe ) ; if ( o && 1 === e . nodeType ) for ( ; n = o [ r ++ ] ; ) i = Z . propFix [ n ] || n , Z . expr . match . bool . test ( n ) && ( e [ i ] = ! 1 ) , e . removeAttribute ( n ) } , attrHooks : { type : { set : function ( e , t ) { if ( ! J . radioValue && "radio" === t && Z . nodeName ( e , "input" ) ) { var n = e . value ; return e . setAttribute ( "type" , t ) , n && ( e . value = n ) , t } } } } } ) , rt = { set : function ( e , t , n ) { return t === ! 1 ? Z . removeAttr ( e , n ) : e . setAttribute ( n , n ) , n } } , Z . each ( Z . expr . match . bool . source . match ( /\w+/g ) , function ( e , t ) { var n = ot [ t ] || Z . find . attr ; ot [ t ] = function ( e , t , i ) { var r , o ; return i || ( o = ot [ t ] , ot [ t ] = r , r = null != n ( e , t , i ) ? t . toLowerCase ( ) : null , ot [ t ] = o ) , r } } ) ; var at = /^(?:input|select|textarea|button)$/i ; Z . fn . extend ( { prop : function ( e , t ) { return ge ( this , Z . prop , e , t , arguments . length > 1 ) } , removeProp : function ( e ) { return this . each ( function ( ) { delete this [ Z . propFix [ e ] || e ] } ) } } ) , Z . extend ( { propFix : { "for" : "htmlFor" , "class" : "className" } , prop : function ( e , t , n ) { var i , r , o , a = e . nodeType ; return e && 3 !== a && 8 !== a && 2 !== a ? ( o = 1 !== a || ! Z . isXMLDoc ( e ) , o && ( t = Z . propFix [ t ] || t , r = Z . propHooks [ t ] ) , void 0 !== n ? r && "set" in r && void 0 !== ( i = r . set ( e , n , t ) ) ? i : e [ t ] = n : r && "get" in r && null !== ( i = r . get ( e , t ) ) ? i : e [ t ] ) : void 0 } , propHooks : { tabIndex : { get : function ( e ) { return e . hasAttribute ( "tabindex" ) || at . test ( e . nodeName ) || e . href ? e . tabIndex : - 1 } } } } ) , J . optSelected || ( Z . propHooks . selected = { get : function ( e ) { var t = e . parentNode ; return t && t . parentNode && t . parentNode . selectedIndex , null } } ) , Z . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { Z . propFix [ this . toLowerCase ( ) ] = this } ) ; var st = /[\t\r\n\f]/g ; Z . fn . extend ( { addClass : function ( e ) { var t , n , i , r , o , a , s = "string" == typeof e && e , l = 0 , u = this . length ; if ( Z . isFunction ( e ) ) return this . each ( function ( t ) { Z ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( s ) for ( t = ( e || "" ) . match ( fe ) || [ ] ; u > l ; l ++ ) if ( n
$ ( window ) . data ( "timeout" , setTimeout ( function ( ) { var e = - 1 * ( $ ( "#imageview #image" ) . height ( ) / 2 ) ; lychee . imageview . addClass ( "full" ) , header . dom ( ) . addClass ( "hidden" ) , $ ( "#imageview #image.small" ) . length > 0 ? $ ( "#imageview #image" ) . css ( "margin-top" , e ) : $ ( "#imageview #image" ) . addClass ( "full" ) } , t ) ) , ! 0 ) } , header . setTitle = function ( ) { var e = arguments . length <= 0 || void 0 === arguments [ 0 ] ? "Untitled" : arguments [ 0 ] , t = header . dom ( "#title" ) , n = lychee . html ( _templateObject17 , e , build . iconic ( "caret-bottom" ) ) ; return t . html ( n ) , ! 0 } , header . setMode = function ( e ) { var t = album . getID ( ) ; switch ( e ) { case "albums" : return header . dom ( ) . removeClass ( "view" ) , $ ( "#tools_album, #tools_photo" ) . hide ( ) , $ ( "#tools_albums" ) . show ( ) , ! 0 ; case "album" : return header . dom ( ) . removeClass ( "view" ) , $ ( "#tools_albums, #tools_photo" ) . hide ( ) , $ ( "#tools_album" ) . show ( ) , album . json . content === ! 1 ? $ ( "#button_archive" ) . hide ( ) : $ ( "#button_archive" ) . show ( ) , lychee . publicMode === ! 0 && "0" === album . json . downloadable && $ ( "#button_archive" ) . hide ( ) , "s" === t || "f" === t || "r" === t ? $ ( "#button_info_album, #button_trash_album, #button_share_album" ) . hide ( ) : "0" === t ? ( $ ( "#button_info_album, #button_share_album" ) . hide ( ) , $ ( "#button_trash_album" ) . show ( ) ) : $ ( "#button_info_album, #button_trash_album, #button_share_album" ) . show ( ) , ! 0 ; case "photo" : return header . dom ( ) . addClass ( "view" ) , $ ( "#tools_albums, #tools_album" ) . hide ( ) , $ ( "#tools_photo" ) . show ( ) , ! 0 } return ! 1 } , header . setEditable = function ( e ) { var t = header . dom ( "#title" ) ; return lychee . publicMode === ! 0 && ( e = ! 1 ) , e ? t . addClass ( "editable" ) : t . removeClass ( "editable" ) , ! 0 } , visible = { } , visible . albums = function ( ) { return "block" === header . dom ( "#tools_albums" ) . css ( "display" ) ? ! 0 : ! 1 } , visible . album = function ( ) { return "block" === header . dom ( "#tools_album" ) . css ( "display" ) ? ! 0 : ! 1 } , visible . photo = function ( ) { return $ ( "#imageview.fadeIn" ) . length > 0 ? ! 0 : ! 1 } , visible . search = function ( ) { return null != search . hash ? ! 0 : ! 1 } , visible . sidebar = function ( ) { return sidebar . dom ( ) . hasClass ( "active" ) === ! 0 ? ! 0 : ! 1 } , visible . sidebarbutton = function ( ) { return visible . photo ( ) ? ! 0 : visible . album ( ) && $ ( "#button_info_album:visible" ) . length > 0 ? ! 0 : ! 1 } , visible . header = function ( ) { return header . dom ( ) . hasClass ( "hidden" ) === ! 0 ? ! 1 : ! 0 } , visible . contextMenu = function ( ) { return basicContext . visible ( ) } , visible . multiselect = function ( ) { return $ ( "#multiselect" ) . length > 0 ? ! 0 : ! 1 } , sidebar = { _dom : $ ( "#sidebar" ) , types : { DEFAULT : 0 , TAGS : 1 } , createStructure : { } } , sidebar . dom = function ( e ) { return null == e || "" === e ? sidebar . _dom : sidebar . _dom . find ( e ) } , sidebar . bind = function ( ) { var e = lychee . getEventName ( ) ; return sidebar . dom ( "#edit_title" ) . off ( e ) . on ( e , function ( ) { visible . photo ( ) ? photo . setTitle ( [ photo . getID ( ) ] ) : visible . album ( ) && album . setTitle ( [ album . getID ( ) ] ) } ) , sidebar . dom ( "#edit_description" ) . off ( e ) . on ( e , function ( ) { visible . photo ( ) ? photo . setDescription ( photo . getID ( ) ) : visible . album ( ) && album . setDescription ( album . getID ( ) ) } ) , sidebar . dom ( "#edit_tags" ) . off ( e ) . on ( e , function ( ) { photo . editTags ( [ photo . getID ( ) ] ) } ) , sidebar . dom ( "#tags .tag span" ) . off ( e ) . on ( e , function ( ) { photo . deleteTag ( photo . getID ( ) , $ ( this ) . data ( "index" ) ) } ) , ! 0 } , sidebar . toggle = function ( ) { return visible . sidebar ( ) || visible . sidebarbutton ( ) ? ( header . dom ( ".button--info" ) . toggleClass ( "active" ) , lychee . content . toggleClass ( "sidebar" ) , sidebar . dom ( ) . toggleClass ( "active" ) , ! 0 ) : ! 1 } , sidebar . setSelectable = function ( ) { var e = arguments . length <= 0 || void 0 === arguments [ 0 ] ? ! 0 : arguments [ 0 ] ; e === ! 0 ? sidebar . dom ( ) . removeClass ( "notSelectable" ) : sidebar . dom ( ) . addClass ( "notSelectable" ) } , sidebar . changeAttr = function ( e ) { var t = arguments . length <= 1 || void 0 === arguments [ 1 ] ? "-" : arguments [ 1 ] , n = arguments . length <= 2 || void 0 === arguments [ 2 ] ? ! 1 : arguments [ 2 ] ; return null == e || "" === e ? ! 1 : ( ( null == t || "" === t ) && ( t = "-" ) , n === ! 1 && ( t = lychee . escapeHTML ( t ) ) , sidebar . dom ( ".attr_" + e ) . html ( t ) , ! 0 ) } , sidebar . createStructure . photo = function ( e ) { if ( null == e || "" === e ) return ! 1 ; var t = ! 1 , n = e . takestamp + e . make + e . model + e . shutter + e . aperture + e . focal + e . iso , i = { } , r = "" ; switch ( lychee . publicMode === ! 1 && ( t = ! 0 ) , e [ "public" ] ) { case "0" : r = "No" ; break ; case "1" : r = "Yes" ; break ; case "2" : r = "Yes (Album)" ; break ; default : r = "-" } return i . basics = { title : "Basics" , type : sidebar . types . DEFAULT , rows : [ { title : "Title" , value : e . title , editable : t } , { title : "Uploaded" , value : e . sysdate } , { title : "Description" , va