| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965 |
- AUI.add('aui-scheduler-base', function(A) {
- var Lang = A.Lang,
- isString = Lang.isString,
- isArray = Lang.isArray,
- isDate = Lang.isDate,
- isFunction = Lang.isFunction,
- isNumber = Lang.isNumber,
- isObject = Lang.isObject,
-
- isScheduler = function(val) {
- return (val instanceof A.Scheduler);
- },
-
- isSchedulerView = function(val) {
- return (val instanceof A.SchedulerView);
- },
-
- isSchedulerEvent = function(val) {
- return (val instanceof A.SchedulerEvent);
- },
-
- isSchedulerCalendar = function(val) {
- return (A.SchedulerCalendar && (val instanceof A.SchedulerCalendar));
- },
-
- DateMath = A.DataType.DateMath,
- WidgetStdMod = A.WidgetStdMod,
-
- DOT = '.',
- EMPTY_STR = '',
- SPACE = ' ',
-
- SCHEDULER_BASE = 'scheduler-base',
- DATA_VIEW_NAME = 'data-view-name',
-
- ACTIVE_VIEW = 'activeView',
- CLEARFIX = 'clearfix',
- CONTROLS = 'controls',
- CONTROLS_NODE = 'controlsNode',
- CURRENT = 'current',
- CURRENT_DATE = 'currentDate',
- CURRENT_DATE_NODE = 'currentDateNode',
- DATE = 'date',
- END_DATE = 'endDate',
- EVENT_CLASS = 'eventClass',
- EVENT_RECORDER = 'eventRecorder',
- EVENTS = 'events',
- HD = 'hd',
- HEADER = 'header',
- HEADER_NODE = 'headerNode',
- HELPER = 'helper',
- ICON = 'icon',
- ICON_NEXT_NODE = 'iconNextNode',
- ICON_PREV_NODE = 'iconPrevNode',
- LOCALE = 'locale',
- NAME = 'name',
- NAV = 'nav',
- NAV_NODE = 'navNode',
- NAVIGATION_DATE_FORMATTER = 'navigationDateFormatter',
- NEXT = 'next',
- NEXT_DATE = 'nextDate',
- PREV = 'prev',
- PREV_DATE = 'prevDate',
- RENDERED = 'rendered',
- SCHEDULER = 'scheduler',
- START_DATE = 'startDate',
- STRINGS = 'strings',
- TODAY = 'today',
- TODAY_NODE = 'todayNode',
- TRIGGER_NODE = 'triggerNode',
- VIEW = 'view',
- VIEW_STACK = 'viewStack',
- VIEWS = 'views',
- VIEWS_NODE = 'viewsNode',
-
- getCN = A.getClassName,
-
- CSS_HELPER_CLEARFIX = getCN(HELPER, CLEARFIX),
- CSS_ICON = getCN(ICON),
- CSS_SCHEDULER_CONTROLS = getCN(SCHEDULER_BASE, CONTROLS),
- CSS_SCHEDULER_CURRENT_DATE = getCN(SCHEDULER_BASE, CURRENT, DATE),
- CSS_SCHEDULER_HD = getCN(SCHEDULER_BASE, HD),
- CSS_SCHEDULER_ICON_NEXT = getCN(SCHEDULER_BASE, ICON, NEXT),
- CSS_SCHEDULER_ICON_PREV = getCN(SCHEDULER_BASE, ICON, PREV),
- CSS_SCHEDULER_NAV = getCN(SCHEDULER_BASE, NAV),
- CSS_SCHEDULER_TODAY = getCN(SCHEDULER_BASE, TODAY),
- CSS_SCHEDULER_VIEW = getCN(SCHEDULER_BASE, VIEW),
- CSS_SCHEDULER_VIEW_ = getCN(SCHEDULER_BASE, VIEW, EMPTY_STR),
- CSS_SCHEDULER_VIEWS = getCN(SCHEDULER_BASE, VIEWS),
-
- TPL_SCHEDULER_CONTROLS = '<div class="'+CSS_SCHEDULER_CONTROLS+'"></div>',
- TPL_SCHEDULER_CURRENT_DATE = '<div class="'+CSS_SCHEDULER_CURRENT_DATE+'"></div>',
- TPL_SCHEDULER_HD = '<div class="'+CSS_SCHEDULER_HD+'"></div>',
- TPL_SCHEDULER_ICON_NEXT = '<a href="#" class="'+[ CSS_ICON, CSS_SCHEDULER_ICON_NEXT ].join(SPACE)+'">Next</a>',
- TPL_SCHEDULER_ICON_PREV = '<a href="#" class="'+[ CSS_ICON, CSS_SCHEDULER_ICON_PREV ].join(SPACE)+'">Prev</a>',
- TPL_SCHEDULER_NAV = '<div class="'+CSS_SCHEDULER_NAV+'"></div>',
- TPL_SCHEDULER_TODAY = '<a href="#" class="'+CSS_SCHEDULER_TODAY+'">{today}</a>',
- TPL_SCHEDULER_VIEW = '<a href="#" class="'+[ CSS_SCHEDULER_VIEW, CSS_SCHEDULER_VIEW_ ].join(SPACE)+'{name}" data-view-name="{name}">{label}</a>',
- TPL_SCHEDULER_VIEWS = '<div class="'+CSS_SCHEDULER_VIEWS+'"></div>';
-
- var SchedulerEventSupport = function() {};
-
- SchedulerEventSupport.ATTRS = {
- eventClass: {
- valueFn: function() {
- return A.SchedulerEvent;
- }
- },
-
- events: {
- value: [],
- setter: '_setEvents',
- validator: isArray
- }
- };
-
- A.mix(SchedulerEventSupport.prototype, {
- addEvent: function(evt) {
- var instance = this;
- var events = instance.get(EVENTS);
-
- if (A.Array.indexOf(events, evt) > -1) {
- A.Array.removeItem(events, evt);
- }
-
- events.push(evt);
- instance.set(EVENTS, events);
- },
-
- addEvents: function(events) {
- var instance = this;
-
- A.Array.each(
- instance._normalizeEvents(events),
- A.bind(instance.addEvent, instance)
- );
- },
-
- eachEvent: function(fn) {
- var instance = this;
- var events = instance.get(EVENTS);
-
- A.Array.each(events, fn, instance);
- },
-
- removeEvent: function(evt) {
- var instance = this;
- var events = instance.get(EVENTS);
-
- if (events.length) {
- A.Array.removeItem(events, evt);
-
- instance.set(EVENTS, events);
- }
- },
-
- removeEvents: function(events) {
- var instance = this;
-
- A.Array.each(
- instance._normalizeEvents(events),
- A.bind(instance.removeEvent, instance)
- );
- },
-
- _normalizeEvents: function(events) {
- var instance = this;
- var output = [];
-
- events = A.Array(events);
-
- A.Array.each(events, function(evt) {
- if (isSchedulerEvent(evt)) {
- output.push(evt);
- }
- else if (isSchedulerCalendar(evt)) {
- if (isScheduler(instance)) {
- evt.set(SCHEDULER, instance);
- }
-
- // get events from the calendar
- output = output.concat(
- instance._normalizeEvents(evt.get(EVENTS))
- );
- }
- else {
- evt = new (instance.get(EVENT_CLASS))(evt);
-
- output.push(evt);
- }
-
- if (isScheduler(instance)) {
- evt.set(SCHEDULER, instance);
- evt.set(EVENT_CLASS, instance.get(EVENT_CLASS));
- }
- });
-
- return output;
- },
-
- _setEvents: function(val) {
- var instance = this;
-
- return instance._normalizeEvents(val);
- }
- });
-
- A.SchedulerEventSupport = SchedulerEventSupport;
-
- var SchedulerBase = A.Component.create({
- NAME: SCHEDULER_BASE,
-
- ATTRS: {
- activeView: {
- validator: isSchedulerView
- },
-
- eventRecorder: {
- setter: '_setEventRecorder'
- },
-
- strings: {
- value: {
- day: 'Day',
- month: 'Month',
- today: 'Today',
- week: 'Week',
- year: 'Year'
- }
- },
-
- /**
- * The function to format the navigation header date.
- *
- * @attribute navigationDateFormatter
- * @default %A - %d %b %Y
- * @type Function
- */
- navigationDateFormatter: {
- value: function(date) {
- var instance = this;
-
- return A.DataType.Date.format(
- date,
- {
- format: '%B %d, %Y',
- locale: instance.get(LOCALE)
- }
- );
- },
- validator: isFunction
- },
-
- views: {
- setter: '_setViews',
- value: []
- },
-
- currentDate: {
- valueFn: function() {
- return new Date();
- },
- validator: isDate
- },
-
- /**
- * First day of the week: Sunday is 0, Monday is 1.
- *
- * @attribute firstDayOfWeek
- * @default 0
- * @type Number
- */
- firstDayOfWeek: {
- value: 0,
- validator: isNumber
- },
-
- /*
- * HTML_PARSER attributes
- */
- controlsNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_CONTROLS);
- }
- },
-
- currentDateNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_CURRENT_DATE);
- }
- },
-
- headerNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_HD);
- }
- },
-
- iconNextNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_ICON_NEXT);
- }
- },
-
- iconPrevNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_ICON_PREV);
- }
- },
-
- navNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_NAV);
- }
- },
-
- todayNode: {
- valueFn: function() {
- return A.Node.create(
- this._processTemplate(TPL_SCHEDULER_TODAY)
- );
- }
- },
-
- viewsNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_VIEWS);
- }
- }
- },
-
- HTML_PARSER: {
- controlsNode: DOT+CSS_SCHEDULER_CONTROLS,
- currentDateNode: DOT+CSS_SCHEDULER_CURRENT_DATE,
- headerNode: DOT+CSS_SCHEDULER_HD,
- iconNextNode: DOT+CSS_SCHEDULER_ICON_NEXT,
- iconPrevNode: DOT+CSS_SCHEDULER_ICON_PREV,
- navNode: DOT+CSS_SCHEDULER_NAV,
- todayNode: DOT+CSS_SCHEDULER_TODAY,
- viewsNode: DOT+CSS_SCHEDULER_VIEWS
- },
-
- UI_ATTRS: [CURRENT_DATE],
-
- AUGMENTS: [A.SchedulerEventSupport, A.WidgetStdMod],
-
- prototype: {
- viewStack: null,
-
- initializer: function() {
- var instance = this;
-
- instance[VIEW_STACK] = {};
-
- instance[CONTROLS_NODE] = instance.get(CONTROLS_NODE);
- instance[CURRENT_DATE_NODE] = instance.get(CURRENT_DATE_NODE);
- instance[HEADER] = instance.get(HEADER_NODE);
- instance[ICON_NEXT_NODE] = instance.get(ICON_NEXT_NODE);
- instance[ICON_PREV_NODE] = instance.get(ICON_PREV_NODE);
- instance[NAV_NODE] = instance.get(NAV_NODE);
- instance[TODAY_NODE] = instance.get(TODAY_NODE);
- instance[VIEWS_NODE] = instance.get(VIEWS_NODE);
-
- instance.after({
- activeViewChange: instance._afterActiveViewChange,
- render: instance._afterRender
- });
- },
-
- bindUI: function() {
- var instance = this;
-
- instance._bindDelegate();
- },
-
- syncUI: function() {
- var instance = this;
-
- instance.syncStdContent();
- },
-
- flushEvents: function() {
- var instance = this;
-
- A.Array.each(instance.get(EVENTS), function(evt) {
- evt.eachRepeatedEvent(function(repeatedEvt) {
- delete repeatedEvt._filtered;
- });
-
- delete evt._filtered;
- });
- },
-
- getEventsByDay: function(date, includeOverlap) {
- var instance = this;
-
- date = DateMath.safeClearTime(date);
-
- return instance._getEvents(date, function(evt) {
- return DateMath.compare(evt.getClearStartDate(), date) ||
- (includeOverlap && DateMath.compare(evt.getClearEndDate(), date));
- });
- },
-
- getIntersectEvents: function(date) {
- var instance = this;
-
- date = DateMath.safeClearTime(date);
-
- return instance._getEvents(date, function(evt) {
- var startDate = evt.getClearStartDate();
- var endDate = evt.getClearEndDate();
-
- return (DateMath.compare(date, startDate) ||
- DateMath.compare(date, endDate) ||
- DateMath.between(date, startDate, endDate));
- });
- },
-
- sortEventsByDateAsc: function(events) {
- var instance = this;
-
- // sort events by start date and duration
- events.sort(function(evt1, evt2) {
- var endDate1 = evt1.get(END_DATE);
- var endDate2 = evt2.get(END_DATE);
- var startDate1 = evt1.get(START_DATE);
- var startDate2 = evt2.get(START_DATE);
-
- if (DateMath.after(startDate1, startDate2) ||
- (DateMath.compare(startDate1, startDate2) && DateMath.before(endDate1, endDate2))) {
-
- return 1;
- }
- else {
- return -1;
- }
- });
- },
-
- getViewByName: function(name) {
- var instance = this;
-
- return instance[VIEW_STACK][name];
- },
-
- getStrings: function() {
- var instance = this;
-
- return instance.get(STRINGS);
- },
-
- getString: function(key) {
- var instance = this;
-
- return instance.getStrings()[key];
- },
-
- renderView: function(view) {
- var instance = this;
-
- if (view) {
- view.show();
-
- if (!view.get(RENDERED)) {
- if (!instance.bodyNode) {
- instance.setStdModContent(WidgetStdMod.BODY, EMPTY_STR);
- }
-
- view.render(instance.bodyNode);
- }
- }
- },
-
- plotViewEvents: function(view) {
- var instance = this;
-
- view.plotEvents(
- instance.get(EVENTS)
- );
- },
-
- syncEventsUI: function() {
- var instance = this;
-
- instance.plotViewEvents(instance.get(ACTIVE_VIEW));
- },
-
- _afterActiveViewChange: function(event) {
- var instance = this;
-
- if (instance.get(RENDERED)) {
- var activeView = event.newVal;
- var lastActiveView = event.prevVal;
-
- if (lastActiveView) {
- lastActiveView.hide();
- }
-
- instance.renderView(activeView);
-
- var eventRecorder = instance.get(EVENT_RECORDER);
-
- if (eventRecorder) {
- eventRecorder.hideOverlay();
- }
- }
- },
-
- _afterRender: function(event) {
- var instance = this;
-
- instance.renderView(
- instance.get(ACTIVE_VIEW)
- );
- },
-
- _bindDelegate: function() {
- var instance = this;
-
- instance[VIEWS_NODE].delegate('click', instance._onClickViewTrigger, DOT+CSS_SCHEDULER_VIEW, instance);
- instance[CONTROLS_NODE].delegate('click', instance._onClickPrevIcon, DOT+CSS_SCHEDULER_ICON_PREV, instance);
- instance[CONTROLS_NODE].delegate('click', instance._onClickNextIcon, DOT+CSS_SCHEDULER_ICON_NEXT, instance);
- instance[CONTROLS_NODE].delegate('click', instance._onClickToday, DOT+CSS_SCHEDULER_TODAY, instance);
- },
-
- _createViewTriggerNode: function(view) {
- var instance = this;
-
- if (!view.get(TRIGGER_NODE)) {
- var name = view.get(NAME);
-
- view.set(
- TRIGGER_NODE,
- A.Node.create(
- Lang.sub(TPL_SCHEDULER_VIEW, {
- name: name,
- label: (instance.getString(name) || name)
- })
- )
- );
- }
-
- return view.get(TRIGGER_NODE);
- },
-
- _getEvents: function(date, filterFn) {
- var instance = this;
- var events = instance.get(EVENTS);
- var results = [];
-
- A.Array.each(events, function(evt) {
- if (filterFn.apply(instance, [evt])) {
- results.push(evt);
- }
- else if (evt.isRepeatableDate(date)) {
- var repeatedEvt = evt.repeatByDate(date);
-
- results.push(repeatedEvt);
- }
- });
-
- instance.sortEventsByDateAsc(results);
-
- return results;
- },
-
- _onClickToday: function(event) {
- var instance = this;
-
- instance.set(
- CURRENT_DATE,
- instance.get(ACTIVE_VIEW).getToday()
- );
-
- event.preventDefault();
- },
-
- _onClickNextIcon: function(event) {
- var instance = this;
-
- instance.set(
- CURRENT_DATE,
- instance.get(ACTIVE_VIEW).get(NEXT_DATE)
- );
-
- event.preventDefault();
- },
-
- _onClickPrevIcon: function(event) {
- var instance = this;
-
- instance.set(
- CURRENT_DATE,
- instance.get(ACTIVE_VIEW).get(PREV_DATE)
- );
-
- event.preventDefault();
- },
-
- _onClickViewTrigger: function(event) {
- var instance = this;
- var viewName = event.currentTarget.attr(DATA_VIEW_NAME);
-
- instance.set(ACTIVE_VIEW, instance.getViewByName(viewName));
-
- event.preventDefault();
- },
-
- _processTemplate: function(tpl) {
- var instance = this;
-
- return Lang.sub(tpl, instance.getStrings());
- },
-
- _setEventRecorder: function(val) {
- var instance = this;
-
- if (val) {
- val.set(SCHEDULER, instance);
- val.set(EVENT_CLASS, instance.get(EVENT_CLASS));
- }
- },
-
- _setViews: function(val) {
- var instance = this;
- var views = [];
-
- A.Array.each(val, function(view) {
- if (isSchedulerView(view) && !view.get(RENDERED)) {
- view.set(SCHEDULER, instance);
- view.set(EVENT_CLASS, instance.get(EVENT_CLASS));
-
- views.push(view);
-
- instance[VIEW_STACK][view.get(NAME)] = view;
- }
- });
-
- if (!instance.get(ACTIVE_VIEW)) {
- instance.set(ACTIVE_VIEW, val[0]);
- }
-
- return views;
- },
-
- /**
- * Sync SchedulerBase StdContent.
- *
- * @method syncStdContent
- * @protected
- */
- syncStdContent: function() {
- var instance = this;
- var views = instance.get(VIEWS);
-
- instance[NAV_NODE].append(instance[ICON_PREV_NODE]);
- instance[NAV_NODE].append(instance[ICON_NEXT_NODE]);
-
- instance[CONTROLS_NODE].append(instance[TODAY_NODE]);
- instance[CONTROLS_NODE].append(instance[NAV_NODE]);
- instance[CONTROLS_NODE].append(instance[CURRENT_DATE_NODE]);
-
- A.Array.each(views, function(view) {
- instance[VIEWS_NODE].append( instance._createViewTriggerNode(view) );
- });
-
- instance[HEADER].append(instance[CONTROLS_NODE]);
- instance[HEADER].append(instance[VIEWS_NODE]);
- instance[HEADER].addClass(CSS_HELPER_CLEARFIX);
-
- instance.setStdModContent(WidgetStdMod.HEADER, instance[HEADER].getDOM());
- },
-
- _uiSetCurrentDate: function(val) {
- var instance = this;
-
- var formatter = instance.get(NAVIGATION_DATE_FORMATTER);
- var navigationTitle = formatter.call(instance, val);
-
- if (instance.get(RENDERED)) {
- var activeView = instance.get(ACTIVE_VIEW);
-
- if (activeView) {
- activeView._uiSetCurrentDate(val);
-
- formatter = activeView.get(NAVIGATION_DATE_FORMATTER);
- navigationTitle = formatter.call(activeView, val);
- }
-
- instance[CURRENT_DATE_NODE].html(navigationTitle);
-
- instance.syncEventsUI();
- }
- }
- }
- });
-
- A.Scheduler = SchedulerBase;
-
- }, '@VERSION@' ,{skinnable:true, requires:['aui-scheduler-view','datasource']});
- AUI.add('aui-scheduler-view', function(A) {
- var Lang = A.Lang,
- isBoolean = Lang.isBoolean,
- isFunction = Lang.isFunction,
- isNumber = Lang.isNumber,
- isObject = Lang.isObject,
- isString = Lang.isString,
-
- toNumber = function(v) {
- return parseFloat(v) || 0;
- },
-
- roundToNearestMultiple = function(n, multiple) {
- return Math.round(n/multiple)*multiple;
- },
-
- DateMath = A.DataType.DateMath,
- WidgetStdMod = A.WidgetStdMod,
-
- WEEK_LENGTH = DateMath.WEEK_LENGTH,
-
- SCHEDULER_VIEW = 'scheduler-view',
- SCHEDULER_VIEW_DAY = 'scheduler-view-day',
- SCHEDULER_VIEW_MONTH = 'scheduler-view-month',
- SCHEDULER_VIEW_TABLE = 'scheduler-view-table',
- SCHEDULER_VIEW_WEEK = 'scheduler-view-week',
-
- ACTIVE_COLUMN = 'activeColumn',
- ACTIVE_VIEW = 'activeView',
- ALL_DAY = 'allDay',
- BODY = 'body',
- BOUNDING_BOX = 'boundingBox',
- CANCEL = 'cancel',
- CLOSE = 'close',
- COL = 'col',
- COL_DAYS_NODE = 'colDaysNode',
- COL_HEADER_DAYS_NODE = 'colHeaderDaysNode',
- COLBLANK = 'colblank',
- COLDATA = 'coldata',
- COLDAY = 'colday',
- COLGRID = 'colgrid',
- COLSPAN = 'colspan',
- COLTIME = 'coltime',
- COLUMN_DATA = 'columnData',
- COLUMN_DAY_HEADER = 'columnDayHeader',
- COLUMN_SHIMS = 'columnShims',
- COLUMN_TABLE_GRID = 'columnTableGrid',
- COLUMN_TIME = 'columnTime',
- CONTAINER = 'container',
- CONTENT = 'content',
- CREATION_END_DATE = 'creationEndDate',
- CREATION_START_DATE = 'creationStartDate',
- CURRENT_DATE = 'currentDate',
- DATA = 'data',
- DAY = 'day',
- DAYS = 'days',
- DD = 'dd',
- DELEGATE = 'delegate',
- DELEGATE_CONFIG = 'delegateConfig',
- DISABLED = 'disabled',
- DISPLAY_DAYS_INTERVAL = 'displayDaysInterval',
- DISPLAY_ROWS = 'displayRows',
- DIV = 'div',
- DIVISION = 'division',
- DOTTED = 'dotted',
- DOWN = 'down',
- DRAG_NODE = 'dragNode',
- DRAGGING = 'dragging',
- DRAGGING_EVENT = 'draggingEvent',
- DURATION = 'duration',
- END_DATE = 'endDate',
- EVENT = 'event',
- EVENT_CLASS = 'eventClass',
- EVENT_PLACEHOLDER = 'eventPlaceholder',
- EVENT_RECORDER = 'eventRecorder',
- EVENT_WIDTH = 'eventWidth',
- EVENTS = 'events',
- EVENTS_OVERLAY = 'eventsOverlay',
- EVENTS_OVERLAY_NODE = 'eventsOverlayNode',
- FILTER_FN = 'filterFn',
- FIRST = 'first',
- FIRST_DAY_OF_WEEK = 'firstDayOfWeek',
- FIXED_HEIGHT = 'fixedHeight',
- GRID = 'grid',
- GRID_CONTAINER = 'gridContainer',
- GRIP = 'grip',
- HD = 'hd',
- HEADER = 'header',
- HEADER_DATE_FORMATTER = 'headerDateFormatter',
- HEADER_TABLE_NODE = 'headerTableNode',
- HEADER_VIEW = 'headerView',
- HEADER_VIEW_CONFIG = 'headerViewConfig',
- HEADER_VIEW_LABEL_NODE = 'headerViewLabelNode',
- HEIGHT = 'height',
- HORIZONTAL = 'horizontal',
- HOST = 'host',
- HOUR_HEIGHT = 'hourHeight',
- ICON = 'icon',
- ICON = 'icon',
- ISO_TIME = 'isoTime',
- LABEL = 'label',
- LASSO = 'lasso',
- LEFT = 'left',
- LOCALE = 'locale',
- MARGIN_RIGHT = 'marginRight',
- MARKER = 'marker',
- MARKERCELL = 'markercell',
- MARKERCELLS_NODE = 'markercellsNode',
- MARKERS = 'markers',
- MARKERS_NODE = 'markersNode',
- MONTH = 'month',
- MONTH_CONTAINER_NODE = 'monthContainerNode',
- MONTH_ROW_CONTAINER = 'monthRowContainer',
- MONTH_ROWS = 'monthRows',
- MORE = 'more',
- MOUSEDOWN = 'mousedown',
- MOUSEMOVE = 'mousemove',
- MOUSEUP = 'mouseup',
- NEXT = 'next',
- NODE = 'node',
- NOMONTH = 'nomonth',
- NOSCROLL = 'noscroll',
- OFFSET_HEIGHT = 'offsetHeight',
- OFFSET_WIDTH = 'offsetWidth',
- OVERLAY = 'overlay',
- PAD = 'pad',
- PADDING_NODE = 'paddingNode',
- PARENT_EVENT = 'parentEvent',
- PARENT_NODE = 'parentNode',
- PROXY = 'proxy',
- PROXY_NODE = 'proxyNode',
- PX = 'px',
- REGION = 'region',
- RENDERED = 'rendered',
- REPEATED = 'repeated',
- RESIZER = 'resizer',
- RESIZER_NODE = 'resizerNode',
- RESIZING = 'resizing',
- RIGHT = 'right',
- ROW = 'row',
- ROWS_CONTAINER_NODE = 'rowsContainerNode',
- SAVE = 'save',
- SCHEDULER = 'scheduler',
- SCHEDULER_EVENT = 'scheduler-event',
- SCROLLABLE = 'scrollable',
- SHIM = 'shim',
- SHOW_MORE = 'showMore',
- START_DATE = 'startDate',
- START_XY = 'startXY',
- STRINGS = 'strings',
- TABLE = 'table',
- TABLE_GRID_NODE = 'tableGridNode',
- TABLE_NODE = 'tableNode',
- TABLE_ROW_CONTAINER = 'tableRowContainer',
- TABLE_ROWS = 'tableRows',
- TBODY = 'tbody',
- TD = 'td',
- TIME = 'time',
- TIMES_NODE = 'timesNode',
- TITLE = 'title',
- TL = 'tl',
- TODAY = 'today',
- TOP = 'top',
- TR = 'tr',
- VIEW = 'view',
- VISIBLE = 'visible',
- WEEK = 'week',
- WIDTH = 'width',
-
- DATA_COLNUMBER = 'data-colnumber',
-
- ANCHOR = 'a',
- COMMA = ',',
- DASH = '-',
- DOT = '.',
- EMPTY_STR = '',
- MDASH = '—',
- PERCENT = '%',
- SPACE = ' ',
-
- getCN = A.getClassName,
-
- CSS_SCHEDULER_VIEW_NOSCROLL = getCN(SCHEDULER_VIEW, NOSCROLL),
- CSS_SCHEDULER_VIEW_SCROLLABLE = getCN(SCHEDULER_VIEW, SCROLLABLE);
-
- var SchedulerView = A.Component.create({
- NAME: SCHEDULER_VIEW,
-
- AUGMENTS: [A.WidgetStdMod],
-
- ATTRS: {
- bodyContent: {
- value: EMPTY_STR
- },
-
- eventClass: {
- valueFn: function() {
- return A.SchedulerEvent;
- }
- },
-
- filterFn: {
- validator: isFunction,
- value: function(evt) { return true; }
- },
-
- height: {
- value: 600
- },
-
- isoTime: {
- value: false,
- validator: isBoolean
- },
-
- name: {
- value: EMPTY_STR,
- validator: isString
- },
-
- /**
- * The function to format the navigation header date.
- *
- * @attribute navigationDateFormatter
- * @default %A - %d %b %Y
- * @type Function
- */
- navigationDateFormatter: {
- value: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- return A.DataType.Date.format(date, {
- format: '%A, %d %B, %Y',
- locale: scheduler.get(LOCALE)
- });
- },
- validator: isFunction
- },
-
- nextDate: {
- getter: 'getNextDate',
- readOnly: true
- },
-
- prevDate: {
- getter: 'getPrevDate',
- readOnly: true
- },
-
- scheduler: {
- lazyAdd: false,
- setter: '_setScheduler'
- },
-
- scrollable: {
- value: true,
- validator: isBoolean
- },
-
- triggerNode: {
- setter: A.one
- },
-
- visible: {
- value: false
- }
- },
-
- BIND_UI_ATTRS: [SCROLLABLE],
-
- prototype: {
- initializer: function() {
- var instance = this;
-
- instance.after('render', instance._afterRender);
- },
-
- syncUI: function() {
- var instance = this;
-
- instance.syncStdContent();
- },
-
- adjustCurrentDate: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
-
- scheduler.set(CURRENT_DATE, currentDate);
- },
-
- flushViewCache: function() {
- },
-
- getNextDate: function() {
- },
-
- getPrevDate: function() {
- },
-
- getToday: function() {
- return DateMath.clearTime(new Date());
- },
-
- limitDate: function(date, maxDate) {
- var instance = this;
-
- if (DateMath.after(date, maxDate)) {
- date = DateMath.clone(maxDate);
- }
-
- return date;
- },
-
- plotEvents: function() {
- },
-
- syncStdContent: function() {
- },
-
- syncEventUI: function(evt) {
- },
-
- _uiSetCurrentDate: function(val) {
- },
-
- _afterRender: function(event) {
- var instance = this;
-
- instance.adjustCurrentDate();
-
- instance._uiSetScrollable(
- instance.get(SCROLLABLE)
- );
- },
-
- _setScheduler: function(val) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- if (scheduler) {
- instance.removeTarget(scheduler);
- }
-
- if (val) {
- instance.addTarget(val);
-
- val.after('eventsChange', A.bind(instance.flushViewCache, instance));
- }
-
- return val;
- },
-
- _uiSetScrollable: function(val) {
- var instance = this;
- var bodyNode = instance.bodyNode;
-
- if (bodyNode) {
- bodyNode.toggleClass(CSS_SCHEDULER_VIEW_SCROLLABLE, val);
- bodyNode.toggleClass(CSS_SCHEDULER_VIEW_NOSCROLL, !val);
- }
- },
-
- _uiSetVisible: function(val) {
- var instance = this;
-
- SchedulerView.superclass._uiSetVisible.apply(this, arguments);
-
- if (val && instance.get(RENDERED)) {
- instance.adjustCurrentDate();
- }
- }
- }
- });
-
- A.SchedulerView = SchedulerView;
- var sub = Lang.sub;
-
- var getScrollbarWidth = A.cached(function () {
- var doc = A.config.doc,
- testNode = doc.createElement('div'),
- body = doc.getElementsByTagName('body')[0],
- // 0.1 because cached doesn't support falsy refetch values
- width = 0.1;
-
- if (body) {
- testNode.style.cssText = "position:absolute;visibility:hidden;overflow:scroll;width:20px;";
- testNode.appendChild(doc.createElement('p')).style.height = '1px';
- body.insertBefore(testNode, body.firstChild);
- width = testNode.offsetWidth - testNode.clientWidth;
-
- body.removeChild(testNode);
- }
-
- return width;
- }, null, 0.1);
-
- var getNodeListHTMLParser = function(selector, sizeCondition) {
- return function(srcNode) {
- var nodes = srcNode.all(selector);
- return (nodes.size() >= sizeCondition) ? nodes : null;
- };
- },
-
- CSS_ICON = getCN(ICON),
- CSS_ICON_GRIP_DOTTED_HORIZONTAL = getCN(ICON, GRIP, DOTTED, HORIZONTAL),
-
- CSS_SCHEDULER_EVENT = getCN(SCHEDULER_EVENT),
- CSS_SCHEDULER_EVENT_DISABLED = getCN(SCHEDULER_EVENT, DISABLED),
- CSS_SCHEDULER_EVENT_PROXY = getCN(SCHEDULER_EVENT, PROXY),
- CSS_SCHEDULER_TODAY = getCN(SCHEDULER, TODAY),
- CSS_SCHEDULER_TODAY_HD = getCN(SCHEDULER, TODAY, HD),
- CSS_SCHEDULER_VIEW_DAY_COLDATA = getCN(SCHEDULER_VIEW, COLDATA),
- CSS_SCHEDULER_VIEW_DAY_COLGRID = getCN(SCHEDULER_VIEW, COLGRID),
- CSS_SCHEDULER_VIEW_DAY_GRID = getCN(SCHEDULER_VIEW, GRID),
- CSS_SCHEDULER_VIEW_DAY_GRID_CONTAINER = getCN(SCHEDULER_VIEW, GRID, CONTAINER),
- CSS_SCHEDULER_VIEW_DAY_RESIZER_ICON = getCN(SCHEDULER_VIEW, DAY, RESIZER, ICON),
- CSS_SCHEDULER_VIEW_DAY_RESIZER = getCN(SCHEDULER_VIEW, DAY, RESIZER),
- CSS_SCHEDULER_VIEW_DAY_MARKER_DIVISION = getCN(SCHEDULER_VIEW, MARKER, DIVISION),
- CSS_SCHEDULER_VIEW_DAY_MARKERCELL = getCN(SCHEDULER_VIEW, MARKERCELL),
- CSS_SCHEDULER_VIEW_DAY_MARKERS = getCN(SCHEDULER_VIEW, MARKERS),
- CSS_SCHEDULER_VIEW_DAY_TABLE = getCN(SCHEDULER_VIEW, DAY, TABLE),
-
- CSS_SCHEDULER_VIEW_DAY_HEADER_TABLE = getCN(SCHEDULER_VIEW, DAY, HEADER, TABLE),
- CSS_SCHEDULER_VIEW_DAY_HEADER_DAY = getCN(SCHEDULER_VIEW, DAY, HEADER, DAY),
- CSS_SCHEDULER_VIEW_DAY_HEADER_DAY_PAD_RIGHT = getCN(SCHEDULER_VIEW, DAY, HEADER, DAY, PAD, RIGHT),
- CSS_SCHEDULER_VIEW_DAY_HEADER_DAY_FIRST = getCN(SCHEDULER_VIEW, DAY, HEADER, DAY, FIRST),
- CSS_SCHEDULER_VIEW_DAY_HEADER_COL = getCN(SCHEDULER_VIEW, DAY, HEADER, COL),
- CSS_SCHEDULER_VIEW_DAY_HEADER_VIEW_LABEL = getCN(SCHEDULER_VIEW, DAY, HEADER, VIEW, LABEL),
-
- CSS_SCHEDULER_VIEW_DAY_TABLE_COL = getCN(SCHEDULER_VIEW, DAY, TABLE, COL),
- CSS_SCHEDULER_VIEW_DAY_TABLE_COL_SHIM = getCN(SCHEDULER_VIEW, DAY, TABLE, COL, SHIM),
- CSS_SCHEDULER_VIEW_DAY_TABLE_COLBLANK = getCN(SCHEDULER_VIEW, DAY, TABLE, COLBLANK),
- CSS_SCHEDULER_VIEW_DAY_TABLE_COLDAY = getCN(SCHEDULER_VIEW, DAY, TABLE, COLDAY),
- CSS_SCHEDULER_VIEW_DAY_TABLE_COLTIME = getCN(SCHEDULER_VIEW, DAY, TABLE, COLTIME),
- CSS_SCHEDULER_VIEW_DAY_TABLE_TIME = getCN(SCHEDULER_VIEW, DAY, TABLE, TIME),
-
- TPL_SCHEDULER_VIEW_DAY_RESIZER = '<div class="' + CSS_SCHEDULER_VIEW_DAY_RESIZER + '">' +
- '<div class="' + [CSS_ICON, CSS_ICON_GRIP_DOTTED_HORIZONTAL, CSS_SCHEDULER_VIEW_DAY_RESIZER_ICON].join(SPACE) + '"></div>' +
- '</div>',
-
- TPL_SCHEDULER_VIEW_DAY_MARKERCELL = '<div class="' + CSS_SCHEDULER_VIEW_DAY_MARKERCELL + '">' +
- '<div class="' + CSS_SCHEDULER_VIEW_DAY_MARKER_DIVISION + '"></div>' +
- '</div>',
-
- TPL_SCHEDULER_VIEW_DAY_HEADER_VIEW_LABEL = '<span class="' + CSS_SCHEDULER_VIEW_DAY_HEADER_VIEW_LABEL + '">{label}</span>',
-
- TPL_SCHEDULER_VIEW_DAY_TABLE = '<table cellspacing="0" cellpadding="0" class="' + CSS_SCHEDULER_VIEW_DAY_TABLE + '">' +
- '<tbody>' +
- '<tr class="' + CSS_SCHEDULER_VIEW_DAY_COLGRID + '" height="1">' +
- '<td height="0" class="' + [ CSS_SCHEDULER_VIEW_DAY_TABLE_COL, CSS_SCHEDULER_VIEW_DAY_TABLE_COLBLANK ].join(SPACE) + '"></td>' +
- '<td class="' + CSS_SCHEDULER_VIEW_DAY_GRID_CONTAINER + '" colspan="1">' +
- '<div class="' + CSS_SCHEDULER_VIEW_DAY_GRID + '">' +
- '<div class="' + CSS_SCHEDULER_VIEW_DAY_MARKERS + '"></div>' +
- '</div>' +
- '</td>' +
- '</tr>' +
- '<tr class="' + CSS_SCHEDULER_VIEW_DAY_COLDATA + '">' +
- '<td class="' + [ CSS_SCHEDULER_VIEW_DAY_TABLE_COL, CSS_SCHEDULER_VIEW_DAY_TABLE_COLTIME ].join(SPACE) + '"></td>' +
- '</tr>' +
- '</tbody>' +
- '</table>',
-
- TPL_SCHEDULER_VIEW_DAY_TABLE_COLDAY = '<td class="' + [ CSS_SCHEDULER_VIEW_DAY_TABLE_COL, CSS_SCHEDULER_VIEW_DAY_TABLE_COLDAY ].join(SPACE) + '" data-colnumber="{colNumber}">' +
- '<div class="' + CSS_SCHEDULER_VIEW_DAY_TABLE_COL_SHIM + '"></div>' +
- '</td>',
-
- TPL_SCHEDULER_VIEW_DAY_TABLE_TIME = '<div class="' + CSS_SCHEDULER_VIEW_DAY_TABLE_TIME + '">{hour}</div>',
-
- TPL_SCHEDULER_VIEW_DAY_HEADER_TABLE = '<table cellspacing="0" cellpadding="0" class="' + CSS_SCHEDULER_VIEW_DAY_HEADER_TABLE + '">' +
- '<tbody>' +
- '<tr class="' + CSS_SCHEDULER_VIEW_DAY_HEADER_COL + '"></tr>' +
- '</tbody>' +
- '</table>',
-
- TPL_SCHEDULER_VIEW_DAY_HEADER_DAY = '<th class="' + CSS_SCHEDULER_VIEW_DAY_HEADER_DAY + '" data-colnumber="{colNumber}"><a href="#"> </a></th>',
- TPL_SCHEDULER_VIEW_DAY_HEADER_DAY_FIRST = '<td class="' + [ CSS_SCHEDULER_VIEW_DAY_HEADER_DAY, CSS_SCHEDULER_VIEW_DAY_HEADER_DAY_FIRST ].join(SPACE) + '"></td>',
- TPL_SCHEDULER_VIEW_DAY_HEADER_DAY_PAD_RIGHT = '<th class="' + [ CSS_SCHEDULER_VIEW_DAY_HEADER_DAY, CSS_SCHEDULER_VIEW_DAY_HEADER_DAY_PAD_RIGHT ].join(SPACE) + '"> </th>';
-
- var SchedulerDayView = A.Component.create({
- NAME: SCHEDULER_VIEW_DAY,
-
- ATTRS: {
- bodyContent: {
- value: EMPTY_STR
- },
-
- days: {
- value: 1,
- validator: isNumber
- },
-
- delegateConfig: {
- value: {},
- setter: function(val) {
- var instance = this;
-
- return A.merge(
- {
- dragConfig: {
- useShim: false
- },
- bubbleTargets: instance,
- container: instance.get(BOUNDING_BOX),
- nodes: DOT+CSS_SCHEDULER_EVENT,
- invalid: 'input, select, button, a, textarea, ' + DOT+CSS_SCHEDULER_EVENT_DISABLED
- },
- val || {}
- );
- },
- validator: isObject
- },
-
- eventWidth: {
- value: 95,
- validator: isNumber
- },
-
- filterFn: {
- value: function(evt) {
- return (evt.getHoursDuration() <= 24 && !evt.get(ALL_DAY));
- }
- },
-
- headerDateFormatter: {
- value: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- return A.DataType.Date.format(
- date,
- {
- format: '%a %m/%d',
- locale: scheduler.get(LOCALE)
- }
- );
- },
- validator: isString
- },
-
- headerView: {
- value: true,
- validator: isBoolean
- },
-
- headerViewConfig: {
- setter: function(val) {
- var instance = this;
-
- return A.merge(
- {
- displayDaysInterval: 1,
- displayRows: 6,
- filterFn: function(evt) {
- return ((evt.getHoursDuration() > 24) || evt.get(ALL_DAY));
- },
- height: 'auto',
- visible: true
- },
- val || {}
- );
- },
- value: {}
- },
-
- hourHeight: {
- value: 52,
- validator: isNumber
- },
-
- name: {
- value: DAY
- },
-
- navigationDateFormatter: {
- value: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- return A.DataType.Date.format(
- date,
- {
- format: '%A, %b %d, %Y',
- locale: scheduler.get(LOCALE)
- }
- );
- },
- validator: isFunction
- },
-
- strings: {
- value: {
- allDay: 'All day'
- }
- },
-
- /*
- * HTML_PARSER attributes
- */
- headerTableNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_VIEW_DAY_HEADER_TABLE);
- }
- },
-
- headerViewLabelNode: {
- valueFn: function() {
- var instance = this;
-
- var strings = instance.get(STRINGS);
-
- return A.Node.create(
- sub(TPL_SCHEDULER_VIEW_DAY_HEADER_VIEW_LABEL, {
- label: strings[ALL_DAY]
- })
- );
- }
- },
-
- resizerNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_VIEW_DAY_RESIZER);
- }
- },
-
- tableNode: {
- valueFn: function() {
- return A.Node.create(TPL_SCHEDULER_VIEW_DAY_TABLE);
- }
- },
-
- colDaysNode: {
- valueFn: '_valueColDaysNode'
- },
-
- colHeaderDaysNode: {
- valueFn: '_valueColHeaderDaysNode'
- },
-
- markercellsNode: {
- valueFn: '_valueMarkercellsNode'
- },
-
- timesNode: {
- valueFn: '_valueTimesNode'
- }
- },
-
- HTML_PARSER: {
- colDaysNode: getNodeListHTMLParser(DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_COLDAY, 1),
- colHeaderDaysNode: getNodeListHTMLParser(DOT+CSS_SCHEDULER_VIEW_DAY_HEADER_DAY, 2),
- headerTableNode: DOT+CSS_SCHEDULER_VIEW_DAY_HEADER_TABLE,
- headerViewLabelNode: DOT+CSS_SCHEDULER_VIEW_DAY_HEADER_VIEW_LABEL,
- markercellsNode: getNodeListHTMLParser(DOT+CSS_SCHEDULER_VIEW_DAY_MARKERCELL, 24),
- resizerNode: DOT+CSS_SCHEDULER_VIEW_DAY_RESIZER,
- tableNode: DOT+CSS_SCHEDULER_VIEW_DAY_TABLE,
- timesNode: getNodeListHTMLParser(DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_TIME, 24)
- },
-
- EXTENDS: A.SchedulerView,
-
- prototype: {
- initializer: function() {
- var instance = this;
-
- instance[COL_DAYS_NODE] = instance.get(COL_DAYS_NODE);
- instance[COL_HEADER_DAYS_NODE] = instance.get(COL_HEADER_DAYS_NODE);
- instance[HEADER_TABLE_NODE] = instance.get(HEADER_TABLE_NODE);
- instance[MARKERCELLS_NODE] = instance.get(MARKERCELLS_NODE);
- instance[RESIZER_NODE] = instance.get(RESIZER_NODE);
- instance[TABLE_NODE] = instance.get(TABLE_NODE);
- instance[TIMES_NODE] = instance.get(TIMES_NODE);
-
- instance[ACTIVE_COLUMN] = null;
- instance[COLUMN_DATA] = instance[TABLE_NODE].one(DOT+CSS_SCHEDULER_VIEW_DAY_COLDATA);
- instance[COLUMN_DAY_HEADER] = instance.headerTableNode.one(DOT+CSS_SCHEDULER_VIEW_DAY_HEADER_COL);
- instance[COLUMN_SHIMS] = instance[COL_DAYS_NODE].all(DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_COL_SHIM);
- instance[COLUMN_TIME] = instance[TABLE_NODE].one(DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_COLTIME);
- instance[GRID_CONTAINER] = instance[TABLE_NODE].one(DOT+CSS_SCHEDULER_VIEW_DAY_GRID_CONTAINER);
- instance[MARKERS_NODE] = instance[TABLE_NODE].one(DOT+CSS_SCHEDULER_VIEW_DAY_MARKERS);
-
- if (instance.get(HEADER_VIEW)) {
- instance[HEADER_VIEW] = new A.SchedulerTableView(
- instance.get(HEADER_VIEW_CONFIG)
- );
- }
- },
-
- renderUI: function() {
- var instance = this;
-
- instance[COLUMN_TIME].setContent(instance[TIMES_NODE]);
- instance[MARKERS_NODE].setContent(instance[MARKERCELLS_NODE]);
- instance[COL_DAYS_NODE].appendTo(instance[COLUMN_DATA]);
- instance[COL_HEADER_DAYS_NODE].appendTo(instance[COLUMN_DAY_HEADER]);
-
- if (instance[HEADER_VIEW]) {
- instance[HEADER_VIEW].set(SCHEDULER, instance.get(SCHEDULER));
-
- instance[HEADER_VIEW].render();
- }
- },
-
- bindUI: function() {
- var instance = this;
-
- instance[HEADER_TABLE_NODE].delegate('click', A.bind(instance._onClickDaysHeader, instance), DOT+CSS_SCHEDULER_VIEW_DAY_HEADER_DAY);
- instance[COLUMN_DATA].delegate('mousedown', A.bind(instance._onMouseDownTableCol, instance), DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_COL);
- instance[COLUMN_DATA].delegate('mouseenter', A.bind(instance._onMouseEnterEvent, instance), DOT+CSS_SCHEDULER_EVENT);
- instance[COLUMN_DATA].delegate('mouseleave', A.bind(instance._onMouseLeaveEvent, instance), DOT+CSS_SCHEDULER_EVENT);
- instance[COLUMN_DATA].delegate('mousemove', A.bind(instance._onMouseMoveTableCol, instance), DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_COLDAY);
- instance[COLUMN_DATA].delegate('mouseup', A.bind(instance._onMouseUpTableCol, instance), DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_COL);
-
- instance.on('drag:end', instance._onEventDragEnd);
- instance.on('drag:start', instance._onEventDragStart);
- instance.on('drag:tickAlignY', instance._dragTickAlignY);
- instance.on('schedulerChange', instance._onSchedulerChange);
- instance.after('drag:align', instance._afterDragAlign);
- },
-
- syncUI: function() {
- var instance = this;
-
- SchedulerDayView.superclass.syncUI.apply(this, arguments);
-
- instance[GRID_CONTAINER].attr(COLSPAN, instance.get(DAYS));
-
- instance._setupDragDrop();
- },
-
- syncStdContent: function() {
- var instance = this;
-
- instance.setStdModContent(
- WidgetStdMod.BODY, instance[TABLE_NODE].getDOM());
-
- var headerNodes = A.NodeList.create(instance[HEADER_TABLE_NODE]);
-
- if (instance[HEADER_VIEW]) {
- headerNodes.push(instance[HEADER_VIEW].get(BOUNDING_BOX));
- headerNodes.push(instance.get(HEADER_VIEW_LABEL_NODE));
- }
-
- instance.setStdModContent(WidgetStdMod.HEADER, headerNodes);
- },
-
- calculateEventHeight: function(duration) {
- var instance = this;
- var hourHeight = instance.get(HOUR_HEIGHT);
-
- return Math.max(duration*(hourHeight/60), hourHeight/2);
- },
-
- calculateTop: function(date) {
- var instance = this;
-
- return ((date.getHours()*60) + date.getMinutes() +
- (date.getSeconds()/60)) * (instance.get(HOUR_HEIGHT)/60);
- },
-
- getNextDate: function() {
- var instance = this;
- var currentDate = instance.get(SCHEDULER).get(CURRENT_DATE);
-
- return DateMath.add(currentDate, DateMath.DAY, 1);
- },
-
- getPrevDate: function() {
- var instance = this;
- var currentDate = instance.get(SCHEDULER).get(CURRENT_DATE);
-
- return DateMath.subtract(currentDate, DateMath.DAY, 1);
- },
-
- getColumnByDate: function(date) {
- var instance = this;
-
- return instance[COL_DAYS_NODE].item(instance.getDateDaysOffset(date));
- },
-
- getColumnShimByDate: function(date) {
- var instance = this;
-
- return instance[COLUMN_SHIMS].item(instance.getDateDaysOffset(date));
- },
-
- getDateByColumn: function(colNumber) {
- var instance = this;
- var currentDate = DateMath.safeClearTime(
- instance.get(SCHEDULER).get(CURRENT_DATE));
-
- return DateMath.add(currentDate, DateMath.DAY, colNumber);
- },
-
- getDateDaysOffset: function(date) {
- var instance = this;
-
- var currentDate = DateMath.safeClearTime(
- instance.get(SCHEDULER).get(CURRENT_DATE));
-
- return DateMath.getDayOffset(
- DateMath.safeClearTime(date), currentDate);
- },
-
- getYCoordTime: function(top) {
- var instance = this;
- var hourHeight = instance.get(HOUR_HEIGHT);
- var prop = toNumber((top/hourHeight).toFixed(2));
-
- // Isolate the decimals and convert to minutes: (prop*100)%100*0.6.
- var minutes = Math.floor((prop*100)%100*0.6);
- var hours = Math.floor(prop);
-
- return [ hours, minutes, 0 ];
- },
-
- plotEvent: function(evt) {
- var instance = this;
-
- var nodeList = evt.get(NODE);
-
- if (nodeList.size() < 2) {
- evt.addPaddingNode();
- }
-
- var node = evt.get(NODE).item(0);
- var paddingNode = evt.get(NODE).item(1);
- var endShim = instance.getColumnShimByDate(evt.get(END_DATE));
- var startShim = instance.getColumnShimByDate(evt.get(START_DATE));
-
- if (startShim) {
- startShim.append(node);
-
- if (evt.get(VISIBLE)) {
- node.show();
- }
- }
- else {
- node.hide();
- }
-
- if (endShim) {
- if (endShim.compareTo(startShim) || evt.isDayBoundaryEvent()) {
- paddingNode.hide();
- }
- else {
- endShim.append(paddingNode);
-
- if (evt.get(VISIBLE)) {
- paddingNode.show();
- }
- }
- }
- else {
- paddingNode.hide();
- }
-
- evt.syncNodeUI();
-
- instance.syncEventTopUI(evt);
- instance.syncEventHeightUI(evt);
- },
-
- plotEvents: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var filterFn = instance.get(FILTER_FN);
-
- instance[COLUMN_SHIMS].each(function(colShimNode, i) {
- var columnEvents = scheduler.getEventsByDay(instance.getDateByColumn(i), true);
- var plottedEvents = [];
-
- colShimNode.empty();
-
- A.Array.each(columnEvents, function(evt) {
- if (filterFn.apply(instance, [evt])) {
- instance.plotEvent(evt);
-
- plottedEvents.push(evt);
- }
- });
-
- instance.syncEventsIntersectionUI(plottedEvents);
- });
-
- if (instance.get(HEADER_VIEW)) {
- instance.syncHeaderViewUI();
- }
- },
-
- syncColumnsUI: function() {
- var instance = this;
-
- instance[COL_DAYS_NODE].each(function(columnNode, i) {
- var columnDate = instance.getDateByColumn(i);
-
- columnNode.toggleClass(
- CSS_SCHEDULER_TODAY, DateMath.isToday(columnDate));
- });
- },
-
- syncDaysHeaderUI: function() {
- var instance = this;
- var currentDate = instance.get(SCHEDULER).get(CURRENT_DATE);
- var formatter = instance.get(HEADER_DATE_FORMATTER);
- var locale = instance.get(LOCALE);
-
- instance[COL_HEADER_DAYS_NODE].all(ANCHOR).each(
- function(columnNode, i) {
- var columnDate = DateMath.add(currentDate, DateMath.DAY, i);
-
- columnNode.toggleClass(
- CSS_SCHEDULER_TODAY_HD, DateMath.isToday(columnDate));
-
- columnNode.html(formatter.call(instance, columnDate));
- }
- );
- },
-
- // TODO
- syncEventsIntersectionUI: function(columnEvents) {
- var instance = this;
- var eventWidth = instance.get(EVENT_WIDTH);
-
- instance.get(SCHEDULER).flushEvents();
-
- A.Array.each(columnEvents, function(colEvt) {
- var intercessors = instance.findEventIntersections(
- colEvt, columnEvents);
-
- var total = intercessors.length;
- var distributionRate = (eventWidth/total);
-
- A.Array.each(intercessors, function(evt, j) {
- var evtNode = evt.get(NODE).item(0);
- var left = distributionRate*j;
- var width = distributionRate*1.7;
-
- if (j === (total - 1)) {
- width = eventWidth - left;
- }
-
- evtNode.setStyle(WIDTH, width+PERCENT);
- evtNode.setStyle(LEFT, left+PERCENT);
-
- var evtParentNode = evtNode.get(PARENT_NODE);
-
- if (evtParentNode) {
- evtParentNode.insert(evtNode, j);
- }
-
- evt._filtered = true;
- });
- });
- },
-
- syncEventHeightUI: function(evt) {
- var instance = this;
- var endDate = evt.get(END_DATE);
- var startDate = evt.get(START_DATE);
-
- var maxVisibleDate = DateMath.clone(startDate);
- maxVisibleDate.setHours(24, 0, 0);
-
- var minutesOffset = DateMath.getMinutesOffset(
- instance.limitDate(endDate, maxVisibleDate), startDate);
-
- evt.get(NODE).item(0).set(OFFSET_HEIGHT, instance.calculateEventHeight(minutesOffset));
-
- var paddingNode = evt.get(NODE).item(1);
-
- if (paddingNode.inDoc()) {
- var paddingMinutesOffset = DateMath.getMinutesOffset(
- endDate, DateMath.toMidnight(evt.getClearEndDate()));
-
- paddingNode.set(OFFSET_HEIGHT, instance.calculateEventHeight(paddingMinutesOffset));
- }
- },
-
- syncEventTopUI: function(evt) {
- var instance = this;
-
- evt.get(NODE).item(0).setStyle(TOP,
- instance.calculateTop(evt.get(START_DATE)) + PX);
- evt.get(NODE).item(1).setStyle(TOP, 0);
- },
-
- syncHeaderViewUI: function() {
- var instance = this;
-
- if (instance.get(HEADER_VIEW)) {
- var headerView = instance[HEADER_VIEW];
-
- headerView.plotEvents();
-
- var headerViewBB = headerView.get(BOUNDING_BOX);
-
- headerViewBB.setStyle(MARGIN_RIGHT, getScrollbarWidth());
-
- var headerViewData = headerViewBB.one(DOT+CSS_SVT_TABLE_DATA);
- var height = Math.max(headerViewData.get(OFFSET_HEIGHT), 40);
-
- headerView.set(HEIGHT, height);
-
- instance._fillHeight();
- }
- },
-
- calculateYDelta: function(startXY, xy) {
- var instance = this;
-
- return (xy[1] - startXY[1])/(instance.get(HOUR_HEIGHT)/2)*30;
- },
-
- findEventIntersections: function(evt, events) {
- var instance = this;
- var group = [];
-
- A.Array.each(events, function(evtCmp) {
- if (!evt._filtered && evt.intersectHours(evtCmp)) {
- group.push(evtCmp);
- }
- });
-
- return group;
- },
-
- getXYDelta: function(event) {
- var instance = this;
- var xy = event.currentTarget.getXY(),
- pageXY = [event.pageX, event.pageY];
-
- return A.Array.map(xy, function(val, i) {
- return (pageXY[i] - val);
- });
- },
-
- getTickY: function() {
- var instance = this;
-
- return roundToNearestMultiple(
- Math.ceil(instance.get(HOUR_HEIGHT) / 2), 10);
- },
-
- roundToNearestHour: function(date, time) {
- var instance = this;
-
- date.setHours(
- time[0],
- roundToNearestMultiple(time[1], instance.getTickY()),
- time[2]);
- },
-
- _afterDragAlign: function(event) {
- var instance = this;
- var dd = event.target;
-
- if (!instance[START_XY]) {
- instance[START_XY] = dd.actXY;
- }
-
- dd.actXY[0] = null;
- },
-
- _dragTickAlignX: function(activeColumn) {
- var instance = this;
- var draggingEvent = instance[DRAGGING_EVENT];
-
- if (draggingEvent && !instance[RESIZING]) {
- var placeholder = instance[EVENT_PLACEHOLDER];
- var delta = toNumber(activeColumn.attr(DATA_COLNUMBER)) - instance.startColNumber;
-
- instance.draggingEventStartDate = DateMath.add(draggingEvent.get(START_DATE), DateMath.DAY, delta);
-
- var startDate = DateMath.clone(instance.draggingEventStartDate);
-
- DateMath.copyHours(startDate, placeholder.get(START_DATE));
-
- placeholder.move(startDate);
-
- instance.plotEvent(placeholder);
- }
- },
-
- _dragTickAlignY: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var recorder = scheduler.get(EVENT_RECORDER);
-
- var draggingEvent = instance[DRAGGING_EVENT];
-
- if (draggingEvent) {
- var dd = event.target.get(HOST);
- var placeholder = instance[EVENT_PLACEHOLDER];
- var delta = instance.calculateYDelta(instance[START_XY], dd.actXY);
-
- if (instance[RESIZING]) {
- var endDate = DateMath.add(instance.draggingEventEndDate, DateMath.MINUTES, delta);
-
- if (DateMath.getMinutesOffset(endDate, instance.draggingEventStartDate) <= recorder.get(DURATION)) {
- return;
- }
-
- placeholder.set(END_DATE, endDate);
- }
- else {
- placeholder.move(DateMath.add(instance.draggingEventStartDate, DateMath.MINUTES, delta));
- }
-
- instance.plotEvent(placeholder);
- }
- },
-
- _setupDragDrop: function() {
- var instance = this;
-
- if (!instance[EVENT_PLACEHOLDER]) {
- var scheduler = instance.get(SCHEDULER);
-
- instance[EVENT_PLACEHOLDER] = new (instance.get(EVENT_CLASS))({
- scheduler: scheduler
- });
-
- instance[EVENT_PLACEHOLDER].removeTarget(scheduler);
- instance[EVENT_PLACEHOLDER].get(NODE).addClass(
- CSS_SCHEDULER_EVENT_PROXY).hide();
- }
-
- if (!instance.delegate) {
- instance.delegate = new A.DD.Delegate(
- instance.get(DELEGATE_CONFIG));
- }
-
- var dd = instance.delegate.dd;
-
- dd.unplug(A.Plugin.DDConstrained);
- dd.unplug(A.Plugin.DDNodeScroll);
-
- var region = instance.bodyNode.get(REGION);
-
- region.bottom = Infinity;
- region.top = -Infinity;
-
- dd.plug(A.Plugin.DDConstrained, {
- bubbleTargets: instance,
- constrain: region,
- stickY: true,
- tickY: instance.get(HOUR_HEIGHT) / 2
- });
-
- dd.plug(A.Plugin.DDNodeScroll, {
- node: instance.bodyNode,
- scrollDelay: 150
- });
- },
-
- _uiSetCurrentDate: function(val) {
- var instance = this;
-
- instance.syncColumnsUI();
- instance.syncDaysHeaderUI();
- },
-
- _onClickDaysHeader: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- if (event.target.test(ANCHOR)) {
- var dayView = scheduler.getViewByName(DAY);
-
- if (dayView) {
- var colNumber = toNumber(event.currentTarget.attr(DATA_COLNUMBER));
-
- scheduler.set(
- CURRENT_DATE, instance.getDateByColumn(colNumber));
-
- scheduler.set(ACTIVE_VIEW, dayView);
- }
- }
-
- event.preventDefault();
- },
-
- _onEventDragEnd: function(event) {
- var instance = this;
- var draggingEvent = instance[DRAGGING_EVENT];
-
- if (draggingEvent) {
- var placeholder = instance[EVENT_PLACEHOLDER];
-
- placeholder.set(VISIBLE, false);
- draggingEvent.set(VISIBLE, true);
- draggingEvent.copyDates(placeholder);
-
- instance.get(SCHEDULER).syncEventsUI();
- }
-
- instance[START_XY] = null;
- instance[DRAGGING_EVENT] = null;
- },
-
- _onEventDragStart: function(event) {
- var instance = this;
- var draggingEvent = instance[DRAGGING_EVENT] = instance.delegate.dd.get(NODE).getData(SCHEDULER_EVENT);
-
- if (draggingEvent) {
- var placeholder = instance[EVENT_PLACEHOLDER];
-
- placeholder.copyPropagateAttrValues(draggingEvent);
-
- instance.plotEvent(placeholder);
-
- draggingEvent.set(VISIBLE, false);
-
- instance.draggingEventStartDate = DateMath.clone(draggingEvent.get(START_DATE));
- instance.draggingEventEndDate = DateMath.clone(draggingEvent.get(END_DATE));
-
- var startColumn = instance.getColumnByDate(draggingEvent.get(START_DATE));
-
- instance.startColNumber = startColumn ? toNumber(startColumn.attr(DATA_COLNUMBER)) : 0;
- }
- },
-
- _onMouseDownTableCol: function(event) {
- var instance = this;
- var target = event.target;
- var scheduler = instance.get(SCHEDULER);
- var recorder = scheduler.get(EVENT_RECORDER);
-
- if (recorder && !scheduler.get(DISABLED)) {
- recorder.hideOverlay();
-
- if (target.test(DOT+CSS_SCHEDULER_VIEW_DAY_TABLE_COL_SHIM)) {
- instance[START_XY] = [ event.pageX, event.pageY ];
-
- var colNumber = toNumber(event.currentTarget.attr(DATA_COLNUMBER));
- var startDate = instance.getDateByColumn(colNumber);
- var clickLeftTop = instance.getXYDelta(event);
-
- instance.roundToNearestHour(
- startDate, instance.getYCoordTime(clickLeftTop[1]));
-
- var endDate = DateMath.add(startDate, DateMath.MINUTES, recorder.get(DURATION));
-
- recorder.move(startDate);
- recorder.set(ALL_DAY, false);
- recorder.set(END_DATE, endDate);
-
- instance[CREATION_START_DATE] = startDate;
- instance[CREATION_END_DATE] = endDate;
-
- event.halt();
- }
- else if (target.test(
- [ DOT+CSS_SCHEDULER_VIEW_DAY_RESIZER,
- DOT+CSS_SCHEDULER_VIEW_DAY_RESIZER_ICON ].join(COMMA))) {
-
- instance[RESIZING] = true;
- }
- }
-
- instance.get(BOUNDING_BOX).unselectable();
- },
-
- _onMouseEnterEvent: function(event) {
- var instance = this;
- var target = event.currentTarget;
- var evt = target.getData(SCHEDULER_EVENT);
-
- if (evt && !evt.get(DISABLED)) {
- instance[RESIZER_NODE].appendTo(target);
- }
- },
-
- _onMouseLeaveEvent: function(event) {
- var instance = this;
-
- if (!instance[RESIZING]) {
- instance._removeResizer();
- }
- },
-
- _onMouseMoveTableCol: function(event) {
- var instance = this;
- var activeColumn = event.currentTarget;
- var recorder = instance.get(SCHEDULER).get(EVENT_RECORDER);
-
- if (instance[ACTIVE_COLUMN] !== activeColumn) {
- instance[ACTIVE_COLUMN] = activeColumn;
- instance._dragTickAlignX(instance[ACTIVE_COLUMN]);
- }
-
- var creationEndDate = instance[CREATION_END_DATE];
- var creationStartDate = instance[CREATION_START_DATE];
-
- if (creationStartDate) {
- var delta = roundToNearestMultiple(
- instance.calculateYDelta(instance[START_XY], [ event.pageX, event.pageY ]),
- instance.getTickY()
- );
-
- if (instance._delta !== delta) {
- if (delta > 0) {
- recorder.set(END_DATE, DateMath.add(creationEndDate, DateMath.MINUTES, delta));
- }
- else {
- recorder.set(START_DATE, DateMath.add(creationStartDate, DateMath.MINUTES, delta));
- }
-
- instance.plotEvent(recorder);
-
- instance._delta = delta;
- }
- }
- },
-
- _onMouseUpTableCol: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var recorder = scheduler.get(EVENT_RECORDER);
-
- if (recorder && !scheduler.get(DISABLED)) {
- if (instance[CREATION_START_DATE]) {
- instance.plotEvent(recorder);
-
- recorder.showOverlay([ event.pageX, event.pageY ]);
- }
- }
-
- instance[CREATION_START_DATE] = null;
- instance[CREATION_END_DATE] = null;
- instance[RESIZING] = false;
- instance[START_XY] = null;
-
- instance._removeResizer();
- instance.get(BOUNDING_BOX).selectable();
- },
-
- _onSchedulerChange: function(event) {
- var instance = this;
-
- if (instance[HEADER_VIEW]) {
- instance[HEADER_VIEW].set(SCHEDULER, event.newVal);
- }
- },
-
- _removeResizer: function() {
- var instance = this;
-
- instance[RESIZER_NODE].remove();
- },
-
- _valueColDaysNode: function() {
- var instance = this;
- var days = instance.get(DAYS);
- var buffer = [], colNumber = 0;
-
- while (days--) {
- buffer.push(
- A.Lang.sub(TPL_SCHEDULER_VIEW_DAY_TABLE_COLDAY, {
- colNumber: colNumber++
- })
- );
- }
-
- return A.NodeList.create(buffer.join(EMPTY_STR));
- },
-
- _valueColHeaderDaysNode: function() {
- var instance = this;
- var days = instance.get(DAYS);
- var buffer = [], colNumber = 0;
-
- buffer.push(TPL_SCHEDULER_VIEW_DAY_HEADER_DAY_FIRST);
-
- while (days--) {
- buffer.push(
- A.Lang.sub(TPL_SCHEDULER_VIEW_DAY_HEADER_DAY, {
- colNumber: colNumber++
- })
- );
- }
-
- buffer.push(TPL_SCHEDULER_VIEW_DAY_HEADER_DAY_PAD_RIGHT);
-
- return A.NodeList.create(buffer.join(EMPTY_STR));
- },
-
- _valueMarkercellsNode: function() {
- var instance = this;
- var buffer = [], i;
-
- for (i = 0; i <= 23; i++) {
- buffer.push(TPL_SCHEDULER_VIEW_DAY_MARKERCELL);
- }
-
- return A.NodeList.create(buffer.join(EMPTY_STR));
- },
-
- _valueTimesNode: function() {
- var instance = this;
- var isoTime = instance.get(ISO_TIME);
- var buffer = [], hour;
-
- for (hour = 0; hour <= 23; hour++) {
- buffer.push(
- sub(
- TPL_SCHEDULER_VIEW_DAY_TABLE_TIME,
- {
- hour: isoTime ? DateMath.toIsoTimeString(hour) : DateMath.toUsTimeString(hour, false, true)
- }
- )
- );
- }
-
- return A.NodeList.create(buffer.join(EMPTY_STR));
- }
- }
- });
-
- A.SchedulerDayView = SchedulerDayView;
- var SchedulerWeekView = A.Component.create({
- NAME: SCHEDULER_VIEW_WEEK,
-
- ATTRS: {
- bodyContent: {
- value: EMPTY_STR
- },
-
- days: {
- value: 7
- },
-
- headerViewConfig: {
- value: {
- displayDaysInterval: WEEK_LENGTH
- }
- },
-
- name: {
- value: WEEK
- },
-
- navigationDateFormatter: {
- valueFn: function() {
- return this._valueNavigationDateFormatter;
- },
- validator: isFunction
- }
- },
-
- EXTENDS: A.SchedulerDayView,
-
- prototype: {
- adjustCurrentDate: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
- var firstDayOfWeek = scheduler.get(FIRST_DAY_OF_WEEK);
-
- scheduler.set(
- CURRENT_DATE,
- DateMath.getFirstDayOfWeek(currentDate, firstDayOfWeek)
- );
- },
-
- getNextDate: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
- var firstDayOfWeekDate = instance._firstDayOfWeek(currentDate);
-
- return DateMath.add(firstDayOfWeekDate, DateMath.WEEK, 1);
- },
-
- getPrevDate: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
- var firstDayOfWeekDate = instance._firstDayOfWeek(currentDate);
-
- return DateMath.subtract(firstDayOfWeekDate, DateMath.WEEK, 1);
- },
-
- getToday: function() {
- var instance = this;
- var todayDate = SchedulerWeekView.superclass.getToday.apply(this, arguments);
-
- return instance._firstDayOfWeek(todayDate);
- },
-
- _firstDayOfWeek: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var firstDayOfWeek = scheduler.get(FIRST_DAY_OF_WEEK);
-
- return DateMath.getFirstDayOfWeek(date, firstDayOfWeek);
- },
-
- _valueNavigationDateFormatter: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var locale = scheduler.get(LOCALE);
-
- var startDate = instance._firstDayOfWeek(date);
-
- var startDateLabel = A.DataType.Date.format(
- startDate,
- {
- format: '%b %d',
- locale: locale
- }
- );
-
- var endDate = DateMath.add(startDate, DateMath.DAY, instance.get(DAYS) - 1);
-
- var endDateLabel = A.DataType.Date.format(
- endDate,
- {
- format: (DateMath.isMonthOverlapWeek(date) ? '%b %d' : '%d') + ', %Y',
- locale: locale
- }
- );
-
- return [startDateLabel, MDASH, endDateLabel].join(SPACE);
- }
- }
- });
-
- A.SchedulerWeekView = SchedulerWeekView;
- var CSS_ICON = getCN(ICON),
- CSS_ICON_ARROWSTOP_LEFT = getCN(ICON, 'arrowstop-1-l'),
- CSS_ICON_ARROWSTOP_RIGHT = getCN(ICON, 'arrowstop-1-r'),
- CSS_SVT_COLGRID = getCN(SCHEDULER_VIEW, TABLE, COLGRID),
- CSS_SVT_COLGRID_FIRST = getCN(SCHEDULER_VIEW, TABLE, COLGRID, FIRST),
- CSS_SVT_COLGRID_TODAY = getCN(SCHEDULER_VIEW, TABLE, COLGRID, TODAY),
- CSS_SVT_CONTAINER = getCN(SCHEDULER_VIEW, TABLE, CONTAINER),
- CSS_SVT_EVENTS_OVERLAY_NODE = getCN(SCHEDULER_VIEW, TABLE, EVENTS, OVERLAY, NODE),
- CSS_SVT_EVENTS_OVERLAY_NODE_BODY = getCN(SCHEDULER_VIEW, TABLE, EVENTS, OVERLAY, NODE, BODY),
- CSS_SVT_EVENTS_OVERLAY_NODE_CLOSE = getCN(SCHEDULER_VIEW, TABLE, EVENTS, OVERLAY, NODE, CLOSE),
- CSS_SVT_HEADER_COL = getCN(SCHEDULER_VIEW, TABLE, HEADER, COL),
- CSS_SVT_HEADER_DAY = getCN(SCHEDULER_VIEW, TABLE, HEADER, DAY),
- CSS_SVT_HEADER_TABLE = getCN(SCHEDULER_VIEW, TABLE, HEADER, TABLE),
- CSS_SVT_MORE = getCN(SCHEDULER_VIEW, TABLE, MORE),
- CSS_SVT_ROW = getCN(SCHEDULER_VIEW, TABLE, ROW),
- CSS_SVT_ROW_CONTAINER = getCN(SCHEDULER_VIEW, TABLE, ROW, CONTAINER),
- CSS_SVT_TABLE_DATA = getCN(SCHEDULER_VIEW, TABLE, DATA),
- CSS_SVT_TABLE_DATA_COL = getCN(SCHEDULER_VIEW, TABLE, DATA, COL),
- CSS_SVT_TABLE_DATA_COL_TITLE = getCN(SCHEDULER_VIEW, TABLE, DATA, COL, TITLE),
- CSS_SVT_TABLE_DATA_COL_TITLE_DOWN = getCN(SCHEDULER_VIEW, TABLE, DATA, COL, TITLE, DOWN),
- CSS_SVT_TABLE_DATA_COL_TITLE_FIRST = getCN(SCHEDULER_VIEW, TABLE, DATA, COL, TITLE, FIRST),
- CSS_SVT_TABLE_DATA_COL_TITLE_NEXT = getCN(SCHEDULER_VIEW, TABLE, DATA, COL, TITLE, NEXT),
- CSS_SVT_TABLE_DATA_COL_TITLE_TODAY = getCN(SCHEDULER_VIEW, TABLE, DATA, COL, TITLE, TODAY),
- CSS_SVT_TABLE_DATA_EVENT = getCN(SCHEDULER_VIEW, TABLE, DATA, EVENT),
- CSS_SVT_TABLE_DATA_EVENT_LEFT = getCN(SCHEDULER_VIEW, TABLE, DATA, EVENT, LEFT),
- CSS_SVT_TABLE_DATA_EVENT_REPEATED = getCN(SCHEDULER_VIEW, TABLE, DATA, EVENT, REPEATED),
- CSS_SVT_TABLE_DATA_EVENT_RIGHT = getCN(SCHEDULER_VIEW, TABLE, DATA, EVENT, RIGHT),
- CSS_SVT_TABLE_DATA_FIRST = getCN(SCHEDULER_VIEW, TABLE, DATA, FIRST),
- CSS_SVT_TABLE_GRID = getCN(SCHEDULER_VIEW, TABLE, GRID),
- CSS_SVT_TABLE_GRID_FIRST = getCN(SCHEDULER_VIEW, TABLE, GRID, FIRST),
-
- TPL_SVT_CONTAINER = '<div class="' + CSS_SVT_CONTAINER + '">' +
- '<div class="' + CSS_SVT_ROW_CONTAINER + '"></div>' +
- '</div>',
-
- TPL_SVT_EVENTS_OVERLAY_NODE = '<div class="' + CSS_SVT_EVENTS_OVERLAY_NODE + '">' +
- '<div class="' + CSS_SVT_EVENTS_OVERLAY_NODE_BODY + '"></div>' +
- '<a href="javascript:;" class="' + CSS_SVT_EVENTS_OVERLAY_NODE_CLOSE + '">{label}</a>' +
- '</div>',
-
- TPL_SVT_GRID_COLUMN = '<td class="' + CSS_SVT_COLGRID + '"> </td>',
-
- TPL_SVT_HEADER_DAY = '<th class="' + CSS_SVT_HEADER_DAY + '"><div> </div></th>',
-
- TPL_SVT_HEADER_TABLE = '<table cellspacing="0" cellpadding="0" class="' + CSS_SVT_HEADER_TABLE + '">' +
- '<tbody>' +
- '<tr class="' + CSS_SVT_HEADER_COL + '"></tr>' +
- '</tbody>' +
- '</table>',
-
- TPL_SVT_MORE = '<a href="javascript:;" class="' + CSS_SVT_MORE + '">{label} {count}</a>',
-
- TPL_SVT_ROW = '<div class="' + CSS_SVT_ROW + '" style="top: {top}%; height: {height}%;"></div>',
-
- TPL_SVT_TABLE_DATA = '<table cellspacing="0" cellpadding="0" class="' + CSS_SVT_TABLE_DATA + '">' +
- '<tbody></tbody>' +
- '</table>',
-
- TPL_SVT_TABLE_GRID = '<table cellspacing="0" cellpadding="0" class="' + CSS_SVT_TABLE_GRID + '">' +
- '<tbody>' +
- '<tr></tr>' +
- '</tbody>' +
- '</table>',
-
- TPL_SVT_EV_ICON_LEFT = '<span class="' + [ CSS_ICON, CSS_ICON_ARROWSTOP_LEFT ].join(SPACE) + '"></span>',
- TPL_SVT_EV_ICON_RIGHT = '<span class="' + [ CSS_ICON, CSS_ICON_ARROWSTOP_RIGHT ].join(SPACE) + '"></span>',
-
- TPL_SVT_TABLE_DATA_COL = '<td class="' + CSS_SVT_TABLE_DATA_COL + '"><div></div></td>',
- TPL_SVT_TABLE_DATA_ROW = '<tr></tr>';
-
- var SchedulerTableView = A.Component.create({
- NAME: SCHEDULER_VIEW_TABLE,
-
- ATTRS: {
- bodyContent: {
- value: EMPTY_STR
- },
-
- displayDaysInterval: {
- value: 42
- },
-
- displayRows: {
- value: 4
- },
-
- fixedHeight: {
- value: true
- },
-
- name: {
- value: TABLE
- },
-
- headerDateFormatter: {
- value: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- return A.DataType.Date.format(
- date,
- {
- format: '%a',
- locale: scheduler.get(LOCALE)
- }
- );
- },
- validator: isString
- },
-
- navigationDateFormatter: {
- value: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- return A.DataType.Date.format(
- date,
- {
- format: '%b %Y',
- locale: scheduler.get(LOCALE)
- }
- );
- },
- validator: isFunction
- },
-
- scrollable: {
- value: false
- },
-
- strings: {
- value: {
- close: 'Close',
- showMore: 'Show more'
- }
- },
-
- /*
- * HTML_PARSER attributes
- */
- headerTableNode: {
- valueFn: function() {
- return A.Node.create(TPL_SVT_HEADER_TABLE);
- }
- },
-
- colHeaderDaysNode: {
- valueFn: '_valueColHeaderDaysNode'
- },
-
- rowsContainerNode: {
- valueFn: function() {
- return A.Node.create(TPL_SVT_CONTAINER);
- }
- },
-
- tableGridNode: {
- valueFn: '_valueTableGridNode'
- }
- },
-
- HTML_PARSER: {
- colHeaderDaysNode: getNodeListHTMLParser(DOT+CSS_SVT_HEADER_DAY, 7),
- headerTableNode: DOT+CSS_SVT_HEADER_TABLE,
- rowsContainerNode: DOT+CSS_SVT_CONTAINER,
- tableGridNode: getNodeListHTMLParser(DOT+CSS_SVT_TABLE_GRID, 7)
- },
-
- EXTENDS: A.SchedulerView,
-
- prototype: {
- evtDateStack: null,
- evtRenderedStack: null,
- rowDataTableStack: null,
-
- initializer: function() {
- var instance = this;
-
- instance.evtDateStack = {};
- instance.evtRenderedStack = {};
- instance.rowDataTableStack = {};
-
- instance[COL_HEADER_DAYS_NODE] = instance.get(COL_HEADER_DAYS_NODE);
- instance[HEADER_TABLE_NODE] = instance.get(HEADER_TABLE_NODE);
- instance[ROWS_CONTAINER_NODE] = instance.get(ROWS_CONTAINER_NODE);
- instance[TABLE_GRID_NODE] = instance.get(TABLE_GRID_NODE);
- instance[COLUMN_DAY_HEADER] = instance.headerTableNode.one(DOT+CSS_SVT_HEADER_COL);
- instance[COLUMN_TABLE_GRID] = A.NodeList.create();
- instance[TABLE_ROW_CONTAINER] = instance[ROWS_CONTAINER_NODE].one(DOT+CSS_SVT_ROW_CONTAINER);
- instance[TABLE_ROWS] = A.NodeList.create();
- },
-
- bindUI: function() {
- var instance = this;
-
- instance[ROWS_CONTAINER_NODE].delegate('click', A.bind(instance._onClickMore, instance), DOT+CSS_SVT_MORE);
- },
-
- renderUI: function() {
- var instance = this;
-
- var displayRowsCount = instance._getDisplayRowsCount();
-
- for (var rowIndex = 0; rowIndex < displayRowsCount; rowIndex++) {
- instance[TABLE_ROWS].push(
- instance.buildGridRowNode(rowIndex)
- );
- }
-
- instance._renderEventsOverlay();
-
- instance[COL_HEADER_DAYS_NODE].appendTo(instance[COLUMN_DAY_HEADER]);
- instance[TABLE_ROWS].appendTo(instance[TABLE_ROW_CONTAINER]);
- },
-
- buildEventsRow: function(rowStartDate, rowEndDate, rowDisplayIndex) {
- var instance = this;
- var displayRows = instance.get(DISPLAY_ROWS);
-
- var displayRowDaysCount = instance._getDisplayRowDaysCount();
- var rowRenderedColumns = 0;
- var rowNode = A.Node.create(TPL_SVT_TABLE_DATA_ROW);
-
- instance.loopDates(rowStartDate, rowEndDate, function(celDate, index) {
- if (rowRenderedColumns > index) {
- return;
- }
-
- var events = instance.getIntersectEvents(celDate);
- var evt = instance._getRenderableEvent(events, rowStartDate, rowEndDate, celDate);
-
- var evtColNode = A.Node.create(TPL_SVT_TABLE_DATA_COL);
- var evtNodeContainer = evtColNode.one(DIV);
-
- if ((displayRows < events.length) && (rowDisplayIndex === (displayRows - 1))) {
- var strings = instance.get(STRINGS);
-
- var showMoreEventsLink = A.Node.create(
- Lang.sub(
- TPL_SVT_MORE,
- {
- count: (events.length - (displayRows - 1)),
- label: strings[SHOW_MORE]
- }
- )
- );
-
- showMoreEventsLink.setData(EVENTS, events);
-
- evtNodeContainer.append(showMoreEventsLink);
- }
- else if (evt) {
- var evtSplitInfo = instance._getEvtSplitInfo(evt, celDate, rowStartDate, rowEndDate);
-
- evtColNode.attr(COLSPAN, evtSplitInfo.colspan);
-
- rowRenderedColumns += (evtSplitInfo.colspan - 1);
-
- instance._syncEventNodeContainerUI(evt, evtNodeContainer, evtSplitInfo);
- instance._syncEventNodeUI(evt, evtNodeContainer, celDate);
-
- var key = String(celDate.getTime());
-
- instance.evtRenderedStack[key].push(evt);
- }
-
- rowRenderedColumns++;
-
- rowNode.append(evtColNode);
- });
-
- return rowNode;
- },
-
- buildEventsTable: function(rowStartDate, rowEndDate) {
- var instance = this;
- var displayRows = instance.get(DISPLAY_ROWS);
-
- var intervalStartDate = DateMath.clearTime(instance._findCurrentIntervalStart());
-
- var cacheKey = String(intervalStartDate.getTime())
- .concat(rowStartDate.getTime())
- .concat(rowEndDate.getTime());
-
- var rowDataTableNode = instance.rowDataTableStack[cacheKey];
-
- if (!rowDataTableNode) {
- rowDataTableNode = A.Node.create(TPL_SVT_TABLE_DATA);
-
- var tableBody = rowDataTableNode.one(TBODY);
- var titleRowNode = instance.buildEventsTitleRow(rowDataTableNode, rowStartDate, rowEndDate);
-
- tableBody.append(titleRowNode);
-
- for (var rowDisplayIndex = 0; rowDisplayIndex < displayRows; rowDisplayIndex++) {
- var rowNode = instance.buildEventsRow(rowStartDate, rowEndDate, rowDisplayIndex);
-
- tableBody.append(rowNode);
- }
-
- instance.rowDataTableStack[cacheKey] = rowDataTableNode;
- }
-
- return rowDataTableNode;
- },
-
- buildEventsTitleRow: function(tableNode, rowStartDate, rowEndDate) {
- var instance = this;
-
- var titleRowNode = A.Node.create(TPL_SVT_TABLE_DATA_ROW);
-
- instance.loopDates(rowStartDate, rowEndDate, function(celDate, index) {
- var colTitleNode = A.Node.create(TPL_SVT_TABLE_DATA_COL);
-
- colTitleNode
- .addClass(CSS_SVT_TABLE_DATA_COL_TITLE)
- .toggleClass(
- CSS_SVT_TABLE_DATA_COL_TITLE_FIRST,
- (index === 0)
- )
- .toggleClass(
- CSS_SVT_TABLE_DATA_COL_TITLE_TODAY,
- DateMath.isToday(celDate)
- )
- .toggleClass(
- CSS_SVT_TABLE_DATA_COL_TITLE_NEXT,
- DateMath.isToday(DateMath.subtract(celDate, DateMath.DAY, 1))
- )
- .toggleClass(
- CSS_SVT_TABLE_DATA_COL_TITLE_DOWN,
- DateMath.isToday(DateMath.subtract(celDate, DateMath.WEEK, 1))
- );
-
- titleRowNode.append(
- colTitleNode.setContent(celDate.getDate())
- );
- });
-
- return titleRowNode;
- },
-
- buildGridRowNode: function(rowIndex) {
- var instance = this;
-
- var displayRowsCount = instance._getDisplayRowsCount();
- var rowRelativeHeight = 100 / displayRowsCount;
- var tableGridNode = instance._getTableGridNode(rowIndex);
-
- var rowNode = A.Node.create(
- Lang.sub(
- TPL_SVT_ROW,
- {
- height: rowRelativeHeight,
- top: rowRelativeHeight * rowIndex
- }
- )
- );
-
- rowNode.append(
- tableGridNode.toggleClass(CSS_SVT_TABLE_GRID_FIRST, (rowIndex === 0))
- );
-
- return rowNode;
- },
-
- flushViewCache: function() {
- var instance = this;
-
- instance.evtDateStack = {};
- instance.evtRenderedStack = {};
- instance.rowDataTableStack = {};
- },
-
- getIntersectEvents: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- var key = String(date.getTime());
-
- if (!instance.evtDateStack[key]) {
- var events = scheduler.getIntersectEvents(date);
-
- instance.evtDateStack[key] = events.filter(
- instance.get(FILTER_FN)
- );
- }
-
- return instance.evtDateStack[key];
- },
-
- getNextDate: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
-
- return DateMath.add(currentDate, DateMath.DAY, displayDaysInterval);
- },
-
- getPrevDate: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
-
- return DateMath.subtract(currentDate, DateMath.DAY, displayDaysInterval);
- },
-
- hideEventsOverlay: function() {
- var instance = this;
-
- instance[EVENTS_OVERLAY].set(VISIBLE, false);
- },
-
- loopDates: function(startDate, endDate, fn, incrementBy, factor) {
- var instance = this;
- var curDate = DateMath.clone(startDate);
- var endDateMs = endDate.getTime();
- var index;
-
- for (index = 0; curDate.getTime() <= endDateMs; index++) {
- fn.apply(instance, [curDate, index]);
-
- curDate = DateMath.add(curDate, (incrementBy || DateMath.DAY), (factor || 1));
- }
- },
-
- plotEvents: function() {
- var instance = this;
- var intervalStartDate = instance._findCurrentIntervalStart();
- var startDateRef = DateMath.safeClearTime(intervalStartDate);
-
- instance.flushViewCache();
-
- instance.hideEventsOverlay();
-
- instance.bodyNode.all(DOT+CSS_SVT_TABLE_DATA).remove();
-
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
- var weekDaysCount = Math.min(displayDaysInterval, WEEK_LENGTH);
-
- instance[TABLE_ROWS].each(function(rowNode, index) {
- var rowStartDate = DateMath.add(startDateRef, DateMath.DAY, weekDaysCount * index);
- var rowEndDate = DateMath.add(rowStartDate, DateMath.DAY, weekDaysCount - 1);
-
- var tableNode = instance.buildEventsTable(rowStartDate, rowEndDate);
-
- if (index === 0) {
- tableNode.addClass(CSS_SVT_TABLE_DATA_FIRST);
- }
-
- rowNode.append(tableNode);
- });
- },
-
- syncDaysHeaderUI: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
- var formatter = instance.get(HEADER_DATE_FORMATTER);
- var locale = instance.get(LOCALE);
- var firstDayOfWeekDt = instance._findFirstDayOfWeek(currentDate);
-
- instance.colHeaderDaysNode.all(DIV).each(
- function(columnNode, i) {
- var columnDate = DateMath.add(firstDayOfWeekDt, DateMath.DAY, i);
-
- columnNode.html(formatter.call(instance, columnDate));
- }
- );
- },
-
- syncGridUI: function() {
- var instance = this;
- var today = instance.getToday();
- var scheduler = instance.get(SCHEDULER);
-
- instance[COLUMN_TABLE_GRID].removeClass(CSS_SVT_COLGRID_TODAY);
-
- var intervalStartDate = instance._findCurrentIntervalStart();
- var intervalEndDate = instance._findCurrentIntervalEnd();
-
- if (DateMath.between(today, intervalStartDate, intervalEndDate)) {
- var firstDayOfWeek = scheduler.get(FIRST_DAY_OF_WEEK);
- var firstWeekDay = instance._findFirstDayOfWeek(today);
-
- var rowIndex = DateMath.getWeekNumber(today, firstDayOfWeek) - DateMath.getWeekNumber(intervalStartDate, firstDayOfWeek);
- var colIndex = (today.getDate() - firstWeekDay.getDate());
- var celIndex = instance._getCellIndex([colIndex, rowIndex]);
-
- var todayCel = instance[COLUMN_TABLE_GRID].item(celIndex);
-
- if (todayCel) {
- todayCel.addClass(CSS_SVT_COLGRID_TODAY);
- }
- }
- },
-
- syncStdContent: function() {
- var instance = this;
-
- instance.setStdModContent(
- WidgetStdMod.BODY, instance[ROWS_CONTAINER_NODE].getDOM());
-
- instance.setStdModContent(
- WidgetStdMod.HEADER, instance[HEADER_TABLE_NODE].getDOM());
- },
-
- _findCurrentIntervalEnd: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
-
- return DateMath.add(currentDate, DateMath.DAY, displayDaysInterval);
- },
-
- _findCurrentIntervalStart: function() {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- return scheduler.get(CURRENT_DATE);
- },
-
- _findFirstDayOfWeek: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var firstDayOfWeek = scheduler.get(FIRST_DAY_OF_WEEK);
-
- return DateMath.getFirstDayOfWeek(date, firstDayOfWeek);
- },
-
- _getDisplayRowsCount: function() {
- var instance = this;
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
-
- return Math.ceil(displayDaysInterval / WEEK_LENGTH);
- },
-
- _getDisplayRowDaysCount: function() {
- var instance = this;
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
-
- return Math.min(displayDaysInterval, WEEK_LENGTH);
- },
-
- _getEvtLabel: function(evt) {
- var instance = this;
- var endDate = evt.get(END_DATE);
- var startDate = evt.get(START_DATE);
-
- return [ startDate.getHours(), DASH, endDate.getHours(), SPACE, evt.get(CONTENT) ].join(EMPTY_STR);
- },
-
- _getEvtSplitInfo: function(evt, celDate, rowStartDate, rowEndDate) {
- var instance = this;
- var startDate = evt.getClearStartDate();
- var endDate = evt.getClearEndDate();
-
- var maxColspan = DateMath.getDayOffset(rowEndDate, celDate);
-
- var info = {
- colspan: Math.min(DateMath.getDayOffset(endDate, celDate), maxColspan) + 1,
- left: DateMath.before(startDate, rowStartDate),
- right: DateMath.after(endDate, rowEndDate)
- };
-
- return info;
- },
-
- _getRenderableEvent: function(events, rowStartDate, rowEndDate, celDate) {
- var instance = this;
-
- var key = String(celDate.getTime());
-
- if (!instance.evtRenderedStack[key]) {
- instance.evtRenderedStack[key] = [];
- }
-
- for (var i = 0; i < events.length; i++) {
- var evt = events[i];
-
- var startDate = evt.get(START_DATE);
-
- var isEventDateContinuation = DateMath.after(celDate, startDate) && !DateMath.isDayOverlap(celDate, rowStartDate);
- var isEventStartDateDay = !DateMath.isDayOverlap(startDate, celDate);
-
- var isRendered = A.Array.indexOf(instance.evtRenderedStack[key], evt) > -1;
-
- if (!isRendered && (isEventStartDateDay || isEventDateContinuation)) {
- return evt;
- }
- }
-
- return null;
- },
-
- _getTableGridNode: function(rowIndex) {
- var instance = this;
-
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
-
- var tableGridNode = instance[TABLE_GRID_NODE].item(rowIndex);
- var firstRowNode = tableGridNode.one(TR);
-
- for (var i = 0; i < Math.min(displayDaysInterval, WEEK_LENGTH); i++) {
- var columnNode = A.Node.create(TPL_SVT_GRID_COLUMN);
-
- firstRowNode.append(columnNode);
-
- instance[COLUMN_TABLE_GRID].push(columnNode);
- }
-
- return tableGridNode;
- },
-
- _onClickMore: function(event) {
- var instance = this;
-
- var target = event.target;
- var events = target.getData(EVENTS);
- var eventsNodeList = A.NodeList.create();
-
- A.Array.each(events, function(evt) {
- var evtNode = evt.get(NODE).item(0).clone();
-
- evtNode.setData(SCHEDULER_EVENT, evt);
-
- evtNode.setStyles({
- height: 'auto',
- left: 0,
- position: 'relative',
- top: 0,
- width: 'auto'
- });
-
- eventsNodeList.push(evtNode);
- });
-
- instance[EVENTS_OVERLAY].bodyNode.one(DOT+CSS_SVT_EVENTS_OVERLAY_NODE_BODY).setContent(eventsNodeList);
-
- instance[EVENTS_OVERLAY].setAttrs({
- visible: true,
- xy: target.getXY()
- });
- },
-
- _renderEventsOverlay: function() {
- var instance = this;
- var strings = instance.get(STRINGS);
-
- instance[EVENTS_OVERLAY] = new A.Overlay({
- align: {
- points: [ TL, TL ]
- },
- bodyContent: Lang.sub(
- TPL_SVT_EVENTS_OVERLAY_NODE,
- {
- label: strings[CLOSE]
- }
- ),
- render: instance[ROWS_CONTAINER_NODE],
- visible: false,
- width: 250,
- zIndex: 450
- });
-
- instance[EVENTS_OVERLAY].bodyNode.delegate('click', A.bind(instance.hideEventsOverlay, instance), DOT+CSS_SVT_EVENTS_OVERLAY_NODE_CLOSE);
- },
-
- _syncEventNodeContainerUI: function(evt, node, evtSplitInfo) {
- var instance = this;
-
- node.addClass(CSS_SVT_TABLE_DATA_EVENT);
-
- if (evtSplitInfo.left) {
- node.addClass(CSS_SVT_TABLE_DATA_EVENT_LEFT).prepend(TPL_SVT_EV_ICON_LEFT);
- }
-
- if (evtSplitInfo.right) {
- node.addClass(CSS_SVT_TABLE_DATA_EVENT_RIGHT).append(TPL_SVT_EV_ICON_RIGHT);
- }
-
- if (evt.get(PARENT_EVENT)) {
- node.addClass(CSS_SVT_TABLE_DATA_EVENT_REPEATED);
- }
- },
-
- _syncEventNodeUI: function(evt, container, celDate) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var firstDayOfWeek = scheduler.get(FIRST_DAY_OF_WEEK);
-
- var evtNodeList = evt.get(NODE);
- var startDate = evt.get(START_DATE);
-
- var intervalStartDate = DateMath.clearTime(instance._findCurrentIntervalStart());
- var startDateFirstDayOfWeek = DateMath.getFirstDayOfWeek(new Date(Math.max(startDate, intervalStartDate)), firstDayOfWeek);
- var paddingNodeIndex = Math.floor(DateMath.getDayOffset(celDate, startDateFirstDayOfWeek) / WEEK_LENGTH);
-
- if (evtNodeList.size() <= paddingNodeIndex) {
- evt.addPaddingNode();
- }
-
- var evtNode = evtNodeList.item(paddingNodeIndex);
-
- evtNode.setStyles({
- height: 'auto',
- left: 0,
- top: 0,
- width: 'auto'
- });
-
- evtNode.appendTo(container);
-
- evt.syncNodeUI();
- },
-
- _uiSetCurrentDate: function(val) {
- var instance = this;
-
- instance.syncDaysHeaderUI();
- instance.syncGridUI();
- },
-
- _valueColHeaderDaysNode: function() {
- var instance = this;
-
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
- var weekDaysCount = Math.min(displayDaysInterval, WEEK_LENGTH);
-
- return instance._valueNodeList(weekDaysCount, TPL_SVT_HEADER_DAY);
- },
-
- _valueTableGridNode: function() {
- var instance = this;
-
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
- var weekDaysCount = Math.min(displayDaysInterval, WEEK_LENGTH);
-
- return instance._valueNodeList(weekDaysCount, TPL_SVT_TABLE_GRID);
- },
-
- _valueNodeList: function(size, tpl) {
- var instance = this;
- var buffer = [];
-
- while (size--) {
- buffer.push(tpl);
- }
-
- return A.NodeList.create(buffer.join(EMPTY_STR));
- }
- }
- });
-
- A.SchedulerTableView = SchedulerTableView;
- var CSS_SVM_TABLE_DATA_COL_NOMONTH = getCN(SCHEDULER_VIEW_MONTH, TABLE, DATA, COL, NOMONTH);
-
- var SchedulerMonthView = A.Component.create({
- NAME: SCHEDULER_VIEW_MONTH,
-
- ATTRS: {
- displayDaysInterval: {
- readOnly: true,
- value: 42
- },
-
- name: {
- value: MONTH
- },
-
- navigationDateFormatter: {
- value: function(date) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- return A.DataType.Date.format(
- date,
- {
- format: '%B %Y',
- locale: scheduler.get(LOCALE)
- }
- );
- },
- validator: isFunction
- }
- },
-
- EXTENDS: A.SchedulerTableView,
-
- prototype: {
-
- getNextDate: function() {
- var instance = this;
-
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
-
- return DateMath.add(currentDate, DateMath.MONTH, 1);
- },
-
- getPrevDate: function() {
- var instance = this;
-
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
-
- return DateMath.subtract(currentDate, DateMath.MONTH, 1);
- },
-
- plotEvents: function() {
- var instance = this;
-
- A.SchedulerMonthView.superclass.plotEvents.apply(instance, arguments);
-
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
-
- var monthEnd = DateMath.findMonthEnd(currentDate);
- var monthStart = DateMath.findMonthStart(currentDate);
-
- var currentIntervalStart = instance._findCurrentIntervalStart();
-
- var colTitleNodes = instance[TABLE_ROW_CONTAINER].all(DOT+CSS_SVT_TABLE_DATA_COL_TITLE);
-
- colTitleNodes.each(function(colTitleNode, index) {
- var celDate = DateMath.add(currentIntervalStart, DateMath.DAY, index);
-
- if (DateMath.before(celDate, monthStart) || DateMath.after(celDate, monthEnd)) {
- colTitleNode.addClass(CSS_SVM_TABLE_DATA_COL_NOMONTH);
- }
- });
- },
-
- _findCurrentIntervalStart: function() {
- var instance = this;
-
- var scheduler = instance.get(SCHEDULER);
- var currentDate = scheduler.get(CURRENT_DATE);
-
- var monthStartDate = DateMath.findMonthStart(currentDate);
-
- return instance._findFirstDayOfWeek(monthStartDate);
- },
-
- _findFirstDayOfWeek: function(date) {
- var instance = this;
-
- var scheduler = instance.get(SCHEDULER);
- var firstDayOfWeek = scheduler.get(FIRST_DAY_OF_WEEK);
-
- return DateMath.getFirstDayOfWeek(date, firstDayOfWeek);
- }
-
- }
- });
-
- A.SchedulerMonthView = SchedulerMonthView;
- var CSS_SVT_DRAGGING = getCN(SCHEDULER_VIEW, TABLE, DRAGGING),
- CSS_SVT_LASSO = getCN(SCHEDULER_VIEW, TABLE, LASSO),
- CSS_SVT_PROXY_NODE = getCN(SCHEDULER_VIEW, TABLE, PROXY, NODE),
-
- TPL_SVT_LASSO = '<div class="' + CSS_SVT_LASSO + '"></div>',
- TPL_SVT_PROXY_NODE = '<div class="' + CSS_SVT_PROXY_NODE + '"></div>';
-
- A.SchedulerTableViewDD = function() {};
-
- A.SchedulerTableViewDD.ATTRS = {
-
- delegateConfig: {
- value: {},
- setter: function(val) {
- var instance = this;
-
- return A.merge(
- {
- dragConfig: {
- offsetNode: false,
- useShim: false
- },
- bubbleTargets: instance,
- container: instance.get(BOUNDING_BOX),
- nodes: DOT+CSS_SCHEDULER_EVENT,
- invalid: 'input, select, button, a, textarea, ' + DOT+CSS_SCHEDULER_EVENT_DISABLED
- },
- val || {}
- );
- },
- validator: isObject
- }
-
- };
-
- A.mix(A.SchedulerTableViewDD.prototype, {
-
- initializer: function() {
- var instance = this;
-
- instance[PROXY_NODE] = A.Node.create(TPL_SVT_PROXY_NODE);
-
- instance.after(instance.viewDDBindUI, instance, 'bindUI');
- instance.after(instance.viewDDRenderUI, instance, 'renderUI');
- instance.after(instance.viewDDSyncUI, instance, 'syncUI');
- },
-
- viewDDBindUI: function() {
- var instance = this;
- var recorder = instance.get(SCHEDULER).get(EVENT_RECORDER);
-
- if (recorder) {
- recorder.on({
- cancel: A.bind(instance.removeLasso, instance),
- save: A.bind(instance.removeLasso, instance)
- });
- }
-
- instance[ROWS_CONTAINER_NODE].on({
- mousedown: A.bind(instance._onMouseDownGrid, instance),
- mousemove: A.bind(instance._onMouseMoveGrid, instance),
- mouseup: A.bind(instance._onMouseUpGrid, instance)
- });
-
- instance.after('drag:align', instance._afterDragAlign);
- instance.on('drag:end', instance._onEventDragEnd);
- instance.on('drag:start', instance._onEventDragStart);
- },
-
- viewDDRenderUI: function() {
- var instance = this;
-
- },
-
- viewDDSyncUI: function() {
- var instance = this;
-
- instance._setupDragDrop();
- },
-
- removeLasso: function() {
- var instance = this;
-
- if (instance[LASSO]) {
- instance[LASSO].remove();
- }
- },
-
- removeProxy: function() {
- var instance = this;
-
- if (instance[PROXY_NODE]) {
- instance[PROXY_NODE].remove();
- }
- },
-
- renderLasso: function(startPos, endPos) {
- var instance = this;
-
- var minPos = startPos;
- var maxPos = endPos;
-
- if (startPos[1] > endPos[1]) {
- minPos = endPos;
- maxPos = startPos;
- }
-
- var imin = minPos[0], jmin = minPos[1],
- imax = maxPos[0], jmax = maxPos[1];
-
- instance.removeLasso();
-
- instance.lasso = A.NodeList.create();
-
- for (var j = jmin; j <= jmax; j++) {
- var h = instance.gridCellHeight,
- w = instance.gridCellWidth,
- x = 0,
- y = (h * j);
-
- if (j === jmin) {
- if (jmin === jmax) {
- x += Math.min(imin, imax) * w;
- w *= Math.abs(imax - imin) + 1;
- }
- else {
- x += imin * w;
- w *= WEEK_LENGTH - imin;
- }
- }
- else if (j === jmax) {
- w *= imax + 1;
- }
- else {
- w *= WEEK_LENGTH;
- }
-
- var lassoNode = A.Node.create(TPL_SVT_LASSO);
-
- instance.lasso.push(lassoNode);
-
- instance[ROWS_CONTAINER_NODE].append(lassoNode);
- lassoNode.sizeTo(w, h);
- lassoNode.setXY(instance._offsetXY([x, y], 1));
- }
- },
-
- _afterDragAlign: function(event) {
- var instance = this;
- var dd = event.target;
-
- var bodyRegion = instance.bodyNode.get(REGION);
-
- var mouseRegion = {
- bottom: event.pageY,
- left: event.pageX,
- right: event.pageX,
- top: event.pageY
- };
-
- if (!A.DOM.inRegion(null, bodyRegion, true, mouseRegion)) {
- return;
- }
-
- var draggingEvent = instance[DRAGGING_EVENT];
- var eventXY = [event.pageX, event.pageY];
- var position = instance._findPosition(instance._offsetXY(eventXY, -1));
-
- if (draggingEvent && instance._hasLassoChanged(position)) {
- instance.lassoLastPosition = position;
-
- var endPositionDate = DateMath.add(
- instance._getPositionDate(position),
- DateMath.MINUTES,
- draggingEvent.getMinutesDuration()
- );
-
- instance.renderLasso(position, instance._getDatePosition(endPositionDate));
- }
- },
-
- _findPosition: function(xy) {
- var instance = this;
-
- var i = Math.floor(xy[0] / instance.gridCellWidth);
- var j = Math.floor(xy[1] / instance.gridCellHeight);
-
- return [i, j];
- },
-
- _getCellIndex: function(position) {
- var instance = this;
-
- return position[1] * WEEK_LENGTH + position[0];
- },
-
- _getDatePosition: function(date) {
- var instance = this;
-
- var intervalStartDate = instance._findCurrentIntervalStart();
- var offset = DateMath.getDayOffset(date, intervalStartDate);
-
- var position = [];
-
- position[1] = Math.floor(offset / WEEK_LENGTH);
- position[0] = offset % WEEK_LENGTH;
-
- return position;
- },
-
- _getPositionDate: function(position) {
- var instance = this;
- var intervalStartDate = instance._findCurrentIntervalStart();
- var startDateRef = DateMath.safeClearTime(instance._findFirstDayOfWeek(intervalStartDate));
-
- var date = DateMath.add(startDateRef, DateMath.DAY, instance._getCellIndex(position));
-
- date.setHours(0, 0, 0, 0);
-
- return date;
- },
-
- _hasLassoChanged: function(position) {
- var instance = this;
-
- var lassoLastPosition = instance.lassoLastPosition || instance.lassoStartPosition;
-
- return lassoLastPosition && ((position[0] !== lassoLastPosition[0]) || (position[1] !== lassoLastPosition[1]));
- },
-
- _offsetXY: function(xy, sign) {
- var instance = this;
- var offsetXY = instance[ROWS_CONTAINER_NODE].getXY();
-
- return [ xy[0] + offsetXY[0]*sign, xy[1] + offsetXY[1]*sign ];
- },
-
- _onEventDragEnd: function(event) {
- var instance = this;
- var draggingEvent = instance[DRAGGING_EVENT];
-
- if (draggingEvent) {
- draggingEvent.move(instance._getPositionDate(instance.lassoLastPosition));
- draggingEvent.set(VISIBLE, true);
-
- instance[ROWS_CONTAINER_NODE].removeClass(CSS_SVT_DRAGGING).unselectable();
-
- event.target.set(DRAG_NODE, instance.originalDragNode);
-
- instance.removeLasso();
- instance.removeProxy();
-
- instance.get(SCHEDULER).syncEventsUI();
- }
-
- instance[DRAGGING_EVENT] = null;
- },
-
- _onEventDragStart: function(event) {
- var instance = this;
- var draggingEvent = instance[DRAGGING_EVENT] = instance[DELEGATE][DD].get(NODE).getData(SCHEDULER_EVENT);
-
- if (draggingEvent) {
- instance._syncCellDimensions();
-
- var eventXY = [event.pageX, event.pageY];
-
- var startPosition = instance._findPosition(instance._offsetXY(eventXY, -1));
-
- var endPositionDate = DateMath.add(
- instance._getPositionDate(startPosition),
- DateMath.MINUTES,
- draggingEvent.getMinutesDuration()
- );
-
- instance.renderLasso(startPosition, instance._getDatePosition(endPositionDate));
-
- draggingEvent.set(VISIBLE, false);
-
- instance._syncProxyNodeUI(draggingEvent);
-
- instance.lassoStartPosition = instance.lassoLastPosition = startPosition;
-
- instance[ROWS_CONTAINER_NODE].addClass(CSS_SVT_DRAGGING).unselectable();
-
- instance.originalDragNode = event.target.get(DRAG_NODE);
-
- event.target.set(DRAG_NODE, instance[PROXY_NODE]);
- }
- },
-
- _onMouseDownGrid: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var recorder = scheduler.get(EVENT_RECORDER);
- var target = event.target;
-
- if (recorder && target.test([DOT+CSS_SVT_COLGRID, DOT+CSS_SVT_TABLE_DATA_COL].join(COMMA))) {
- instance._recording = true;
-
- instance._syncCellDimensions();
-
- var eventXY = instance._offsetXY([event.pageX, event.pageY], -1);
-
- instance.lassoStartPosition = instance.lassoLastPosition = instance._findPosition(eventXY);
-
- instance.renderLasso(instance.lassoStartPosition, instance.lassoLastPosition);
-
- instance[ROWS_CONTAINER_NODE].unselectable();
- }
- },
-
- _onMouseMoveGrid: function(event) {
- var instance = this;
- var target = event.currentTarget;
-
- var eventXY = [event.pageX, event.pageY];
- var position = instance._findPosition(instance._offsetXY(eventXY, -1));
-
- if (instance._recording && instance._hasLassoChanged(position)) {
- instance.lassoLastPosition = position;
-
- instance.renderLasso(instance.lassoStartPosition, position);
- }
- },
-
- _onMouseUpGrid: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
- var recorder = scheduler.get(EVENT_RECORDER);
-
- if (recorder && instance._recording && !scheduler.get(DISABLED)) {
- var startPositionDate = instance._getPositionDate(instance.lassoStartPosition);
- var endPositionDate = instance._getPositionDate(instance.lassoLastPosition);
-
- var startDate = new Date(Math.min(startPositionDate, endPositionDate));
- startDate.setHours(0, 0, 0);
-
- var endDate = new Date(Math.max(startPositionDate, endPositionDate));
- endDate.setHours(23, 59, 59);
-
- recorder.set(ALL_DAY, true);
- recorder.set(END_DATE, endDate);
- recorder.set(START_DATE, startDate);
-
- recorder.showOverlay([event.pageX, event.pageY]);
-
- instance._recording = false;
- }
- },
-
- _setupDragDrop: function() {
- var instance = this;
-
- if (!instance[DELEGATE]) {
- instance[DELEGATE] = new A.DD.Delegate(
- instance.get(DELEGATE_CONFIG));
- }
-
- var dd = instance[DELEGATE][DD];
-
- dd.unplug(A.Plugin.DDConstrained);
- dd.unplug(A.Plugin.DDNodeScroll);
- dd.unplug(A.Plugin.DDProxy);
-
- dd.plug(A.Plugin.DDConstrained, {
- bubbleTargets: instance,
- constrain: instance.bodyNode
- });
-
- dd.plug(A.Plugin.DDNodeScroll, {
- node: instance.bodyNode,
- scrollDelay: 150
- });
-
- dd.plug(A.Plugin.DDProxy, {
- moveOnEnd: false,
- positionProxy: false
- });
- },
-
- _syncCellDimensions: function() {
- var instance = this;
-
- var displayDaysInterval = instance.get(DISPLAY_DAYS_INTERVAL);
- var displayRowsCount = Math.ceil(displayDaysInterval / WEEK_LENGTH);
- var weekDaysCount = Math.min(displayDaysInterval, WEEK_LENGTH);
-
- instance.gridCellHeight = instance[ROWS_CONTAINER_NODE].get(OFFSET_HEIGHT) / displayRowsCount;
- instance.gridCellWidth = instance[ROWS_CONTAINER_NODE].get(OFFSET_WIDTH) / weekDaysCount;
- },
-
- _syncProxyNodeUI: function(evt) {
- var instance = this;
-
- var eventNode = evt.get(NODE).item(0);
-
- instance[PROXY_NODE].setStyles({
- backgroundColor: eventNode.getStyle('backgroundColor'),
- display: 'block',
- width: '200px'
- });
-
- instance[PROXY_NODE].appendTo(instance[ROWS_CONTAINER_NODE]);
- instance[PROXY_NODE].setContent(evt.get(CONTENT));
- }
- });
-
- A.Base.mix(A.SchedulerTableView, [ A.SchedulerTableViewDD ]);
-
- }, '@VERSION@' ,{skinnable:true, requires:['aui-scheduler-event','aui-calendar','aui-button-item','dd-drag','dd-delegate','dd-drop','dd-constrain']});
- AUI.add('aui-scheduler-event', function(A) {
- var Lang = A.Lang,
- isString = Lang.isString,
- isDate = Lang.isDate,
- isFunction = Lang.isFunction,
- isObject = Lang.isObject,
- isBoolean = Lang.isBoolean,
- isNumber = Lang.isNumber,
-
- ColorUtil = A.ColorUtil,
- DateMath = A.DataType.DateMath,
-
- _toInitialCap = A.cached(function(str) {
- return str.substring(0, 1).toUpperCase() + str.substring(1);
- }),
-
- DASH = '-',
- NDASH = '–',
- DOT = '.',
- EMPTY_STR = '',
- SPACE = ' ',
- UNDERLINE = '_',
-
- _PROPAGATE_SET = '_propagateSet',
-
- ACTIVE_VIEW = 'activeView',
- BORDER_COLOR = 'borderColor',
- BORDER_COLOR_RGB = 'borderColorRGB',
- BORDER_STYLE = 'borderStyle',
- BORDER_WIDTH = 'borderWidth',
- CHANGE = 'Change',
- COLOR = 'color',
- COLOR_BRIGHTNESS_FACTOR = 'colorBrightnessFactor',
- COLOR_SATURATION_FACTOR = 'colorSaturationFactor',
- CONTENT = 'content',
- DISABLED = 'disabled',
- DURATION = 'duration',
- END_DATE = 'endDate',
- EVENT_CLASS = 'eventClass',
- EVENT_STACK = 'eventStack',
- EVENTS = 'events',
- HIDDEN = 'hidden',
- HSB_COLOR = 'hsbColor',
- ICON = 'icon',
- ICONS = 'icons',
- ID = 'id',
- INHERIT = 'inherit',
- ISO_TIME = 'isoTime',
- LOCALE = 'locale',
- NEVER = 'never',
- NODE = 'node',
- OVERLAY = 'overlay',
- PARENT_EVENT = 'parentEvent',
- RECORDER = 'recorder',
- REPEAT = 'repeat',
- REPEATED = 'repeated',
- REPEATED_EVENTS = 'repeatedEvents',
- REPEATER = 'repeater',
- SCHEDULER = 'scheduler',
- SCHEDULER_EVENT = 'scheduler-event',
- SCHEDULER_EVENT_RECORDER = 'scheduler-event-recorder',
- START_DATE = 'startDate',
- TEMPLATE = 'template',
- TITLE = 'title',
- TITLE_DATE_FORMAT = 'titleDateFormat',
- VISIBLE = 'visible',
-
- TITLE_DT_FORMAT_ISO = '%H:%M',
- TITLE_DT_FORMAT_US = '%I:%M',
-
- getCN = A.getClassName,
-
- CSS_ICON = getCN(ICON),
- CSS_SCHEDULER_EVENT = getCN(SCHEDULER_EVENT),
- CSS_SCHEDULER_EVENT_CONTENT = getCN(SCHEDULER_EVENT, CONTENT),
- CSS_SCHEDULER_EVENT_HIDDEN = getCN(SCHEDULER_EVENT, HIDDEN),
- CSS_SCHEDULER_EVENT_DISABLED = getCN(SCHEDULER_EVENT, DISABLED),
- CSS_SCHEDULER_EVENT_RECORDER = getCN(SCHEDULER_EVENT, RECORDER),
- CSS_SCHEDULER_EVENT_REPEATED = getCN(SCHEDULER_EVENT, REPEATED),
- CSS_SCHEDULER_EVENT_REPEATER = getCN(SCHEDULER_EVENT, REPEATER),
- CSS_SCHEDULER_EVENT_TITLE = getCN(SCHEDULER_EVENT, TITLE),
- CSS_SCHEDULER_EVENT_ICONS = getCN(SCHEDULER_EVENT, ICONS),
- CSS_SCHEDULER_EVENT_ICON_DISABLED = getCN(SCHEDULER_EVENT, ICON, DISABLED),
- CSS_SCHEDULER_EVENT_ICON_REPEATED = getCN(SCHEDULER_EVENT, ICON, REPEATED),
- CSS_SCHEDULER_EVENT_ICON_REPEATER = getCN(SCHEDULER_EVENT, ICON, REPEATER);
-
- var SchedulerEvent = A.Component.create({
- NAME: SCHEDULER_EVENT,
-
- ATTRS: {
- allDay: {
- setter: A.DataType.Boolean.parse,
- value: false
- },
-
- borderStyle: {
- value: 'solid',
- validator: isString
- },
-
- borderWidth: {
- value: '1px',
- validator: isString
- },
-
- colorBrightnessFactor: {
- value: 0.75,
- validator: isNumber
- },
-
- colorSaturationFactor: {
- value: 1.5,
- validator: isNumber
- },
-
- content: {
- value: '(no title)',
- validator: isString
- },
-
- color: {
- lazyAdd: false,
- setter: '_setColor',
- value: '#D96666',
- validator: isString
- },
-
- titleDateFormat: {
- getter: '_getTitleDateFormat',
- validator: isString
- },
-
- endDate: {
- setter: '_setDate',
- valueFn: function() {
- var date = DateMath.clone(this.get(START_DATE));
-
- date.setHours(date.getHours() + 1);
-
- return date;
- }
- },
-
- eventClass: {
- valueFn: function() {
- return A.SchedulerEvent;
- }
- },
-
- disabled: {
- value: false,
- validator: isBoolean
- },
-
- node: {
- valueFn: function() {
- return A.NodeList.create(A.Node.create(this.EVENT_NODE_TEMPLATE).setData(SCHEDULER_EVENT, this));
- }
- },
-
- parentEvent: {
- },
-
- repeat: {
- value: EMPTY_STR,
- setter: '_setRepeat'
- },
-
- scheduler: {
- lazyAdd: false,
- setter: '_setScheduler'
- },
-
- startDate: {
- setter: '_setDate',
- valueFn: function() {
- return new Date();
- }
- },
-
- visible: {
- value: true,
- validator: isBoolean
- }
- },
-
- EXTENDS: A.Base,
-
- PROPAGATE_ATTRS: [START_DATE, END_DATE, CONTENT, COLOR, COLOR_BRIGHTNESS_FACTOR, COLOR_SATURATION_FACTOR, BORDER_STYLE, BORDER_WIDTH, TITLE_DATE_FORMAT, VISIBLE, DISABLED],
-
- prototype: {
- EVENT_NODE_TEMPLATE: '<div class="' + CSS_SCHEDULER_EVENT + '">' +
- '<div class="' + CSS_SCHEDULER_EVENT_TITLE + '"></div>' +
- '<div class="' + CSS_SCHEDULER_EVENT_CONTENT + '"></div>' +
- '<div class="' + CSS_SCHEDULER_EVENT_ICONS + '">' +
- '<span class="' + [CSS_ICON, CSS_SCHEDULER_EVENT_ICON_REPEATED].join(SPACE) + '"></span>' +
- '<span class="' + [CSS_ICON, CSS_SCHEDULER_EVENT_ICON_REPEATER].join(SPACE) + '"></span>' +
- '<span class="' + [CSS_ICON, CSS_SCHEDULER_EVENT_ICON_DISABLED].join(SPACE) + '"></span>' +
- '</div>' +
- '</div>',
-
- eventStack: null,
-
- initializer: function() {
- var instance = this;
- var node = instance.get(NODE);
-
- instance[EVENT_STACK] = {};
-
- A.Array.each(instance.get(EVENT_CLASS).PROPAGATE_ATTRS, function(attrName) {
- instance.after(attrName+CHANGE, instance._propagateAttrChange);
- });
-
- instance._bindUIAttrs();
-
- instance.syncNodeUI(true);
- },
-
- destroy: function() {
- var instance = this;
-
- instance.eachRepeatedEvent(function(evt, uid) {
- evt.destroy();
- });
-
- instance[EVENT_STACK] = {};
- instance.get(NODE).remove(true);
- },
-
- addPaddingNode: function() {
- var instance = this;
-
- instance.get(NODE).push(A.Node.create(instance.EVENT_NODE_TEMPLATE).setData(SCHEDULER_EVENT, instance));
-
- instance.syncNodeUI();
- },
-
- copyDates: function(evt) {
- var instance = this;
-
- instance.set(END_DATE, DateMath.clone(evt.get(END_DATE)));
- instance.set(START_DATE, DateMath.clone(evt.get(START_DATE)));
- },
-
- copyPropagateAttrValues: function(evt, dontCopyMap) {
- var instance = this;
-
- instance.copyDates(evt);
-
- A.Array.each(instance.get(EVENT_CLASS).PROPAGATE_ATTRS, function(attrName) {
- if ( !((dontCopyMap || {}).hasOwnProperty(attrName)) ) {
- var value = evt.get(attrName);
-
- if (!isObject(value)) {
- instance.set(attrName, value);
- }
- }
- });
- },
-
- getBorderColor: function() {
- var instance = this;
-
- return instance[BORDER_COLOR_RGB].hex;
- },
-
- getDaysDuration: function() {
- var instance = this;
-
- return DateMath.getDayOffset(
- instance.get(END_DATE), instance.get(START_DATE));
- },
-
- getHoursDuration: function() {
- var instance = this;
-
- return DateMath.getHoursOffset(
- instance.get(END_DATE), instance.get(START_DATE));
- },
-
- getMinutesDuration: function() {
- var instance = this;
-
- return DateMath.getMinutesOffset(
- instance.get(END_DATE), instance.get(START_DATE));
- },
-
- getSecondsDuration: function() {
- var instance = this;
-
- return DateMath.getSecondsOffset(
- instance.get(END_DATE), instance.get(START_DATE));
- },
-
- sameEndDate: function(evt) {
- var instance = this;
-
- return DateMath.compare(instance.get(END_DATE), evt.get(END_DATE));
- },
-
- sameStartDate: function(evt) {
- var instance = this;
-
- return DateMath.compare(
- instance.get(START_DATE), evt.get(START_DATE));
- },
-
- isAfter: function(evt) {
- var instance = this;
- var startDate = instance.get(START_DATE);
- var evtStartDate = evt.get(START_DATE);
-
- return DateMath.after(startDate, evtStartDate);
- },
-
- isBefore: function(evt) {
- var instance = this;
- var startDate = instance.get(START_DATE);
- var evtStartDate = evt.get(START_DATE);
-
- return DateMath.before(startDate, evtStartDate);
- },
-
- repeatByDate: function(date) {
- var instance = this;
- var uid = instance.uidByDate(date);
-
- if (!instance[EVENT_STACK][uid]) {
- var startDate = DateMath.clone(date);
- var endDate = DateMath.clone(date);
-
- DateMath.copyHours(startDate, instance.get(START_DATE));
- DateMath.copyHours(endDate, instance.get(END_DATE));
-
- var newEvt = new instance.get(EVENT_CLASS)({
- endDate: endDate,
- parentEvent: instance,
- scheduler: instance.get(SCHEDULER),
- startDate: startDate
- });
-
- newEvt.copyPropagateAttrValues(instance);
-
- instance[EVENT_STACK][uid] = newEvt;
- }
-
- return instance[EVENT_STACK][uid];
- },
-
- intersects: function(evt) {
- var instance = this;
- var endDate = instance.get(END_DATE);
- var startDate = instance.get(START_DATE);
- var evtStartDate = evt.get(START_DATE);
-
- return (instance.sameStartDate(evt) ||
- DateMath.between(evtStartDate, startDate, endDate));
- },
-
- intersectHours: function(evt) {
- var instance = this;
- var endDate = instance.get(END_DATE);
- var startDate = instance.get(START_DATE);
- var evtModifiedStartDate = DateMath.clone(startDate);
-
- DateMath.copyHours(evtModifiedStartDate, evt.get(START_DATE));
-
- return (DateMath.compare(startDate, evtModifiedStartDate) ||
- DateMath.between(evtModifiedStartDate, startDate, endDate));
- },
-
- isDayBoundaryEvent: function() {
- var instance = this;
-
- return DateMath.isDayBoundary(
- instance.get(START_DATE), instance.get(END_DATE));
- },
-
- isDayOverlapEvent: function() {
- var instance = this;
-
- return DateMath.isDayOverlap(
- instance.get(START_DATE), instance.get(END_DATE));
- },
-
- isRepeatableDate: function(date) {
- var instance = this;
- var repeat = instance.get(REPEAT);
-
- return (repeat && repeat.validate(instance, date));
- },
-
- getClearEndDate: function() {
- var instance = this;
-
- return DateMath.safeClearTime(instance.get(END_DATE));
- },
-
- getClearStartDate: function() {
- var instance = this;
-
- return DateMath.safeClearTime(instance.get(START_DATE));
- },
-
- move: function(date) {
- var instance = this;
- var duration = instance.getMinutesDuration();
-
- instance.set(START_DATE, date);
- instance.set(END_DATE, DateMath.add(DateMath.clone(date), DateMath.MINUTES, duration));
- },
-
- uidByDate: function(date) {
- var instance = this;
-
- date = isDate(date) ?
- DateMath.safeClearTime(date) : instance.getClearStartDate();
-
- return [SCHEDULER_EVENT, date.getTime()].join(UNDERLINE);
- },
-
- setContent: function(content, propagate) {
- var instance = this;
-
- instance.get(NODE).each(function(node) {
- var contentNode = node.one(_DOT+CSS_SCHEDULER_EVENT_CONTENT);
-
- contentNode.setContent(content);
- });
-
- if (propagate) {
- instance.eachRepeatedEvent(function(evt, uid) {
- evt.setContent(content);
- });
- }
- },
-
- setTitle: function(content, propagate) {
- var instance = this;
-
- instance.get(NODE).each(function(node) {
- var titleNode = node.one(_DOT+CSS_SCHEDULER_EVENT_TITLE);
-
- titleNode.setContent(content);
- });
-
- if (propagate) {
- instance.eachRepeatedEvent(function(evt, uid) {
- evt.setTitle(content);
- });
- }
- },
-
- syncNodeUI: function(propagate) {
- var instance = this;
-
- instance._syncUIAttrs();
- instance.syncNodeColorUI(propagate);
- instance.syncNodeTitleUI(propagate);
- instance.syncNodeContentUI(propagate);
- },
-
- syncNodeColorUI: function(propagate) {
- var instance = this;
- var node = instance.get(NODE);
- var borderColor = instance.getBorderColor();
-
- if (node) {
- var styles = {
- borderWidth: instance.get(BORDER_WIDTH),
- borderColor: borderColor,
- backgroundColor: instance.get(COLOR),
- borderStyle: instance.get(BORDER_STYLE),
- color: INHERIT
- };
-
- node.setStyles(styles);
- }
-
- if (propagate) {
- instance.eachRepeatedEvent(function(evt, uid) {
- evt.syncNodeColorUI();
- });
- }
- },
-
- syncNodeContentUI: function(propagate) {
- var instance = this;
-
- instance.setContent(instance.get(CONTENT), propagate);
- },
-
- syncNodeTitleUI: function(propagate) {
- var instance = this;
- var sDate = instance._formatDate(instance.get(START_DATE));
- var eDate = instance._formatDate(instance.get(END_DATE));
-
- instance.setTitle([sDate, eDate].join(SPACE+NDASH+SPACE), propagate);
- },
-
- split: function() {
- var instance = this,
- s1 = DateMath.clone(instance.get(START_DATE)),
- e1 = DateMath.clone(instance.get(END_DATE));
-
- if (instance.isDayOverlapEvent() && !instance.isDayBoundaryEvent()) {
- var s2 = DateMath.clone(s1);
- s2.setHours(24,0,0,0);
-
- return [ [ s1, DateMath.toMidnight(DateMath.clone(s1)) ], [ s2, DateMath.clone(e1) ] ];
- }
-
- return [ [ s1, e1 ] ];
- },
-
- eachRepeatedEvent: function(fn) {
- var instance = this;
-
- A.each(instance[EVENT_STACK], fn, instance);
- },
-
- unlink: function() {
- var instance = this;
-
- if (instance.get(PARENT_EVENT)) {
- instance.set(PARENT_EVENT, null);
- }
- else {
- instance.eachRepeatedEvent(function(evt, uid) {
- evt.unlink();
- });
- }
-
- instance[EVENT_STACK] = {};
-
- instance.syncNodeUI();
- },
-
- _afterDisabledChange: function(event) {
- var instance = this;
-
- instance._uiSetDisabled(event.newVal);
- },
-
- _afterVisibleChange: function(event) {
- var instance = this;
-
- instance._uiSetVisible(event.newVal);
- },
-
- _afterRepeatChange: function(event) {
- var instance = this;
-
- instance._uiSetRepeat(event.newVal);
- },
-
- _afterParentEventChange: function(event) {
- var instance = this;
-
- instance._uiSetParentEvent(event.newVal);
- },
-
- _bindUIAttrs: function() {
- var instance = this;
-
- instance.after({
- disabledChange: instance._afterDisabledChange,
- visibleChange: instance._afterVisibleChange,
- parentEventChange: instance._afterParentEventChange,
- repeatChange: instance._afterRepeatChange
- });
-
- instance._syncUIAttrs();
- },
-
- _propagateAttrChange: function(event) {
- var instance = this;
- var attrName = event.attrName;
- var newVal = event.newVal;
-
- instance.eachRepeatedEvent(function(evt, uid) {
- var propFn = evt[_PROPAGATE_SET+_toInitialCap(attrName)];
-
- if (propFn) {
- propFn.apply(instance, [evt, attrName, newVal]);
- }
- else {
- evt.set(attrName, event.newVal);
- }
-
- evt.syncNodeUI();
- });
-
- instance.syncNodeUI();
- },
-
- _propagateSetEndDate: function(evt, attrName, val) {
- var endDate = DateMath.clone(evt.get(END_DATE));
-
- DateMath.copyHours(endDate, val);
- evt.set(END_DATE, endDate);
- },
-
- _propagateSetStartDate: function(evt, attrName, val) {
- var startDate = DateMath.clone(evt.get(START_DATE));
-
- DateMath.copyHours(startDate, val);
- evt.set(START_DATE, startDate);
- },
-
- _setColor: function(val) {
- var instance = this;
-
- instance[HSB_COLOR] = ColorUtil.rgb2hsb(ColorUtil.getRGB(val));
- instance[BORDER_COLOR] = A.clone(instance[HSB_COLOR]);
- instance[BORDER_COLOR].b *= instance.get(COLOR_BRIGHTNESS_FACTOR);
- instance[BORDER_COLOR].s *= instance.get(COLOR_SATURATION_FACTOR);
- instance[BORDER_COLOR_RGB] = ColorUtil.hsb2rgb(instance[BORDER_COLOR]);
-
- return val;
- },
-
- _setDate: function(val) {
- var instance = this;
-
- if (isNumber(val)) {
- val = new Date(val);
- }
-
- return val;
- },
-
- _setRepeat: function(val) {
- var instance = this;
-
- if (isString(val)) {
- val = A.SchedulerEventRepeat[val];
- }
-
- return isObject(val) ? val : null;
- },
-
- _setScheduler: function(val) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- if (scheduler) {
- instance.removeTarget(scheduler);
- }
-
- instance.addTarget(val);
-
- return val;
- },
-
- _syncUIAttrs: function() {
- var instance = this;
-
- instance._uiSetDisabled(
- instance.get(DISABLED)
- );
- instance._uiSetVisible(
- instance.get(VISIBLE)
- );
- instance._uiSetParentEvent(
- instance.get(PARENT_EVENT)
- );
- instance._uiSetRepeat(
- instance.get(REPEAT)
- );
- },
-
- _formatDate: function(date, format) {
- var instance = this;
- var locale = instance.get(LOCALE);
-
- format = format || instance.get(TITLE_DATE_FORMAT);
-
- return A.DataType.Date.format(date, {
- format: format,
- locale: locale
- });
- },
-
- _getTitleDateFormat: function(val) {
- var instance = this;
-
- if (!isString(val)) {
- var scheduler = instance.get(SCHEDULER);
-
- val = (scheduler && scheduler.get(ACTIVE_VIEW).get(ISO_TIME)) ? TITLE_DT_FORMAT_ISO : TITLE_DT_FORMAT_US;
- }
-
- return val;
- },
-
- _uiSetDisabled: function(val) {
- var instance = this;
-
- instance.get(NODE).toggleClass(CSS_SCHEDULER_EVENT_DISABLED, !!val);
- },
-
- _uiSetParentEvent: function(val) {
- var instance = this;
-
- instance.get(NODE).toggleClass(CSS_SCHEDULER_EVENT_REPEATED, !!val);
- },
-
- _uiSetRepeat: function(val) {
- var instance = this;
- var value = !!val && val !== A.SchedulerEventRepeat[NEVER];
-
- instance.get(NODE).toggleClass(CSS_SCHEDULER_EVENT_REPEATER, value);
- },
-
- _uiSetVisible: function(val) {
- var instance = this;
-
- instance.get(NODE).toggleClass(CSS_SCHEDULER_EVENT_HIDDEN, !val);
- }
- }
- });
-
- A.SchedulerEvent = SchedulerEvent;
- A.SchedulerEventRepeat = {
- never: {
- description: 'Never repeat',
- validate: function(evt, date) {
- return false;
- },
- value: 'never'
- },
-
- daily: {
- description: 'Every day',
- validate: function(evt, date) {
- return true;
- },
- value: 'daily'
- },
-
- monthly: {
- description: 'Every month',
- validate: function(evt, date) {
- var endDate = evt.get(END_DATE);
- var startDate = evt.get(START_DATE);
-
- return (startDate.getDate() === date.getDate());
- },
- value: 'monthly'
- },
-
- monWedFri: {
- description: 'Every Monday, Wednesday and Friday',
- validate: function(evt, date) {
- return DateMath.isMonWedOrFri(date);
- },
- value: 'monWedFri'
- },
-
- tuesThurs: {
- description: 'Every Tuesday and Thursday',
- validate: function(evt, date) {
- return DateMath.isTueOrThu(date);
- },
- value: 'tuesThurs'
- },
-
- weekDays: {
- description: 'Every week days',
- validate: function(evt, date) {
- return DateMath.isWeekDay(date);
- },
- value: 'weekDays'
- },
-
- weekly: {
- description: 'Every week',
- validate: function(evt, date) {
- var endDate = evt.get(END_DATE);
- var startDate = evt.get(START_DATE);
-
- return (startDate.getDay() === date.getDay());
- },
- value: 'weekly'
- },
-
- yearly: {
- description: 'Every year',
- validate: function(evt, date) {
- var endDate = evt.get(END_DATE);
- var startDate = evt.get(START_DATE);
-
- return ((startDate.getMonth() === date.getMonth()) && (startDate.getDay() === date.getDay()));
- },
- value: 'yearly'
- }
-
- };
- var L = A.Lang,
- isArray = L.isArray,
- isObject = L.isObject,
-
- ACTIVE_VIEW = 'activeView',
- ALL_DAY = 'allDay',
- ARROW = 'arrow',
- BODY = 'body',
- BODY_CONTENT = 'bodyContent',
- BOUNDING_BOX = 'boundingBox',
- CANCEL = 'cancel',
- CLICK = 'click',
- CONTENT = 'content',
- DATE = 'date',
- DATE_FORMAT = 'dateFormat',
- DELETE = 'delete',
- DESCRIPTION = 'description',
- EDIT = 'edit',
- EVENT = 'event',
- EVENT_CLASS = 'eventClass',
- FOOTER_CONTENT = 'footerContent',
- FORM = 'form',
- HEADER = 'header',
- HIDE = 'hide',
- ISO_TIME = 'isoTime',
- LINK = 'link',
- NODE = 'node',
- OFFSET_HEIGHT = 'offsetHeight',
- OFFSET_WIDTH = 'offsetWidth',
- OVERLAY = 'overlay',
- OVERLAY_OFFSET = 'overlayOffset',
- RECORDER = 'recorder',
- RENDERED = 'rendered',
- REPEAT = 'repeat',
- SAVE = 'save',
- SCHEDULER = 'scheduler',
- SCHEDULER_CHANGE = 'schedulerChange',
- SCHEDULER_EVENT = 'scheduler-event',
- SCHEDULER_EVENT_RECORDER = 'scheduler-event-recorder',
- SHADOW = 'shadow',
- SHOW = 'show',
- START_DATE_CHANGE = 'startDateChange',
- STRINGS = 'strings',
- TEMPLATE = 'template',
- TITLE = 'title',
- TL = 'tl',
- TOOLBAR = 'toolbar',
- SUBMIT = 'submit',
- VALUE = 'value',
- VISIBLE_CHANGE = 'visibleChange',
- WHEN = 'when',
- X = 'x',
- Y = 'y',
-
- EV_SCHEDULER_EVENT_RECORDER_CANCEL = 'cancel',
- EV_SCHEDULER_EVENT_RECORDER_DELETE = 'delete',
- EV_SCHEDULER_EVENT_RECORDER_EDIT = 'edit',
- EV_SCHEDULER_EVENT_RECORDER_SAVE = 'save',
-
- _DASH = '-',
- _DOT = '.',
- _EMPTY_STR = '',
- _POUND = '#',
-
- _serialize = A.IO.prototype._serialize,
-
- getCN = A.getClassName,
-
- CSS_SCHEDULER_EVENT = getCN(SCHEDULER, EVENT),
- CSS_SCHEDULER_EVENT_RECORDER = getCN(SCHEDULER, EVENT, RECORDER),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_ARROW = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, ARROW),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_ARROW_SHADOW = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, ARROW, SHADOW),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_BODY = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, BODY),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_CONTENT = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, CONTENT),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_DATE = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, DATE),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_FORM = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, FORM),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_HEADER = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, HEADER),
- CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_REPEAT = getCN(SCHEDULER, EVENT, RECORDER, OVERLAY, REPEAT),
- CSS_SCHEDULER_EVENT_TITLE = getCN(SCHEDULER, EVENT, TITLE),
-
- TPL_OVERLAY_BODY_CONTENT = new A.Template(
- '<div class="', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_ARROW_SHADOW, ' ', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_ARROW, '"></div>',
- '<div class="', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_ARROW, '"></div>',
- '<input type="hidden" name="startDate" value="{startDate}" />',
- '<input type="hidden" name="endDate" value="{endDate}" />',
- '<div class="', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_HEADER, '">',
- '<input class="', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_CONTENT, '" name="content" value="{content}" />',
- '</div>',
- '<div class="', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_BODY, '">',
- '<label class="', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_DATE, '">{date}</label>',
- '<select class="', CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_REPEAT, '" name="repeat">',
- '<tpl for="eventRepeat">',
- '<option {[ (parent.repeat && parent.repeat.value) == parent.eventRepeat[$i].value ? \'selected="selected"\' : "" ]} value="{value}">{description}</option>',
- '</tpl>',
- '</select>',
- '</div>'
- ),
-
- TPL_OVERLAY_FORM = '<form class="' + CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_FORM + '" id="schedulerEventRecorderForm"></form>';
-
- var SchedulerEventRecorder = A.Component.create({
- NAME: SCHEDULER_EVENT_RECORDER,
-
- ATTRS: {
- allDay: {
- value: false
- },
-
- content: {
- value: _EMPTY_STR
- },
-
- duration: {
- value: 60
- },
-
- dateFormat: {
- validator: isString,
- value: '%a, %B %d,'
- },
-
- event: {
- },
-
- eventClass: {
- valueFn: function() {
- return A.SchedulerEvent;
- }
- },
-
- strings: {
- value: {},
- setter: function(val) {
- return A.merge(
- {
- 'delete': 'Delete',
- 'description-hint': 'e.g., Dinner at Brian\'s',
- 'no-repeat': 'No repeat',
- cancel: 'Cancel',
- description: 'Description',
- edit: 'Edit',
- repeat: 'Repeat',
- save: 'Save',
- when: 'When'
- },
- val || {}
- );
- },
- validator: isObject
- },
-
- overlay: {
- validator: isObject,
- value: {
- align: {
- points: [ TL, TL ]
- },
- visible: false,
- width: 300,
- zIndex: 500
- }
- },
-
- // See #2530972
- overlayOffset: {
- value: [15, -38],
- validator: isArray
- },
-
- template: {
- value: TPL_OVERLAY_BODY_CONTENT
- },
-
- toolbar: {
- setter: function(val) {
- var instance = this;
- var strings = instance.get(STRINGS);
-
- return A.merge({
- children: [
- {
- handler: A.bind(instance._handleSaveEvent, instance),
- label: strings[SAVE]
- },
- {
- handler: A.bind(instance._handleCancelEvent, instance),
- label: strings[CANCEL]
- },
- {
- handler: A.bind(instance._handleDeleteEvent, instance),
- label: strings[DELETE]
- }
- ]
- }, val || {});
- },
- validator: isObject,
- value: {}
- }
- },
-
- EXTENDS: A.SchedulerEvent,
-
- prototype: {
-
- initializer: function() {
- var instance = this;
-
- instance.get(NODE).addClass(CSS_SCHEDULER_EVENT_RECORDER);
-
- instance.publish(EV_SCHEDULER_EVENT_RECORDER_CANCEL, {
- defaultFn: instance._defCancelEventFn
- });
-
- instance.publish(EV_SCHEDULER_EVENT_RECORDER_DELETE, {
- defaultFn: instance._defDeleteEventFn
- });
-
- instance.publish(EV_SCHEDULER_EVENT_RECORDER_EDIT, {
- defaultFn: instance._defEditEventFn
- });
-
- instance.publish(EV_SCHEDULER_EVENT_RECORDER_SAVE, {
- defaultFn: instance._defSaveEventFn
- });
-
- instance.after(SCHEDULER_CHANGE, instance._afterSchedulerChange);
-
- instance[OVERLAY] = new A.Overlay(instance.get(OVERLAY));
- instance[TOOLBAR] = new A.Toolbar(instance.get(TOOLBAR));
- },
-
- _afterSchedulerChange: function(event) {
- var instance = this;
- var scheduler = event.newVal;
- var schedulerBB = scheduler.get(BOUNDING_BOX);
-
- schedulerBB.delegate(CLICK, A.bind(instance._onClickSchedulerEvent, instance), _DOT + CSS_SCHEDULER_EVENT);
- },
-
- _defCancelEventFn: function(event) {
- var instance = this;
-
- instance.get(NODE).remove();
-
- instance.hideOverlay();
- },
-
- _defDeleteEventFn: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- scheduler.removeEvent(instance.get(EVENT));
-
- instance.hideOverlay();
-
- scheduler.syncEventsUI();
- },
-
- _defEditEventFn: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- instance.hideOverlay();
-
- scheduler.syncEventsUI();
- },
-
- _defSaveEventFn: function(event) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- scheduler.addEvent(event.newSchedulerEvent);
-
- instance.hideOverlay();
-
- scheduler.syncEventsUI();
- },
-
- _handleCancelEvent: function(event) {
- var instance = this;
-
- instance.fire(EV_SCHEDULER_EVENT_RECORDER_CANCEL);
-
- event.preventDefault();
- },
-
- _handleDeleteEvent: function(event) {
- var instance = this;
-
- instance.fire(EV_SCHEDULER_EVENT_RECORDER_DELETE, {
- schedulerEvent: instance.get(EVENT)
- });
-
- event.preventDefault();
- },
-
- _handleSaveEvent: function(event) {
- var instance = this;
-
- instance.fire(
- instance.get(EVENT) ? EV_SCHEDULER_EVENT_RECORDER_EDIT : EV_SCHEDULER_EVENT_RECORDER_SAVE,
- {
- newSchedulerEvent: instance.getEventCopy()
- }
- );
-
- event.preventDefault();
- },
-
- _onClickSchedulerEvent: function(event) {
- var instance = this;
- var evt = event.currentTarget.getData(SCHEDULER_EVENT);
-
- if (evt) {
- instance.set(EVENT, evt);
- instance.showOverlay([event.pageX, event.pageY]);
-
- instance.get(NODE).remove();
- }
- },
-
- _onOverlayVisibleChange: function(event) {
- var instance = this;
-
- if (event.newVal) {
- instance.populateForm();
-
- if (!instance.get(EVENT)) {
- var overlayBB = instance[OVERLAY].get(BOUNDING_BOX);
- var contentNode = overlayBB.one(_DOT + CSS_SCHEDULER_EVENT_RECORDER_OVERLAY_CONTENT);
-
- setTimeout(function() {
- contentNode.selectText();
- }, 0);
- }
- }
- else {
- instance.set(EVENT, null);
-
- instance.get(NODE).remove();
- }
- },
-
- _onSubmitForm: function(event) {
- var instance = this;
-
- instance._handleSaveEvent(event);
- },
-
- _renderOverlay: function() {
- var instance = this;
- var strings = instance.get(STRINGS);
-
- instance[OVERLAY].render();
- instance[TOOLBAR].render();
-
- var overlayBB = instance[OVERLAY].get(BOUNDING_BOX);
- overlayBB.addClass(CSS_SCHEDULER_EVENT_RECORDER_OVERLAY);
-
- instance[OVERLAY].set(FOOTER_CONTENT, instance[TOOLBAR].get(BOUNDING_BOX));
- instance[OVERLAY].on(VISIBLE_CHANGE, A.bind(instance._onOverlayVisibleChange, instance));
-
- instance.formNode = A.Node.create(TPL_OVERLAY_FORM);
-
- instance[OVERLAY].set(BODY_CONTENT, instance.formNode);
-
- instance.formNode.on(SUBMIT, A.bind(instance._onSubmitForm, instance));
- },
-
- getEventCopy: function() {
- var instance = this;
- var newEvt = instance.get(EVENT);
-
- if (!newEvt) {
- newEvt = new (instance.get(EVENT_CLASS))({
- allDay: instance.get(ALL_DAY),
- endDate: instance.get(END_DATE),
- scheduler: instance.get(SCHEDULER),
- startDate: instance.get(START_DATE)
- });
-
- // copying propagatable attrs
- newEvt.copyPropagateAttrValues(instance, { content: true });
- }
-
- var values = instance.serializeForm();
-
- newEvt.set(CONTENT, values[CONTENT]);
- newEvt.set(REPEAT, values[REPEAT]);
-
- return newEvt;
- },
-
- getFormattedDate: function() {
- var instance = this;
- var dateFormat = instance.get(DATE_FORMAT);
- var evt = (instance.get(EVENT) || instance);
-
- var endDate = evt.get(END_DATE);
- var scheduler = evt.get(SCHEDULER);
- var startDate = evt.get(START_DATE);
- var fmtHourFn = (scheduler.get(ACTIVE_VIEW).get(ISO_TIME) ? DateMath.toIsoTimeString : DateMath.toUsTimeString);
-
- return [ evt._formatDate(startDate, dateFormat), fmtHourFn(startDate), DASH, fmtHourFn(endDate) ].join(SPACE);
- },
-
- getTemplateData: function() {
- var instance = this;
-
- var strings = instance.get(STRINGS);
- var evt = (instance.get(EVENT) || instance);
-
- return {
- content: evt.get(CONTENT) || strings['description-hint'],
- date: instance.getFormattedDate(),
- endDate: evt.get(END_DATE).getTime(),
- eventRepeat: instance.eventRepeatArray,
- repeat: evt.get(REPEAT),
- startDate: evt.get(START_DATE).getTime()
- };
- },
-
- hideOverlay: function() {
- var instance = this;
-
- instance[OVERLAY].hide();
- },
-
- populateForm: function() {
- var instance = this;
-
- if (!instance.eventRepeatArray) {
- instance.eventRepeatArray = [];
-
- A.each(A.SchedulerEventRepeat, function(item) {
- instance.eventRepeatArray.push({
- description: item[DESCRIPTION],
- value: item[VALUE]
- });
- });
- }
-
- instance.formNode.setContent(
- instance.get(TEMPLATE).parse(instance.getTemplateData())
- );
- },
-
- serializeForm: function() {
- var instance = this;
-
- return A.QueryString.parse(_serialize(instance.formNode.getDOM()));
- },
-
- showOverlay: function(xy, offset) {
- var instance = this;
- var defaultOffset = instance.get(OVERLAY_OFFSET);
-
- if (!instance[OVERLAY].get(RENDERED)) {
- instance._renderOverlay();
- }
-
- instance[OVERLAY].show();
-
- if (!xy) {
- var eventNode = (instance.get(EVENT) || instance).get(NODE);
- var titleNode = eventNode.one(_DOT + CSS_SCHEDULER_EVENT_TITLE);
-
- offset = [defaultOffset[0] + titleNode.get(OFFSET_WIDTH), defaultOffset[1] + titleNode.get(OFFSET_HEIGHT) / 2];
-
- xy = titleNode.getXY();
- }
-
- // Since #2530972 is not yet done, manually putting an offset to the alignment
- offset = offset || defaultOffset;
-
- xy[0] += offset[0];
- xy[1] += offset[1];
-
- instance[OVERLAY].set('xy', xy);
- }
-
- }
- });
-
- A.SchedulerEventRecorder = SchedulerEventRecorder;
-
- }, '@VERSION@' ,{skinnable:true, requires:['aui-base','aui-color-util','aui-datatype','aui-template','aui-toolbar','io-form','querystring','overlay']});
- AUI.add('aui-scheduler-calendar', function(A) {
- var Lang = A.Lang,
- isArray = Lang.isArray,
- isBoolean = Lang.isBoolean,
- isString = Lang.isString,
-
- isSchedulerEvent = function(val) {
- return (val instanceof A.SchedulerEvent);
- },
-
- COLOR = 'color',
- DISABLED = 'disabled',
- EVENTS = 'events',
- PALLETE = 'pallete',
- SCHEDULER = 'scheduler',
- SCHEDULER_CALENDAR = 'scheduler-calendar',
- VISIBLE = 'visible';
-
- var SchedulerCalendar = A.Component.create({
- NAME: SCHEDULER_CALENDAR,
-
- ATTRS: {
- color: {
- valueFn: function() {
- var instance = this;
- var pallete = instance.get(PALLETE);
- var randomIndex = Math.ceil(Math.random() * pallete.length) - 1;
-
- return pallete[randomIndex];
- },
- validator: isString
- },
-
- disabled: {
- value: false,
- validator: isBoolean
- },
-
- name: {
- value: '(no name)',
- validator: isString
- },
-
- pallete: {
- value: ['#d96666', '#e67399', '#b373b3', '#8c66d9', '#668cb3', '#668cd9', '#59bfb3', '#65ad89', '#4cb052', '#8cbf40', '#bfbf4d', '#e0c240', '#f2a640', '#e6804d', '#be9494', '#a992a9', '#8997a5', '#94a2be', '#85aaa5', '#a7a77d', '#c4a883', '#c7561e', '#b5515d', '#c244ab', '#603f99', '#536ca6', '#3640ad', '#3c995b', '#5ca632', '#7ec225', '#a7b828', '#cf9911', '#d47f1e', '#b56414', '#914d14', '#ab2671', '#9643a5', '#4585a3', '#737373', '#41a587', '#d1bc36', '#ad2d2d'],
- validator: isArray
- },
-
- scheduler: {
- lazyAdd: false,
- setter: '_setScheduler'
- },
-
- visible: {
- value: true,
- validator: isBoolean
- }
- },
-
- EXTENDS: A.Base,
-
- AUGMENTS: A.SchedulerEventSupport,
-
- prototype: {
- initializer: function() {
- var instance = this;
-
- instance.after('colorChange', instance._afterColorChange);
- instance.after('disabledChange', instance._afterDisabledChange);
- instance.after('eventsChange', instance._afterEventsChange);
- instance.after('visibleChange', instance._afterVisibleChange);
-
- instance._uiSetColor(
- instance.get(COLOR)
- );
-
- instance._uiSetDisabled(
- instance.get(DISABLED)
- );
-
- instance._uiSetEvents(
- instance.get(EVENTS)
- );
-
- instance._uiSetVisible(
- instance.get(VISIBLE)
- );
- },
-
- _afterColorChange: function(event) {
- var instance = this;
-
- instance._uiSetColor(event.newVal);
- },
-
- _afterDisabledChange: function(event) {
- var instance = this;
-
- instance._uiSetDisabled(event.newVal);
- },
-
- _afterEventsChange: function(event) {
- var instance = this;
-
- instance._uiSetEvents(event.newVal);
- },
-
- _afterVisibleChange: function(event) {
- var instance = this;
-
- instance._uiSetVisible(event.newVal);
- },
-
- _propagateAttr: function(attrName, attrValue) {
- var instance = this;
-
- instance.eachEvent(function(evt) {
- evt.set(attrName, attrValue);
- });
- },
-
- _setScheduler: function(val) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- if (scheduler) {
- instance.removeTarget(scheduler);
- }
-
- instance.addTarget(val);
-
- return val;
- },
-
- _uiSetColor: function(val) {
- var instance = this;
-
- instance._propagateAttr(COLOR, instance.get(COLOR));
- },
-
- _uiSetDisabled: function(val) {
- var instance = this;
-
- instance._propagateAttr(DISABLED, val);
- },
-
- _uiSetEvents: function(val) {
- var instance = this;
- var scheduler = instance.get(SCHEDULER);
-
- instance._propagateAttr(COLOR, instance.get(COLOR));
- instance._propagateAttr(DISABLED, instance.get(DISABLED));
- instance._propagateAttr(VISIBLE, instance.get(VISIBLE));
-
- if (scheduler) {
- scheduler.removeEvents(instance);
- scheduler.addEvents(val);
- scheduler.syncEventsUI();
- }
- },
-
- _uiSetVisible: function(val) {
- var instance = this;
-
- instance._propagateAttr(VISIBLE, val);
- }
- }
- });
-
- A.SchedulerCalendar = SchedulerCalendar;
-
- }, '@VERSION@' ,{requires:['aui-scheduler-event'], skinnable:false});
-
-
- AUI.add('aui-scheduler', function(A){}, '@VERSION@' ,{skinnable:true, use:['aui-scheduler-base','aui-scheduler-view','aui-scheduler-event','aui-scheduler-calendar']});
|