| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338 |
- /*!
- * FullCalendar Scheduler v1.9.4
- * Docs & License: https://fullcalendar.io/scheduler/
- * (c) 2018 Adam Shaw
- */
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory(require("fullcalendar"), require("jquery"), require("moment"));
- else if(typeof define === 'function' && define.amd)
- define(["fullcalendar", "jquery", "moment"], factory);
- else {
- var a = typeof exports === 'object' ? factory(require("fullcalendar"), require("jquery"), require("moment")) : factory(root["FullCalendar"], root["jQuery"], root["moment"]);
- for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
- }
- })(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_15__) {
- return /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/
- /******/ // Check if module is in cache
- /******/ if(installedModules[moduleId]) {
- /******/ return installedModules[moduleId].exports;
- /******/ }
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ i: moduleId,
- /******/ l: false,
- /******/ exports: {}
- /******/ };
- /******/
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/
- /******/ // Flag the module as loaded
- /******/ module.l = true;
- /******/
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/
- /******/
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = modules;
- /******/
- /******/ // expose the module cache
- /******/ __webpack_require__.c = installedModules;
- /******/
- /******/ // define getter function for harmony exports
- /******/ __webpack_require__.d = function(exports, name, getter) {
- /******/ if(!__webpack_require__.o(exports, name)) {
- /******/ Object.defineProperty(exports, name, {
- /******/ configurable: false,
- /******/ enumerable: true,
- /******/ get: getter
- /******/ });
- /******/ }
- /******/ };
- /******/
- /******/ // getDefaultExport function for compatibility with non-harmony modules
- /******/ __webpack_require__.n = function(module) {
- /******/ var getter = module && module.__esModule ?
- /******/ function getDefault() { return module['default']; } :
- /******/ function getModuleExports() { return module; };
- /******/ __webpack_require__.d(getter, 'a', getter);
- /******/ return getter;
- /******/ };
- /******/
- /******/ // Object.prototype.hasOwnProperty.call
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
- /******/
- /******/ // __webpack_public_path__
- /******/ __webpack_require__.p = "";
- /******/
- /******/ // Load entry module and return exports
- /******/ return __webpack_require__(__webpack_require__.s = 36);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ (function(module, exports) {
- module.exports = __WEBPACK_EXTERNAL_MODULE_0__;
- /***/ }),
- /* 1 */
- /***/ (function(module, exports) {
- /*
- derived from:
- https://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js
- only include the helpers we need, to keep down filesize
- */
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b)
- if (b.hasOwnProperty(p))
- d[p] = b[p]; };
- exports.__extends = function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- /***/ }),
- /* 2 */
- /***/ (function(module, exports) {
- module.exports = __WEBPACK_EXTERNAL_MODULE_2__;
- /***/ }),
- /* 3 */,
- /* 4 */,
- /* 5 */,
- /* 6 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceComponentFootprint = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceComponentFootprint, _super);
- function ResourceComponentFootprint(unzonedRange, isAllDay, resourceId) {
- var _this = _super.call(this, unzonedRange, isAllDay) || this;
- _this.resourceId = resourceId;
- return _this;
- }
- ResourceComponentFootprint.prototype.toLegacy = function (calendar) {
- var obj = _super.prototype.toLegacy.call(this, calendar);
- obj.resourceId = this.resourceId;
- return obj;
- };
- return ResourceComponentFootprint;
- }(fullcalendar_1.ComponentFootprint));
- exports.default = ResourceComponentFootprint;
- /***/ }),
- /* 7 */,
- /* 8 */,
- /* 9 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceViewMixin = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceViewMixin, _super);
- function ResourceViewMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ResourceViewMixin.mixInto = function (destClass) {
- var _this = this;
- fullcalendar_1.Mixin.mixInto.call(this, destClass);
- [
- 'bindBaseRenderHandlers',
- 'queryScroll',
- 'applyScroll',
- 'triggerDayClick',
- 'triggerSelect',
- 'triggerExternalDrop',
- 'handleResourceAdd',
- 'handleResourceRemove'
- ].forEach(function (methodName) {
- destClass.prototype[methodName] = _this.prototype[methodName];
- });
- };
- ResourceViewMixin.prototype.initResourceView = function () {
- var _this = this;
- // new task
- var resourceDeps = ['hasResources'];
- if (!this.canHandleSpecificResources) {
- resourceDeps.push('displayingDates');
- }
- this.watch('displayingResources', resourceDeps, function () {
- _this.requestResourcesRender(_this.get('currentResources'));
- }, function () {
- _this.requestResourcesUnrender();
- });
- // start relying on displayingResources
- this.watch('displayingBusinessHours', [
- 'businessHourGenerator',
- 'displayingResources',
- 'displayingDates'
- ], function (deps) {
- _this.requestBusinessHoursRender(deps.businessHourGenerator);
- }, function () {
- _this.requestBusinessHoursUnrender();
- });
- // start relying on resource displaying rather than just current resources
- this.watch('displayingEvents', ['displayingResources', 'hasEvents'], function () {
- _this.requestEventsRender(_this.get('currentEvents'));
- }, function () {
- _this.requestEventsUnrender();
- });
- };
- // Logic: base render trigger should fire when BOTH the resources and dates have rendered,
- // but the unrender trigger should fire after ONLY the dates are about to be unrendered.
- ResourceViewMixin.prototype.bindBaseRenderHandlers = function () {
- var isResourcesRendered = false;
- var isDatesRendered = false;
- this.on('resourcesRendered', function () {
- if (!isResourcesRendered) {
- isResourcesRendered = true;
- if (isDatesRendered) {
- this.whenSizeUpdated(this.triggerViewRender);
- }
- }
- });
- this.on('datesRendered', function () {
- if (!isDatesRendered) {
- isDatesRendered = true;
- if (isResourcesRendered) {
- this.whenSizeUpdated(this.triggerViewRender);
- }
- }
- });
- this.on('before:resourcesUnrendered', function () {
- if (isResourcesRendered) {
- isResourcesRendered = false;
- }
- });
- this.on('before:datesUnrendered', function () {
- if (isDatesRendered) {
- isDatesRendered = false;
- this.triggerViewDestroy();
- }
- });
- };
- // Scroll
- // ----------------------------------------------------------------------------------------------
- ResourceViewMixin.prototype.queryScroll = function () {
- var scroll = fullcalendar_1.View.prototype.queryScroll.apply(this, arguments);
- if (this.isResourcesRendered) {
- $.extend(scroll, this.queryResourceScroll());
- }
- return scroll;
- };
- ResourceViewMixin.prototype.applyScroll = function (scroll) {
- fullcalendar_1.View.prototype.applyScroll.apply(this, arguments);
- if (this.isResourcesRendered) {
- this.applyResourceScroll(scroll);
- }
- };
- ResourceViewMixin.prototype.queryResourceScroll = function () {
- return {}; // subclasses must implement
- };
- ResourceViewMixin.prototype.applyResourceScroll = function () {
- // subclasses must implement
- };
- // Rendering Utils
- // ----------------------------------------------------------------------------------------------
- ResourceViewMixin.prototype.getResourceText = function (resource) {
- return this.getResourceTextFunc()(resource);
- };
- ResourceViewMixin.prototype.getResourceTextFunc = function () {
- if (this.resourceTextFunc) {
- return this.resourceTextFunc;
- }
- else {
- var func = this.opt('resourceText');
- if (typeof func !== 'function') {
- func = function (resource) { return resource.title || resource.id; };
- }
- this.resourceTextFunc = func;
- return func;
- }
- };
- // Resource Change Handling
- // ----------------------------------------------------------------------------------------------
- ResourceViewMixin.prototype.handleResourceAdd = function (resource) {
- this.requestResourceRender(resource);
- };
- ResourceViewMixin.prototype.handleResourceRemove = function (resource) {
- this.requestResourceUnrender(resource);
- };
- // Resource Rendering
- // ----------------------------------------------------------------------------------------------
- ResourceViewMixin.prototype.requestResourcesRender = function (resources) {
- var _this = this;
- this.requestRender(function () {
- _this.executeResourcesRender(resources);
- }, 'resource', 'init');
- };
- ResourceViewMixin.prototype.requestResourcesUnrender = function () {
- var _this = this;
- this.requestRender(function () {
- _this.executeResourcesUnrender();
- }, 'resource', 'destroy');
- };
- ResourceViewMixin.prototype.requestResourceRender = function (resource) {
- var _this = this;
- this.requestRender(function () {
- _this.executeResourceRender(resource);
- }, 'resource', 'add');
- };
- ResourceViewMixin.prototype.requestResourceUnrender = function (resource) {
- var _this = this;
- this.requestRender(function () {
- _this.executeResourceUnrender(resource);
- }, 'resource', 'remove');
- };
- // Resource High-level Rendering/Unrendering
- // ----------------------------------------------------------------------------------------------
- ResourceViewMixin.prototype.executeResourcesRender = function (resources) {
- this.renderResources(resources);
- this.isResourcesRendered = true;
- this.trigger('resourcesRendered');
- };
- ResourceViewMixin.prototype.executeResourcesUnrender = function () {
- this.trigger('before:resourcesUnrendered');
- this.unrenderResources();
- this.isResourcesRendered = false;
- };
- ResourceViewMixin.prototype.executeResourceRender = function (resource) {
- this.renderResource(resource);
- };
- ResourceViewMixin.prototype.executeResourceUnrender = function (resource) {
- this.unrenderResource(resource);
- };
- // Triggering
- // ----------------------------------------------------------------------------------------------
- /*
- footprint is a ResourceComponentFootprint
- */
- ResourceViewMixin.prototype.triggerDayClick = function (footprint, dayEl, ev) {
- var dateProfile = this.calendar.footprintToDateProfile(footprint);
- this.publiclyTrigger('dayClick', {
- context: dayEl,
- args: [
- dateProfile.start,
- ev,
- this,
- footprint.resourceId ?
- this.calendar.resourceManager.getResourceById(footprint.resourceId) :
- null
- ]
- });
- };
- /*
- footprint is a ResourceComponentFootprint
- */
- ResourceViewMixin.prototype.triggerSelect = function (footprint, ev) {
- var dateProfile = this.calendar.footprintToDateProfile(footprint);
- this.publiclyTrigger('select', {
- context: this,
- args: [
- dateProfile.start,
- dateProfile.end,
- ev,
- this,
- footprint.resourceId ?
- this.calendar.resourceManager.getResourceById(footprint.resourceId) :
- null
- ]
- });
- };
- // override the view's default trigger in order to provide a resourceId to the `drop` event
- // TODO: make more DRY with core
- ResourceViewMixin.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {
- // trigger 'drop' regardless of whether element represents an event
- this.publiclyTrigger('drop', {
- context: el[0],
- args: [
- singleEventDef.dateProfile.start.clone(),
- ev,
- ui,
- singleEventDef.getResourceIds()[0],
- this
- ]
- });
- if (isEvent) {
- // signal an external event landed
- this.publiclyTrigger('eventReceive', {
- context: this,
- args: [
- singleEventDef.buildInstance().toLegacy(),
- this
- ]
- });
- }
- };
- return ResourceViewMixin;
- }(fullcalendar_1.Mixin));
- exports.default = ResourceViewMixin;
- ResourceViewMixin.prototype.isResourcesRendered = false;
- /***/ }),
- /* 10 */,
- /* 11 */,
- /* 12 */,
- /* 13 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceDayTableMixin_1 = __webpack_require__(21);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- var ResourceDayGrid = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceDayGrid, _super);
- function ResourceDayGrid(view) {
- var _this = _super.call(this, view) || this;
- _this.isResourceFootprintsEnabled = true;
- return _this;
- }
- ResourceDayGrid.prototype.renderDates = function (dateProfile) {
- this.dateProfile = dateProfile;
- };
- ResourceDayGrid.prototype.renderResources = function (resources) {
- this.registerResources(resources);
- this.renderGrid();
- if (this.headContainerEl) {
- this.processHeadResourceEls(this.headContainerEl);
- }
- };
- // TODO: make DRY with ResourceTimeGrid
- ResourceDayGrid.prototype.getHitFootprint = function (hit) {
- var plainFootprint = _super.prototype.getHitFootprint.call(this, hit);
- return new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, this.getColResource(hit.col).id);
- };
- ResourceDayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {
- var resourceCnt = this.resourceCnt;
- var genericSegs = // no assigned resources
- this.datesAboveResources ?
- this.sliceRangeByDay(componentFootprint.unzonedRange) : // each day-per-resource will need its own column
- this.sliceRangeByRow(componentFootprint.unzonedRange);
- var resourceSegs = [];
- for (var _i = 0, genericSegs_1 = genericSegs; _i < genericSegs_1.length; _i++) {
- var seg = genericSegs_1[_i];
- for (var resourceIndex = 0; resourceIndex < resourceCnt; resourceIndex++) {
- var resourceObj = this.flattenedResources[resourceIndex];
- if (!(componentFootprint instanceof ResourceComponentFootprint_1.default) ||
- (componentFootprint.resourceId === resourceObj.id)) {
- var copy = $.extend({}, seg);
- copy.resource = resourceObj;
- if (this.isRTL) {
- copy.leftCol = this.indicesToCol(resourceIndex, seg.lastRowDayIndex);
- copy.rightCol = this.indicesToCol(resourceIndex, seg.firstRowDayIndex);
- }
- else {
- copy.leftCol = this.indicesToCol(resourceIndex, seg.firstRowDayIndex);
- copy.rightCol = this.indicesToCol(resourceIndex, seg.lastRowDayIndex);
- }
- resourceSegs.push(copy);
- }
- }
- }
- return resourceSegs;
- };
- return ResourceDayGrid;
- }(fullcalendar_1.DayGrid));
- exports.default = ResourceDayGrid;
- ResourceDayTableMixin_1.default.mixInto(ResourceDayGrid);
- /***/ }),
- /* 14 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var moment = __webpack_require__(15);
- var fullcalendar_1 = __webpack_require__(0);
- var ClippedScroller_1 = __webpack_require__(24);
- var ScrollerCanvas_1 = __webpack_require__(25);
- var ScrollJoiner_1 = __webpack_require__(16);
- var ScrollFollower_1 = __webpack_require__(26);
- var TimelineEventRenderer_1 = __webpack_require__(17);
- var TimelineFillRenderer_1 = __webpack_require__(28);
- var TimelineHelperRenderer_1 = __webpack_require__(29);
- var TimelineEventDragging_1 = __webpack_require__(40);
- var TimelineEventResizing_1 = __webpack_require__(41);
- var TimelineView_defaults_1 = __webpack_require__(42);
- var TimelineView = /** @class */ (function (_super) {
- tslib_1.__extends(TimelineView, _super);
- function TimelineView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.emphasizeWeeks = false;
- _this.isTimeBodyScrolled = false;
- _this.slotWidth = _this.opt('slotWidth');
- return _this;
- }
- // Footprints
- // ------------------------------------------------------------------------------------------------------------------
- /*
- TODO: avoid using Moments. use slat system somehow
- THEN, can have componentFootprintToSegs handle this on its own
- */
- TimelineView.prototype.normalizeComponentFootprint = function (componentFootprint) {
- var adjustedEnd;
- var adjustedStart;
- var unzonedRange = componentFootprint.unzonedRange;
- if (this.isTimeScale) {
- adjustedStart = this.normalizeGridDate(unzonedRange.getStart());
- adjustedEnd = this.normalizeGridDate(unzonedRange.getEnd());
- }
- else {
- var dayRange = this.computeDayRange(unzonedRange);
- if (this.largeUnit) {
- adjustedStart = dayRange.start.clone().startOf(this.largeUnit);
- adjustedEnd = dayRange.end.clone().startOf(this.largeUnit);
- // if date is partially through the interval, or is in the same interval as the start,
- // make the exclusive end be the *next* interval
- if (!adjustedEnd.isSame(dayRange.end) || !adjustedEnd.isAfter(adjustedStart)) {
- adjustedEnd.add(this.slotDuration);
- }
- }
- else {
- adjustedStart = dayRange.start;
- adjustedEnd = dayRange.end;
- }
- }
- return new fullcalendar_1.ComponentFootprint(new fullcalendar_1.UnzonedRange(adjustedStart, adjustedEnd), !this.isTimeScale // isAllDay
- );
- };
- TimelineView.prototype.componentFootprintToSegs = function (footprint) {
- var footprintStart = footprint.unzonedRange.getStart();
- var footprintEnd = footprint.unzonedRange.getEnd();
- var normalFootprint = this.normalizeComponentFootprint(footprint);
- var segs = [];
- // protect against when the span is entirely in an invalid date region
- if (this.computeDateSnapCoverage(footprintStart) < this.computeDateSnapCoverage(footprintEnd)) {
- // intersect the footprint's range with the grid'd range
- var segRange = normalFootprint.unzonedRange.intersect(this.normalizedUnzonedRange);
- if (segRange) {
- var segStart = segRange.getStart();
- var segEnd = segRange.getEnd();
- segs.push({
- start: segStart,
- end: segEnd,
- isStart: segRange.isStart && this.isValidDate(segStart),
- isEnd: segRange.isEnd && this.isValidDate(segEnd.clone().subtract(1))
- });
- }
- }
- // TODO: what if month slots? should round it to nearest month
- // TODO: dragging/resizing in this situation? deltas for dragging/resizing breaks down
- return segs;
- };
- // Date Computation
- // ------------------------------------------------------------------------------------------------------------------
- /*
- Makes the given date consistent with isTimeScale/largeUnit,
- so, either removes the times, ensures a time, or makes it the startOf largeUnit.
- Strips all timezones. Returns new copy.
- TODO: should maybe be called "normalizeRangeDate".
- */
- TimelineView.prototype.normalizeGridDate = function (date) {
- var normalDate = date.clone();
- this.calendar.localizeMoment(normalDate); // mostly for startOf
- if (this.isTimeScale) {
- if (!normalDate.hasTime()) {
- normalDate.time(0);
- }
- }
- else {
- normalDate = normalDate.clone().stripTime();
- if (this.largeUnit) {
- normalDate.startOf(this.largeUnit);
- }
- }
- return normalDate;
- };
- TimelineView.prototype.isValidDate = function (date) {
- if (this.isHiddenDay(date)) {
- return false;
- }
- else if (this.isTimeScale) {
- // determine if the time is within minTime/maxTime, which may have wacky values
- var ms = date.time() - this.dateProfile.minTime; // milliseconds since minTime
- ms = ((ms % 86400000) + 86400000) % 86400000; // make negative values wrap to 24hr clock
- return ms < this.timeWindowMs; // before the maxTime?
- }
- else {
- return true;
- }
- };
- TimelineView.prototype.updateGridDates = function () {
- var snapIndex = -1;
- var snapDiff = 0; // index of the diff :(
- var snapDiffToIndex = [];
- var snapIndexToDiff = [];
- var date = this.normalizedUnzonedStart.clone();
- while (date < this.normalizedUnzonedEnd) {
- if (this.isValidDate(date)) {
- snapIndex++;
- snapDiffToIndex.push(snapIndex);
- snapIndexToDiff.push(snapDiff);
- }
- else {
- snapDiffToIndex.push(snapIndex + 0.5);
- }
- date.add(this.snapDuration);
- snapDiff++;
- }
- this.snapDiffToIndex = snapDiffToIndex;
- this.snapIndexToDiff = snapIndexToDiff;
- this.snapCnt = snapIndex + 1; // is always one behind
- this.slotCnt = this.snapCnt / this.snapsPerSlot;
- };
- // Skeleton Rendering
- // ------------------------------------------------------------------------------------------------------------------
- TimelineView.prototype.renderSkeleton = function () {
- this.el.addClass('fc-timeline');
- if (this.opt('eventOverlap') === false) {
- this.el.addClass('fc-no-overlap');
- }
- this.el.html(this.renderSkeletonHtml());
- this.timeHeadEl = this.el.find('thead .fc-time-area');
- this.timeBodyEl = this.el.find('tbody .fc-time-area');
- this.timeHeadScroller = new ClippedScroller_1.default({
- overflowX: 'clipped-scroll',
- overflowY: 'hidden'
- });
- this.timeHeadScroller.canvas = new ScrollerCanvas_1.default();
- this.timeHeadScroller.render();
- this.timeHeadScroller.el.appendTo(this.timeHeadEl);
- this.timeBodyScroller = new ClippedScroller_1.default();
- this.timeBodyScroller.canvas = new ScrollerCanvas_1.default();
- this.timeBodyScroller.render();
- this.timeBodyScroller.el.appendTo(this.timeBodyEl);
- this.isTimeBodyScrolled = false; // because if the grid has been rerendered, it will get a zero scroll
- this.timeBodyScroller.on('scroll', fullcalendar_1.proxy(this, 'handleTimeBodyScrolled'));
- this.slatContainerEl = $('<div class="fc-slats"/>').appendTo(this.timeBodyScroller.canvas.bgEl);
- this.segContainerEl = $('<div class="fc-event-container"/>').appendTo(this.timeBodyScroller.canvas.contentEl);
- this.bgSegContainerEl = this.timeBodyScroller.canvas.bgEl;
- this.timeBodyBoundCache = new fullcalendar_1.CoordCache({
- els: this.timeBodyScroller.canvas.el,
- isHorizontal: true,
- isVertical: true
- });
- this.timeScrollJoiner = new ScrollJoiner_1.default('horizontal', [this.timeHeadScroller, this.timeBodyScroller]);
- // the date/time text on the top axis that stays put while scrolling happens
- this.headDateFollower = new ScrollFollower_1.default(this.timeHeadScroller, true); // allowPointerEvents=true
- // the event titles that stay put while scrolling happens
- this.eventTitleFollower = new ScrollFollower_1.default(this.timeBodyScroller);
- this.eventTitleFollower.minTravel = 50;
- //
- if (this.isRTL) {
- this.eventTitleFollower.containOnNaturalRight = true;
- }
- else {
- this.eventTitleFollower.containOnNaturalLeft = true;
- }
- _super.prototype.renderSkeleton.call(this);
- };
- TimelineView.prototype.renderSkeletonHtml = function () {
- var theme = this.calendar.theme;
- return "<table class=\"" + theme.getClass('tableGrid') + "\"> <thead class=\"fc-head\"> <tr> <td class=\"fc-time-area " + theme.getClass('widgetHeader') + "\"></td> </tr> </thead> <tbody class=\"fc-body\"> <tr> <td class=\"fc-time-area " + theme.getClass('widgetContent') + "\"></td> </tr> </tbody> </table>";
- };
- TimelineView.prototype.unrenderSkeleton = function () {
- this.handleTimeBodyScrolled(0);
- _super.prototype.unrenderSkeleton.call(this);
- };
- // Date Rendering
- // ------------------------------------------------------------------------------------------------------------------
- TimelineView.prototype.renderDates = function (dateProfile) {
- TimelineView_defaults_1.initScaleProps(this);
- this.timeWindowMs = dateProfile.maxTime - dateProfile.minTime;
- // makes sure zone is stripped
- this.normalizedUnzonedStart = this.normalizeGridDate(dateProfile.renderUnzonedRange.getStart());
- this.normalizedUnzonedEnd = this.normalizeGridDate(dateProfile.renderUnzonedRange.getEnd());
- // apply minTime/maxTime
- // TODO: move towards .time(), but didn't play well with negatives.
- // TODO: View should be responsible.
- if (this.isTimeScale) {
- this.normalizedUnzonedStart.add(dateProfile.minTime);
- this.normalizedUnzonedEnd.subtract(1, 'day').add(dateProfile.maxTime);
- }
- this.normalizedUnzonedRange = new fullcalendar_1.UnzonedRange(this.normalizedUnzonedStart, this.normalizedUnzonedEnd);
- var slotDates = [];
- var date = this.normalizedUnzonedStart.clone();
- this.calendar.localizeMoment(date);
- while (date < this.normalizedUnzonedEnd) {
- if (this.isValidDate(date)) {
- slotDates.push(date.clone());
- }
- date.add(this.slotDuration);
- }
- this.slotDates = slotDates;
- this.updateGridDates();
- var slatHtmlRes = this.renderSlatHtml();
- this.timeHeadScroller.canvas.contentEl.html(slatHtmlRes.headHtml);
- this.timeHeadColEls = this.timeHeadScroller.canvas.contentEl.find('col');
- this.slatContainerEl.html(slatHtmlRes.bodyHtml);
- this.slatColEls = this.slatContainerEl.find('col');
- this.slatEls = this.slatContainerEl.find('td');
- this.slatCoordCache = new fullcalendar_1.CoordCache({
- els: this.slatEls,
- isHorizontal: true
- });
- // for the inner divs within the slats
- // used for event rendering and scrollTime, to disregard slat border
- this.slatInnerCoordCache = new fullcalendar_1.CoordCache({
- els: this.slatEls.find('> div'),
- isHorizontal: true,
- // we use this coord cache for getPosition* for event rendering.
- // workaround for .fc-content's negative margins.
- offsetParent: this.timeBodyScroller.canvas.el
- });
- for (var i = 0; i < this.slotDates.length; i++) {
- date = this.slotDates[i];
- this.publiclyTrigger('dayRender', {
- context: this,
- args: [date, this.slatEls.eq(i), this]
- });
- }
- if (this.headDateFollower) {
- this.headDateFollower.setSpriteEls(this.timeHeadEl.find('tr:not(:last-child) .fc-cell-text'));
- }
- };
- TimelineView.prototype.unrenderDates = function () {
- if (this.headDateFollower) {
- this.headDateFollower.clearSprites();
- }
- this.timeHeadScroller.canvas.contentEl.empty();
- this.slatContainerEl.empty();
- // clear the widths,
- // for no jupiness when navigating
- this.timeHeadScroller.canvas.clearWidth();
- this.timeBodyScroller.canvas.clearWidth();
- };
- TimelineView.prototype.renderSlatHtml = function () {
- var cell;
- var date;
- var rowCells;
- var format;
- var theme = this.calendar.theme;
- var labelInterval = this.labelInterval;
- var formats = this.headerFormats;
- var cellRows = formats.map(function (format) { return []; }); // indexed by row,col
- var leadingCell = null;
- var prevWeekNumber = null;
- var slotDates = this.slotDates;
- var slotCells = []; // meta
- var rowUnits = formats.map(function (format) { return (fullcalendar_1.queryMostGranularFormatUnit(format)); });
- for (var _i = 0, slotDates_1 = slotDates; _i < slotDates_1.length; _i++) {
- date = slotDates_1[_i];
- var weekNumber = date.week();
- var isWeekStart = this.emphasizeWeeks && (prevWeekNumber !== null) && (prevWeekNumber !== weekNumber);
- for (var row = 0; row < formats.length; row++) {
- format = formats[row];
- rowCells = cellRows[row];
- leadingCell = rowCells[rowCells.length - 1];
- var isSuperRow = (formats.length > 1) && (row < (formats.length - 1)); // more than one row and not the last
- var newCell = null;
- if (isSuperRow) {
- var text = date.format(format);
- if (!leadingCell || (leadingCell.text !== text)) {
- newCell = this.buildCellObject(date, text, rowUnits[row]);
- }
- else {
- leadingCell.colspan += 1;
- }
- }
- else {
- if (!leadingCell || fullcalendar_1.isInt(fullcalendar_1.divideRangeByDuration(this.normalizedUnzonedStart, date, labelInterval))) {
- var text = date.format(format);
- newCell = this.buildCellObject(date, text, rowUnits[row]);
- }
- else {
- leadingCell.colspan += 1;
- }
- }
- if (newCell) {
- newCell.weekStart = isWeekStart;
- rowCells.push(newCell);
- }
- }
- slotCells.push({ weekStart: isWeekStart });
- prevWeekNumber = weekNumber;
- }
- var isChrono = labelInterval > this.slotDuration;
- var isSingleDay = this.slotDuration.as('days') === 1;
- var html = '<table class="' + theme.getClass('tableGrid') + '">';
- html += '<colgroup>';
- for (var _a = 0, slotDates_2 = slotDates; _a < slotDates_2.length; _a++) {
- date = slotDates_2[_a];
- html += '<col/>';
- }
- html += '</colgroup>';
- html += '<tbody>';
- for (var i = 0; i < cellRows.length; i++) {
- rowCells = cellRows[i];
- var isLast = i === (cellRows.length - 1);
- html += '<tr' + (isChrono && isLast ? ' class="fc-chrono"' : '') + '>';
- for (var _b = 0, rowCells_1 = rowCells; _b < rowCells_1.length; _b++) {
- cell = rowCells_1[_b];
- var headerCellClassNames = [theme.getClass('widgetHeader')];
- if (cell.weekStart) {
- headerCellClassNames.push('fc-em-cell');
- }
- if (isSingleDay) {
- headerCellClassNames = headerCellClassNames.concat(this.getDayClasses(cell.date, true) // adds "today" class and other day-based classes
- );
- }
- html +=
- '<th class="' + headerCellClassNames.join(' ') + '"' +
- ' data-date="' + cell.date.format() + '"' +
- (cell.colspan > 1 ? ' colspan="' + cell.colspan + '"' : '') +
- '>' +
- '<div class="fc-cell-content">' +
- cell.spanHtml +
- '</div>' +
- '</th>';
- }
- html += '</tr>';
- }
- html += '</tbody></table>';
- var slatHtml = '<table class="' + theme.getClass('tableGrid') + '">';
- slatHtml += '<colgroup>';
- for (var _c = 0, slotCells_1 = slotCells; _c < slotCells_1.length; _c++) {
- cell = slotCells_1[_c];
- slatHtml += '<col/>';
- }
- slatHtml += '</colgroup>';
- slatHtml += '<tbody><tr>';
- for (var i = 0; i < slotCells.length; i++) {
- cell = slotCells[i];
- date = slotDates[i];
- slatHtml += this.slatCellHtml(date, cell.weekStart);
- }
- slatHtml += '</tr></tbody></table>';
- return { headHtml: html, bodyHtml: slatHtml };
- };
- TimelineView.prototype.buildCellObject = function (date, text, rowUnit) {
- date = date.clone(); // ensure our own reference
- var spanHtml = this.buildGotoAnchorHtml({
- date: date,
- type: rowUnit,
- forceOff: !rowUnit
- }, {
- 'class': 'fc-cell-text'
- }, fullcalendar_1.htmlEscape(text));
- return { text: text, spanHtml: spanHtml, date: date, colspan: 1 };
- };
- TimelineView.prototype.slatCellHtml = function (date, isEm) {
- var classes;
- var theme = this.calendar.theme;
- if (this.isTimeScale) {
- classes = [];
- classes.push(fullcalendar_1.isInt(fullcalendar_1.divideRangeByDuration(this.normalizedUnzonedStart, date, this.labelInterval)) ?
- 'fc-major' :
- 'fc-minor');
- }
- else {
- classes = this.getDayClasses(date);
- classes.push('fc-day');
- }
- classes.unshift(theme.getClass('widgetContent'));
- if (isEm) {
- classes.push('fc-em-cell');
- }
- return '<td class="' + classes.join(' ') + '"' +
- ' data-date="' + date.format() + '"' +
- '><div /></td>';
- };
- // Business Hours
- // ------------------------------------------------------------------------------------------------------------------
- TimelineView.prototype.renderBusinessHours = function (businessHourPayload) {
- if (!this.largeUnit) {
- return _super.prototype.renderBusinessHours.call(this, businessHourPayload);
- }
- };
- // Now Indicator
- // ------------------------------------------------------------------------------------------------------------------
- TimelineView.prototype.getNowIndicatorUnit = function () {
- // TODO: converge with largeUnit. precompute
- if (this.isTimeScale) {
- return fullcalendar_1.computeGreatestUnit(this.slotDuration);
- }
- };
- // will only execute if isTimeScale
- TimelineView.prototype.renderNowIndicator = function (date) {
- var nodes = [];
- date = this.normalizeGridDate(date);
- if (this.normalizedUnzonedRange.containsDate(date)) {
- var coord = this.dateToCoord(date);
- var css = this.isRTL ?
- { right: -coord } :
- { left: coord };
- nodes.push($("<div class='fc-now-indicator fc-now-indicator-arrow'></div>")
- .css(css)
- .appendTo(this.timeHeadScroller.canvas.el)[0]);
- nodes.push($("<div class='fc-now-indicator fc-now-indicator-line'></div>")
- .css(css)
- .appendTo(this.timeBodyScroller.canvas.el)[0]);
- }
- this.nowIndicatorEls = $(nodes);
- };
- // will only execute if isTimeScale
- TimelineView.prototype.unrenderNowIndicator = function () {
- if (this.nowIndicatorEls) {
- this.nowIndicatorEls.remove();
- this.nowIndicatorEls = null;
- }
- };
- // Sizing
- // ------------------------------------------------------------------------------------------------------------------
- TimelineView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- var bodyHeight;
- var containerMinWidth;
- var containerWidth;
- var nonLastSlotWidth;
- if (isAuto) {
- bodyHeight = 'auto';
- }
- else {
- bodyHeight = totalHeight - this.headHeight() - this.queryMiscHeight();
- }
- this.timeBodyScroller.setHeight(bodyHeight);
- // reason for this complicated method is that things went wrong when:
- // slots/headers didn't fill content area and needed to be stretched
- // cells wouldn't align (rounding issues with available width calculated
- // differently because of padding VS scrollbar trick)
- var isDatesRendered = this.timeHeadColEls; // TODO: refactor use of this
- if (isDatesRendered) {
- var slotWidth = Math.round(this.slotWidth || (this.slotWidth = this.computeSlotWidth()));
- containerWidth = slotWidth * this.slotDates.length;
- containerMinWidth = '';
- nonLastSlotWidth = slotWidth;
- var availableWidth = this.timeBodyScroller.getClientWidth();
- if (availableWidth > containerWidth) {
- containerMinWidth = availableWidth;
- containerWidth = '';
- nonLastSlotWidth = Math.floor(availableWidth / this.slotDates.length);
- }
- }
- else {
- containerWidth = '';
- containerMinWidth = '';
- }
- this.timeHeadScroller.canvas.setWidth(containerWidth);
- this.timeHeadScroller.canvas.setMinWidth(containerMinWidth);
- this.timeBodyScroller.canvas.setWidth(containerWidth);
- this.timeBodyScroller.canvas.setMinWidth(containerMinWidth);
- if (isDatesRendered) {
- this.timeHeadColEls.slice(0, -1).add(this.slatColEls.slice(0, -1))
- .css('width', nonLastSlotWidth);
- }
- this.timeHeadScroller.updateSize();
- this.timeBodyScroller.updateSize();
- this.timeScrollJoiner.update();
- if (isDatesRendered) {
- this.buildCoords();
- // TODO: left/right CSS assignment also happens earlier in renderFgSegs
- this.updateSegPositions();
- // this updateSize method is triggered by callers who don't always subsequently call updateNowIndicator,
- // and updateSize always has the risk of changing horizontal spacing which will affect nowIndicator positioning,
- // so always call it here too. will often rerender twice unfortunately.
- // TODO: more closely integrate updateSize with updateNowIndicator
- this.updateNowIndicator();
- }
- if (this.headDateFollower) {
- this.headDateFollower.update();
- }
- if (this.eventTitleFollower) {
- this.eventTitleFollower.update();
- }
- };
- TimelineView.prototype.queryMiscHeight = function () {
- return this.el.outerHeight() -
- this.timeHeadScroller.el.outerHeight() -
- this.timeBodyScroller.el.outerHeight();
- };
- TimelineView.prototype.computeSlotWidth = function () {
- var maxInnerWidth = 0; // TODO: harness core's `matchCellWidths` for this
- var innerEls = this.timeHeadEl.find('tr:last-child th .fc-cell-text'); // TODO: cache
- innerEls.each(function (i, node) {
- var innerWidth = $(node).outerWidth();
- return maxInnerWidth = Math.max(maxInnerWidth, innerWidth);
- });
- var headerWidth = maxInnerWidth + 1; // assume no padding, and one pixel border
- var slotsPerLabel = fullcalendar_1.divideDurationByDuration(this.labelInterval, this.slotDuration); // TODO: rename labelDuration?
- var slotWidth = Math.ceil(headerWidth / slotsPerLabel);
- var minWidth = this.timeHeadColEls.eq(0).css('min-width');
- if (minWidth) {
- minWidth = parseInt(minWidth, 10);
- if (minWidth) {
- slotWidth = Math.max(slotWidth, minWidth);
- }
- }
- return slotWidth;
- };
- // Coordinates
- // ------------------------------------------------------------------------------------------------------------------
- TimelineView.prototype.buildCoords = function () {
- this.timeBodyBoundCache.build();
- this.slatCoordCache.build();
- this.slatInnerCoordCache.build();
- };
- // returned value is between 0 and the number of snaps
- TimelineView.prototype.computeDateSnapCoverage = function (date) {
- var snapDiff = fullcalendar_1.divideRangeByDuration(this.normalizedUnzonedStart, date, this.snapDuration);
- if (snapDiff < 0) {
- return 0;
- }
- else if (snapDiff >= this.snapDiffToIndex.length) {
- return this.snapCnt;
- }
- else {
- var snapDiffInt = Math.floor(snapDiff);
- var snapCoverage = this.snapDiffToIndex[snapDiffInt];
- if (fullcalendar_1.isInt(snapCoverage)) { // not an in-between value
- snapCoverage += snapDiff - snapDiffInt; // add the remainder
- }
- else {
- // a fractional value, meaning the date is not visible
- // always round up in this case. works for start AND end dates in a range.
- snapCoverage = Math.ceil(snapCoverage);
- }
- return snapCoverage;
- }
- };
- // for LTR, results range from 0 to width of area
- // for RTL, results range from negative width of area to 0
- TimelineView.prototype.dateToCoord = function (date) {
- var snapCoverage = this.computeDateSnapCoverage(date);
- var slotCoverage = snapCoverage / this.snapsPerSlot;
- var slotIndex = Math.floor(slotCoverage);
- slotIndex = Math.min(slotIndex, this.slotCnt - 1);
- var partial = slotCoverage - slotIndex;
- var coordCache = this.slatInnerCoordCache;
- if (this.isRTL) {
- return (coordCache.getRightPosition(slotIndex) -
- (coordCache.getWidth(slotIndex) * partial)) - this.timeBodyBoundCache.getWidth(0);
- }
- else {
- return (coordCache.getLeftPosition(slotIndex) +
- (coordCache.getWidth(slotIndex) * partial));
- }
- };
- TimelineView.prototype.rangeToCoords = function (range) {
- if (this.isRTL) {
- return { right: this.dateToCoord(range.start), left: this.dateToCoord(range.end) };
- }
- else {
- return { left: this.dateToCoord(range.start), right: this.dateToCoord(range.end) };
- }
- };
- // a getter / setter
- TimelineView.prototype.headHeight = function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var table = this.timeHeadScroller.canvas.contentEl.find('table');
- return table.height.apply(table, args);
- };
- // this needs to be called if v scrollbars appear on body container. or zooming
- TimelineView.prototype.updateSegPositions = function () {
- var segs = [].concat(this.getEventSegs(), this.getBusinessHourSegs());
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- var coords = this.rangeToCoords(seg);
- seg.el.css({
- left: (seg.left = coords.left),
- right: -(seg.right = coords.right)
- });
- }
- };
- // Scrolling
- // ---------------------------------------------------------------------------------
- TimelineView.prototype.handleTimeBodyScrolled = function (top) {
- if (top) {
- if (!this.isTimeBodyScrolled) {
- this.isTimeBodyScrolled = true;
- this.el.addClass('fc-scrolled');
- }
- }
- else {
- if (this.isTimeBodyScrolled) {
- this.isTimeBodyScrolled = false;
- this.el.removeClass('fc-scrolled');
- }
- }
- };
- TimelineView.prototype.computeInitialDateScroll = function () {
- var unzonedRange = this.get('dateProfile').activeUnzonedRange;
- var left = 0;
- if (this.isTimeScale) {
- var scrollTime = this.opt('scrollTime');
- if (scrollTime) {
- scrollTime = moment.duration(scrollTime);
- left = this.dateToCoord(unzonedRange.getStart().time(scrollTime)); // TODO: fix this for RTL
- }
- }
- return { left: left };
- };
- TimelineView.prototype.queryDateScroll = function () {
- return { left: this.timeBodyScroller.getScrollLeft() };
- };
- TimelineView.prototype.applyDateScroll = function (scroll) {
- if (scroll.left != null) {
- // TODO: workaround for FF. the ScrollJoiner sibling won't react fast enough
- // to override the native initial crappy scroll that FF applies.
- // TODO: have the ScrollJoiner handle this
- // Similar code in ResourceTimelineView::setScroll
- this.timeHeadScroller.setScrollLeft(scroll.left);
- this.timeBodyScroller.setScrollLeft(scroll.left);
- }
- };
- // Hit System
- // ------------------------------------------------------------------------------------------------------------------
- TimelineView.prototype.prepareHits = function () {
- this.buildCoords();
- };
- // FYI: we don't want to clear the slatCoordCache in releaseHits()
- // because those coordinates are needed for dateToCoord()
- TimelineView.prototype.queryHit = function (leftOffset, topOffset) {
- var snapsPerSlot = this.snapsPerSlot;
- var slatCoordCache = this.slatCoordCache;
- var timeBodyBoundCache = this.timeBodyBoundCache;
- // within scroll container's content rectangle?
- if (timeBodyBoundCache.isPointInBounds(leftOffset, topOffset)) {
- var slatIndex = slatCoordCache.getHorizontalIndex(leftOffset);
- if (slatIndex != null) {
- var localSnapIndex = void 0;
- var partial = void 0;
- var snapIndex = void 0;
- var snapLeft = void 0;
- var snapRight = void 0;
- var slatWidth = slatCoordCache.getWidth(slatIndex);
- if (this.isRTL) {
- var slatRight = slatCoordCache.getRightOffset(slatIndex);
- partial = (slatRight - leftOffset) / slatWidth;
- localSnapIndex = Math.floor(partial * snapsPerSlot);
- snapIndex = (slatIndex * snapsPerSlot) + localSnapIndex;
- snapRight = slatRight - ((localSnapIndex / snapsPerSlot) * slatWidth);
- snapLeft = snapRight - (((localSnapIndex + 1) / snapsPerSlot) * slatWidth);
- }
- else {
- var slatLeft = slatCoordCache.getLeftOffset(slatIndex);
- partial = (leftOffset - slatLeft) / slatWidth;
- localSnapIndex = Math.floor(partial * snapsPerSlot);
- snapIndex = (slatIndex * snapsPerSlot) + localSnapIndex;
- snapLeft = slatLeft + ((localSnapIndex / snapsPerSlot) * slatWidth);
- snapRight = slatLeft + (((localSnapIndex + 1) / snapsPerSlot) * slatWidth);
- }
- return {
- snap: snapIndex,
- component: this,
- left: snapLeft,
- right: snapRight,
- top: timeBodyBoundCache.getTopOffset(0),
- bottom: timeBodyBoundCache.getBottomOffset(0)
- };
- }
- }
- };
- TimelineView.prototype.getHitFootprint = function (hit) {
- return new fullcalendar_1.ComponentFootprint(this.getSnapUnzonedRange(hit.snap), !this.isTimeScale // isAllDay
- );
- };
- TimelineView.prototype.getHitEl = function (hit) {
- return this.getSnapEl(hit.snap); // TODO: write a test for this
- };
- /*
- TODO: avoid using moments
- */
- TimelineView.prototype.getSnapUnzonedRange = function (snapIndex) {
- var start = this.normalizedUnzonedStart.clone();
- start.add(fullcalendar_1.multiplyDuration(this.snapDuration, this.snapIndexToDiff[snapIndex]));
- var end = start.clone().add(this.snapDuration);
- return new fullcalendar_1.UnzonedRange(start, end);
- };
- TimelineView.prototype.getSnapEl = function (snapIndex) {
- return this.slatEls.eq(Math.floor(snapIndex / this.snapsPerSlot));
- };
- // Event Resizing
- // ------------------------------------------------------------------------------------------------------------------
- // Renders a visual indication of an event being resized
- TimelineView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
- for (var _i = 0, eventFootprints_1 = eventFootprints; _i < eventFootprints_1.length; _i++) {
- var eventFootprint = eventFootprints_1[_i];
- this.renderHighlight(eventFootprint.componentFootprint);
- }
- return this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);
- };
- // Unrenders a visual indication of an event being resized
- TimelineView.prototype.unrenderEventResize = function () {
- this.unrenderHighlight();
- return this.helperRenderer.unrender();
- };
- // DnD
- // ------------------------------------------------------------------------------------------------------------------
- // TODO: different technique based on scale.
- // when dragging, middle of event is the drop.
- // should be the edges when isTimeScale.
- TimelineView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
- if (seg) {
- this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);
- return true; // signal helper rendered
- }
- else {
- for (var _i = 0, eventFootprints_2 = eventFootprints; _i < eventFootprints_2.length; _i++) {
- var eventFootprint = eventFootprints_2[_i];
- this.renderHighlight(eventFootprint.componentFootprint);
- }
- return false; // signal helper not rendered
- }
- };
- TimelineView.prototype.unrenderDrag = function () {
- this.helperRenderer.unrender();
- return this.unrenderHighlight();
- };
- return TimelineView;
- }(fullcalendar_1.View));
- exports.default = TimelineView;
- // config
- TimelineView.prototype.usesMinMaxTime = true; // for View. indicates that minTime/maxTime affects rendering
- // TODO: rename these
- TimelineView.prototype.eventRendererClass = TimelineEventRenderer_1.default;
- TimelineView.prototype.fillRendererClass = TimelineFillRenderer_1.default;
- TimelineView.prototype.businessHourRendererClass = fullcalendar_1.BusinessHourRenderer;
- TimelineView.prototype.helperRendererClass = TimelineHelperRenderer_1.default;
- TimelineView.prototype.eventDraggingClass = TimelineEventDragging_1.default;
- TimelineView.prototype.eventResizingClass = TimelineEventResizing_1.default;
- fullcalendar_1.StandardInteractionsMixin.mixInto(TimelineView);
- /***/ }),
- /* 15 */
- /***/ (function(module, exports) {
- module.exports = __WEBPACK_EXTERNAL_MODULE_15__;
- /***/ }),
- /* 16 */
- /***/ (function(module, exports) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var ScrollJoiner = /** @class */ (function () {
- function ScrollJoiner(axis, scrollers) {
- this.axis = axis;
- this.scrollers = scrollers;
- for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {
- var scroller = _a[_i];
- this.initScroller(scroller);
- }
- }
- ScrollJoiner.prototype.initScroller = function (scroller) {
- var _this = this;
- // when the user scrolls via mousewheel, we know for sure the target
- // scroller should be the master. capture the various x-browser events that fire.
- scroller.scrollEl.on('wheel mousewheel DomMouseScroll MozMousePixelScroll', function () {
- _this.assignMasterScroller(scroller);
- });
- scroller.on('scrollStart', function () {
- if (!_this.masterScroller) {
- _this.assignMasterScroller(scroller);
- }
- }).on('scroll', function () {
- if (scroller === _this.masterScroller) {
- for (var _i = 0, _a = _this.scrollers; _i < _a.length; _i++) {
- var otherScroller = _a[_i];
- if (otherScroller !== scroller) {
- switch (_this.axis) {
- case 'horizontal':
- otherScroller.setNativeScrollLeft(scroller.getNativeScrollLeft());
- break;
- case 'vertical':
- otherScroller.setScrollTop(scroller.getScrollTop());
- break;
- }
- }
- }
- }
- }).on('scrollEnd', function () {
- if (scroller === _this.masterScroller) {
- _this.unassignMasterScroller();
- }
- });
- };
- ScrollJoiner.prototype.assignMasterScroller = function (scroller) {
- this.unassignMasterScroller();
- this.masterScroller = scroller;
- for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {
- var otherScroller = _a[_i];
- if (otherScroller !== scroller) {
- otherScroller.disableTouchScroll();
- }
- }
- };
- ScrollJoiner.prototype.unassignMasterScroller = function () {
- if (this.masterScroller) {
- for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {
- var otherScroller = _a[_i];
- otherScroller.enableTouchScroll();
- }
- this.masterScroller = null;
- }
- };
- ScrollJoiner.prototype.update = function () {
- var allWidths = this.scrollers.map(function (scroller) { return scroller.getScrollbarWidths(); });
- var maxLeft = 0;
- var maxRight = 0;
- var maxTop = 0;
- var maxBottom = 0;
- var scroller;
- var widths;
- var i;
- for (var _i = 0, allWidths_1 = allWidths; _i < allWidths_1.length; _i++) {
- widths = allWidths_1[_i];
- maxLeft = Math.max(maxLeft, widths.left);
- maxRight = Math.max(maxRight, widths.right);
- maxTop = Math.max(maxTop, widths.top);
- maxBottom = Math.max(maxBottom, widths.bottom);
- }
- for (i = 0; i < this.scrollers.length; i++) {
- scroller = this.scrollers[i];
- widths = allWidths[i];
- scroller.canvas.setGutters(this.axis === 'horizontal' ?
- {
- left: maxLeft - widths.left,
- right: maxRight - widths.right
- } :
- {
- top: maxTop - widths.top,
- bottom: maxBottom - widths.bottom
- });
- }
- };
- return ScrollJoiner;
- }());
- exports.default = ScrollJoiner;
- /***/ }),
- /* 17 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- var ScrollFollowerSprite_1 = __webpack_require__(27);
- var TimelineEventRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(TimelineEventRenderer, _super);
- function TimelineEventRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- /*
- component must be { segContainerEl, segContainerHeight, rangeToCoords }
- */
- TimelineEventRenderer.prototype.computeDisplayEventTime = function () {
- return !this.view.isTimeScale; // because times should be obvious via axis
- };
- TimelineEventRenderer.prototype.computeDisplayEventEnd = function () {
- return false;
- };
- // Computes a default event time formatting string if `timeFormat` is not explicitly defined
- TimelineEventRenderer.prototype.computeEventTimeFormat = function () {
- return this.view.opt('extraSmallTimeFormat');
- };
- TimelineEventRenderer.prototype.renderFgSegs = function (segs) {
- var eventTitleFollower = this.view.eventTitleFollower;
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- // TODO: centralize logic (also in updateSegPositions)
- var coords = this.component.rangeToCoords(seg);
- seg.el.css({
- left: (seg.left = coords.left),
- right: -(seg.right = coords.right)
- });
- }
- // attach segs
- for (var _a = 0, segs_2 = segs; _a < segs_2.length; _a++) {
- var seg = segs_2[_a];
- seg.el.appendTo(this.component.segContainerEl);
- }
- // compute seg verticals
- for (var _b = 0, segs_3 = segs; _b < segs_3.length; _b++) {
- var seg = segs_3[_b];
- seg.height = seg.el.outerHeight(true); // include margin
- }
- this.buildSegLevels(segs);
- this.component.segContainerHeight = computeOffsetForSegs(segs); // returns this value!
- // assign seg verticals
- for (var _c = 0, segs_4 = segs; _c < segs_4.length; _c++) {
- var seg = segs_4[_c];
- seg.el.css('top', seg.top);
- }
- this.component.segContainerEl.height(this.component.segContainerHeight);
- for (var _d = 0, segs_5 = segs; _d < segs_5.length; _d++) {
- var seg = segs_5[_d];
- var titleEl = seg.el.find('.fc-title');
- if (titleEl.length) {
- seg.scrollFollowerSprite = new ScrollFollowerSprite_1.default(titleEl);
- eventTitleFollower.addSprite(seg.scrollFollowerSprite);
- }
- }
- };
- // NOTE: this modifies the order of segs
- TimelineEventRenderer.prototype.buildSegLevels = function (segs) {
- var segLevels = [];
- this.sortEventSegs(segs);
- for (var _i = 0, segs_6 = segs; _i < segs_6.length; _i++) {
- var unplacedSeg = segs_6[_i];
- unplacedSeg.above = [];
- // determine the first level with no collisions
- var level = 0; // level index
- while (level < segLevels.length) {
- var isLevelCollision = false;
- // determine collisions
- for (var _a = 0, _b = segLevels[level]; _a < _b.length; _a++) {
- var placedSeg = _b[_a];
- if (timeRowSegsCollide(unplacedSeg, placedSeg)) {
- unplacedSeg.above.push(placedSeg);
- isLevelCollision = true;
- }
- }
- if (isLevelCollision) {
- level += 1;
- }
- else {
- break;
- }
- }
- // insert into the first non-colliding level. create if necessary
- (segLevels[level] || (segLevels[level] = []))
- .push(unplacedSeg);
- // record possible colliding segments below (TODO: automated test for this)
- level += 1;
- while (level < segLevels.length) {
- for (var _c = 0, _d = segLevels[level]; _c < _d.length; _c++) {
- var belowSeg = _d[_c];
- if (timeRowSegsCollide(unplacedSeg, belowSeg)) {
- belowSeg.above.push(unplacedSeg);
- }
- }
- level += 1;
- }
- }
- return segLevels;
- };
- TimelineEventRenderer.prototype.unrenderFgSegs = function (segs) {
- if (this.component.segContainerEl) { // rendered before?
- var eventTitleFollower = this.view.eventTitleFollower;
- for (var _i = 0, segs_7 = segs; _i < segs_7.length; _i++) {
- var seg = segs_7[_i];
- if (seg.scrollFollowerSprite) {
- eventTitleFollower.removeSprite(seg.scrollFollowerSprite);
- }
- }
- this.component.segContainerEl.empty();
- this.component.segContainerEl.height('');
- this.component.segContainerHeight = null;
- }
- };
- TimelineEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {
- var eventDef = seg.footprint.eventDef;
- var isDraggable = this.view.isEventDefDraggable(eventDef);
- var isResizableFromStart = seg.isStart && this.view.isEventDefResizableFromStart(eventDef);
- var isResizableFromEnd = seg.isEnd && this.view.isEventDefResizableFromEnd(eventDef);
- var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);
- classes.unshift('fc-timeline-event', 'fc-h-event');
- var timeText = this.getTimeText(seg.footprint);
- return '<a class="' + classes.join(' ') + '" style="' + fullcalendar_1.cssToStr(this.getSkinCss(seg.footprint.eventDef)) + '"' +
- (eventDef.url ?
- ' href="' + fullcalendar_1.htmlEscape(eventDef.url) + '"' :
- '') +
- '>' +
- '<div class="fc-content">' +
- (timeText ?
- '<span class="fc-time">' +
- fullcalendar_1.htmlEscape(timeText) +
- '</span>'
- :
- '') +
- '<span class="fc-title">' +
- (eventDef.title ? fullcalendar_1.htmlEscape(eventDef.title) : ' ') +
- '</span>' +
- '</div>' +
- '<div class="fc-bg" />' +
- (isResizableFromStart ?
- '<div class="fc-resizer fc-start-resizer"></div>' :
- '') +
- (isResizableFromEnd ?
- '<div class="fc-resizer fc-end-resizer"></div>' :
- '') +
- '</a>';
- };
- return TimelineEventRenderer;
- }(fullcalendar_1.EventRenderer));
- exports.default = TimelineEventRenderer;
- // Seg Rendering Utils
- // ----------------------------------------------------------------------------------------------------------------------
- function computeOffsetForSegs(segs) {
- var max = 0;
- for (var _i = 0, segs_8 = segs; _i < segs_8.length; _i++) {
- var seg = segs_8[_i];
- max = Math.max(max, computeOffsetForSeg(seg));
- }
- return max;
- }
- function computeOffsetForSeg(seg) {
- if ((seg.top == null)) {
- seg.top = computeOffsetForSegs(seg.above);
- }
- return seg.top + seg.height;
- }
- function timeRowSegsCollide(seg0, seg1) {
- return (seg0.left < seg1.right) && (seg0.right > seg1.left);
- }
- /***/ }),
- /* 18 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var util_1 = __webpack_require__(44);
- /*
- An abstract node in a row-hierarchy tree.
- May be a self-contained single row, a row with subrows,
- OR a grouping of rows without its own distinct row.
- */
- var RowParent = /** @class */ (function (_super) {
- tslib_1.__extends(RowParent, _super);
- function RowParent(view) {
- var _this = _super.call(this, view) // will assign this.view
- || this;
- _this.children = [];
- _this.depth = 0;
- _this.trHash = {};
- _this.trs = $();
- _this.isExpanded = _this.view.opt('resourcesInitiallyExpanded');
- return _this;
- }
- // Hierarchy
- // ------------------------------------------------------------------------------------------------------------------
- /*
- Adds the given node as a child.
- Will be inserted at the `index`. If not given, will be appended to the end.
- */
- RowParent.prototype.addChildRowNode = function (child, index) {
- child.removeFromParentAndDom(); // in case it belonged somewhere else previously
- var children = this.children;
- // insert into the children array
- if (index != null) {
- children.splice(index, 0, child);
- }
- else {
- index = children.length;
- children.push(child);
- }
- // compute the previous sibling of child
- child.prevSibling =
- index > 0 ?
- children[index - 1] :
- null;
- // update the next sibling's prevSibling
- if (index < (children.length - 1)) {
- children[index + 1].prevSibling = child;
- }
- child.parent = this;
- child.depth = this.depth + (this.hasOwnRow ? 1 : 0);
- this.descendantAdded(child);
- };
- /*
- Removes the given child from the node. Assumes it is a direct child.
- If not a direct child, returns false and nothing happens.
- */
- RowParent.prototype.removeChild = function (child) {
- var i;
- var children = this.children;
- var isFound = false;
- // look for the node in the children array
- for (i = 0; i < children.length; i++) {
- var testChild = children[i];
- if (testChild === child) { // found!
- isFound = true;
- break; // after this, `i` will contain the index
- }
- }
- if (!isFound) {
- return false; // return false if not found
- }
- else {
- // rewire the next sibling's prevSibling to skip
- if (i < (children.length - 1)) { // there must be a next sibling
- children[i + 1].prevSibling = child.prevSibling;
- }
- children.splice(i, 1); // remove node from the array
- // unwire child from the parent/siblings
- child.parent = null;
- child.prevSibling = null;
- this.descendantRemoved(child);
- return child; // return on success (needed?)
- }
- };
- /*
- Removes all of the node's children from the hierarchy.
- */
- RowParent.prototype.removeChildren = function () {
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- this.descendantRemoved(child);
- }
- this.children = [];
- };
- /*
- Removes this node from its parent
- */
- RowParent.prototype.removeFromParentAndDom = function () {
- if (this.parent) {
- this.parent.removeChild(this);
- }
- if (this.get('isInDom')) {
- this.removeElement();
- }
- };
- /*
- Gets the last direct child node
- */
- RowParent.prototype.getLastChild = function () {
- var children = this.children;
- return children[children.length - 1];
- };
- /*
- Walks backward in the hierarchy to find the previous row leaf node.
- When looking at the hierarchy in a flat linear fashion, this is the revealed row just before the current.
- */
- RowParent.prototype.getPrevRowInDom = function () {
- var node = this;
- while (node) {
- if (node.prevSibling) {
- // attempt to go into the deepest last child of the previous sibling
- var lastChild = void 0;
- node = node.prevSibling;
- while ((lastChild = node.getLastChild())) {
- node = lastChild;
- }
- }
- else {
- // otherwise, move up to the parent
- node = node.parent;
- }
- // return this "previous" node if it has an exposed row
- if (node && node.get('isInDom') && node.hasOwnRow) {
- return node;
- }
- }
- return null;
- };
- /*
- Returns the first node in the subtree that has a revealed row
- */
- RowParent.prototype.getLeadingRow = function () {
- if (this.hasOwnRow) {
- return this;
- }
- else if (this.isExpanded && this.children.length) {
- return this.children[0].getLeadingRow();
- }
- };
- /*
- Generates a flat array containing all the row-nodes of the subtree. Descendants + self
- */
- RowParent.prototype.getRows = function (batchArray) {
- if (batchArray === void 0) { batchArray = []; }
- if (this.hasOwnRow) {
- batchArray.push(this);
- }
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- child.getRows(batchArray);
- }
- return batchArray;
- };
- /*
- Generates a flat array containing all the nodes (row/non-row) of the subtree. Descendants + self
- */
- RowParent.prototype.getNodes = function (batchArray) {
- if (batchArray === void 0) { batchArray = []; }
- batchArray.push(this);
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- child.getNodes(batchArray);
- }
- return batchArray;
- };
- /*
- Generates a flat array containing all the descendant nodes the current node
- */
- RowParent.prototype.getDescendants = function () {
- var batchArray = [];
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- child.getNodes(batchArray);
- }
- return batchArray;
- };
- // Rendering
- // ------------------------------------------------------------------------------------------------------------------
- RowParent.prototype.show = function () {
- if (!this.get('isInDom')) {
- this.renderSkeleton();
- }
- };
- RowParent.prototype.hide = function () {
- if (this.get('isInDom')) {
- this.removeElement();
- }
- };
- /*
- Builds and populates the TRs for each row type. Inserts them into the DOM.
- Does this only for this single row. Not recursive. If not a row (hasOwnRow=false), does not render anything.
- PRECONDITION: assumes the parent has already been rendered.
- */
- RowParent.prototype.renderSkeleton = function () {
- this.trHash = {};
- var trNodes = [];
- if (this.hasOwnRow) { // only bother rendering TRs if we know this node has a real row
- var prevRow = this.getPrevRowInDom(); // the row before this row, in the overall linear flat list
- // let the view's tbody structure determine which TRs should be rendered
- for (var type in this.view.tbodyHash) {
- // build the TR and record it
- // assign before calling the render methods, because they might rely
- var tbody = this.view.tbodyHash[type];
- var tr = $('<tr/>');
- this.trHash[type] = tr;
- trNodes.push(tr[0]);
- // call the subclass' render method for this row type (if available)
- var renderMethodName = 'render' + fullcalendar_1.capitaliseFirstLetter(type) + 'Skeleton';
- if (this[renderMethodName]) {
- this[renderMethodName](tr);
- }
- // insert the TR into the DOM
- if (prevRow) {
- prevRow.trHash[type].after(tr);
- }
- else {
- tbody.prepend(tr); // belongs in the very first position
- }
- }
- // build a single jQuery object. use event delegation for calling toggleExpanded
- this.trs = $(trNodes)
- .on('click', '.fc-expander', fullcalendar_1.proxy(this, 'toggleExpanded'));
- this.thisRowShown();
- }
- this.set('isInDom', true);
- if (this.isExpanded) {
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- child.renderSkeleton();
- }
- }
- };
- /*
- Unpopulates and removes all of this row's TRs from the DOM. Only for this single row. Not recursive.
- Will trigger "hidden".
- */
- RowParent.prototype.removeElement = function () {
- // call the subclass' render method for each row type (if available)
- for (var type in this.trHash) {
- var tr = this.trHash[type];
- var unrenderMethodName = 'unrender' + fullcalendar_1.capitaliseFirstLetter(type) + 'Skeleton';
- if (this[unrenderMethodName]) {
- this[unrenderMethodName](tr);
- }
- }
- this.unset('isInDom');
- this.thisRowHidden();
- this.trHash = {};
- this.trs.remove(); // remove from DOM
- this.trs = $();
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- if (child.get('isInDom')) {
- child.removeElement();
- }
- }
- };
- /*
- A simple getter for retrieving a TR jQuery object of a certain row type
- */
- RowParent.prototype.getTr = function (type) {
- return this.trHash[type];
- };
- // Expanding / Collapsing
- // ------------------------------------------------------------------------------------------------------------------
- // Use by row groups and rows with subrows
- /*
- Reveals this node's children if they have not already been revealed. Changes any expander icon.
- */
- RowParent.prototype.expand = function () {
- if (!this.isExpanded) {
- this.isExpanded = true;
- this.indicateExpanded();
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- child.show();
- }
- this.view.calendar.updateViewSize(); // notify view of dimension change
- this.animateExpand();
- }
- };
- /*
- Hides this node's children if they are not already hidden. Changes any expander icon.
- */
- RowParent.prototype.collapse = function () {
- if (this.isExpanded) {
- this.isExpanded = false;
- this.indicateCollapsed();
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
- var child = _a[_i];
- child.hide();
- }
- this.view.calendar.updateViewSize(); // notify view of dimension change
- }
- };
- /*
- Switches between expanded/collapsed states
- */
- RowParent.prototype.toggleExpanded = function () {
- if (this.isExpanded) {
- this.collapse();
- }
- else {
- this.expand();
- }
- };
- /*
- Changes the expander icon to the "expanded" state
- */
- RowParent.prototype.indicateExpanded = function () {
- this.trs.find('.fc-expander .fc-icon')
- .removeClass(this.getCollapsedIcon())
- .addClass(this.getExpandedIcon());
- };
- /*
- Changes the expander icon to the "collapsed" state
- */
- RowParent.prototype.indicateCollapsed = function () {
- this.trs.find('.fc-expander .fc-icon')
- .removeClass(this.getExpandedIcon())
- .addClass(this.getCollapsedIcon());
- };
- RowParent.prototype.indicateExpandingEnabled = function () {
- this.trs.find('.fc-expander-space')
- .addClass('fc-expander');
- if (this.isExpanded) {
- this.indicateExpanded();
- }
- else {
- this.indicateCollapsed();
- }
- };
- RowParent.prototype.indicateExpandingDisabled = function () {
- this.trs.find('.fc-expander-space')
- .removeClass('fc-expander')
- .find('.fc-icon')
- .removeClass(this.getExpandedIcon())
- .removeClass(this.getCollapsedIcon());
- };
- RowParent.prototype.updateExpandingEnabled = function () {
- if (this.hasOwnRow && this.children.length) {
- this.indicateExpandingEnabled();
- }
- else {
- this.indicateExpandingDisabled();
- }
- };
- RowParent.prototype.getExpandedIcon = function () {
- return 'fc-icon-down-triangle';
- };
- RowParent.prototype.getCollapsedIcon = function () {
- var dir = this.view.isRTL ? 'left' : 'right';
- return 'fc-icon-' + dir + '-triangle';
- };
- /*
- Causes a slide-down CSS transition to demonstrate that the expand has happened
- */
- RowParent.prototype.animateExpand = function () {
- var firstChild = this.children[0];
- var leadingRow = firstChild && firstChild.getLeadingRow();
- var trs = leadingRow && leadingRow.trs;
- if (trs) {
- trs.addClass('fc-collapsed');
- setTimeout(function () {
- trs.addClass('fc-transitioning'); // enable transitioning
- trs.removeClass('fc-collapsed'); // transition back to non-collapsed state
- });
- // cross-browser way to determine when the transition finishes
- trs.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {
- trs.removeClass('fc-transitioning'); // will remove the overflow:hidden
- });
- }
- };
- // Sizing
- // ------------------------------------------------------------------------------------------------------------------
- /*
- Find each TRs "inner div" (div within first cell). This div controls each TRs height.
- Returns the max pixel height.
- */
- RowParent.prototype.getMaxTrInnerHeight = function () {
- var max = 0;
- $.each(this.trHash, function (type, tr) {
- // exclude multi-rowspans (probably done for row grouping)
- var innerEl = util_1.getOwnCells(tr).find('> div:not(.fc-cell-content):first');
- max = Math.max(innerEl.height(), max);
- });
- return max;
- };
- /*
- Find each TRs "inner div" and sets all of their heights to the same value.
- */
- RowParent.prototype.setTrInnerHeight = function (height) {
- // exclude multi-rowspans (probably done for row grouping)
- $.each(this.trHash, function (type, tr) {
- util_1.getOwnCells(tr).find('> div:not(.fc-cell-content):first')
- .height(height);
- });
- };
- // Triggering
- // ------------------------------------------------------------------------------------------------------------------
- RowParent.prototype.descendantAdded = function (row) {
- if (this.get('isInDom') && this.hasOwnRow && (this.children.length === 1)) {
- this.indicateExpandingEnabled();
- }
- (this.parent || this.view).descendantAdded(row);
- };
- RowParent.prototype.descendantRemoved = function (row) {
- if (this.get('isInDom') && this.hasOwnRow && (this.children.length === 0)) {
- this.indicateExpandingDisabled();
- }
- (this.parent || this.view).descendantRemoved(row);
- };
- RowParent.prototype.thisRowShown = function () {
- (this.parent || this.view).descendantShown(this);
- };
- RowParent.prototype.thisRowHidden = function () {
- (this.parent || this.view).descendantHidden(this);
- };
- RowParent.prototype.descendantShown = function (row) {
- (this.parent || this.view).descendantShown(row);
- };
- RowParent.prototype.descendantHidden = function (row) {
- (this.parent || this.view).descendantHidden(row);
- };
- return RowParent;
- }(fullcalendar_1.DateComponent));
- exports.default = RowParent;
- RowParent.prototype.hasOwnRow = false;
- /***/ }),
- /* 19 */
- /***/ (function(module, exports) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var Resource = /** @class */ (function () {
- function Resource() {
- }
- Resource.extractIds = function (rawProps, calendar) {
- var resourceField = calendar.opt('eventResourceField') || 'resourceId';
- var resourceIds = [];
- if (rawProps.resourceIds) {
- for (var _i = 0, _a = rawProps.resourceIds; _i < _a.length; _i++) {
- var rawResourceId = _a[_i];
- resourceIds.push(Resource.normalizeId(rawResourceId));
- }
- }
- if (rawProps[resourceField] != null) {
- resourceIds.push(Resource.normalizeId(rawProps[resourceField]));
- }
- return resourceIds;
- };
- Resource.normalizeId = function (rawId) {
- return String(rawId);
- };
- return Resource;
- }());
- exports.default = Resource;
- /***/ }),
- /* 20 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceViewMixin_1 = __webpack_require__(9);
- var ResourceDayGrid_1 = __webpack_require__(13);
- var ResourceTimeGrid_1 = __webpack_require__(38);
- var ResourceAgendaView = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceAgendaView, _super);
- function ResourceAgendaView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.initResourceView();
- return _this;
- }
- return ResourceAgendaView;
- }(fullcalendar_1.AgendaView));
- exports.default = ResourceAgendaView;
- ResourceAgendaView.prototype.timeGridClass = ResourceTimeGrid_1.default;
- ResourceAgendaView.prototype.dayGridClass = ResourceDayGrid_1.default;
- ResourceViewMixin_1.default.mixInto(ResourceAgendaView);
- /***/ }),
- /* 21 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- /*
- Requirements:
- - must be a Grid
- - grid must have a view that's a ResourceView
- - DayTableMixin must already be mixed in
- */
- var ResourceDayTableMixin = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceDayTableMixin, _super);
- function ResourceDayTableMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ResourceDayTableMixin.mixInto = function (destClass) {
- var _this = this;
- fullcalendar_1.Mixin.mixInto.call(this, destClass);
- [
- 'updateDayTableCols',
- 'computeColCnt',
- 'getColDayIndex',
- 'renderHeadTrHtml',
- 'renderBgCellsHtml',
- 'renderBusinessHours',
- 'allowCrossResource'
- ].forEach(function (methodName) {
- destClass.prototype[methodName] = _this.prototype[methodName];
- });
- };
- // Resource Data
- // ----------------------------------------------------------------------------------------------
- // does not do any rendering. rendering is responsibility of host object
- ResourceDayTableMixin.prototype.registerResources = function (resources) {
- this.flattenedResources = this.flattenResources(resources);
- this.resourceCnt = this.flattenedResources.length;
- this.updateDayTable(); // will call computeColCnt
- };
- // flattens and sorts
- ResourceDayTableMixin.prototype.flattenResources = function (resources) {
- var sortFunc;
- var orderVal = this.opt('resourceOrder');
- if (orderVal) {
- var orderSpecs_1 = fullcalendar_1.parseFieldSpecs(orderVal);
- sortFunc = function (a, b) { return fullcalendar_1.compareByFieldSpecs(a, b, orderSpecs_1); };
- }
- else {
- sortFunc = null;
- }
- var res = [];
- this.accumulateResources(resources, sortFunc, res);
- return res;
- };
- // just flattens
- ResourceDayTableMixin.prototype.accumulateResources = function (resources, sortFunc, res) {
- var sortedResources;
- if (sortFunc) {
- sortedResources = resources.slice(0); // make copy
- sortedResources.sort(sortFunc); // sorts in place
- }
- else {
- sortedResources = resources;
- }
- for (var _i = 0, sortedResources_1 = sortedResources; _i < sortedResources_1.length; _i++) {
- var resource = sortedResources_1[_i];
- res.push(resource);
- this.accumulateResources(resource.children, sortFunc, res);
- }
- };
- // Table Layout
- // ----------------------------------------------------------------------------------------------
- ResourceDayTableMixin.prototype.updateDayTableCols = function () {
- this.datesAboveResources = this.opt('groupByDateAndResource');
- fullcalendar_1.DayTableMixin.prototype.updateDayTableCols.call(this);
- };
- ResourceDayTableMixin.prototype.computeColCnt = function () {
- return this.resourceCnt * this.daysPerRow;
- };
- ResourceDayTableMixin.prototype.getColDayIndex = function (col) {
- if (this.isRTL) {
- col = this.colCnt - 1 - col;
- }
- if (this.datesAboveResources) {
- return Math.floor(col / (this.resourceCnt || 1));
- }
- else {
- return col % this.daysPerRow;
- }
- };
- ResourceDayTableMixin.prototype.getColResource = function (col) {
- return this.flattenedResources[this.getColResourceIndex(col)];
- };
- ResourceDayTableMixin.prototype.getColResourceIndex = function (col) {
- if (this.isRTL) {
- col = this.colCnt - 1 - col;
- }
- if (this.datesAboveResources) {
- return col % (this.resourceCnt || 1);
- }
- else {
- return Math.floor(col / this.daysPerRow);
- }
- };
- ResourceDayTableMixin.prototype.indicesToCol = function (resourceIndex, dayIndex) {
- var col = this.datesAboveResources ?
- (dayIndex * (this.resourceCnt || 1)) + resourceIndex :
- (resourceIndex * this.daysPerRow) + dayIndex;
- if (this.isRTL) {
- col = this.colCnt - 1 - col;
- }
- return col;
- };
- // Header Rendering
- // ----------------------------------------------------------------------------------------------
- ResourceDayTableMixin.prototype.renderHeadTrHtml = function () {
- if (this.daysPerRow > 1) {
- // do two levels
- if (this.datesAboveResources) {
- return this.renderHeadDateAndResourceHtml();
- }
- else {
- return this.renderHeadResourceAndDateHtml();
- }
- }
- else {
- // do one level
- return this.renderHeadResourceHtml();
- }
- };
- // renders one row of resources header cell
- ResourceDayTableMixin.prototype.renderHeadResourceHtml = function () {
- var _this = this;
- var resourceHtmls = this.flattenedResources.map(function (resource) { return (_this.renderHeadResourceCellHtml(resource)); });
- if (!resourceHtmls.length) {
- resourceHtmls.push('<td> </td>');
- }
- return this.wrapTr(resourceHtmls, 'renderHeadIntroHtml');
- };
- // renders resource cells above date cells
- ResourceDayTableMixin.prototype.renderHeadResourceAndDateHtml = function () {
- var resourceHtmls = [];
- var dateHtmls = [];
- var daysPerRow = this.daysPerRow;
- for (var _i = 0, _a = this.flattenedResources; _i < _a.length; _i++) {
- var resource = _a[_i];
- resourceHtmls.push(this.renderHeadResourceCellHtml(resource, null, this.daysPerRow));
- for (var dayIndex = 0; dayIndex < daysPerRow; dayIndex++) {
- var date = this.dayDates[dayIndex].clone();
- dateHtmls.push(this.renderHeadResourceDateCellHtml(date, resource));
- }
- }
- if (!resourceHtmls.length) {
- resourceHtmls.push('<td> </td>');
- }
- if (!dateHtmls.length) {
- dateHtmls.push('<td> </td>');
- }
- return this.wrapTr(resourceHtmls, 'renderHeadIntroHtml') +
- this.wrapTr(dateHtmls, 'renderHeadIntroHtml');
- };
- // renders date cells above resource cells
- ResourceDayTableMixin.prototype.renderHeadDateAndResourceHtml = function () {
- var dateHtmls = [];
- var resourceHtmls = [];
- var daysPerRow = this.daysPerRow;
- for (var dayIndex = 0; dayIndex < daysPerRow; dayIndex++) {
- var date = this.dayDates[dayIndex].clone();
- dateHtmls.push(this.renderHeadDateCellHtml(date, this.resourceCnt) // with colspan
- );
- for (var _i = 0, _a = this.flattenedResources; _i < _a.length; _i++) {
- var resource = _a[_i];
- resourceHtmls.push(this.renderHeadResourceCellHtml(resource, date));
- }
- }
- if (!dateHtmls.length) {
- dateHtmls.push('<td> </td>');
- }
- if (!resourceHtmls.length) {
- resourceHtmls.push('<td> </td>');
- }
- return this.wrapTr(dateHtmls, 'renderHeadIntroHtml') +
- this.wrapTr(resourceHtmls, 'renderHeadIntroHtml');
- };
- // given a resource and an optional date
- ResourceDayTableMixin.prototype.renderHeadResourceCellHtml = function (resource, date, colspan) {
- if (colspan === void 0) { colspan = 1; }
- return '<th class="fc-resource-cell"' +
- ' data-resource-id="' + resource.id + '"' +
- (date ?
- ' data-date="' + date.format('YYYY-MM-DD') + '"' :
- '') +
- (colspan > 1 ?
- ' colspan="' + colspan + '"' :
- '') +
- '>' +
- fullcalendar_1.htmlEscape(this.view.getResourceText(resource)) +
- '</th>';
- };
- // given a date and a required resource
- ResourceDayTableMixin.prototype.renderHeadResourceDateCellHtml = function (date, resource, colspan) {
- if (colspan === void 0) { colspan = 1; }
- return this.renderHeadDateCellHtml(date, colspan, 'data-resource-id="' + resource.id + '"');
- };
- // given a container with already rendered resource cells
- ResourceDayTableMixin.prototype.processHeadResourceEls = function (containerEl) {
- var _this = this;
- containerEl.find('.fc-resource-cell').each(function (col, node) {
- var resource;
- if (_this.datesAboveResources) {
- // each resource <td> is a distinct column
- resource = _this.getColResource(col);
- }
- else {
- // each resource <td> covers multiple columns of dates
- resource = _this.flattenedResources[_this.isRTL ?
- _this.flattenedResources.length - 1 - col :
- col];
- }
- _this.publiclyTrigger('resourceRender', {
- context: resource,
- args: [
- resource,
- $(node),
- $(),
- _this.view
- ]
- });
- });
- };
- // Bg Rendering
- // ----------------------------------------------------------------------------------------------
- // TODO: unify with DayTableMixin more, instead of completely redefining
- ResourceDayTableMixin.prototype.renderBgCellsHtml = function (row) {
- var htmls = [];
- var colCnt = this.colCnt;
- for (var col = 0; col < colCnt; col++) {
- var date = this.getCellDate(row, col);
- var resource = this.getColResource(col);
- htmls.push(this.renderResourceBgCellHtml(date, resource));
- }
- if (!htmls.length) {
- htmls.push('<td> </td>');
- }
- return htmls.join(''); // already accounted for RTL
- };
- ResourceDayTableMixin.prototype.renderResourceBgCellHtml = function (date, resource) {
- return this.renderBgCellHtml(date, 'data-resource-id="' + resource.id + '"');
- };
- // Rendering Utils
- // ----------------------------------------------------------------------------------------------
- // only works for when given cells are ordered chronologically
- // mutates cellHtmls
- // TODO: make this a DayTableMixin utility
- ResourceDayTableMixin.prototype.wrapTr = function (cellHtmls, introMethodName) {
- if (this.isRTL) {
- cellHtmls.reverse();
- return '<tr>' +
- cellHtmls.join('') +
- this[introMethodName]() +
- '</tr>';
- }
- else {
- return '<tr>' +
- this[introMethodName]() +
- cellHtmls.join('') +
- '</tr>';
- }
- };
- // Business Hours
- // ----------------------------------------------------------------------------------------------
- ResourceDayTableMixin.prototype.renderBusinessHours = function (businessHourGenerator) {
- var isAllDay = this.hasAllDayBusinessHours;
- var unzonedRange = this.dateProfile.activeUnzonedRange;
- var eventFootprints = [];
- for (var _i = 0, _a = this.flattenedResources; _i < _a.length; _i++) {
- var resource = _a[_i];
- var eventInstanceGroup = (resource.businessHourGenerator || businessHourGenerator)
- .buildEventInstanceGroup(isAllDay, unzonedRange);
- if (eventInstanceGroup) {
- for (var _b = 0, _c = eventInstanceGroup.sliceRenderRanges(unzonedRange); _b < _c.length; _b++) {
- var eventRange = _c[_b];
- eventFootprints.push(new fullcalendar_1.EventFootprint(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, isAllDay, resource.id), eventRange.eventDef, eventRange.eventInstance));
- }
- }
- }
- return this.businessHourRenderer.renderEventFootprints(eventFootprints);
- };
- return ResourceDayTableMixin;
- }(fullcalendar_1.Mixin));
- exports.default = ResourceDayTableMixin;
- ResourceDayTableMixin.prototype.resourceCnt = 0;
- ResourceDayTableMixin.prototype.datesAboveResources = false;
- ResourceDayTableMixin.prototype.allowCrossResource = false;
- /***/ }),
- /* 22 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceViewMixin_1 = __webpack_require__(9);
- var ResourceDayGrid_1 = __webpack_require__(13);
- var ResourceBasicView = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceBasicView, _super);
- function ResourceBasicView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.initResourceView();
- return _this;
- }
- return ResourceBasicView;
- }(fullcalendar_1.BasicView));
- exports.default = ResourceBasicView;
- ResourceBasicView.prototype.dayGridClass = ResourceDayGrid_1.default;
- ResourceViewMixin_1.default.mixInto(ResourceBasicView);
- /***/ }),
- /* 23 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceViewMixin_1 = __webpack_require__(9);
- var ResourceDayGrid_1 = __webpack_require__(13);
- var ResourceMonthView = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceMonthView, _super);
- function ResourceMonthView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.initResourceView();
- return _this;
- }
- return ResourceMonthView;
- }(fullcalendar_1.MonthView));
- exports.default = ResourceMonthView;
- ResourceMonthView.prototype.dayGridClass = ResourceDayGrid_1.default;
- ResourceViewMixin_1.default.mixInto(ResourceMonthView);
- /***/ }),
- /* 24 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var EnhancedScroller_1 = __webpack_require__(39);
- /*
- A Scroller, but with a wrapping div that allows "clipping" away of native scrollbars,
- giving the appearance that there are no scrollbars.
- */
- var ClippedScroller = /** @class */ (function (_super) {
- tslib_1.__extends(ClippedScroller, _super);
- /*
- Received overflows can be set to 'clipped', meaning scrollbars shouldn't be visible
- to the user, but the area should still scroll.
- */
- function ClippedScroller(options) {
- var _this = _super.call(this, options) || this;
- _this.isHScrollbarsClipped = false;
- _this.isVScrollbarsClipped = false;
- if (_this.overflowX === 'clipped-scroll') {
- _this.overflowX = 'scroll';
- _this.isHScrollbarsClipped = true;
- }
- if (_this.overflowY === 'clipped-scroll') {
- _this.overflowY = 'scroll';
- _this.isVScrollbarsClipped = true;
- }
- return _this;
- }
- ClippedScroller.prototype.renderEl = function () {
- var scrollEl = _super.prototype.renderEl.call(this);
- return $('<div class="fc-scroller-clip" />').append(scrollEl); // return value
- };
- ClippedScroller.prototype.updateSize = function () {
- var scrollEl = this.scrollEl;
- var scrollbarWidths = fullcalendar_1.getScrollbarWidths(scrollEl); // the native ones
- var cssProps = { marginLeft: 0, marginRight: 0, marginTop: 0, marginBottom: 0 };
- // give the inner scrolling div negative margins so that its scrollbars
- // are nudged outside of the bounding box of the wrapper, which is overflow:hidden
- if (this.isHScrollbarsClipped) {
- cssProps.marginTop = -scrollbarWidths.top;
- cssProps.marginBottom = -scrollbarWidths.bottom;
- }
- if (this.isVScrollbarsClipped) {
- cssProps.marginLeft = -scrollbarWidths.left;
- cssProps.marginRight = -scrollbarWidths.right;
- }
- scrollEl.css(cssProps);
- // if we are attempting to hide the scrollbars offscreen, OSX/iOS will still
- // display the floating scrollbars. attach a className to force-hide them.
- return scrollEl.toggleClass('fc-no-scrollbars', (this.isHScrollbarsClipped || (this.overflowX === 'hidden')) && // should never show?
- (this.isVScrollbarsClipped || (this.overflowY === 'hidden')) && // should never show?
- !( // doesn't have any scrollbar mass
- scrollbarWidths.top ||
- scrollbarWidths.bottom ||
- scrollbarWidths.left ||
- scrollbarWidths.right));
- };
- /*
- Accounts for 'clipped' scrollbars
- */
- ClippedScroller.prototype.getScrollbarWidths = function () {
- var widths = fullcalendar_1.getScrollbarWidths(this.scrollEl);
- if (this.isHScrollbarsClipped) {
- widths.top = 0;
- widths.bottom = 0;
- }
- if (this.isVScrollbarsClipped) {
- widths.left = 0;
- widths.right = 0;
- }
- return widths;
- };
- return ClippedScroller;
- }(EnhancedScroller_1.default));
- exports.default = ClippedScroller;
- /***/ }),
- /* 25 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- /*
- A rectangular area of content that lives within a Scroller.
- Can have "gutters", areas of dead spacing around the perimeter.
- Also very useful for forcing a width, which a Scroller cannot do alone.
- Has a content area that lives above a background area.
- */
- var ScrollerCanvas = /** @class */ (function () {
- function ScrollerCanvas() {
- this.gutters = {};
- }
- ScrollerCanvas.prototype.render = function () {
- this.el = $("<div class=\"fc-scroller-canvas\"> <div class=\"fc-content\"></div> <div class=\"fc-bg\"></div> </div>");
- this.contentEl = this.el.find('.fc-content');
- this.bgEl = this.el.find('.fc-bg');
- };
- /*
- If falsy, resets all the gutters to 0
- */
- ScrollerCanvas.prototype.setGutters = function (gutters) {
- if (!gutters) {
- this.gutters = {};
- }
- else {
- $.extend(this.gutters, gutters);
- }
- this.updateSize();
- };
- ScrollerCanvas.prototype.setWidth = function (width) {
- this.width = width;
- this.updateSize();
- };
- ScrollerCanvas.prototype.setMinWidth = function (minWidth) {
- this.minWidth = minWidth;
- this.updateSize();
- };
- ScrollerCanvas.prototype.clearWidth = function () {
- this.width = null;
- this.minWidth = null;
- this.updateSize();
- };
- ScrollerCanvas.prototype.updateSize = function () {
- var gutters = this.gutters;
- this.el // is border-box (width includes padding)
- .toggleClass('fc-gutter-left', Boolean(gutters.left))
- .toggleClass('fc-gutter-right', Boolean(gutters.right))
- .toggleClass('fc-gutter-top', Boolean(gutters.top))
- .toggleClass('fc-gutter-bottom', Boolean(gutters.bottom))
- .css({
- paddingLeft: gutters.left || '',
- paddingRight: gutters.right || '',
- paddingTop: gutters.top || '',
- paddingBottom: gutters.bottom || '',
- width: (this.width != null) ?
- this.width + (gutters.left || 0) + (gutters.right || 0) :
- '',
- minWidth: (this.minWidth != null) ?
- this.minWidth + (gutters.left || 0) + (gutters.right || 0) :
- ''
- });
- this.bgEl.css({
- left: gutters.left || '',
- right: gutters.right || '',
- top: gutters.top || '',
- bottom: gutters.bottom || ''
- });
- };
- return ScrollerCanvas;
- }());
- exports.default = ScrollerCanvas;
- /***/ }),
- /* 26 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ScrollFollowerSprite_1 = __webpack_require__(27);
- var ScrollFollower = /** @class */ (function () {
- function ScrollFollower(scroller, allowPointerEvents) {
- if (allowPointerEvents === void 0) { allowPointerEvents = false; }
- var _this = this;
- this.isHFollowing = true;
- this.isVFollowing = false;
- this.allowPointerEvents = false;
- this.containOnNaturalLeft = false;
- this.containOnNaturalRight = false;
- this.minTravel = 0;
- this.allowPointerEvents = allowPointerEvents;
- this.scroller = scroller;
- this.spritesById = {};
- scroller.on('scroll', function () {
- if (scroller.isTouchedEver) {
- // touch devices should only updated after the scroll is over
- _this.isTouch = true;
- _this.isForcedRelative = true; // touch devices scroll too quick to make absolute ever look good
- }
- else {
- _this.isTouch = false;
- // this.isForcedRelative = false // why?
- _this.handleScroll();
- }
- });
- // for touch devices
- scroller.on('scrollEnd', function () {
- _this.handleScroll();
- });
- }
- // TODO: have a destroy method.
- // View's whose skeletons get destroyed should unregister their scrollfollowers.
- /*
- `els` is as a jQuery set of elements.
- If elements are already position:relative, is a performance benefit.
- */
- ScrollFollower.prototype.setSpriteEls = function (els) {
- var _this = this;
- this.clearSprites();
- els.each(function (i, node) {
- _this.addSprite(new ScrollFollowerSprite_1.default($(node)));
- });
- };
- ScrollFollower.prototype.clearSprites = function () {
- this.iterSprites(function (sprite) { return sprite.clear(); });
- this.spritesById = {};
- };
- ScrollFollower.prototype.addSprite = function (sprite) {
- sprite.follower = this;
- this.spritesById[sprite.id] = sprite;
- };
- ScrollFollower.prototype.removeSprite = function (sprite) {
- sprite.clear();
- delete this.spritesById[sprite.id];
- };
- ScrollFollower.prototype.handleScroll = function () {
- this.updateViewport();
- this.updatePositions();
- };
- ScrollFollower.prototype.cacheDimensions = function () {
- this.updateViewport();
- this.scrollbarWidths = this.scroller.getScrollbarWidths();
- this.contentOffset = this.scroller.canvas.el.offset();
- this.iterSprites(function (sprite) { return sprite.cacheDimensions(); });
- };
- ScrollFollower.prototype.updateViewport = function () {
- var scroller = this.scroller;
- var left = scroller.getScrollFromLeft();
- var top = scroller.getScrollTop();
- // TODO: use getViewportRect() for getting this rect
- return this.viewportRect = {
- left: left,
- right: left + scroller.getClientWidth(),
- top: top,
- bottom: top + scroller.getClientHeight()
- };
- };
- ScrollFollower.prototype.forceRelative = function () {
- if (!this.isForcedRelative) {
- this.isForcedRelative = true;
- this.iterSprites(function (sprite) {
- if (sprite.doAbsolute) {
- return sprite.assignPosition();
- }
- });
- }
- };
- ScrollFollower.prototype.clearForce = function () {
- if (this.isForcedRelative && !this.isTouch) { // don't allow touch to ever NOT be relative
- this.isForcedRelative = false;
- this.iterSprites(function (sprite) { return sprite.assignPosition(); });
- }
- };
- ScrollFollower.prototype.update = function () {
- this.cacheDimensions();
- this.updatePositions();
- };
- ScrollFollower.prototype.updatePositions = function () {
- this.iterSprites(function (sprite) { return sprite.updatePosition(); });
- };
- // relative to inner content pane
- ScrollFollower.prototype.getContentRect = function (el) {
- return fullcalendar_1.getContentRect(el, this.contentOffset);
- };
- // relative to inner content pane
- ScrollFollower.prototype.getBoundingRect = function (el) {
- return fullcalendar_1.getOuterRect(el, this.contentOffset);
- };
- ScrollFollower.prototype.iterSprites = function (func) {
- for (var id in this.spritesById) {
- var sprite = this.spritesById[id];
- func(sprite, id);
- }
- };
- return ScrollFollower;
- }());
- exports.default = ScrollFollower;
- /***/ }),
- /* 27 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var ScrollFollowerSprite = /** @class */ (function () {
- /*
- If given el is already position:relative, is a performance gain
- */
- function ScrollFollowerSprite(el) {
- this.isEnabled = true;
- this.isHFollowing = false;
- this.isVFollowing = false;
- this.doAbsolute = false;
- this.isAbsolute = false;
- this.isCentered = false;
- this.isBlock = false;
- this.el = el;
- this.id = String(ScrollFollowerSprite.uid++);
- this.isBlock = this.el.css('display') === 'block';
- if (this.el.css('position') !== 'relative') {
- this.el.css('position', 'relative');
- }
- }
- ScrollFollowerSprite.prototype.disable = function () {
- if (this.isEnabled) {
- this.isEnabled = false;
- this.resetPosition();
- this.unabsolutize();
- }
- };
- ScrollFollowerSprite.prototype.enable = function () {
- if (!this.isEnabled) {
- this.isEnabled = true;
- this.assignPosition();
- }
- };
- ScrollFollowerSprite.prototype.clear = function () {
- this.disable();
- this.follower = null;
- this.absoluteEl = null;
- };
- ScrollFollowerSprite.prototype.cacheDimensions = function () {
- var isHFollowing = false;
- var isVFollowing = false;
- var isCentered = false;
- this.naturalWidth = this.el.width();
- this.resetPosition();
- var follower = this.follower;
- var naturalRect = (this.naturalRect = follower.getBoundingRect(this.el));
- var parentEl = this.el.parent();
- this.parentRect = follower.getBoundingRect(parentEl);
- var containerRect = (this.containerRect = joinRects(follower.getContentRect(parentEl), naturalRect));
- var minTravel = follower.minTravel;
- if (follower.containOnNaturalLeft) {
- containerRect.left = naturalRect.left;
- }
- if (follower.containOnNaturalRight) {
- containerRect.right = naturalRect.right;
- }
- if (follower.isHFollowing) {
- if ((getRectWidth(containerRect) - getRectWidth(naturalRect)) >= minTravel) {
- isCentered = this.el.css('text-align') === 'center';
- isHFollowing = true;
- }
- }
- if (follower.isVFollowing) {
- if ((getRectHeight(containerRect) - getRectHeight(naturalRect)) >= minTravel) {
- isVFollowing = true;
- }
- }
- this.isHFollowing = isHFollowing;
- this.isVFollowing = isVFollowing;
- this.isCentered = isCentered;
- };
- ScrollFollowerSprite.prototype.updatePosition = function () {
- this.computePosition();
- this.assignPosition();
- };
- ScrollFollowerSprite.prototype.resetPosition = function () {
- this.el.css({
- top: '',
- left: ''
- });
- };
- ScrollFollowerSprite.prototype.computePosition = function () {
- var viewportRect = this.follower.viewportRect;
- var parentRect = this.parentRect;
- var containerRect = this.containerRect;
- var visibleParentRect = fullcalendar_1.intersectRects(viewportRect, parentRect);
- var rect = null;
- var doAbsolute = false;
- if (visibleParentRect) { // is parent element onscreen?
- rect = copyRect(this.naturalRect);
- var subjectRect = fullcalendar_1.intersectRects(rect, parentRect);
- // will we need to reposition?
- if ((this.isCentered && !testRectContains(viewportRect, parentRect)) || // centering and container not completely in view?
- (subjectRect && !testRectContains(viewportRect, subjectRect))) { // subject not completely in view?
- doAbsolute = true;
- if (this.isHFollowing) {
- if (this.isCentered) {
- var rectWidth = getRectWidth(rect);
- rect.left = ((visibleParentRect.left + visibleParentRect.right) / 2) - (rectWidth / 2);
- rect.right = rect.left + rectWidth;
- }
- else {
- if (!hContainRect(rect, viewportRect)) { // move into view. already there?
- doAbsolute = false;
- }
- }
- if (hContainRect(rect, containerRect)) { // move within container. needed to move?
- doAbsolute = false;
- }
- }
- if (this.isVFollowing) {
- if (!vContainRect(rect, viewportRect)) { // move into view. already there?
- doAbsolute = false;
- }
- if (vContainRect(rect, containerRect)) { // move within container. needed to move?
- doAbsolute = false;
- }
- }
- if (!testRectContains(viewportRect, rect)) { // partially offscreen?
- doAbsolute = false;
- }
- }
- }
- this.rect = rect;
- this.doAbsolute = doAbsolute;
- };
- ScrollFollowerSprite.prototype.assignPosition = function () {
- if (this.isEnabled) {
- if (!this.rect) { // completely offscreen?
- this.unabsolutize();
- }
- else if (this.doAbsolute && !this.follower.isForcedRelative) {
- this.absolutize();
- this.absoluteEl.css({
- top: (this.rect.top - this.follower.viewportRect.top) + this.follower.scrollbarWidths.top,
- left: (this.rect.left - this.follower.viewportRect.left) + this.follower.scrollbarWidths.left,
- width: this.isBlock ? this.naturalWidth : ''
- });
- }
- else {
- var top_1 = this.rect.top - this.naturalRect.top;
- var left = this.rect.left - this.naturalRect.left;
- this.unabsolutize();
- this.el.toggleClass('fc-following', Boolean(top_1 || left))
- .css({
- top: top_1,
- left: left
- });
- }
- }
- };
- ScrollFollowerSprite.prototype.absolutize = function () {
- if (!this.isAbsolute) {
- if (!this.absoluteEl) {
- this.absoluteEl = this.buildAbsoluteEl();
- }
- this.absoluteEl.appendTo(this.follower.scroller.el);
- this.el.css('visibility', 'hidden');
- this.isAbsolute = true;
- }
- };
- ScrollFollowerSprite.prototype.unabsolutize = function () {
- if (this.isAbsolute) {
- this.absoluteEl.detach();
- this.el.css('visibility', '');
- this.isAbsolute = false;
- }
- };
- ScrollFollowerSprite.prototype.buildAbsoluteEl = function () {
- var el = this.el.clone().addClass('fc-following');
- el.css({
- 'position': 'absolute',
- 'z-index': 1000,
- 'font-weight': this.el.css('font-weight'),
- 'font-size': this.el.css('font-size'),
- 'font-family': this.el.css('font-family'),
- 'text-decoration': this.el.css('text-decoration'),
- 'color': this.el.css('color'),
- 'padding-top': this.el.css('padding-top'),
- 'padding-bottom': this.el.css('padding-bottom'),
- 'padding-left': this.el.css('padding-left'),
- 'padding-right': this.el.css('padding-right')
- });
- if (!this.follower.allowPointerEvents) {
- el.css('pointer-events', 'none');
- }
- return el;
- };
- ScrollFollowerSprite.uid = 0;
- return ScrollFollowerSprite;
- }());
- exports.default = ScrollFollowerSprite;
- // Geometry Utils
- // ----------------------------------------------------------------------------------------------------------------------
- // TODO: move somewhere more common
- function copyRect(rect) {
- return {
- left: rect.left,
- right: rect.right,
- top: rect.top,
- bottom: rect.bottom
- };
- }
- function getRectWidth(rect) {
- return rect.right - rect.left;
- }
- function getRectHeight(rect) {
- return rect.bottom - rect.top;
- }
- function testRectContains(rect, innerRect) {
- return testRectHContains(rect, innerRect) && testRectVContains(rect, innerRect);
- }
- function testRectHContains(rect, innerRect) {
- return (innerRect.left >= rect.left) && (innerRect.right <= rect.right);
- }
- function testRectVContains(rect, innerRect) {
- return (innerRect.top >= rect.top) && (innerRect.bottom <= rect.bottom);
- }
- function hContainRect(rect, outerRect) {
- if (rect.left < outerRect.left) {
- rect.right = outerRect.left + getRectWidth(rect);
- rect.left = outerRect.left;
- return true;
- }
- else if (rect.right > outerRect.right) {
- rect.left = outerRect.right - getRectWidth(rect);
- rect.right = outerRect.right;
- return true;
- }
- else {
- return false;
- }
- }
- function vContainRect(rect, outerRect) {
- if (rect.top < outerRect.top) {
- rect.bottom = outerRect.top + getRectHeight(rect);
- rect.top = outerRect.top;
- return true;
- }
- else if (rect.bottom > outerRect.bottom) {
- rect.top = outerRect.bottom - getRectHeight(rect);
- rect.bottom = outerRect.bottom;
- return true;
- }
- else {
- return false;
- }
- }
- function joinRects(rect1, rect2) {
- return {
- left: Math.min(rect1.left, rect2.left),
- right: Math.max(rect1.right, rect2.right),
- top: Math.min(rect1.top, rect2.top),
- bottom: Math.max(rect1.bottom, rect2.bottom)
- };
- }
- /***/ }),
- /* 28 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var TimelineFillRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(TimelineFillRenderer, _super);
- function TimelineFillRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- /*
- component must be { bgSegContainerEl, rangeToCoords }
- */
- TimelineFillRenderer.prototype.attachSegEls = function (type, segs) {
- if (segs.length) {
- var className = void 0;
- if (type === 'businessHours') {
- className = 'bgevent';
- }
- else {
- className = type.toLowerCase();
- }
- // making a new container each time is OKAY
- // all types of segs (background or business hours or whatever) are rendered in one pass
- var containerEl = $('<div class="fc-' + className + '-container" />')
- .appendTo(this.component.bgSegContainerEl);
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- var coords = this.component.rangeToCoords(seg); // TODO: make DRY
- seg.el.css({
- left: (seg.left = coords.left),
- right: -(seg.right = coords.right)
- });
- seg.el.appendTo(containerEl);
- }
- return containerEl; // return value
- }
- };
- return TimelineFillRenderer;
- }(fullcalendar_1.FillRenderer));
- exports.default = TimelineFillRenderer;
- /***/ }),
- /* 29 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var TimelineHelperRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(TimelineHelperRenderer, _super);
- function TimelineHelperRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- /*
- component must be { innerEl, rangeToCoords, ?resource }
- */
- TimelineHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {
- var helperNodes = []; // .fc-event-container
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- // TODO: centralize logic (also in renderFgSegsInContainers)
- var coords = this.component.rangeToCoords(seg);
- seg.el.css({
- left: (seg.left = coords.left),
- right: -(seg.right = coords.right)
- });
- // TODO: detangle the concept of resources
- // TODO: how to identify these two segs as the same!?
- if (sourceSeg && (sourceSeg.resourceId === (this.component.resource != null ? this.component.resource.id : undefined))) {
- seg.el.css('top', sourceSeg.el.css('top'));
- }
- else {
- seg.el.css('top', 0);
- }
- }
- var helperContainerEl = $('<div class="fc-event-container fc-helper-container"/>')
- .appendTo(this.component.innerEl);
- helperNodes.push(helperContainerEl[0]);
- for (var _a = 0, segs_2 = segs; _a < segs_2.length; _a++) {
- var seg = segs_2[_a];
- helperContainerEl.append(seg.el);
- }
- return $(helperNodes); // return value. TODO: need to accumulate across calls?
- };
- return TimelineHelperRenderer;
- }(fullcalendar_1.HelperRenderer));
- exports.default = TimelineHelperRenderer;
- /***/ }),
- /* 30 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ScrollJoiner_1 = __webpack_require__(16);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- var ResourceViewMixin_1 = __webpack_require__(9);
- var TimelineView_1 = __webpack_require__(14);
- var Spreadsheet_1 = __webpack_require__(43);
- var ResourceTimelineEventRenderer_1 = __webpack_require__(45);
- var RowParent_1 = __webpack_require__(18);
- var ResourceRow_1 = __webpack_require__(46);
- var HRowGroup_1 = __webpack_require__(47);
- var VRowGroup_1 = __webpack_require__(31);
- var EventRow_1 = __webpack_require__(33);
- var ResourceTimelineView = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceTimelineView, _super);
- function ResourceTimelineView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.canHandleSpecificResources = true;
- _this.isResourceFootprintsEnabled = true;
- _this.nestingCnt = 0;
- _this.indiBizCnt = 0;
- _this.isIndiBizRendered = false;
- _this.isGenericBizRendered = false;
- _this.initResourceView();
- _this.processResourceOptions();
- _this.spreadsheet = new Spreadsheet_1.default(_this);
- _this.rowHierarchy = new RowParent_1.default(_this);
- _this.rowHierarchy.isExpanded = true; // hack to always show, regardless of resourcesInitiallyExpanded
- _this.resourceRowHash = {};
- return _this;
- }
- // Resource Options
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.processResourceOptions = function () {
- var allColSpecs = this.opt('resourceColumns') || [];
- var labelText = this.opt('resourceLabelText'); // TODO: view.override
- var defaultLabelText = 'Resources'; // TODO: view.defaults
- var superHeaderText = null;
- if (!allColSpecs.length) {
- allColSpecs.push({
- labelText: labelText || defaultLabelText,
- text: this.getResourceTextFunc()
- });
- }
- else {
- superHeaderText = labelText;
- }
- var plainColSpecs = [];
- var groupColSpecs = [];
- var groupSpecs = [];
- var isVGrouping = false;
- var isHGrouping = false;
- for (var _i = 0, allColSpecs_1 = allColSpecs; _i < allColSpecs_1.length; _i++) {
- var colSpec = allColSpecs_1[_i];
- if (colSpec.group) {
- groupColSpecs.push(colSpec);
- }
- else {
- plainColSpecs.push(colSpec);
- }
- }
- plainColSpecs[0].isMain = true;
- if (groupColSpecs.length) {
- groupSpecs = groupColSpecs;
- isVGrouping = true;
- }
- else {
- var hGroupField = this.opt('resourceGroupField');
- if (hGroupField) {
- isHGrouping = true;
- groupSpecs.push({
- field: hGroupField,
- text: this.opt('resourceGroupText'),
- render: this.opt('resourceGroupRender')
- });
- }
- }
- var allOrderSpecs = fullcalendar_1.parseFieldSpecs(this.opt('resourceOrder'));
- var plainOrderSpecs = [];
- for (var _a = 0, allOrderSpecs_1 = allOrderSpecs; _a < allOrderSpecs_1.length; _a++) {
- var orderSpec = allOrderSpecs_1[_a];
- var isGroup = false;
- for (var _b = 0, groupSpecs_1 = groupSpecs; _b < groupSpecs_1.length; _b++) {
- var groupSpec = groupSpecs_1[_b];
- if (groupSpec.field === orderSpec.field) {
- groupSpec.order = orderSpec.order; // -1, 0, 1
- isGroup = true;
- break;
- }
- }
- if (!isGroup) {
- plainOrderSpecs.push(orderSpec);
- }
- }
- this.superHeaderText = superHeaderText;
- this.isVGrouping = isVGrouping;
- this.isHGrouping = isHGrouping;
- this.groupSpecs = groupSpecs;
- this.colSpecs = groupColSpecs.concat(plainColSpecs);
- this.orderSpecs = plainOrderSpecs;
- };
- // Skeleton Rendering
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.renderSkeleton = function () {
- _super.prototype.renderSkeleton.call(this);
- var theme = this.calendar.theme;
- this.spreadsheet.el = this.el.find('tbody .fc-resource-area');
- this.spreadsheet.headEl = this.el.find('thead .fc-resource-area');
- this.spreadsheet.renderSkeleton();
- // ^ is not a Grid/DateComponent
- // only non-resource grid needs this, so kill it
- // TODO: look into better solution
- this.segContainerEl.remove();
- this.segContainerEl = null;
- var timeBodyContainerEl = $("<div class=\"fc-rows\"> <table class=\"" + theme.getClass('tableGrid') + "\"> <tbody/> </table> </div>").appendTo(this.timeBodyScroller.canvas.contentEl);
- this.timeBodyTbodyEl = timeBodyContainerEl.find('tbody');
- this.tbodyHash = {
- spreadsheet: this.spreadsheet.tbodyEl,
- event: this.timeBodyTbodyEl
- };
- this.resourceScrollJoiner = new ScrollJoiner_1.default('vertical', [
- this.spreadsheet.bodyScroller,
- this.timeBodyScroller
- ]);
- this.initDividerMoving();
- };
- ResourceTimelineView.prototype.renderSkeletonHtml = function () {
- var theme = this.calendar.theme;
- return "<table class=\"" + theme.getClass('tableGrid') + "\"> <thead class=\"fc-head\"> <tr> <td class=\"fc-resource-area " + theme.getClass('widgetHeader') + "\"></td> <td class=\"fc-divider fc-col-resizer " + theme.getClass('widgetHeader') + "\"></td> <td class=\"fc-time-area " + theme.getClass('widgetHeader') + "\"></td> </tr> </thead> <tbody class=\"fc-body\"> <tr> <td class=\"fc-resource-area " + theme.getClass('widgetContent') + "\"></td> <td class=\"fc-divider fc-col-resizer " + theme.getClass('widgetHeader') + "\"></td> <td class=\"fc-time-area " + theme.getClass('widgetContent') + "\"></td> </tr> </tbody> </table>";
- };
- // Divider Moving
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.initDividerMoving = function () {
- var _this = this;
- var left = this.opt('resourceAreaWidth');
- this.dividerEls = this.el.find('.fc-divider');
- // tableWidth available after spreadsheet.renderSkeleton
- this.dividerWidth = left != null ? left : this.spreadsheet.tableWidth;
- if (this.dividerWidth != null) {
- this.positionDivider(this.dividerWidth);
- }
- this.dividerEls.on('mousedown', function (ev) {
- _this.dividerMousedown(ev);
- });
- };
- ResourceTimelineView.prototype.dividerMousedown = function (ev) {
- var _this = this;
- var isRTL = this.opt('isRTL');
- var minWidth = 30;
- var maxWidth = this.el.width() - 30;
- var origWidth = this.getNaturalDividerWidth();
- var dragListener = new fullcalendar_1.DragListener({
- dragStart: function () {
- _this.dividerEls.addClass('fc-active');
- },
- drag: function (dx, dy) {
- var width;
- if (isRTL) {
- width = origWidth - dx;
- }
- else {
- width = origWidth + dx;
- }
- width = Math.max(width, minWidth);
- width = Math.min(width, maxWidth);
- _this.dividerWidth = width;
- _this.positionDivider(width);
- _this.calendar.updateViewSize();
- },
- dragEnd: function () {
- _this.dividerEls.removeClass('fc-active');
- }
- });
- dragListener.startInteraction(ev);
- };
- ResourceTimelineView.prototype.getNaturalDividerWidth = function () {
- return this.el.find('.fc-resource-area').width(); // TODO: don't we have this cached?
- };
- ResourceTimelineView.prototype.positionDivider = function (w) {
- this.el.find('.fc-resource-area').css('width', w); // TODO: don't we have this cached?
- };
- // Sizing
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- var bodyHeight;
- if (this.rowsNeedingHeightSync) {
- this.syncRowHeights(this.rowsNeedingHeightSync);
- this.rowsNeedingHeightSync = null;
- }
- else { // a resize or an event rerender
- this.syncRowHeights(); // sync all
- }
- var headHeight = this.syncHeadHeights();
- if (isAuto) {
- bodyHeight = 'auto';
- }
- else {
- bodyHeight = totalHeight - headHeight - this.queryMiscHeight();
- }
- this.timeBodyScroller.setHeight(bodyHeight);
- this.spreadsheet.bodyScroller.setHeight(bodyHeight);
- this.spreadsheet.updateSize();
- // do children AFTER because of ScrollFollowerSprite abs position issues
- _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
- // do once spreadsheet area and event slat area have correct height, for gutters
- this.resourceScrollJoiner.update();
- };
- ResourceTimelineView.prototype.queryMiscHeight = function () {
- return this.el.outerHeight() -
- Math.max(this.spreadsheet.headScroller.el.outerHeight(), this.timeHeadScroller.el.outerHeight()) -
- Math.max(this.spreadsheet.bodyScroller.el.outerHeight(), this.timeBodyScroller.el.outerHeight());
- };
- ResourceTimelineView.prototype.syncHeadHeights = function () {
- this.spreadsheet.headHeight('auto');
- this.headHeight('auto');
- var headHeight = Math.max(this.spreadsheet.headHeight(), this.headHeight());
- this.spreadsheet.headHeight(headHeight);
- this.headHeight(headHeight);
- return headHeight;
- };
- // Scrolling
- // ------------------------------------------------------------------------------------------------------------------
- // this is useful for scrolling prev/next dates while resource is scrolled down
- ResourceTimelineView.prototype.queryResourceScroll = function () {
- var scroll = {};
- var scrollerTop = this.timeBodyScroller.scrollEl.offset().top; // TODO: use getClientRect
- for (var _i = 0, _a = this.getVisibleRows(); _i < _a.length; _i++) {
- var rowObj = _a[_i];
- if (rowObj.resource) {
- var el = rowObj.getTr('event');
- var elBottom = el.offset().top + el.outerHeight();
- if (elBottom > scrollerTop) {
- scroll.resourceId = rowObj.resource.id;
- scroll.bottom = elBottom - scrollerTop;
- break;
- }
- }
- }
- // TODO: what about left scroll state for spreadsheet area?
- return scroll;
- };
- ResourceTimelineView.prototype.applyResourceScroll = function (scroll) {
- if (scroll.resourceId) {
- var row = this.getResourceRow(scroll.resourceId);
- if (row) {
- var el = row.getTr('event');
- if (el) {
- var innerTop = this.timeBodyScroller.canvas.el.offset().top; // TODO: use -scrollHeight or something
- var elBottom = el.offset().top + el.outerHeight();
- var scrollTop = elBottom - scroll.bottom - innerTop;
- this.timeBodyScroller.setScrollTop(scrollTop);
- this.spreadsheet.bodyScroller.setScrollTop(scrollTop);
- }
- }
- }
- };
- ResourceTimelineView.prototype.scrollToResource = function (resource) {
- var row = this.getResourceRow(resource.id);
- if (row) {
- var el = row.getTr('event');
- if (el) {
- var innerTop = this.timeBodyScroller.canvas.el.offset().top; // TODO: use -scrollHeight or something
- var scrollTop = el.offset().top - innerTop;
- this.timeBodyScroller.setScrollTop(scrollTop);
- this.spreadsheet.bodyScroller.setScrollTop(scrollTop);
- }
- }
- };
- // Hit System
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.prepareHits = function () {
- var shownEventRows = [];
- _super.prototype.prepareHits.call(this);
- this.eventRows = this.getEventRows();
- this.eventRows.forEach(function (row) {
- if (row.get('isInDom')) {
- shownEventRows.push(row);
- }
- });
- var trArray = shownEventRows.map(function (row) { return (row.getTr('event')[0]); });
- this.shownEventRows = shownEventRows;
- this.rowCoordCache = new fullcalendar_1.CoordCache({
- els: trArray,
- isVertical: true
- });
- this.rowCoordCache.build();
- };
- ResourceTimelineView.prototype.releaseHits = function () {
- _super.prototype.releaseHits.call(this);
- this.eventRows = null;
- this.shownEventRows = null;
- this.rowCoordCache.clear();
- };
- ResourceTimelineView.prototype.queryHit = function (leftOffset, topOffset) {
- var simpleHit = _super.prototype.queryHit.call(this, leftOffset, topOffset);
- if (simpleHit) {
- var rowIndex = this.rowCoordCache.getVerticalIndex(topOffset);
- if (rowIndex != null) {
- return {
- resourceId: this.shownEventRows[rowIndex].resource.id,
- snap: simpleHit.snap,
- component: this,
- left: simpleHit.left,
- right: simpleHit.right,
- top: this.rowCoordCache.getTopOffset(rowIndex),
- bottom: this.rowCoordCache.getBottomOffset(rowIndex)
- };
- }
- }
- };
- ResourceTimelineView.prototype.getHitFootprint = function (hit) {
- var componentFootprint = _super.prototype.getHitFootprint.call(this, hit);
- return new ResourceComponentFootprint_1.default(componentFootprint.unzonedRange, componentFootprint.isAllDay, hit.resourceId);
- };
- ResourceTimelineView.prototype.getHitEl = function (hit) {
- return this.getSnapEl(hit.snap);
- };
- // Resource Data
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.renderResources = function (resources) {
- for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {
- var resource = resources_1[_i];
- this.renderResource(resource);
- }
- };
- ResourceTimelineView.prototype.unrenderResources = function () {
- this.rowHierarchy.removeElement();
- this.rowHierarchy.removeChildren();
- for (var id in this.resourceRowHash) {
- this.removeChild(this.resourceRowHash[id]); // for DateComponent!
- }
- this.resourceRowHash = {};
- };
- ResourceTimelineView.prototype.renderResource = function (resource) {
- this.insertResource(resource);
- };
- ResourceTimelineView.prototype.unrenderResource = function (resource) {
- this.removeResource(resource);
- };
- // Event Rendering
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.executeEventRender = function (eventsPayload) {
- var payloadsByResourceId = {};
- var genericPayload = {};
- var resourceId;
- for (var eventDefId in eventsPayload) {
- var eventInstanceGroup = eventsPayload[eventDefId];
- var eventDef = eventInstanceGroup.getEventDef();
- var resourceIds = eventDef.getResourceIds();
- if (resourceIds.length) {
- for (var _i = 0, resourceIds_1 = resourceIds; _i < resourceIds_1.length; _i++) {
- resourceId = resourceIds_1[_i];
- var bucket = payloadsByResourceId[resourceId] || (payloadsByResourceId[resourceId] = {});
- bucket[eventDefId] = eventInstanceGroup;
- }
- // only render bg segs that have no resources
- }
- else if (eventDef.hasBgRendering()) {
- genericPayload[eventDefId] = eventInstanceGroup;
- }
- }
- this.eventRenderer.render(genericPayload);
- for (resourceId in payloadsByResourceId) {
- var resourceEventsPayload = payloadsByResourceId[resourceId];
- var row = this.getResourceRow(resourceId);
- if (row) {
- row.executeEventRender(resourceEventsPayload);
- }
- }
- };
- // Business Hours Rendering
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.renderBusinessHours = function (businessHourGenerator) {
- this.genericBiz = businessHourGenerator; // save for later
- this.isIndiBizRendered = false;
- this.isGenericBizRendered = false;
- if (this.indiBizCnt) {
- this.isIndiBizRendered = true;
- for (var _i = 0, _a = this.getEventRows(); _i < _a.length; _i++) {
- var row = _a[_i];
- row.renderBusinessHours(row.resource.businessHourGenerator ||
- businessHourGenerator);
- }
- }
- else {
- this.isGenericBizRendered = true;
- this.businessHourRenderer.render(businessHourGenerator);
- }
- };
- ResourceTimelineView.prototype.updateIndiBiz = function () {
- if ((this.indiBizCnt && this.isGenericBizRendered) ||
- (!this.indiBizCnt && this.isIndiBizRendered)) {
- this.unrenderBusinessHours();
- this.renderBusinessHours(this.genericBiz);
- }
- };
- // Row Management
- // ------------------------------------------------------------------------------------------------------------------
- // creates a row for the given resource and inserts it into the hierarchy.
- // if `parentResourceRow` is given, inserts it as a direct child
- // does not render
- ResourceTimelineView.prototype.insertResource = function (resource, parentResourceRow) {
- var noExplicitParent = !parentResourceRow;
- var row = new ResourceRow_1.default(this, resource);
- if (!parentResourceRow) {
- if (resource.parent) {
- parentResourceRow = this.getResourceRow(resource.parent.id);
- }
- else if (resource.parentId) {
- parentResourceRow = this.getResourceRow(resource.parentId);
- }
- }
- if (parentResourceRow) {
- this.insertRowAsChild(row, parentResourceRow);
- }
- else {
- this.insertRow(row);
- }
- this.addChild(row); // for DateComponent!
- this.resourceRowHash[resource.id] = row;
- if (resource.businessHourGenerator) {
- this.indiBizCnt++;
- // hack to get dynamically-added resources with custom business hours to render
- if (this.isIndiBizRendered) {
- row.businessHourGenerator = resource.businessHourGenerator;
- }
- this.updateIndiBiz();
- }
- for (var _i = 0, _a = resource.children; _i < _a.length; _i++) {
- var childResource = _a[_i];
- this.insertResource(childResource, row);
- }
- if (noExplicitParent && computeIsChildrenVisible(row.parent)) {
- row.renderSkeleton();
- }
- return row;
- };
- // does not unrender
- ResourceTimelineView.prototype.removeResource = function (resource) {
- var row = this.resourceRowHash[resource.id];
- if (row) {
- delete this.resourceRowHash[resource.id];
- this.removeChild(row); // for DateComponent!
- row.removeFromParentAndDom();
- if (resource.businessHourGenerator) {
- this.indiBizCnt--;
- this.updateIndiBiz();
- }
- }
- return row;
- };
- // inserts the given row into the hierarchy.
- // `parent` can be any tree root of the hierarchy.
- // `orderSpecs` will recursively create groups within the root before inserting the row.
- ResourceTimelineView.prototype.insertRow = function (row, parent, groupSpecs) {
- if (parent === void 0) { parent = this.rowHierarchy; }
- if (groupSpecs === void 0) { groupSpecs = this.groupSpecs; }
- if (groupSpecs.length) {
- var group = this.ensureResourceGroup(row, parent, groupSpecs[0]);
- if (group instanceof HRowGroup_1.default) {
- this.insertRowAsChild(row, group); // horizontal rows can only be one level deep
- }
- else {
- this.insertRow(row, group, groupSpecs.slice(1));
- }
- }
- else {
- this.insertRowAsChild(row, parent);
- }
- };
- // inserts the given row as a direct child of the given parent
- ResourceTimelineView.prototype.insertRowAsChild = function (row, parent) {
- return parent.addChildRowNode(row, this.computeChildRowPosition(row, parent));
- };
- // computes the position at which the given node should be inserted into the parent's children
- // if no specific position is determined, returns null
- ResourceTimelineView.prototype.computeChildRowPosition = function (child, parent) {
- if (this.orderSpecs.length) {
- for (var i = 0; i < parent.children.length; i++) {
- var sibling = parent.children[i];
- var cmp = this.compareResources(sibling.resource || {}, child.resource || {});
- if (cmp > 0) { // went 1 past. insert at i
- return i;
- }
- }
- }
- return null;
- };
- // given two resources, returns a cmp value (-1, 0, 1)
- ResourceTimelineView.prototype.compareResources = function (a, b) {
- return fullcalendar_1.compareByFieldSpecs(a, b, this.orderSpecs);
- };
- // given information on how a row should be inserted into one of the parent's child groups,
- // ensure a child group exists, creating it if necessary, and then return it.
- // spec MIGHT NOT HAVE AN ORDER
- ResourceTimelineView.prototype.ensureResourceGroup = function (row, parent, spec) {
- var i;
- var testGroup;
- var groupValue = (row.resource || {})[spec.field]; // the groupValue of the row
- var group = null;
- // find an existing group that matches, or determine the position for a new group
- if (spec.order) {
- for (i = 0; i < parent.children.length; i++) {
- testGroup = parent.children[i];
- var cmp = fullcalendar_1.flexibleCompare(testGroup.groupValue, groupValue) * spec.order;
- if (cmp === 0) { // an exact match with an existing group
- group = testGroup;
- break;
- }
- else if (cmp > 0) { // the row's desired group is after testGroup. insert at this position
- break;
- }
- }
- }
- else { // the groups are unordered
- for (i = 0; i < parent.children.length; i++) {
- testGroup = parent.children[i];
- if (testGroup.groupValue === groupValue) {
- group = testGroup;
- break;
- }
- }
- } // `i` will be at the end if group was not found
- // create a new group
- if (!group) {
- if (this.isVGrouping) {
- group = new VRowGroup_1.default(this, spec, groupValue);
- }
- else {
- group = new HRowGroup_1.default(this, spec, groupValue);
- }
- parent.addChildRowNode(group, i);
- group.renderSkeleton(); // always immediately render groups
- }
- return group;
- };
- // Row Rendering
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.descendantAdded = function (row) {
- var wasNesting = this.isNesting;
- var isNesting = Boolean(this.nestingCnt += row.depth ? 1 : 0);
- if (wasNesting !== isNesting) {
- this.el.toggleClass('fc-nested', isNesting)
- .toggleClass('fc-flat', !isNesting);
- this.isNesting = isNesting;
- }
- };
- ResourceTimelineView.prototype.descendantRemoved = function (row) {
- var wasNesting = this.isNesting;
- var isNesting = Boolean(this.nestingCnt -= row.depth ? 1 : 0);
- if (wasNesting !== isNesting) {
- this.el.toggleClass('fc-nested', isNesting)
- .toggleClass('fc-flat', !isNesting);
- this.isNesting = isNesting;
- }
- };
- ResourceTimelineView.prototype.descendantShown = function (row) {
- (this.rowsNeedingHeightSync || (this.rowsNeedingHeightSync = [])).push(row);
- };
- ResourceTimelineView.prototype.descendantHidden = function (row) {
- if (!this.rowsNeedingHeightSync) { // signals to updateSize that specific rows hidden
- this.rowsNeedingHeightSync = [];
- }
- };
- // visibleRows is flat. does not do recursive
- ResourceTimelineView.prototype.syncRowHeights = function (visibleRows, safe) {
- if (visibleRows === void 0) { visibleRows = this.getVisibleRows(); }
- if (safe === void 0) { safe = false; }
- for (var _i = 0, visibleRows_1 = visibleRows; _i < visibleRows_1.length; _i++) {
- var row = visibleRows_1[_i];
- row.setTrInnerHeight('');
- }
- var innerHeights = visibleRows.map(function (row) {
- var h = row.getMaxTrInnerHeight();
- if (safe) {
- h += h % 2; // FF and zoom only like even numbers for alignment
- }
- return h;
- });
- for (var i = 0; i < visibleRows.length; i++) {
- var row = visibleRows[i];
- row.setTrInnerHeight(innerHeights[i]);
- }
- if (!safe) {
- var h1 = this.spreadsheet.tbodyEl.height();
- var h2 = this.timeBodyTbodyEl.height();
- if (Math.abs(h1 - h2) > 1) {
- this.syncRowHeights(visibleRows, true);
- }
- }
- };
- // Row Querying
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.getVisibleRows = function () {
- var result = [];
- for (var _i = 0, _a = this.rowHierarchy.getRows(); _i < _a.length; _i++) {
- var row = _a[_i];
- if (row.get('isInDom')) {
- result.push(row);
- }
- }
- return result;
- };
- ResourceTimelineView.prototype.getEventRows = function () {
- return this.rowHierarchy.getRows().filter(function (row) { return (row instanceof EventRow_1.default); });
- };
- ResourceTimelineView.prototype.getResourceRow = function (resourceId) {
- return this.resourceRowHash[resourceId];
- };
- // Selection
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.renderSelectionFootprint = function (componentFootprint) {
- if (componentFootprint.resourceId) {
- var rowObj = this.getResourceRow(componentFootprint.resourceId);
- if (rowObj) {
- return rowObj.renderSelectionFootprint(componentFootprint);
- }
- }
- else {
- return _super.prototype.renderSelectionFootprint.call(this, componentFootprint);
- }
- };
- // Event Resizing (route to rows)
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
- var map = groupEventFootprintsByResourceId(eventFootprints);
- for (var resourceId in map) {
- var resourceEventFootprints = map[resourceId];
- var rowObj = this.getResourceRow(resourceId);
- // render helpers
- rowObj.helperRenderer.renderEventDraggingFootprints(resourceEventFootprints, seg, isTouch);
- // render highlight
- for (var _i = 0, resourceEventFootprints_1 = resourceEventFootprints; _i < resourceEventFootprints_1.length; _i++) {
- var eventFootprint = resourceEventFootprints_1[_i];
- rowObj.renderHighlight(eventFootprint.componentFootprint);
- }
- }
- };
- ResourceTimelineView.prototype.unrenderEventResize = function () {
- for (var _i = 0, _a = this.getEventRows(); _i < _a.length; _i++) {
- var rowObj = _a[_i];
- rowObj.helperRenderer.unrender();
- rowObj.unrenderHighlight();
- }
- };
- // DnD (route to rows)
- // ------------------------------------------------------------------------------------------------------------------
- ResourceTimelineView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
- var map = groupEventFootprintsByResourceId(eventFootprints);
- var resourceEventFootprints;
- var resourceId;
- var rowObj;
- if (seg) {
- // draw helper
- for (resourceId in map) {
- resourceEventFootprints = map[resourceId];
- rowObj = this.getResourceRow(resourceId);
- rowObj.helperRenderer.renderEventDraggingFootprints(resourceEventFootprints, seg, isTouch);
- }
- return true; // signal helper rendered
- }
- else {
- // draw highlight
- for (resourceId in map) {
- resourceEventFootprints = map[resourceId];
- for (var _i = 0, resourceEventFootprints_2 = resourceEventFootprints; _i < resourceEventFootprints_2.length; _i++) {
- var eventFootprint = resourceEventFootprints_2[_i];
- rowObj = this.getResourceRow(resourceId);
- rowObj.renderHighlight(eventFootprint.componentFootprint);
- }
- }
- return false; // signal helper not rendered
- }
- };
- ResourceTimelineView.prototype.unrenderDrag = function () {
- for (var _i = 0, _a = this.getEventRows(); _i < _a.length; _i++) {
- var rowObj = _a[_i];
- rowObj.helperRenderer.unrender();
- rowObj.unrenderHighlight();
- }
- };
- return ResourceTimelineView;
- }(TimelineView_1.default));
- exports.default = ResourceTimelineView;
- ResourceTimelineView.prototype.eventRendererClass = ResourceTimelineEventRenderer_1.default;
- ResourceViewMixin_1.default.mixInto(ResourceTimelineView);
- // Utils
- // ------------------------------------------------------------------------------------------------------------------
- function groupEventFootprintsByResourceId(eventFootprints) {
- var map = {};
- for (var _i = 0, eventFootprints_1 = eventFootprints; _i < eventFootprints_1.length; _i++) {
- var eventFootprint = eventFootprints_1[_i];
- (map[eventFootprint.componentFootprint.resourceId] || (map[eventFootprint.componentFootprint.resourceId] = []))
- .push(eventFootprint);
- }
- return map;
- }
- /*
- if `current` is null, returns true
- */
- function computeIsChildrenVisible(current) {
- while (current) {
- if (!current.isExpanded) {
- return false;
- }
- current = current.parent;
- }
- return true;
- }
- /***/ }),
- /* 31 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var RowGroup_1 = __webpack_require__(32);
- /*
- A row grouping that renders as a tall multi-cell vertical span in the "spreadsheet" area
- */
- var VRowGroup = /** @class */ (function (_super) {
- tslib_1.__extends(VRowGroup, _super);
- function VRowGroup(view, groupSpec, groupValue) {
- var _this = _super.call(this, view, groupSpec, groupValue) || this;
- _this.rowspan = 0;
- return _this;
- }
- /*
- Makes sure the groupTd has the correct rowspan / place in the DOM.
- PRECONDITION: in the case of multiple group nesting, a child's renderRowspan()
- will be called before the parent's renderRowspan().
- */
- VRowGroup.prototype.renderRowspan = function () {
- var leadingTr;
- var theme = this.view.calendar.theme;
- if (this.rowspan) { // takes up at least one row?
- // ensure the TD element
- if (!this.groupTd) {
- this.groupTd = $('<td class="' + theme.getClass('widgetContent') + '"/>')
- .append(this.renderGroupContentEl());
- }
- this.groupTd.attr('rowspan', this.rowspan);
- // (re)insert groupTd if it was never inserted, or the first TR is different
- leadingTr = this.getLeadingRow().getTr('spreadsheet');
- if (leadingTr !== this.leadingTr) {
- if (leadingTr) { // might not exist if child was unrendered before parent
- leadingTr.prepend(this.groupTd); // parents will later prepend their own
- }
- this.leadingTr = leadingTr;
- }
- }
- else { // takes up zero rows?
- // remove the TD element if it was rendered
- if (this.groupTd) {
- this.groupTd.remove();
- this.groupTd = null;
- }
- this.leadingTr = null;
- }
- };
- /*
- Called when a row somewhere within the grouping is shown
- */
- VRowGroup.prototype.descendantShown = function (row) {
- this.rowspan += 1;
- this.renderRowspan();
- _super.prototype.descendantShown.call(this, row); // will bubble to parent
- };
- /*
- Called when a row somewhere within the grouping is hidden
- */
- VRowGroup.prototype.descendantHidden = function (row) {
- this.rowspan -= 1;
- this.renderRowspan();
- _super.prototype.descendantHidden.call(this, row);
- };
- return VRowGroup;
- }(RowGroup_1.default));
- exports.default = VRowGroup;
- /***/ }),
- /* 32 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var RowParent_1 = __webpack_require__(18);
- /*
- An abstract node in a row-hierarchy tree that contains other nodes.
- Will have some sort of rendered label indicating the grouping,
- up to the subclass for determining what to do with it.
- */
- var RowGroup = /** @class */ (function (_super) {
- tslib_1.__extends(RowGroup, _super);
- function RowGroup(view, groupSpec, groupValue) {
- var _this = _super.call(this, view) || this;
- _this.groupSpec = groupSpec;
- _this.groupValue = groupValue;
- return _this;
- }
- /*
- Called when this row (if it renders a row) or a subrow is removed
- */
- RowGroup.prototype.descendantRemoved = function (row) {
- _super.prototype.descendantRemoved.call(this, row); // bubble up to the view and let the node be fully removed
- // and there are no more children in the group, implictly remove this group as well
- if (!this.children.length) {
- this.removeFromParentAndDom();
- }
- };
- /*
- Renders the content wrapper element that will be inserted into this row's TD cell
- */
- RowGroup.prototype.renderGroupContentEl = function () {
- var contentEl = $('<div class="fc-cell-content" />')
- .append(this.renderGroupTextEl());
- var filter = this.groupSpec.render;
- if (typeof filter === 'function') {
- contentEl = filter(contentEl, this.groupValue) || contentEl;
- }
- return contentEl;
- };
- /*
- Renders the text span element that will be inserted into this row's TD cell.
- Goes within the content element.
- */
- RowGroup.prototype.renderGroupTextEl = function () {
- var text = this.groupValue || ''; // might be null/undefined if an ad-hoc grouping
- var filter = this.groupSpec.text;
- if (typeof filter === 'function') {
- text = filter(text) || text;
- }
- return $('<span class="fc-cell-text" />').text(text);
- };
- return RowGroup;
- }(RowParent_1.default));
- exports.default = RowGroup;
- /***/ }),
- /* 33 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- var RowParent_1 = __webpack_require__(18);
- var TimelineFillRenderer_1 = __webpack_require__(28);
- var TimelineEventRenderer_1 = __webpack_require__(17);
- var TimelineHelperRenderer_1 = __webpack_require__(29);
- var EventRow = /** @class */ (function (_super) {
- tslib_1.__extends(EventRow, _super);
- function EventRow() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- EventRow.prototype.renderEventSkeleton = function (tr) {
- var theme = this.view.calendar.theme;
- tr.html("<td class=\"" + theme.getClass('widgetContent') + "\"> <div> <div class=\"fc-event-container\" /> </div> </td>");
- this.segContainerEl = tr.find('.fc-event-container');
- this.innerEl = (this.bgSegContainerEl = tr.find('td > div'));
- };
- EventRow.prototype.rangeToCoords = function (range) {
- return this.view.rangeToCoords(range);
- };
- EventRow.prototype.componentFootprintToSegs = function (componentFootprint) {
- return this.view.componentFootprintToSegs(componentFootprint);
- };
- return EventRow;
- }(RowParent_1.default));
- exports.default = EventRow;
- EventRow.prototype.fillRendererClass = TimelineFillRenderer_1.default;
- EventRow.prototype.eventRendererClass = TimelineEventRenderer_1.default;
- EventRow.prototype.helperRendererClass = TimelineHelperRenderer_1.default;
- EventRow.prototype.businessHourRendererClass = fullcalendar_1.BusinessHourRenderer;
- EventRow.prototype.hasOwnRow = true;
- /***/ }),
- /* 34 */,
- /* 35 */,
- /* 36 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var exportHooks = __webpack_require__(0);
- // imports solely for side-effects
- __webpack_require__(37);
- __webpack_require__(48);
- __webpack_require__(50);
- __webpack_require__(51);
- __webpack_require__(53);
- __webpack_require__(54);
- __webpack_require__(55);
- __webpack_require__(56);
- __webpack_require__(57);
- __webpack_require__(58);
- __webpack_require__(59);
- __webpack_require__(60);
- __webpack_require__(61);
- __webpack_require__(62);
- __webpack_require__(63);
- __webpack_require__(64);
- __webpack_require__(65);
- __webpack_require__(66);
- __webpack_require__(67);
- __webpack_require__(68);
- var schedulerVersion = '1.9.4';
- exportHooks.schedulerVersion = schedulerVersion;
- /*
- When the required internal version is upped,
- also update the .json files with a new minor version requirement.
- Example: bump ~2.7.2 to ~2.8.0
- Use a tilde to match future patch-level changes only!
- */
- if (exportHooks.internalApiVersion !== 12) {
- throw new Error('v' + schedulerVersion + ' of FullCalendar Scheduler ' +
- 'is incompatible with v' + exportHooks.version + ' of the core.\n' +
- 'Please see http://fullcalendar.io/support/ for more information.');
- }
- /***/ }),
- /* 37 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var exportHooks = __webpack_require__(0);
- var ResourceAgendaView_1 = __webpack_require__(20);
- var ResourceBasicView_1 = __webpack_require__(22);
- var ResourceMonthView_1 = __webpack_require__(23);
- var TimelineView_1 = __webpack_require__(14);
- var ResourceTimelineView_1 = __webpack_require__(30);
- // TODO: find a better way
- exportHooks.ResourceAgendaView = ResourceAgendaView_1.default;
- exportHooks.ResourceBasicView = ResourceBasicView_1.default;
- exportHooks.ResourceMonthView = ResourceMonthView_1.default;
- exportHooks.TimelineView = TimelineView_1.default;
- exportHooks.ResourceTimelineView = ResourceTimelineView_1.default;
- /***/ }),
- /* 38 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceDayTableMixin_1 = __webpack_require__(21);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- var ResourceTimeGrid = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceTimeGrid, _super);
- function ResourceTimeGrid(view) {
- var _this = _super.call(this, view) || this;
- _this.isResourceFootprintsEnabled = true;
- return _this;
- }
- ResourceTimeGrid.prototype.renderDates = function (dateProfile) {
- this.dateProfile = dateProfile;
- this.renderSlats();
- };
- ResourceTimeGrid.prototype.renderResources = function (resources) {
- this.registerResources(resources);
- this.renderColumns();
- if (this.headContainerEl) {
- this.processHeadResourceEls(this.headContainerEl);
- }
- };
- // TODO: make DRY with ResourceDayGrid
- ResourceTimeGrid.prototype.getHitFootprint = function (hit) {
- var plainFootprint = _super.prototype.getHitFootprint.call(this, hit);
- return new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, this.getColResource(hit.col).id);
- };
- ResourceTimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {
- var resourceCnt = this.resourceCnt;
- var genericSegs = this.sliceRangeByTimes(componentFootprint.unzonedRange); // no assigned resources
- var resourceSegs = [];
- for (var _i = 0, genericSegs_1 = genericSegs; _i < genericSegs_1.length; _i++) {
- var seg = genericSegs_1[_i];
- for (var resourceIndex = 0; resourceIndex < resourceCnt; resourceIndex++) {
- var resourceObj = this.flattenedResources[resourceIndex];
- if (!(componentFootprint instanceof ResourceComponentFootprint_1.default) ||
- (componentFootprint.resourceId === resourceObj.id)) {
- var copy = $.extend({}, seg);
- copy.resource = resourceObj;
- copy.col = this.indicesToCol(resourceIndex, seg.dayIndex);
- resourceSegs.push(copy);
- }
- }
- }
- return resourceSegs;
- };
- return ResourceTimeGrid;
- }(fullcalendar_1.TimeGrid));
- exports.default = ResourceTimeGrid;
- ResourceDayTableMixin_1.default.mixInto(ResourceTimeGrid);
- /***/ }),
- /* 39 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var rtlScrollSystem = null;
- /*
- A Scroller with additional functionality:
- - optional ScrollerCanvas for content
- - fired events for scroll start/end
- - cross-browser normalization of horizontal scroll for RTL
- */
- var EnhancedScroller = /** @class */ (function (_super) {
- tslib_1.__extends(EnhancedScroller, _super);
- function EnhancedScroller(options) {
- var _this = _super.call(this, options) || this;
- _this.isScrolling = false;
- _this.isTouching = false;
- _this.isTouchedEver = false;
- _this.isMoving = false;
- _this.isTouchScrollEnabled = true;
- _this.requestMovingEnd = fullcalendar_1.debounce(_this.reportMovingEnd, 500);
- return _this;
- }
- EnhancedScroller.prototype.render = function () {
- _super.prototype.render.call(this);
- if (this.canvas) {
- this.canvas.render();
- this.canvas.el.appendTo(this.scrollEl);
- }
- this.bindHandlers();
- };
- EnhancedScroller.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.unbindHandlers();
- };
- // Touch scroll prevention
- // ----------------------------------------------------------------------------------------------
- EnhancedScroller.prototype.disableTouchScroll = function () {
- this.isTouchScrollEnabled = false;
- this.bindPreventTouchScroll(); // will be unbound in enableTouchScroll or reportTouchEnd
- };
- EnhancedScroller.prototype.enableTouchScroll = function () {
- this.isTouchScrollEnabled = true;
- // only immediately unbind if a touch event is NOT in progress.
- // otherwise, it will be handled by reportTouchEnd.
- if (!this.isTouching) {
- this.unbindPreventTouchScroll();
- }
- };
- EnhancedScroller.prototype.bindPreventTouchScroll = function () {
- if (!this.preventTouchScrollHandler) {
- this.scrollEl.on('touchmove', (this.preventTouchScrollHandler = fullcalendar_1.preventDefault));
- }
- };
- EnhancedScroller.prototype.unbindPreventTouchScroll = function () {
- if (this.preventTouchScrollHandler) {
- this.scrollEl.off('touchmove', this.preventTouchScrollHandler);
- this.preventTouchScrollHandler = null;
- }
- };
- // Handlers
- // ----------------------------------------------------------------------------------------------
- EnhancedScroller.prototype.bindHandlers = function () {
- return this.listenTo(this.scrollEl, {
- scroll: this.reportScroll,
- touchstart: this.reportTouchStart,
- touchend: this.reportTouchEnd
- });
- };
- EnhancedScroller.prototype.unbindHandlers = function () {
- return this.stopListeningTo(this.scrollEl);
- };
- // Scroll Events
- // ----------------------------------------------------------------------------------------------
- EnhancedScroller.prototype.reportScroll = function () {
- if (!this.isScrolling) {
- this.reportScrollStart();
- }
- this.trigger('scroll');
- this.isMoving = true;
- this.requestMovingEnd();
- };
- EnhancedScroller.prototype.reportScrollStart = function () {
- if (!this.isScrolling) {
- this.isScrolling = true;
- this.trigger('scrollStart', this.isTouching); // created in constructor
- }
- };
- EnhancedScroller.prototype.reportMovingEnd = function () {
- this.isMoving = false;
- // only end the scroll if not currently touching.
- // if touching, the scrolling will end later, on touchend.
- if (!this.isTouching) {
- this.reportScrollEnd();
- }
- };
- EnhancedScroller.prototype.reportScrollEnd = function () {
- if (this.isScrolling) {
- this.trigger('scrollEnd');
- this.isScrolling = false;
- }
- };
- // Touch Events
- // ----------------------------------------------------------------------------------------------
- // will fire *before* the scroll event is fired
- EnhancedScroller.prototype.reportTouchStart = function () {
- this.isTouching = true;
- this.isTouchedEver = true;
- };
- EnhancedScroller.prototype.reportTouchEnd = function () {
- if (this.isTouching) {
- this.isTouching = false;
- // if touch scrolling was re-enabled during a recent touch scroll
- // then unbind the handlers that are preventing it from happening.
- if (this.isTouchScrollEnabled) {
- this.unbindPreventTouchScroll(); // won't do anything if not bound
- }
- // if the user ended their touch, and the scroll area wasn't moving,
- // we consider this to be the end of the scroll.
- if (!this.isMoving) {
- this.reportScrollEnd(); // won't fire if already ended
- }
- }
- };
- // Horizontal Scroll Normalization
- // ----------------------------------------------------------------------------------------------
- // http://stackoverflow.com/questions/24276619/better-way-to-get-the-viewport-of-a-scrollable-div-in-rtl-mode/24394376#24394376
- /*
- If RTL, and scrolled to the left, returns NEGATIVE value (like Firefox)
- */
- EnhancedScroller.prototype.getScrollLeft = function () {
- var direction = this.scrollEl.css('direction');
- var node = this.scrollEl[0];
- var val = node.scrollLeft;
- if (direction === 'rtl') {
- switch (rtlScrollSystem) {
- case 'positive':
- val = (val + node.clientWidth) - node.scrollWidth;
- break;
- case 'reverse':
- val = -val;
- break;
- }
- }
- return val;
- };
- /*
- Accepts a NEGATIVE value for when scrolled in RTL
- */
- EnhancedScroller.prototype.setScrollLeft = function (val) {
- var direction = this.scrollEl.css('direction');
- var node = this.scrollEl[0];
- if (direction === 'rtl') {
- switch (rtlScrollSystem) {
- case 'positive':
- val = (val - node.clientWidth) + node.scrollWidth;
- break;
- case 'reverse':
- val = -val;
- break;
- }
- }
- node.scrollLeft = val;
- };
- /*
- Always returns the number of pixels scrolled from the leftmost position (even if RTL).
- Always positive.
- */
- EnhancedScroller.prototype.getScrollFromLeft = function () {
- var direction = this.scrollEl.css('direction');
- var node = this.scrollEl[0];
- var val = node.scrollLeft;
- if (direction === 'rtl') {
- switch (rtlScrollSystem) {
- case 'negative':
- val = (val - node.clientWidth) + node.scrollWidth;
- break;
- case 'reverse':
- val = (-val - node.clientWidth) + node.scrollWidth;
- break;
- }
- }
- return val;
- };
- EnhancedScroller.prototype.getNativeScrollLeft = function () {
- return this.scrollEl[0].scrollLeft;
- };
- EnhancedScroller.prototype.setNativeScrollLeft = function (val) {
- this.scrollEl[0].scrollLeft = val;
- };
- return EnhancedScroller;
- }(fullcalendar_1.Scroller));
- exports.default = EnhancedScroller;
- fullcalendar_1.EmitterMixin.mixInto(EnhancedScroller);
- fullcalendar_1.ListenerMixin.mixInto(EnhancedScroller);
- // Horizontal Scroll System Detection
- // ----------------------------------------------------------------------------------------------
- function detectRtlScrollSystem() {
- var el = $("<div style=\" position: absolute; top: -1000px; width: 1px; height: 1px; overflow: scroll; direction: rtl; font-size: 100px; \">A</div>").appendTo('body');
- var node = el[0];
- var system = (function () {
- if (node.scrollLeft > 0) {
- return 'positive';
- }
- else {
- node.scrollLeft = 1;
- if (node.scrollLeft > 0) {
- return 'reverse';
- }
- else {
- return 'negative';
- }
- }
- })();
- el.remove();
- return system;
- }
- $(function () {
- rtlScrollSystem = detectRtlScrollSystem();
- });
- /***/ }),
- /* 40 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- /*
- TODO: use pubsub instead?
- */
- var TimelineEventDragging = /** @class */ (function (_super) {
- tslib_1.__extends(TimelineEventDragging, _super);
- function TimelineEventDragging() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimelineEventDragging.prototype.segDragStart = function (seg, ev) {
- _super.prototype.segDragStart.call(this, seg, ev);
- if (this.component.eventTitleFollower) {
- this.component.eventTitleFollower.forceRelative();
- }
- };
- TimelineEventDragging.prototype.segDragStop = function (seg, ev) {
- _super.prototype.segDragStop.call(this, seg, ev);
- if (this.component.eventTitleFollower) {
- this.component.eventTitleFollower.clearForce();
- }
- };
- return TimelineEventDragging;
- }(fullcalendar_1.EventDragging));
- exports.default = TimelineEventDragging;
- /***/ }),
- /* 41 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var fullcalendar_1 = __webpack_require__(0);
- /*
- TODO: use pubsub instead?
- */
- var TimelineEventResizing = /** @class */ (function (_super) {
- tslib_1.__extends(TimelineEventResizing, _super);
- function TimelineEventResizing() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimelineEventResizing.prototype.segResizeStart = function (seg, ev) {
- _super.prototype.segResizeStart.call(this, seg, ev);
- if (this.component.eventTitleFollower) {
- return this.component.eventTitleFollower.forceRelative();
- }
- };
- TimelineEventResizing.prototype.segResizeStop = function (seg, ev) {
- _super.prototype.segResizeStop.call(this, seg, ev);
- if (this.component.eventTitleFollower) {
- return this.component.eventTitleFollower.clearForce();
- }
- };
- return TimelineEventResizing;
- }(fullcalendar_1.EventResizing));
- exports.default = TimelineEventResizing;
- /***/ }),
- /* 42 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- var moment = __webpack_require__(15);
- var core = __webpack_require__(0);
- var MIN_AUTO_LABELS = 18; // more than `12` months but less that `24` hours
- var MAX_AUTO_SLOTS_PER_LABEL = 6; // allows 6 10-min slots in an hour
- var MAX_AUTO_CELLS = 200; // allows 4-days to have a :30 slot duration
- core.MAX_TIMELINE_SLOTS = 1000;
- // potential nice values for slot-duration and interval-duration
- var STOCK_SUB_DURATIONS = [
- { years: 1 },
- { months: 1 },
- { days: 1 },
- { hours: 1 },
- { minutes: 30 },
- { minutes: 15 },
- { minutes: 10 },
- { minutes: 5 },
- { minutes: 1 },
- { seconds: 30 },
- { seconds: 15 },
- { seconds: 10 },
- { seconds: 5 },
- { seconds: 1 },
- { milliseconds: 500 },
- { milliseconds: 100 },
- { milliseconds: 10 },
- { milliseconds: 1 }
- ];
- function initScaleProps(timelineView) {
- timelineView.labelInterval = queryDurationOption(timelineView, 'slotLabelInterval');
- timelineView.slotDuration = queryDurationOption(timelineView, 'slotDuration');
- validateLabelAndSlot(timelineView); // validate after computed grid duration
- ensureLabelInterval(timelineView);
- ensureSlotDuration(timelineView);
- var input = timelineView.opt('slotLabelFormat');
- var type = $.type(input);
- timelineView.headerFormats =
- type === 'array' ?
- input
- : type === 'string' ?
- [input]
- :
- computeHeaderFormats(timelineView);
- timelineView.isTimeScale = core.durationHasTime(timelineView.slotDuration);
- var largeUnit = null;
- if (!timelineView.isTimeScale) {
- var slotUnit = core.computeGreatestUnit(timelineView.slotDuration);
- if (/year|month|week/.test(slotUnit)) {
- largeUnit = slotUnit;
- }
- }
- timelineView.largeUnit = largeUnit;
- timelineView.emphasizeWeeks = (timelineView.slotDuration.as('days') === 1) &&
- (timelineView.currentRangeAs('weeks') >= 2) &&
- !timelineView.opt('businessHours');
- /*
- console.log('label interval =', timelineView.labelInterval.humanize())
- console.log('slot duration =', timelineView.slotDuration.humanize())
- console.log('header formats =', timelineView.headerFormats)
- console.log('isTimeScale', timelineView.isTimeScale)
- console.log('largeUnit', timelineView.largeUnit)
- */
- var rawSnapDuration = timelineView.opt('snapDuration');
- timelineView.snapDuration =
- rawSnapDuration ?
- moment.duration(rawSnapDuration) :
- timelineView.slotDuration;
- timelineView.snapsPerSlot = core.divideDurationByDuration(timelineView.slotDuration, timelineView.snapDuration);
- }
- exports.initScaleProps = initScaleProps;
- function queryDurationOption(timelineView, name) {
- var input = timelineView.opt(name);
- if (input != null) {
- var dur = moment.duration(input);
- if (+dur) {
- return dur;
- }
- }
- }
- function validateLabelAndSlot(timelineView) {
- var currentUnzonedRange = timelineView.dateProfile.currentUnzonedRange;
- // make sure labelInterval doesn't exceed the max number of cells
- if (timelineView.labelInterval) {
- var labelCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), timelineView.labelInterval);
- if (labelCnt > core.MAX_TIMELINE_SLOTS) {
- core.warn('slotLabelInterval results in too many cells');
- timelineView.labelInterval = null;
- }
- }
- // make sure slotDuration doesn't exceed the maximum number of cells
- if (timelineView.slotDuration) {
- var slotCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), timelineView.slotDuration);
- if (slotCnt > core.MAX_TIMELINE_SLOTS) {
- core.warn('slotDuration results in too many cells');
- timelineView.slotDuration = null;
- }
- }
- // make sure labelInterval is a multiple of slotDuration
- if (timelineView.labelInterval && timelineView.slotDuration) {
- var slotsPerLabel = core.divideDurationByDuration(timelineView.labelInterval, timelineView.slotDuration);
- if (!core.isInt(slotsPerLabel) || (slotsPerLabel < 1)) {
- core.warn('slotLabelInterval must be a multiple of slotDuration');
- return timelineView.slotDuration = null;
- }
- }
- }
- function ensureLabelInterval(timelineView) {
- var currentUnzonedRange = timelineView.dateProfile.currentUnzonedRange;
- var labelInterval = timelineView.labelInterval;
- if (!labelInterval) {
- // compute based off the slot duration
- // find the largest label interval with an acceptable slots-per-label
- var input = void 0;
- if (timelineView.slotDuration) {
- for (var _i = 0, STOCK_SUB_DURATIONS_1 = STOCK_SUB_DURATIONS; _i < STOCK_SUB_DURATIONS_1.length; _i++) {
- input = STOCK_SUB_DURATIONS_1[_i];
- var tryLabelInterval = moment.duration(input);
- var slotsPerLabel = core.divideDurationByDuration(tryLabelInterval, timelineView.slotDuration);
- if (core.isInt(slotsPerLabel) && (slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL)) {
- labelInterval = tryLabelInterval;
- break;
- }
- }
- // use the slot duration as a last resort
- if (!labelInterval) {
- labelInterval = timelineView.slotDuration;
- }
- // compute based off the view's duration
- // find the largest label interval that yields the minimum number of labels
- }
- else {
- for (var _a = 0, STOCK_SUB_DURATIONS_2 = STOCK_SUB_DURATIONS; _a < STOCK_SUB_DURATIONS_2.length; _a++) {
- input = STOCK_SUB_DURATIONS_2[_a];
- labelInterval = moment.duration(input);
- var labelCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), labelInterval);
- if (labelCnt >= MIN_AUTO_LABELS) {
- break;
- }
- }
- }
- timelineView.labelInterval = labelInterval;
- }
- return labelInterval;
- }
- function ensureSlotDuration(timelineView) {
- var currentUnzonedRange = timelineView.dateProfile.currentUnzonedRange;
- var slotDuration = timelineView.slotDuration;
- if (!slotDuration) {
- var labelInterval = ensureLabelInterval(timelineView); // will compute if necessary
- // compute based off the label interval
- // find the largest slot duration that is different from labelInterval, but still acceptable
- for (var _i = 0, STOCK_SUB_DURATIONS_3 = STOCK_SUB_DURATIONS; _i < STOCK_SUB_DURATIONS_3.length; _i++) {
- var input = STOCK_SUB_DURATIONS_3[_i];
- var trySlotDuration = moment.duration(input);
- var slotsPerLabel = core.divideDurationByDuration(labelInterval, trySlotDuration);
- if (core.isInt(slotsPerLabel) && (slotsPerLabel > 1) && (slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL)) {
- slotDuration = trySlotDuration;
- break;
- }
- }
- // only allow the value if it won't exceed the view's # of slots limit
- if (slotDuration) {
- var slotCnt = core.divideRangeByDuration(currentUnzonedRange.getStart(), currentUnzonedRange.getEnd(), slotDuration);
- if (slotCnt > MAX_AUTO_CELLS) {
- slotDuration = null;
- }
- }
- // use the label interval as a last resort
- if (!slotDuration) {
- slotDuration = labelInterval;
- }
- timelineView.slotDuration = slotDuration;
- }
- return slotDuration;
- }
- function computeHeaderFormats(timelineView) {
- var format1;
- var format2;
- var labelInterval = timelineView.labelInterval;
- var unit = core.computeGreatestUnit(labelInterval);
- var weekNumbersVisible = timelineView.opt('weekNumbers');
- var format0 = (format1 = (format2 = null));
- // NOTE: weekNumber computation function wont work
- if ((unit === 'week') && !weekNumbersVisible) {
- unit = 'day';
- }
- switch (unit) {
- case 'year':
- format0 = 'YYYY'; // '2015'
- break;
- case 'month':
- if (timelineView.currentRangeAs('years') > 1) {
- format0 = 'YYYY'; // '2015'
- }
- format1 = 'MMM'; // 'Jan'
- break;
- case 'week':
- if (timelineView.currentRangeAs('years') > 1) {
- format0 = 'YYYY'; // '2015'
- }
- format1 = timelineView.opt('shortWeekFormat'); // 'Wk4'
- break;
- case 'day':
- if (timelineView.currentRangeAs('years') > 1) {
- format0 = timelineView.opt('monthYearFormat'); // 'January 2014'
- }
- else if (timelineView.currentRangeAs('months') > 1) {
- format0 = 'MMMM'; // 'January'
- }
- if (weekNumbersVisible) {
- format1 = timelineView.opt('weekFormat'); // 'Wk 4'
- }
- // TODO: would use smallDayDateFormat but the way timeline does RTL,
- // we don't want the text to be flipped
- format2 = 'dd D'; // @opt('smallDayDateFormat') # 'Su 9'
- break;
- case 'hour':
- if (weekNumbersVisible) {
- format0 = timelineView.opt('weekFormat'); // 'Wk 4'
- }
- if (timelineView.currentRangeAs('days') > 1) {
- format1 = timelineView.opt('dayOfMonthFormat'); // 'Fri 9/15'
- }
- format2 = timelineView.opt('smallTimeFormat'); // '6pm'
- break;
- case 'minute':
- // sufficiently large number of different minute cells?
- if ((labelInterval.asMinutes() / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {
- format0 = timelineView.opt('hourFormat'); // '6pm'
- format1 = '[:]mm'; // ':30'
- }
- else {
- format0 = timelineView.opt('mediumTimeFormat'); // '6:30pm'
- }
- break;
- case 'second':
- // sufficiently large number of different second cells?
- if ((labelInterval.asSeconds() / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {
- format0 = 'LT'; // '8:30 PM'
- format1 = '[:]ss'; // ':30'
- }
- else {
- format0 = 'LTS'; // '8:30:45 PM'
- }
- break;
- case 'millisecond':
- format0 = 'LTS'; // '8:30:45 PM'
- format1 = '[.]SSS'; // '750'
- break;
- }
- return [].concat(format0 || [], format1 || [], format2 || []);
- }
- /***/ }),
- /* 43 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ClippedScroller_1 = __webpack_require__(24);
- var ScrollerCanvas_1 = __webpack_require__(25);
- var ScrollJoiner_1 = __webpack_require__(16);
- var ScrollFollower_1 = __webpack_require__(26);
- var VRowGroup_1 = __webpack_require__(31);
- var COL_MIN_WIDTH = 30;
- var Spreadsheet = /** @class */ (function () {
- function Spreadsheet(view) {
- this.colGroupHtml = '';
- this.view = view;
- this.isRTL = this.view.opt('isRTL'); // doesn't descend from Grid, so needs to do this
- this.givenColWidths = this.colWidths =
- this.view.colSpecs.map(function (colSpec) { return colSpec.width; });
- }
- Spreadsheet.prototype.renderSkeleton = function () {
- var theme = this.view.calendar.theme;
- this.headScroller = new ClippedScroller_1.default({
- overflowX: 'clipped-scroll',
- overflowY: 'hidden'
- });
- this.headScroller.canvas = new ScrollerCanvas_1.default();
- this.headScroller.render();
- this.headScroller.canvas.contentEl.html(this.renderHeadHtml());
- this.headEl.append(this.headScroller.el);
- this.bodyScroller = new ClippedScroller_1.default({ overflowY: 'clipped-scroll' });
- this.bodyScroller.canvas = new ScrollerCanvas_1.default();
- this.bodyScroller.render();
- this.bodyScroller.canvas.contentEl.html("<div class=\"fc-rows\"> <table class=\"" + theme.getClass('tableGrid') + "\">" + this.colGroupHtml + "<tbody/> </table> </div>"); // colGroupHtml hack
- this.tbodyEl = this.bodyScroller.canvas.contentEl.find('tbody');
- this.el.append(this.bodyScroller.el);
- this.scrollJoiner = new ScrollJoiner_1.default('horizontal', [this.headScroller, this.bodyScroller]);
- this.headTable = this.headEl.find('table');
- this.headColEls = this.headEl.find('col');
- this.headCellEls = this.headScroller.canvas.contentEl.find('tr:last-child th');
- this.bodyColEls = this.el.find('col');
- this.bodyTable = this.el.find('table');
- this.colMinWidths = this.computeColMinWidths();
- this.applyColWidths();
- this.initColResizing();
- };
- Spreadsheet.prototype.renderHeadHtml = function () {
- var theme = this.view.calendar.theme;
- var colSpecs = this.view.colSpecs;
- var html = '<table class="' + theme.getClass('tableGrid') + '">';
- var colGroupHtml = '<colgroup>';
- for (var _i = 0, colSpecs_1 = colSpecs; _i < colSpecs_1.length; _i++) {
- var o = colSpecs_1[_i];
- if (o.isMain) {
- colGroupHtml += '<col class="fc-main-col"/>';
- }
- else {
- colGroupHtml += '<col/>';
- }
- }
- colGroupHtml += '</colgroup>';
- this.colGroupHtml = colGroupHtml;
- html += colGroupHtml;
- html += '<tbody>';
- if (this.view.superHeaderText) {
- html +=
- '<tr class="fc-super">' +
- '<th class="' + theme.getClass('widgetHeader') + '" colspan="' + colSpecs.length + '">' +
- '<div class="fc-cell-content">' +
- '<span class="fc-cell-text">' +
- fullcalendar_1.htmlEscape(this.view.superHeaderText) +
- '</span>' +
- '</div>' +
- '</th>' +
- '</tr>';
- }
- html += '<tr>';
- for (var i = 0; i < colSpecs.length; i++) {
- var o = colSpecs[i];
- var isLast = i === (colSpecs.length - 1);
- html +=
- "<th class=\"" + theme.getClass('widgetHeader') + "\">" +
- '<div>' +
- '<div class="fc-cell-content">' +
- (o.isMain ?
- '<span class="fc-expander-space">' +
- '<span class="fc-icon"></span>' +
- '</span>' :
- '') +
- '<span class="fc-cell-text">' +
- fullcalendar_1.htmlEscape(o.labelText || '') + // what about normalizing this value ahead of time?
- '</span>' +
- '</div>' +
- (!isLast ? '<div class="fc-col-resizer"></div>' : '') +
- '</div>' +
- '</th>';
- }
- html += '</tr>';
- html += '</tbody></table>';
- return html;
- };
- Spreadsheet.prototype.initColResizing = function () {
- var _this = this;
- this.headEl.find('th .fc-col-resizer').each(function (i, resizerEl) {
- resizerEl = $(resizerEl);
- resizerEl.on('mousedown', function (ev) {
- _this.colResizeMousedown(i, ev, resizerEl);
- });
- });
- };
- Spreadsheet.prototype.colResizeMousedown = function (i, ev, resizerEl) {
- var _this = this;
- var colWidths = (this.colWidths = this.queryColWidths());
- colWidths.pop();
- colWidths.push(null); // will result in 'auto' or ''
- var origColWidth = colWidths[i];
- var minWidth = Math.min(this.colMinWidths[i], COL_MIN_WIDTH); // if given width is smaller, allow it
- var dragListener = new fullcalendar_1.DragListener({
- dragStart: function () {
- resizerEl.addClass('fc-active');
- },
- drag: function (dx, dy) {
- var width = origColWidth + (_this.isRTL ? -dx : dx);
- width = Math.max(width, minWidth);
- colWidths[i] = width;
- _this.applyColWidths();
- },
- dragEnd: function () {
- resizerEl.removeClass('fc-active');
- }
- });
- dragListener.startInteraction(ev);
- };
- Spreadsheet.prototype.applyColWidths = function () {
- var cssWidth;
- var i;
- var colWidth;
- var colMinWidths = this.colMinWidths;
- var colWidths = this.colWidths;
- var allNumbers = true;
- var anyPercentages = false;
- var total = 0;
- for (var _i = 0, colWidths_1 = colWidths; _i < colWidths_1.length; _i++) {
- colWidth = colWidths_1[_i];
- if (typeof colWidth === 'number') {
- total += colWidth;
- }
- else {
- allNumbers = false;
- if (colWidth) {
- anyPercentages = true;
- }
- }
- }
- // percentage widths play better with 'auto' but h-grouped cells don't
- var defaultCssWidth = anyPercentages && !this.view.isHGrouping ?
- 'auto' :
- '';
- var cssWidths = colWidths.map(function (colWidth) { return (colWidth != null ? colWidth : defaultCssWidth); });
- // if allNumbers
- // cssWidths.pop()
- // cssWidths.push('auto')
- var tableMinWidth = 0;
- for (i = 0; i < cssWidths.length; i++) {
- cssWidth = cssWidths[i];
- tableMinWidth +=
- typeof cssWidth === 'number' ?
- cssWidth :
- colMinWidths[i];
- }
- for (i = 0; i < cssWidths.length; i++) {
- cssWidth = cssWidths[i];
- this.headColEls.eq(i).css('width', cssWidth);
- this.bodyColEls.eq(i).css('width', cssWidth);
- }
- this.headScroller.canvas.setMinWidth(tableMinWidth); // not really a table width anymore
- this.bodyScroller.canvas.setMinWidth(tableMinWidth);
- this.tableMinWidth = tableMinWidth;
- this.tableWidth = allNumbers ? total : undefined;
- };
- Spreadsheet.prototype.computeColMinWidths = function () {
- var _this = this;
- return this.givenColWidths.map(function (width, i) { return (typeof width === 'number' ?
- width :
- parseInt(_this.headColEls.eq(i).css('min-width'), 10) || COL_MIN_WIDTH); });
- };
- Spreadsheet.prototype.queryColWidths = function () {
- return this.headCellEls.map(function (i, node) { return ($(node).outerWidth()); }).get();
- };
- // Sizing
- // ---------------------------------------------------------------------------------
- Spreadsheet.prototype.updateSize = function () {
- this.headScroller.updateSize();
- this.bodyScroller.updateSize();
- this.scrollJoiner.update();
- this.updateCellFollower();
- };
- Spreadsheet.prototype.headHeight = function () {
- var table = this.headScroller.canvas.contentEl.find('table');
- return table.height.apply(table, arguments);
- };
- // completely reninitializes every time there's add/remove
- // TODO: optimize
- Spreadsheet.prototype.updateCellFollower = function () {
- if (this.cellFollower) {
- this.cellFollower.clearSprites(); // the closest thing to a destroy
- }
- this.cellFollower = new ScrollFollower_1.default(this.bodyScroller, true); // allowPointerEvents
- this.cellFollower.isHFollowing = false;
- this.cellFollower.isVFollowing = true;
- var nodes = [];
- for (var _i = 0, _a = this.view.rowHierarchy.getNodes(); _i < _a.length; _i++) {
- var row = _a[_i];
- if (row instanceof VRowGroup_1.default) {
- if (row.groupTd) {
- var cellContent = row.groupTd.find('.fc-cell-content');
- if (cellContent.length) {
- nodes.push(cellContent[0]);
- }
- }
- }
- }
- this.cellFollower.setSpriteEls($(nodes));
- this.cellFollower.update();
- };
- return Spreadsheet;
- }());
- exports.default = Spreadsheet;
- /***/ }),
- /* 44 */
- /***/ (function(module, exports) {
- Object.defineProperty(exports, "__esModule", { value: true });
- /*
- Given a jQuery <tr> set, returns the <td>'s that do not have multi-line rowspans.
- Would use the [rowspan] selector, but never not defined in IE8.
- */
- function getOwnCells(trs) {
- return trs.find('> td').filter(function (i, tdNode) { return (tdNode.rowSpan <= 1); });
- }
- exports.getOwnCells = getOwnCells;
- /***/ }),
- /* 45 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var TimelineEventRenderer_1 = __webpack_require__(17);
- var ResourceTimelineEventRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceTimelineEventRenderer, _super);
- function ResourceTimelineEventRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // don't render any fg segs
- ResourceTimelineEventRenderer.prototype.renderFgRanges = function (eventRanges) {
- // subclasses can implement
- };
- ResourceTimelineEventRenderer.prototype.unrenderFgRanges = function () {
- // otherwise will try do manip DOM, js error
- };
- return ResourceTimelineEventRenderer;
- }(TimelineEventRenderer_1.default));
- exports.default = ResourceTimelineEventRenderer;
- /***/ }),
- /* 46 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var EventRow_1 = __webpack_require__(33);
- /*
- A row that renders information about a particular resource, as well as it events (handled by superclass)
- */
- var ResourceRow = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceRow, _super);
- function ResourceRow(view, resource) {
- var _this = _super.call(this, view) || this;
- _this.resource = resource;
- _this.eventRenderer.designatedResource = _this.resource;
- return _this;
- }
- ResourceRow.prototype.renderSkeleton = function () {
- _super.prototype.renderSkeleton.call(this);
- this.updateExpandingEnabled();
- if (this.eventsPayload) {
- EventRow_1.default.prototype.executeEventRender.call(this, this.eventsPayload);
- }
- if (this.businessHourGenerator &&
- this.view.dateProfile // hack
- ) {
- EventRow_1.default.prototype.renderBusinessHours.call(this, this.businessHourGenerator);
- }
- this.view.publiclyTrigger('resourceRender', {
- context: this.resource,
- args: [
- this.resource,
- this.getTr('spreadsheet').find('> td'),
- this.getTr('event').find('> td'),
- this.view
- ]
- });
- };
- ResourceRow.prototype.removeElement = function () {
- _super.prototype.removeElement.call(this);
- if (this.eventsPayload) {
- EventRow_1.default.prototype.executeEventUnrender.call(this, this.eventsPayload);
- }
- if (this.businessHourGenerator) {
- EventRow_1.default.prototype.unrenderBusinessHours.call(this, this.businessHourGenerator);
- }
- };
- ResourceRow.prototype.renderEventSkeleton = function (tr) {
- _super.prototype.renderEventSkeleton.call(this, tr);
- tr.attr('data-resource-id', this.resource.id);
- };
- ResourceRow.prototype.executeEventRender = function (eventsPayload) {
- this.eventsPayload = eventsPayload;
- if (this.get('isInDom')) {
- _super.prototype.executeEventRender.call(this, this.eventsPayload);
- }
- };
- ResourceRow.prototype.executeEventUnrender = function () {
- _super.prototype.executeEventUnrender.call(this);
- this.eventsPayload = null;
- };
- ResourceRow.prototype.renderBusinessHours = function (businessHourGenerator) {
- this.businessHourGenerator = businessHourGenerator;
- if (this.get('isInDom')) {
- _super.prototype.renderBusinessHours.call(this, this.businessHourGenerator);
- }
- };
- ResourceRow.prototype.unrenderBusinessHours = function () {
- _super.prototype.unrenderBusinessHours.call(this);
- this.businessHourGenerator = null;
- };
- /*
- Populates the TR with cells containing data about the resource
- */
- ResourceRow.prototype.renderSpreadsheetSkeleton = function (tr) {
- var theme = this.view.calendar.theme;
- var resource = this.resource;
- for (var _i = 0, _a = this.view.colSpecs; _i < _a.length; _i++) {
- var colSpec = _a[_i];
- if (colSpec.group) { // not responsible for group-based rows. VRowGroup is
- continue;
- }
- var input = // the source text, and the main argument for the filter functions
- colSpec.field ?
- resource[colSpec.field] || null :
- resource;
- var text = typeof colSpec.text === 'function' ?
- colSpec.text(resource, input) : // the colspec provided a text filter function
- input;
- var contentEl = $('<div class="fc-cell-content">' +
- (colSpec.isMain ? this.renderGutterHtml() : '') +
- '<span class="fc-cell-text">' +
- (text ? fullcalendar_1.htmlEscape(text) : ' ') +
- '</span>' +
- '</div>');
- if (typeof colSpec.render === 'function') { // a filter function for the element
- contentEl = colSpec.render(resource, contentEl, input) || contentEl;
- }
- var td = $('<td class="' + theme.getClass('widgetContent') + '"/>')
- .append(contentEl);
- // the first cell of the row needs to have an inner div for setTrInnerHeight
- if (colSpec.isMain) {
- td.wrapInner('<div/>');
- }
- tr.append(td);
- }
- tr.attr('data-resource-id', resource.id);
- };
- /*
- Renders the HTML responsible for the subrow expander area,
- as well as the space before it (used to align expanders of similar depths)
- */
- ResourceRow.prototype.renderGutterHtml = function () {
- var html = '';
- var depth = this.depth;
- for (var i = 0; i < depth; i++) {
- html += '<span class="fc-icon"/>';
- }
- html +=
- '<span class="fc-expander-space">' +
- '<span class="fc-icon"></span>' +
- '</span>';
- return html;
- };
- return ResourceRow;
- }(EventRow_1.default));
- exports.default = ResourceRow;
- /***/ }),
- /* 47 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var RowGroup_1 = __webpack_require__(32);
- /*
- A row grouping that renders as a single solid row that spans width-wise (like a horizontal rule)
- */
- var HRowGroup = /** @class */ (function (_super) {
- tslib_1.__extends(HRowGroup, _super);
- function HRowGroup() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- HRowGroup.prototype.renderSkeleton = function () {
- _super.prototype.renderSkeleton.call(this);
- this.updateExpandingEnabled();
- };
- /*
- Renders this row's TR for the "spreadsheet" quadrant, the area with info about each resource
- */
- HRowGroup.prototype.renderSpreadsheetSkeleton = function (tr) {
- var contentEl = this.renderGroupContentEl();
- // add an expander icon. binding handlers and updating are done by RowParent
- contentEl.prepend('<span class="fc-expander">' +
- '<span class="fc-icon"></span>' +
- '</span>');
- return $('<td class="fc-divider" />')
- .attr('colspan', this.view.colSpecs.length) // span across all columns
- .append($('<div/>').append(contentEl) // needed by setTrInnerHeight
- )
- .appendTo(tr);
- };
- /*
- Renders this row's TR for the quadrant that contains a resource's events
- */
- HRowGroup.prototype.renderEventSkeleton = function (tr) {
- // insert a single cell, with a single empty <div> (needed by setTrInnerHeight).
- // there will be no content
- return tr.append("<td class=\"fc-divider\"> <div/> </td>");
- };
- return HRowGroup;
- }(RowGroup_1.default));
- exports.default = HRowGroup;
- HRowGroup.prototype.hasOwnRow = true; // actually renders its own row and takes up height
- /***/ }),
- /* 48 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var Resource_1 = __webpack_require__(19);
- var ResourceManager_1 = __webpack_require__(49);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- // NOTE: for public methods, always be sure of the return value. for chaining
- var origMethods = {
- constructed: fullcalendar_1.Calendar.prototype.constructed,
- buildSelectFootprint: fullcalendar_1.Calendar.prototype.buildSelectFootprint
- };
- // option defaults
- fullcalendar_1.Calendar.defaults.refetchResourcesOnNavigate = false;
- fullcalendar_1.Calendar.defaults.filterResourcesWithEvents = false;
- fullcalendar_1.Calendar.prototype.resourceManager = null;
- fullcalendar_1.Calendar.prototype.constructed = function () {
- origMethods.constructed.apply(this, arguments);
- this.resourceManager = new ResourceManager_1.default(this);
- };
- fullcalendar_1.Calendar.prototype.instantiateView = function (viewType) {
- var spec = this.viewSpecManager.getViewSpec(viewType);
- var viewClass = spec['class'];
- if (this.opt('resources') && (spec.options.resources !== false)) {
- if (spec.queryResourceClass) {
- viewClass = spec.queryResourceClass(spec) || viewClass; // might return falsy
- }
- else if (spec.resourceClass) {
- viewClass = spec.resourceClass;
- }
- }
- return new viewClass(this, spec);
- };
- // for the API only
- // retrieves what is currently in memory. no fetching
- fullcalendar_1.Calendar.prototype.getResources = function () {
- return Array.prototype.slice.call(// make a copy
- this.resourceManager.topLevelResources);
- };
- // assumes all resources already loaded
- fullcalendar_1.Calendar.prototype.addResource = function (resourceInput, scroll) {
- var _this = this;
- if (scroll === void 0) { scroll = false; }
- this.resourceManager.addResource(resourceInput)
- .then(function (resource) {
- if (scroll && _this.view.scrollToResource) {
- return _this.view.scrollToResource(resource);
- }
- });
- };
- // assumes all resources already loaded
- fullcalendar_1.Calendar.prototype.removeResource = function (idOrResource) {
- return this.resourceManager.removeResource(idOrResource);
- };
- fullcalendar_1.Calendar.prototype.refetchResources = function () {
- this.resourceManager.clear();
- this.view.flash('initialResources');
- };
- fullcalendar_1.Calendar.prototype.rerenderResources = function () {
- this.resourceManager.resetCurrentResources();
- };
- fullcalendar_1.Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput, resourceId) {
- var plainFootprint = origMethods.buildSelectFootprint.apply(this, arguments);
- if (resourceId) {
- return new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, resourceId);
- }
- else {
- return plainFootprint;
- }
- };
- fullcalendar_1.Calendar.prototype.getResourceById = function (id) {
- return this.resourceManager.getResourceById(id);
- };
- // Resources + Events
- // ----------------------------------------------------------------------------------------
- // DEPRECATED. for external API backwards compatibility
- fullcalendar_1.Calendar.prototype.getEventResourceId = function (event) {
- return this.getEventResourceIds(event)[0];
- };
- fullcalendar_1.Calendar.prototype.getEventResourceIds = function (event) {
- var eventDef = this.eventManager.getEventDefByUid(event._id);
- if (eventDef) {
- return eventDef.getResourceIds();
- }
- else {
- return [];
- }
- };
- // DEPRECATED
- fullcalendar_1.Calendar.prototype.setEventResourceId = function (event, resourceId) {
- this.setEventResourceIds(event, resourceId ? [resourceId] : []);
- };
- fullcalendar_1.Calendar.prototype.setEventResourceIds = function (event, resourceIds) {
- var eventDef = this.eventManager.getEventDefByUid(event._id);
- if (eventDef) {
- eventDef.resourceIds = resourceIds.map(function (rawResourceId) {
- return Resource_1.default.normalizeId(rawResourceId);
- });
- }
- };
- // NOTE: views pair *segments* to resources. that's why there's no code reuse
- fullcalendar_1.Calendar.prototype.getResourceEvents = function (idOrResource) {
- var _this = this;
- var resource = typeof idOrResource === 'object' ?
- idOrResource :
- this.getResourceById(idOrResource);
- if (resource) {
- // return the event cache, filtered by events assigned to the resource
- // TODO: move away from using clientId
- return this.clientEvents(function (event) {
- return $.inArray(resource.id, _this.getEventResourceIds(event)) !== -1;
- });
- }
- else {
- return [];
- }
- };
- // DEPRECATED. for external API backwards compatibility
- fullcalendar_1.Calendar.prototype.getEventResource = function (idOrEvent) {
- return this.getEventResources(idOrEvent)[0];
- };
- fullcalendar_1.Calendar.prototype.getEventResources = function (idOrEvent) {
- var event = typeof idOrEvent === 'object' ?
- idOrEvent :
- this.clientEvents(idOrEvent)[0];
- var resources = [];
- if (event) {
- for (var _i = 0, _a = this.getEventResourceIds(event); _i < _a.length; _i++) {
- var resourceId = _a[_i];
- var resource = this.getResourceById(resourceId);
- if (resource) {
- resources.push(resource);
- }
- }
- }
- return resources;
- };
- /***/ }),
- /* 49 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = __webpack_require__(1);
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceManager = /** @class */ (function (_super) {
- tslib_1.__extends(ResourceManager, _super);
- function ResourceManager(calendar) {
- var _this = _super.call(this) || this;
- _this.fetchId = 0;
- _this.calendar = calendar;
- _this.initializeCache();
- return _this;
- }
- // Resource Data Getting
- // ------------------------------------------------------------------------------------------------------------------
- /*
- Like fetchResources, but won't refetch if already fetched.
- */
- ResourceManager.prototype.getResources = function (start, end) {
- var isSameRange = (!start && !this.currentStart) || // both nonexistent ranges?
- (start && this.currentStart && start.isSame(this.currentStart) && end.isSame(this.currentEnd));
- if (!this.fetching || !isSameRange) { // first time? or is range different?
- return this.fetchResources(start, end);
- }
- else {
- return this.fetching;
- }
- };
- /*
- Will always fetch, even if done previously.
- Accepts optional chrono-related params to pass on to the raw resource sources.
- Returns a promise.
- */
- ResourceManager.prototype.fetchResources = function (start, end) {
- var _this = this;
- var currentFetchId = (this.fetchId += 1);
- return this.fetching =
- fullcalendar_1.Promise.construct(function (resolve, reject) {
- _this.fetchResourceInputs(function (resourceInputs) {
- if (currentFetchId === _this.fetchId) {
- _this.setResources(resourceInputs);
- return resolve(_this.topLevelResources);
- }
- else {
- return reject();
- }
- }, start, end);
- });
- };
- /*
- Accepts optional chrono-related params to pass on to the raw resource sources.
- Calls callback when done.
- */
- ResourceManager.prototype.fetchResourceInputs = function (callback, start, end) {
- var _this = this;
- var calendar = this.calendar;
- var source = calendar.opt('resources');
- var timezone = calendar.opt('timezone');
- if ($.type(source) === 'string') {
- source = { url: source };
- }
- switch ($.type(source)) {
- case 'function':
- this.calendar.pushLoading();
- source(function (resourceInputs) {
- _this.calendar.popLoading();
- callback(resourceInputs);
- }, start, end, calendar.opt('timezone'));
- break;
- case 'object':
- calendar.pushLoading();
- var requestParams = {};
- if (start && end) {
- requestParams[calendar.opt('startParam')] = start.format();
- requestParams[calendar.opt('endParam')] = end.format();
- // mimick what EventManager does
- // TODO: more DRY
- if (timezone && (timezone !== 'local')) {
- requestParams[calendar.opt('timezoneParam')] = timezone;
- }
- }
- $.ajax(// TODO: handle failure
- $.extend({ data: requestParams }, ResourceManager.ajaxDefaults, source)).then(function (resourceInputs) {
- calendar.popLoading();
- callback(resourceInputs);
- });
- break;
- case 'array':
- callback(source);
- break;
- default:
- callback([]);
- break;
- }
- };
- ResourceManager.prototype.getResourceById = function (id) {
- return this.resourcesById[id];
- };
- // assumes already completed fetch
- // does not guarantee order
- ResourceManager.prototype.getFlatResources = function () {
- var result = [];
- for (var id in this.resourcesById) {
- result.push(this.resourcesById[id]);
- }
- return result;
- };
- // Resource Adding
- // ------------------------------------------------------------------------------------------------------------------
- ResourceManager.prototype.initializeCache = function () {
- this.topLevelResources = [];
- this.resourcesById = {};
- };
- ResourceManager.prototype.setResources = function (resourceInputs) {
- var _this = this;
- var resource;
- var wasSet = Boolean(this.topLevelResources);
- this.initializeCache();
- var resources = resourceInputs.map(function (resourceInput) { return (_this.buildResource(resourceInput)); });
- var validResources = [];
- for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {
- resource = resources_1[_i];
- if (this.addResourceToIndex(resource)) {
- validResources.push(resource);
- }
- }
- for (var _a = 0, validResources_1 = validResources; _a < validResources_1.length; _a++) {
- resource = validResources_1[_a];
- this.addResourceToTree(resource);
- }
- if (wasSet) {
- this.trigger('reset', this.topLevelResources);
- }
- else {
- this.trigger('set', this.topLevelResources);
- }
- this.calendar.publiclyTrigger('resourcesSet', [this.topLevelResources]);
- };
- ResourceManager.prototype.resetCurrentResources = function () {
- if (this.topLevelResources) {
- this.trigger('reset', this.topLevelResources);
- }
- };
- ResourceManager.prototype.clear = function () {
- this.topLevelResources = null;
- this.fetching = null;
- };
- ResourceManager.prototype.addResource = function (resourceInput) {
- var _this = this;
- if (this.fetching) {
- return this.fetching.then(function () {
- var resource = _this.buildResource(resourceInput);
- if (_this.addResourceToIndex(resource)) {
- _this.addResourceToTree(resource);
- _this.trigger('add', resource, _this.topLevelResources);
- return resource;
- }
- else {
- return false;
- }
- });
- }
- else {
- return fullcalendar_1.Promise.reject();
- }
- };
- ResourceManager.prototype.addResourceToIndex = function (resource) {
- if (this.resourcesById[resource.id]) {
- return false;
- }
- else {
- this.resourcesById[resource.id] = resource;
- for (var _i = 0, _a = resource.children; _i < _a.length; _i++) {
- var child = _a[_i];
- this.addResourceToIndex(child);
- }
- return true;
- }
- };
- ResourceManager.prototype.addResourceToTree = function (resource) {
- if (!resource.parent) {
- var siblings = void 0;
- var parentId = String(resource['parentId'] != null ? resource['parentId'] : '');
- if (parentId) {
- var parent_1 = this.resourcesById[parentId];
- if (parent_1) {
- resource.parent = parent_1;
- siblings = parent_1.children;
- }
- else {
- return false;
- }
- }
- else {
- siblings = this.topLevelResources;
- }
- siblings.push(resource);
- }
- return true;
- };
- // Resource Removing
- // ------------------------------------------------------------------------------------------------------------------
- ResourceManager.prototype.removeResource = function (idOrResource) {
- var _this = this;
- var id = typeof idOrResource === 'object' ?
- idOrResource.id :
- idOrResource;
- if (this.fetching) {
- return this.fetching.then(function () {
- var resource = _this.removeResourceFromIndex(id);
- if (resource) {
- _this.removeResourceFromTree(resource);
- _this.trigger('remove', resource, _this.topLevelResources);
- }
- return resource;
- });
- }
- else {
- return fullcalendar_1.Promise.reject();
- }
- };
- ResourceManager.prototype.removeResourceFromIndex = function (resourceId) {
- var resource = this.resourcesById[resourceId];
- if (resource) {
- delete this.resourcesById[resourceId];
- for (var _i = 0, _a = resource.children; _i < _a.length; _i++) {
- var child = _a[_i];
- this.removeResourceFromIndex(child.id);
- }
- return resource;
- }
- else {
- return false;
- }
- };
- ResourceManager.prototype.removeResourceFromTree = function (resource, siblings) {
- if (siblings === void 0) { siblings = this.topLevelResources; }
- for (var i = 0; i < siblings.length; i++) {
- var sibling = siblings[i];
- if (sibling === resource) {
- resource.parent = null;
- siblings.splice(i, 1);
- return true;
- }
- if (this.removeResourceFromTree(resource, sibling.children)) {
- return true;
- }
- }
- return false;
- };
- // Resource Data Utils
- // ------------------------------------------------------------------------------------------------------------------
- ResourceManager.prototype.buildResource = function (resourceInput) {
- var _this = this;
- var resource = $.extend({}, resourceInput);
- var rawClassName = resourceInput.eventClassName;
- resource.id = String(resourceInput.id != null ?
- resourceInput.id :
- '_fc' + (ResourceManager.resourceGuid++));
- // TODO: consolidate repeat logic
- resource.eventClassName = (function () {
- switch ($.type(rawClassName)) {
- case 'string':
- return rawClassName.split(/\s+/);
- case 'array':
- return rawClassName;
- default:
- return [];
- }
- })();
- if (resourceInput.businessHours) {
- resource.businessHourGenerator = new fullcalendar_1.BusinessHourGenerator(resourceInput.businessHours, this.calendar);
- }
- resource.children = (resourceInput.children || []).map(function (childInput) {
- var child = _this.buildResource(childInput);
- child.parent = resource;
- return child;
- });
- return resource;
- };
- ResourceManager.resourceGuid = 1;
- ResourceManager.ajaxDefaults = {
- dataType: 'json',
- cache: false
- };
- return ResourceManager;
- }(fullcalendar_1.Class));
- exports.default = ResourceManager;
- fullcalendar_1.EmitterMixin.mixInto(ResourceManager);
- /***/ }),
- /* 50 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var Resource_1 = __webpack_require__(19);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- var origMethods = {
- getPeerEventInstances: fullcalendar_1.Constraints.prototype.getPeerEventInstances,
- isFootprintAllowed: fullcalendar_1.Constraints.prototype.isFootprintAllowed,
- buildCurrentBusinessFootprints: fullcalendar_1.Constraints.prototype.buildCurrentBusinessFootprints,
- footprintContainsFootprint: fullcalendar_1.Constraints.prototype.footprintContainsFootprint,
- footprintsIntersect: fullcalendar_1.Constraints.prototype.footprintsIntersect,
- eventRangeToEventFootprints: fullcalendar_1.Constraints.prototype.eventRangeToEventFootprints,
- parseFootprints: fullcalendar_1.Constraints.prototype.parseFootprints
- };
- fullcalendar_1.Constraints.prototype.getPeerEventInstances = function (subjectEventDef) {
- var subjectResourceIds = subjectEventDef.getResourceIds();
- var peerInstances = origMethods.getPeerEventInstances.apply(this, arguments);
- if (!subjectResourceIds.length) {
- return peerInstances;
- }
- else {
- return peerInstances.filter(function (peerInstance) {
- // always consider non-resource events to be peers
- if (!peerInstance.def.resourceIds.length) {
- return true;
- }
- // has same resource? consider it a peer
- for (var _i = 0, subjectResourceIds_1 = subjectResourceIds; _i < subjectResourceIds_1.length; _i++) {
- var resourceId = subjectResourceIds_1[_i];
- if (peerInstance.def.hasResourceId(resourceId)) {
- return true;
- }
- }
- return false;
- });
- }
- };
- // enforce resource ID constraint
- fullcalendar_1.Constraints.prototype.isFootprintAllowed = function (footprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance) {
- if (typeof constraintVal === 'object') {
- var constrainToResourceIds = Resource_1.default.extractIds(constraintVal, this);
- if (constrainToResourceIds.length && (!(footprint instanceof ResourceComponentFootprint_1.default) ||
- $.inArray(footprint.resourceId, constrainToResourceIds) === -1)) {
- return false;
- }
- }
- return origMethods.isFootprintAllowed.apply(this, arguments);
- };
- fullcalendar_1.Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {
- var flatResources = this._calendar.resourceManager.getFlatResources();
- var anyCustomBusinessHours = false;
- // any per-resource business hours? or will one global businessHours suffice?
- for (var _i = 0, flatResources_1 = flatResources; _i < flatResources_1.length; _i++) {
- var resource = flatResources_1[_i];
- if (resource.businessHourGenerator) {
- anyCustomBusinessHours = true;
- }
- }
- // if there are any custom business hours, all business hours must be sliced per-resources
- if (anyCustomBusinessHours) {
- var view = this._calendar.view;
- var generalBusinessHourGenerator = view.get('businessHourGenerator');
- var unzonedRange = view.dateProfile.activeUnzonedRange;
- var componentFootprints = [];
- for (var _a = 0, flatResources_2 = flatResources; _a < flatResources_2.length; _a++) {
- var resource = flatResources_2[_a];
- var businessHourGenerator = resource.businessHourGenerator || generalBusinessHourGenerator;
- var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);
- if (eventInstanceGroup) {
- for (var _b = 0, _c = eventInstanceGroup.getAllEventRanges(); _b < _c.length; _b++) {
- var eventRange = _c[_b];
- componentFootprints.push(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, isAllDay, // isAllDay
- resource.id));
- }
- }
- }
- return componentFootprints;
- }
- else {
- return origMethods.buildCurrentBusinessFootprints.apply(this, arguments);
- }
- };
- fullcalendar_1.Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {
- if (outerFootprint instanceof ResourceComponentFootprint_1.default &&
- (!(innerFootprint instanceof ResourceComponentFootprint_1.default) ||
- (innerFootprint.resourceId !== outerFootprint.resourceId))) {
- return false;
- }
- return origMethods.footprintContainsFootprint.apply(this, arguments);
- };
- fullcalendar_1.Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {
- if (footprint0 instanceof ResourceComponentFootprint_1.default &&
- footprint1 instanceof ResourceComponentFootprint_1.default &&
- (footprint0.resourceId !== footprint1.resourceId)) {
- return false;
- }
- return origMethods.footprintsIntersect.apply(this, arguments);
- };
- /*
- TODO: somehow more DRY with DateComponent::eventRangeToEventFootprints monkeypatch
- */
- fullcalendar_1.Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {
- var eventDef = eventRange.eventDef;
- var resourceIds = eventDef.getResourceIds();
- if (resourceIds.length) {
- return resourceIds.map(function (resourceId) { return (new fullcalendar_1.EventFootprint(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, eventDef.isAllDay(), resourceId), eventDef, eventRange.eventInstance // might not exist
- )); });
- }
- else {
- return origMethods.eventRangeToEventFootprints.apply(this, arguments);
- }
- };
- fullcalendar_1.Constraints.prototype.parseFootprints = function (input) {
- var plainFootprints = origMethods.parseFootprints.apply(this, arguments);
- var resourceIds = input.resourceIds || [];
- if (input.resourceId) {
- resourceIds = [input.resourceId].concat(resourceIds);
- }
- if (resourceIds.length) {
- var footprints = [];
- for (var _i = 0, resourceIds_1 = resourceIds; _i < resourceIds_1.length; _i++) {
- var resourceId = resourceIds_1[_i];
- for (var _a = 0, plainFootprints_1 = plainFootprints; _a < plainFootprints_1.length; _a++) {
- var plainFootprint = plainFootprints_1[_a];
- footprints.push(new ResourceComponentFootprint_1.default(plainFootprint.unzonedRange, plainFootprint.isAllDay, resourceId));
- }
- }
- return footprints;
- }
- else {
- return plainFootprints;
- }
- };
- /***/ }),
- /* 51 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var license_1 = __webpack_require__(52);
- // pre-monkeypatch methods
- var origMethods = {
- setElement: fullcalendar_1.View.prototype.setElement,
- removeElement: fullcalendar_1.View.prototype.removeElement,
- triggerViewRender: fullcalendar_1.View.prototype.triggerViewRender
- };
- // new properties
- fullcalendar_1.View.prototype.canHandleSpecificResources = false;
- // View Rendering
- // --------------------------------------------------------------------------------------------------
- fullcalendar_1.View.prototype.setElement = function () {
- origMethods.setElement.apply(this, arguments);
- this.watchResources(); // do after have the el, because might render, which assumes a render skeleton
- };
- fullcalendar_1.View.prototype.removeElement = function () {
- this.unwatchResources();
- origMethods.removeElement.apply(this, arguments);
- };
- // Show the warning even for non-resource views
- // inject license key before 'viewRender' which is called by super's afterBaseDisplay
- fullcalendar_1.View.prototype.triggerViewRender = function () {
- license_1.processLicenseKey(this.opt('schedulerLicenseKey'), this.el // container element
- );
- origMethods.triggerViewRender.apply(this, arguments);
- };
- // Resource Binding
- // --------------------------------------------------------------------------------------------------
- fullcalendar_1.View.prototype.watchResources = function () {
- var _this = this;
- var initialDepNames = [];
- var bindingDepNames = ['initialResources'];
- if (this.opt('refetchResourcesOnNavigate')) {
- initialDepNames.push('dateProfile');
- }
- if (this.opt('filterResourcesWithEvents')) {
- bindingDepNames.push('currentEvents');
- }
- this.watch('initialResources', initialDepNames, function (deps) {
- return _this.getInitialResources(deps.dateProfile); // promise
- });
- this.watch('bindingResources', bindingDepNames, function (deps) {
- _this.bindResourceChanges(deps.currentEvents);
- _this.setResources(deps.initialResources, deps.currentEvents);
- }, function () {
- _this.unbindResourceChanges();
- _this.unsetResources();
- });
- };
- fullcalendar_1.View.prototype.unwatchResources = function () {
- this.unwatch('initialResources');
- this.unwatch('bindingResources');
- };
- // dateProfile is optional
- fullcalendar_1.View.prototype.getInitialResources = function (dateProfile) {
- var calendar = this.calendar;
- if (dateProfile) {
- return calendar.resourceManager.getResources(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay));
- }
- else {
- return calendar.resourceManager.getResources();
- }
- };
- // eventsPayload is optional
- fullcalendar_1.View.prototype.bindResourceChanges = function (eventsPayload) {
- var _this = this;
- this.listenTo(this.calendar.resourceManager, {
- set: function (resources) {
- _this.setResources(resources, eventsPayload);
- },
- unset: function () {
- _this.unsetResources();
- },
- reset: function (resources) {
- _this.resetResources(resources, eventsPayload);
- },
- add: function (resource, allResources) {
- _this.addResource(resource, allResources, eventsPayload);
- },
- remove: function (resource, allResources) {
- _this.removeResource(resource, allResources, eventsPayload);
- }
- });
- };
- fullcalendar_1.View.prototype.unbindResourceChanges = function () {
- this.stopListeningTo(this.calendar.resourceManager);
- };
- // Event Rendering
- // --------------------------------------------------------------------------------------------------
- fullcalendar_1.View.watch('displayingEvents', ['displayingDates', 'hasEvents', 'currentResources'], function (deps) {
- this.requestEventsRender(this.get('currentEvents'));
- }, function () {
- this.requestEventsUnrender();
- });
- // Resource Data
- // --------------------------------------------------------------------------------------------------
- // currentEvents is optional
- fullcalendar_1.View.prototype.setResources = function (resources, eventsPayload) {
- if (eventsPayload) {
- resources = this.filterResourcesWithEvents(resources, eventsPayload);
- }
- this.set('currentResources', resources);
- this.set('hasResources', true);
- };
- fullcalendar_1.View.prototype.unsetResources = function () {
- this.unset('currentResources');
- this.unset('hasResources');
- };
- // eventsPayload is optional
- fullcalendar_1.View.prototype.resetResources = function (resources, eventsPayload) {
- this.startBatchRender();
- this.unsetResources();
- this.setResources(resources, eventsPayload);
- this.stopBatchRender();
- };
- // eventsPayload is optional
- fullcalendar_1.View.prototype.addResource = function (resource, allResources, eventsPayload) {
- if (!this.canHandleSpecificResources) {
- this.resetResources(allResources, eventsPayload);
- return;
- }
- if (eventsPayload) {
- var a = this.filterResourcesWithEvents([resource], eventsPayload);
- if (!a.length) {
- resource = null;
- }
- }
- if (resource) {
- this.set('currentResources', allResources); // TODO: filter against eventsPayload?
- this.handleResourceAdd(resource);
- }
- };
- fullcalendar_1.View.prototype.removeResource = function (resource, allResources, eventsPayload) {
- if (!this.canHandleSpecificResources) {
- this.resetResources(allResources, eventsPayload);
- return;
- }
- this.set('currentResources', allResources); // TODO: filter against eventsPayload?
- this.handleResourceRemove(resource);
- };
- // Resource Change Handling
- // --------------------------------------------------------------------------------------------------
- fullcalendar_1.View.prototype.handleResourceAdd = function (resource) {
- // subclasses should implement
- };
- fullcalendar_1.View.prototype.handleResourceRemove = function (resource) {
- // subclasses should implement
- };
- // Resource Filtering
- // ------------------------------------------------------------------------------------------------------------------
- fullcalendar_1.View.prototype.filterResourcesWithEvents = function (resources, eventsPayload) {
- var eventRanges = this.eventsPayloadToRanges(eventsPayload);
- var resourceIdHits = {};
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
- var eventRange = eventRanges_1[_i];
- for (var _a = 0, _b = eventRange.eventDef.getResourceIds(); _a < _b.length; _a++) {
- var resourceId = _b[_a];
- resourceIdHits[resourceId] = true;
- }
- }
- return _filterResourcesWithEvents(resources, resourceIdHits);
- };
- fullcalendar_1.View.prototype.eventsPayloadToRanges = function (eventsPayload) {
- var dateProfile = this._getDateProfile();
- var allEventRanges = [];
- for (var eventDefId in eventsPayload) {
- var instanceGroup = eventsPayload[eventDefId];
- var eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);
- allEventRanges.push.apply(allEventRanges, (eventRanges || []));
- }
- return allEventRanges;
- };
- // provides a new structure with masked objects
- function _filterResourcesWithEvents(sourceResources, resourceIdHits) {
- var filteredResources = [];
- for (var _i = 0, sourceResources_1 = sourceResources; _i < sourceResources_1.length; _i++) {
- var sourceResource = sourceResources_1[_i];
- if (sourceResource.children.length) {
- var filteredChildren = _filterResourcesWithEvents(sourceResource.children, resourceIdHits);
- if (filteredChildren.length || resourceIdHits[sourceResource.id]) {
- var filteredResource = Object.create(sourceResource); // mask
- filteredResource.children = filteredChildren;
- filteredResources.push(filteredResource);
- }
- }
- else { // no children, so no need to mask
- if (resourceIdHits[sourceResource.id]) {
- filteredResources.push(sourceResource);
- }
- }
- }
- return filteredResources;
- }
- /***/ }),
- /* 52 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- var moment = __webpack_require__(15);
- var exportHooks = __webpack_require__(0);
- var RELEASE_DATE = '2018-03-27'; // for Scheduler
- var UPGRADE_WINDOW = { years: 1, weeks: 1 }; // 1 week leeway, for tz shift reasons too
- var LICENSE_INFO_URL = 'http://fullcalendar.io/scheduler/license/';
- var PRESET_LICENSE_KEYS = [
- 'GPL-My-Project-Is-Open-Source',
- 'CC-Attribution-NonCommercial-NoDerivatives'
- ];
- function processLicenseKey(key, containerEl) {
- if (!isImmuneUrl(window.location.href) && !isValidKey(key)) {
- if (!detectWarningInContainer(containerEl)) {
- return renderingWarningInContainer('Please use a valid license key. <a href="' + LICENSE_INFO_URL + '">More Info</a>', containerEl);
- }
- }
- }
- exports.processLicenseKey = processLicenseKey;
- /*
- This decryption is not meant to be bulletproof. Just a way to remind about an upgrade.
- */
- function isValidKey(key) {
- if ($.inArray(key, PRESET_LICENSE_KEYS) !== -1) {
- return true;
- }
- var parts = (key || '').match(/^(\d+)\-fcs\-(\d+)$/);
- if (parts && (parts[1].length === 10)) {
- var purchaseDate = moment.utc(parseInt(parts[2], 10) * 1000);
- var releaseDate = moment.utc(exportHooks.mockSchedulerReleaseDate || RELEASE_DATE);
- if (releaseDate.isValid()) { // token won't be replaced in dev mode
- var minPurchaseDate = releaseDate.clone().subtract(UPGRADE_WINDOW);
- if (purchaseDate.isAfter(minPurchaseDate)) {
- return true;
- }
- }
- }
- return false;
- }
- exports.isValidKey = isValidKey;
- function isImmuneUrl(url) {
- return /\w+\:\/\/fullcalendar\.io\/|\/demos\/[\w-]+\.html$/.test(url);
- }
- exports.isImmuneUrl = isImmuneUrl;
- function renderingWarningInContainer(messageHtml, containerEl) {
- return containerEl.append($('<div class="fc-license-message" />').html(messageHtml));
- }
- exports.renderingWarningInContainer = renderingWarningInContainer;
- // returns boolean of whether a license message is already rendered
- function detectWarningInContainer(containerEl) {
- return containerEl.find('.fc-license-message').length >= 1;
- }
- exports.detectWarningInContainer = detectWarningInContainer;
- /***/ }),
- /* 53 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- // references to pre-monkeypatched methods
- var origMethods = {
- eventRangeToEventFootprints: fullcalendar_1.DateComponent.prototype.eventRangeToEventFootprints
- };
- // configuration for subclasses
- fullcalendar_1.DateComponent.prototype.isResourceFootprintsEnabled = false;
- fullcalendar_1.DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {
- if (!this.isResourceFootprintsEnabled) {
- return origMethods.eventRangeToEventFootprints.apply(this, arguments);
- }
- else {
- var eventDef_1 = eventRange.eventDef;
- var resourceIds = eventDef_1.getResourceIds();
- if (resourceIds.length) {
- return resourceIds.map(function (resourceId) { return (new fullcalendar_1.EventFootprint(new ResourceComponentFootprint_1.default(eventRange.unzonedRange, eventDef_1.isAllDay(), resourceId), eventDef_1, eventRange.eventInstance // might not exist
- )); });
- }
- else if (eventDef_1.hasBgRendering()) { // TODO: it's strange to be relying on this
- return origMethods.eventRangeToEventFootprints.apply(this, arguments);
- }
- else {
- return [];
- }
- }
- };
- // Resource Low-level Rendering
- // ----------------------------------------------------------------------------------------------
- // ResourceViewMixin wires these up
- fullcalendar_1.DateComponent.prototype.renderResources = function (resources) {
- this.callChildren('renderResources', arguments);
- };
- fullcalendar_1.DateComponent.prototype.unrenderResources = function () {
- this.callChildren('unrenderResources', arguments);
- };
- fullcalendar_1.DateComponent.prototype.renderResource = function (resource) {
- this.callChildren('renderResource', arguments);
- };
- fullcalendar_1.DateComponent.prototype.unrenderResource = function (resource) {
- this.callChildren('unrenderResource', arguments);
- };
- /***/ }),
- /* 54 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- // references to pre-monkeypatched methods
- var origMethods = {
- isEventDefDraggable: fullcalendar_1.InteractiveDateComponent.prototype.isEventDefDraggable
- };
- // configuration for subclasses
- // whether we should attempt to render selections or resizes that span across different resources
- fullcalendar_1.InteractiveDateComponent.prototype.allowCrossResource = true;
- // ^ is this worth the complexity?
- // if an event's dates are not draggable, but it's resource IS, still allow dragging
- fullcalendar_1.InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {
- return this.isEventDefResourceEditable(eventDef) ||
- origMethods.isEventDefDraggable.call(this, eventDef);
- };
- fullcalendar_1.InteractiveDateComponent.prototype.isEventDefResourceEditable = function (eventDef) {
- var bool = eventDef.resourceEditable;
- if (bool == null) {
- bool = (eventDef.source || {}).resourceEditable;
- if (bool == null) {
- bool = this.opt('eventResourceEditable');
- if (bool == null) {
- bool = this.isEventDefGenerallyEditable(eventDef);
- }
- }
- }
- return bool;
- };
- /***/ }),
- /* 55 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- // references to pre-monkeypatched methods
- var origMethods = {
- getFallbackStylingObjs: fullcalendar_1.EventRenderer.prototype.getFallbackStylingObjs
- };
- fullcalendar_1.EventRenderer.prototype.designatedResource = null; // optionally set by caller. forces @currentResource
- fullcalendar_1.EventRenderer.prototype.currentResource = null; // when set, will affect future rendered segs
- fullcalendar_1.EventRenderer.prototype.beforeFgSegHtml = function (seg) {
- var segResourceId = seg.footprint.componentFootprint.resourceId;
- if (this.designatedResource) {
- this.currentResource = this.designatedResource;
- }
- else if (segResourceId) {
- this.currentResource = queryResourceObject(this, segResourceId);
- }
- else {
- this.currentResource = null;
- }
- };
- fullcalendar_1.EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {
- var objs = origMethods.getFallbackStylingObjs.apply(this, arguments);
- if (this.currentResource) {
- objs.unshift(this.currentResource);
- }
- else {
- var resources = [];
- for (var _i = 0, _a = eventDef.getResourceIds(); _i < _a.length; _i++) {
- var id = _a[_i];
- var resource = queryResourceObject(this, id);
- if (resource) {
- resources.push(resource);
- }
- }
- objs = resources.concat(objs);
- }
- return objs;
- };
- function queryResourceObject(eventRenderer, id) {
- return eventRenderer.view.calendar.resourceManager.getResourceById(id);
- }
- /***/ }),
- /* 56 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceComponentFootprint_1 = __webpack_require__(6);
- // references to pre-monkeypatched methods
- var origMethods = {
- computeSelectionFootprint: fullcalendar_1.DateSelecting.prototype.computeSelectionFootprint
- };
- fullcalendar_1.DateSelecting.prototype.computeSelectionFootprint = function (startFootprint, endFootprint) {
- if (startFootprint.resourceId && endFootprint.resourceId &&
- (startFootprint.resourceId !== endFootprint.resourceId) &&
- !this.component.allowCrossResource) {
- return null; // explicity disallow selection across two different resources
- }
- else {
- var footprint = origMethods.computeSelectionFootprint.apply(this, arguments);
- if (startFootprint.resourceId) {
- // create a new footprint with resourceId data
- footprint = new ResourceComponentFootprint_1.default(footprint.unzonedRange, footprint.isAllDay, startFootprint.resourceId);
- }
- return footprint;
- }
- };
- /***/ }),
- /* 57 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- // references to pre-monkeypatched methods
- var origMethods = {
- computeEventDropMutation: fullcalendar_1.EventDragging.prototype.computeEventDropMutation
- };
- /*
- monkeypatching can cause an event to seem draggable if the resource is editable but the
- start/end dates are NOT. make sure to account for this.
- */
- fullcalendar_1.EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {
- var isDatesDraggable = this.component.isEventDefStartEditable(eventDef);
- if (startFootprint.resourceId && endFootprint.resourceId &&
- (startFootprint.resourceId !== endFootprint.resourceId) &&
- this.component.isEventDefResourceEditable(eventDef)) {
- var mutation = new fullcalendar_1.EventDefMutation();
- mutation.oldResourceId = startFootprint.resourceId;
- mutation.newResourceId = endFootprint.resourceId;
- if (isDatesDraggable) {
- mutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));
- }
- return mutation;
- }
- else if (isDatesDraggable) {
- return origMethods.computeEventDropMutation.apply(this, arguments);
- }
- };
- /***/ }),
- /* 58 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- // references to pre-monkeypatched methods
- var origMethods = {
- computeEventStartResizeMutation: fullcalendar_1.EventResizing.prototype.computeEventStartResizeMutation,
- computeEventEndResizeMutation: fullcalendar_1.EventResizing.prototype.computeEventEndResizeMutation
- };
- fullcalendar_1.EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {
- if (startFootprint.resourceId && endFootprint.resourceId &&
- (startFootprint.resourceId !== endFootprint.resourceId) &&
- !this.component.allowCrossResource) {
- return null; // explicity disallow resizing across two different resources
- }
- else {
- return origMethods.computeEventStartResizeMutation.apply(this, arguments);
- }
- };
- fullcalendar_1.EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {
- if (startFootprint.resourceId && endFootprint.resourceId &&
- (startFootprint.resourceId !== endFootprint.resourceId) &&
- !this.component.allowCrossResource) {
- return null; // explicity disallow resizing across two different resources
- }
- else {
- return origMethods.computeEventEndResizeMutation.apply(this, arguments);
- }
- };
- /***/ }),
- /* 59 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- // references to pre-monkeypatched methods
- var origMethods = {
- computeExternalDrop: fullcalendar_1.ExternalDropping.prototype.computeExternalDrop
- };
- fullcalendar_1.ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {
- var eventDef = origMethods.computeExternalDrop.apply(this, arguments);
- if (componentFootprint.resourceId) {
- eventDef.addResourceId(componentFootprint.resourceId);
- }
- return eventDef;
- };
- /***/ }),
- /* 60 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- // defineStandardProps won't work :(
- // TODO: find a better way
- fullcalendar_1.EventSource.prototype.standardPropMap.resourceEditable = true; // automatically transfer
- /***/ }),
- /* 61 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var $ = __webpack_require__(2);
- var fullcalendar_1 = __webpack_require__(0);
- var Resource_1 = __webpack_require__(19);
- var origMethods = {
- applyMiscProps: fullcalendar_1.EventDef.prototype.applyMiscProps,
- clone: fullcalendar_1.EventDef.prototype.clone,
- toLegacy: fullcalendar_1.EventDef.prototype.toLegacy
- };
- fullcalendar_1.EventDef.defineStandardProps({
- resourceEditable: true // automatically transfer
- });
- /*
- new class members
- */
- fullcalendar_1.EventDef.prototype.resourceIds = null;
- fullcalendar_1.EventDef.prototype.resourceEditable = null; // `null` is unspecified state
- /*
- NOTE: we can use defineStandardProps/applyManualStandardProps (example below)
- once we do away with the deprecated eventResourceField.
- */
- fullcalendar_1.EventDef.prototype.applyMiscProps = function (rawProps) {
- rawProps = $.extend({}, rawProps); // clone, because of delete
- this.resourceIds = Resource_1.default.extractIds(rawProps, this.source.calendar);
- delete rawProps.resourceId;
- delete rawProps.resourceIds;
- origMethods.applyMiscProps.apply(this, arguments);
- };
- /*
- EventDef.defineStandardProps({
- resourceId: false # manually handle
- resourceIds: false # manually handle
- });
- EventDef.prototype.applyManualStandardProps = function(rawProps) {
- origApplyManualStandardProps.apply(this, arguments);
- this.resourceIds = Resource.extractIds(rawProps, this.source.calendar);
- };
- */
- /*
- resourceId should already be normalized
- */
- fullcalendar_1.EventDef.prototype.hasResourceId = function (resourceId) {
- return $.inArray(resourceId, this.resourceIds) !== -1;
- };
- /*
- resourceId should already be normalized
- */
- fullcalendar_1.EventDef.prototype.removeResourceId = function (resourceId) {
- fullcalendar_1.removeExact(this.resourceIds, resourceId);
- };
- /*
- resourceId should already be normalized
- */
- fullcalendar_1.EventDef.prototype.addResourceId = function (resourceId) {
- if (!this.hasResourceId(resourceId)) {
- this.resourceIds.push(resourceId);
- }
- };
- fullcalendar_1.EventDef.prototype.getResourceIds = function () {
- if (this.resourceIds) {
- return this.resourceIds.slice(); // clone
- }
- else {
- return [];
- }
- };
- fullcalendar_1.EventDef.prototype.clone = function () {
- var def = origMethods.clone.apply(this, arguments);
- def.resourceIds = this.getResourceIds();
- return def;
- };
- fullcalendar_1.EventDef.prototype.toLegacy = function () {
- var obj = origMethods.toLegacy.apply(this, arguments);
- var resourceIds = this.getResourceIds();
- obj.resourceId =
- resourceIds.length === 1 ?
- resourceIds[0] :
- null;
- obj.resourceIds =
- resourceIds.length > 1 ?
- resourceIds :
- null;
- if (this.resourceEditable != null) { // allows an unspecified state
- obj.resourceEditable = this.resourceEditable;
- }
- return obj;
- };
- /***/ }),
- /* 62 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var oldMutateSingle = fullcalendar_1.EventDefMutation.prototype.mutateSingle;
- // either both will be set, or neither will be set
- fullcalendar_1.EventDefMutation.prototype.oldResourceId = null;
- fullcalendar_1.EventDefMutation.prototype.newResourceId = null;
- fullcalendar_1.EventDefMutation.prototype.mutateSingle = function (eventDef) {
- var undo = oldMutateSingle.apply(this, arguments);
- var savedResourceIds = null;
- if (this.oldResourceId && eventDef.hasResourceId(this.oldResourceId)) {
- savedResourceIds = eventDef.getResourceIds();
- eventDef.removeResourceId(this.oldResourceId);
- eventDef.addResourceId(this.newResourceId);
- }
- return function () {
- undo();
- if (savedResourceIds) {
- eventDef.resourceIds = savedResourceIds;
- }
- };
- };
- /***/ }),
- /* 63 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var TimelineView_1 = __webpack_require__(14);
- fullcalendar_1.defineView('timeline', {
- class: TimelineView_1.default,
- defaults: {
- eventResizableFromStart: true
- }
- });
- fullcalendar_1.defineView('timelineDay', {
- type: 'timeline',
- duration: { days: 1 }
- });
- fullcalendar_1.defineView('timelineWeek', {
- type: 'timeline',
- duration: { weeks: 1 }
- });
- fullcalendar_1.defineView('timelineMonth', {
- type: 'timeline',
- duration: { months: 1 }
- });
- fullcalendar_1.defineView('timelineYear', {
- type: 'timeline',
- duration: { years: 1 }
- });
- /***/ }),
- /* 64 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceTimelineView_1 = __webpack_require__(30);
- fullcalendar_1.getViewConfig('timeline').resourceClass = ResourceTimelineView_1.default;
- fullcalendar_1.Calendar.defaults.resourcesInitiallyExpanded = true;
- /***/ }),
- /* 65 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceBasicView_1 = __webpack_require__(22);
- var ResourceMonthView_1 = __webpack_require__(23);
- // TODO: make more DRY (with agenda's config too)
- fullcalendar_1.getViewConfig('basic').queryResourceClass = function (viewSpec) {
- var explicitGrouping = viewSpec.options.groupByResource ||
- viewSpec.options.groupByDateAndResource;
- var showsResources = false;
- if (explicitGrouping != null) {
- showsResources = explicitGrouping;
- }
- else if (viewSpec.duration) {
- showsResources = viewSpec.duration.as('days') === 1;
- }
- if (showsResources) {
- return ResourceBasicView_1.default;
- }
- };
- fullcalendar_1.getViewConfig('month').queryResourceClass = function (viewSpec) {
- if (viewSpec.options.groupByResource ||
- viewSpec.options.groupByDateAndResource) {
- return ResourceMonthView_1.default;
- }
- };
- /***/ }),
- /* 66 */
- /***/ (function(module, exports, __webpack_require__) {
- Object.defineProperty(exports, "__esModule", { value: true });
- var fullcalendar_1 = __webpack_require__(0);
- var ResourceAgendaView_1 = __webpack_require__(20);
- /*
- TODO: make more DRY, with basic's config
- */
- fullcalendar_1.getViewConfig('agenda').queryResourceClass = function (viewSpec) {
- var explicitGrouping = viewSpec.options.groupByResource ||
- viewSpec.options.groupByDateAndResource;
- var showsResources = false;
- if (explicitGrouping != null) {
- showsResources = explicitGrouping;
- }
- else if (viewSpec.duration) {
- showsResources = viewSpec.duration.as('days') === 1;
- }
- if (showsResources) {
- return ResourceAgendaView_1.default;
- }
- };
- /***/ }),
- /* 67 */
- /***/ (function(module, exports) {
- Object.defineProperty(exports, "__esModule", { value: true });
- /***/ }),
- /* 68 */
- /***/ (function(module, exports) {
- Object.defineProperty(exports, "__esModule", { value: true });
- /***/ })
- /******/ ]);
- });
|