| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962 |
- /*!
- * Vue.js v0.12.10
- * (c) 2015 Evan You
- * Released under the MIT License.
- */
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define(factory);
- else if(typeof exports === 'object')
- exports["Vue"] = factory();
- else
- root["Vue"] = factory();
- })(this, function() {
- return /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/ // Check if module is in cache
- /******/ if(installedModules[moduleId])
- /******/ return installedModules[moduleId].exports;
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ exports: {},
- /******/ id: moduleId,
- /******/ loaded: false
- /******/ };
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/ // Flag the module as loaded
- /******/ module.loaded = true;
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = modules;
- /******/ // expose the module cache
- /******/ __webpack_require__.c = installedModules;
- /******/ // __webpack_public_path__
- /******/ __webpack_require__.p = "";
- /******/ // Load entry module and return exports
- /******/ return __webpack_require__(0);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var extend = _.extend
- /**
- * The exposed Vue constructor.
- *
- * API conventions:
- * - public API methods/properties are prefiexed with `$`
- * - internal methods/properties are prefixed with `_`
- * - non-prefixed properties are assumed to be proxied user
- * data.
- *
- * @constructor
- * @param {Object} [options]
- * @public
- */
- function Vue (options) {
- this._init(options)
- }
- /**
- * Mixin global API
- */
- extend(Vue, __webpack_require__(9))
- /**
- * Vue and every constructor that extends Vue has an
- * associated options object, which can be accessed during
- * compilation steps as `this.constructor.options`.
- *
- * These can be seen as the default options of every
- * Vue instance.
- */
- Vue.options = {
- replace: true,
- directives: __webpack_require__(25),
- elementDirectives: __webpack_require__(47),
- filters: __webpack_require__(50),
- transitions: {},
- components: {},
- partials: {}
- }
- /**
- * Build up the prototype
- */
- var p = Vue.prototype
- /**
- * $data has a setter which does a bunch of
- * teardown/setup work
- */
- Object.defineProperty(p, '$data', {
- get: function () {
- return this._data
- },
- set: function (newData) {
- if (newData !== this._data) {
- this._setData(newData)
- }
- }
- })
- /**
- * Mixin internal instance methods
- */
- extend(p, __webpack_require__(52))
- extend(p, __webpack_require__(53))
- extend(p, __webpack_require__(54))
- extend(p, __webpack_require__(58))
- extend(p, __webpack_require__(60))
- /**
- * Mixin public API methods
- */
- extend(p, __webpack_require__(61))
- extend(p, __webpack_require__(62))
- extend(p, __webpack_require__(63))
- extend(p, __webpack_require__(64))
- extend(p, __webpack_require__(65))
- module.exports = _.Vue = Vue
- /***/ },
- /* 1 */
- /***/ function(module, exports, __webpack_require__) {
- var lang = __webpack_require__(2)
- var extend = lang.extend
- extend(exports, lang)
- extend(exports, __webpack_require__(3))
- extend(exports, __webpack_require__(4))
- extend(exports, __webpack_require__(6))
- extend(exports, __webpack_require__(7))
- extend(exports, __webpack_require__(8))
- /***/ },
- /* 2 */
- /***/ function(module, exports) {
- /**
- * Check is a string starts with $ or _
- *
- * @param {String} str
- * @return {Boolean}
- */
- exports.isReserved = function (str) {
- var c = (str + '').charCodeAt(0)
- return c === 0x24 || c === 0x5F
- }
- /**
- * Guard text output, make sure undefined outputs
- * empty string
- *
- * @param {*} value
- * @return {String}
- */
- exports.toString = function (value) {
- return value == null
- ? ''
- : value.toString()
- }
- /**
- * Check and convert possible numeric strings to numbers
- * before setting back to data
- *
- * @param {*} value
- * @return {*|Number}
- */
- exports.toNumber = function (value) {
- if (typeof value !== 'string') {
- return value
- } else {
- var parsed = Number(value)
- return isNaN(parsed)
- ? value
- : parsed
- }
- }
- /**
- * Convert string boolean literals into real booleans.
- *
- * @param {*} value
- * @return {*|Boolean}
- */
- exports.toBoolean = function (value) {
- return value === 'true'
- ? true
- : value === 'false'
- ? false
- : value
- }
- /**
- * Strip quotes from a string
- *
- * @param {String} str
- * @return {String | false}
- */
- exports.stripQuotes = function (str) {
- var a = str.charCodeAt(0)
- var b = str.charCodeAt(str.length - 1)
- return a === b && (a === 0x22 || a === 0x27)
- ? str.slice(1, -1)
- : false
- }
- /**
- * Camelize a hyphen-delmited string.
- *
- * @param {String} str
- * @return {String}
- */
- exports.camelize = function (str) {
- return str.replace(/-(\w)/g, toUpper)
- }
- function toUpper (_, c) {
- return c ? c.toUpperCase() : ''
- }
- /**
- * Hyphenate a camelCase string.
- *
- * @param {String} str
- * @return {String}
- */
- exports.hyphenate = function (str) {
- return str
- .replace(/([a-z\d])([A-Z])/g, '$1-$2')
- .toLowerCase()
- }
- /**
- * Converts hyphen/underscore/slash delimitered names into
- * camelized classNames.
- *
- * e.g. my-component => MyComponent
- * some_else => SomeElse
- * some/comp => SomeComp
- *
- * @param {String} str
- * @return {String}
- */
- var classifyRE = /(?:^|[-_\/])(\w)/g
- exports.classify = function (str) {
- return str.replace(classifyRE, toUpper)
- }
- /**
- * Simple bind, faster than native
- *
- * @param {Function} fn
- * @param {Object} ctx
- * @return {Function}
- */
- exports.bind = function (fn, ctx) {
- return function (a) {
- var l = arguments.length
- return l
- ? l > 1
- ? fn.apply(ctx, arguments)
- : fn.call(ctx, a)
- : fn.call(ctx)
- }
- }
- /**
- * Convert an Array-like object to a real Array.
- *
- * @param {Array-like} list
- * @param {Number} [start] - start index
- * @return {Array}
- */
- exports.toArray = function (list, start) {
- start = start || 0
- var i = list.length - start
- var ret = new Array(i)
- while (i--) {
- ret[i] = list[i + start]
- }
- return ret
- }
- /**
- * Mix properties into target object.
- *
- * @param {Object} to
- * @param {Object} from
- */
- exports.extend = function (to, from) {
- for (var key in from) {
- to[key] = from[key]
- }
- return to
- }
- /**
- * Quick object check - this is primarily used to tell
- * Objects from primitive values when we know the value
- * is a JSON-compliant type.
- *
- * @param {*} obj
- * @return {Boolean}
- */
- exports.isObject = function (obj) {
- return obj !== null && typeof obj === 'object'
- }
- /**
- * Strict object type check. Only returns true
- * for plain JavaScript objects.
- *
- * @param {*} obj
- * @return {Boolean}
- */
- var toString = Object.prototype.toString
- exports.isPlainObject = function (obj) {
- return toString.call(obj) === '[object Object]'
- }
- /**
- * Array type check.
- *
- * @param {*} obj
- * @return {Boolean}
- */
- exports.isArray = Array.isArray
- /**
- * Define a non-enumerable property
- *
- * @param {Object} obj
- * @param {String} key
- * @param {*} val
- * @param {Boolean} [enumerable]
- */
- exports.define = function (obj, key, val, enumerable) {
- Object.defineProperty(obj, key, {
- value: val,
- enumerable: !!enumerable,
- writable: true,
- configurable: true
- })
- }
- /**
- * Debounce a function so it only gets called after the
- * input stops arriving after the given wait period.
- *
- * @param {Function} func
- * @param {Number} wait
- * @return {Function} - the debounced function
- */
- exports.debounce = function (func, wait) {
- var timeout, args, context, timestamp, result
- var later = function () {
- var last = Date.now() - timestamp
- if (last < wait && last >= 0) {
- timeout = setTimeout(later, wait - last)
- } else {
- timeout = null
- result = func.apply(context, args)
- if (!timeout) context = args = null
- }
- }
- return function () {
- context = this
- args = arguments
- timestamp = Date.now()
- if (!timeout) {
- timeout = setTimeout(later, wait)
- }
- return result
- }
- }
- /**
- * Manual indexOf because it's slightly faster than
- * native.
- *
- * @param {Array} arr
- * @param {*} obj
- */
- exports.indexOf = function (arr, obj) {
- for (var i = 0, l = arr.length; i < l; i++) {
- if (arr[i] === obj) return i
- }
- return -1
- }
- /**
- * Make a cancellable version of an async callback.
- *
- * @param {Function} fn
- * @return {Function}
- */
- exports.cancellable = function (fn) {
- var cb = function () {
- if (!cb.cancelled) {
- return fn.apply(this, arguments)
- }
- }
- cb.cancel = function () {
- cb.cancelled = true
- }
- return cb
- }
- /***/ },
- /* 3 */
- /***/ function(module, exports) {
- // can we use __proto__?
- exports.hasProto = '__proto__' in {}
- // Browser environment sniffing
- var inBrowser = exports.inBrowser =
- typeof window !== 'undefined' &&
- Object.prototype.toString.call(window) !== '[object Object]'
- exports.isIE9 =
- inBrowser &&
- navigator.userAgent.toLowerCase().indexOf('msie 9.0') > 0
- exports.isAndroid =
- inBrowser &&
- navigator.userAgent.toLowerCase().indexOf('android') > 0
- // Transition property/event sniffing
- if (inBrowser && !exports.isIE9) {
- var isWebkitTrans =
- window.ontransitionend === undefined &&
- window.onwebkittransitionend !== undefined
- var isWebkitAnim =
- window.onanimationend === undefined &&
- window.onwebkitanimationend !== undefined
- exports.transitionProp = isWebkitTrans
- ? 'WebkitTransition'
- : 'transition'
- exports.transitionEndEvent = isWebkitTrans
- ? 'webkitTransitionEnd'
- : 'transitionend'
- exports.animationProp = isWebkitAnim
- ? 'WebkitAnimation'
- : 'animation'
- exports.animationEndEvent = isWebkitAnim
- ? 'webkitAnimationEnd'
- : 'animationend'
- }
- /**
- * Defer a task to execute it asynchronously. Ideally this
- * should be executed as a microtask, so we leverage
- * MutationObserver if it's available, and fallback to
- * setTimeout(0).
- *
- * @param {Function} cb
- * @param {Object} ctx
- */
- exports.nextTick = (function () {
- var callbacks = []
- var pending = false
- var timerFunc
- function handle () {
- pending = false
- var copies = callbacks.slice(0)
- callbacks = []
- for (var i = 0; i < copies.length; i++) {
- copies[i]()
- }
- }
- /* istanbul ignore if */
- if (typeof MutationObserver !== 'undefined') {
- var counter = 1
- var observer = new MutationObserver(handle)
- var textNode = document.createTextNode(counter)
- observer.observe(textNode, {
- characterData: true
- })
- timerFunc = function () {
- counter = (counter + 1) % 2
- textNode.data = counter
- }
- } else {
- timerFunc = setTimeout
- }
- return function (cb, ctx) {
- var func = ctx
- ? function () { cb.call(ctx) }
- : cb
- callbacks.push(func)
- if (pending) return
- pending = true
- timerFunc(handle, 0)
- }
- })()
- /***/ },
- /* 4 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- /**
- * Query an element selector if it's not an element already.
- *
- * @param {String|Element} el
- * @return {Element}
- */
- exports.query = function (el) {
- if (typeof el === 'string') {
- var selector = el
- el = document.querySelector(el)
- if (!el) {
- ("development") !== 'production' && _.warn(
- 'Cannot find element: ' + selector
- )
- }
- }
- return el
- }
- /**
- * Check if a node is in the document.
- * Note: document.documentElement.contains should work here
- * but always returns false for comment nodes in phantomjs,
- * making unit tests difficult. This is fixed byy doing the
- * contains() check on the node's parentNode instead of
- * the node itself.
- *
- * @param {Node} node
- * @return {Boolean}
- */
- exports.inDoc = function (node) {
- var doc = document.documentElement
- var parent = node && node.parentNode
- return doc === node ||
- doc === parent ||
- !!(parent && parent.nodeType === 1 && (doc.contains(parent)))
- }
- /**
- * Extract an attribute from a node.
- *
- * @param {Node} node
- * @param {String} attr
- */
- exports.attr = function (node, attr) {
- attr = config.prefix + attr
- var val = node.getAttribute(attr)
- if (val !== null) {
- node.removeAttribute(attr)
- }
- return val
- }
- /**
- * Insert el before target
- *
- * @param {Element} el
- * @param {Element} target
- */
- exports.before = function (el, target) {
- target.parentNode.insertBefore(el, target)
- }
- /**
- * Insert el after target
- *
- * @param {Element} el
- * @param {Element} target
- */
- exports.after = function (el, target) {
- if (target.nextSibling) {
- exports.before(el, target.nextSibling)
- } else {
- target.parentNode.appendChild(el)
- }
- }
- /**
- * Remove el from DOM
- *
- * @param {Element} el
- */
- exports.remove = function (el) {
- el.parentNode.removeChild(el)
- }
- /**
- * Prepend el to target
- *
- * @param {Element} el
- * @param {Element} target
- */
- exports.prepend = function (el, target) {
- if (target.firstChild) {
- exports.before(el, target.firstChild)
- } else {
- target.appendChild(el)
- }
- }
- /**
- * Replace target with el
- *
- * @param {Element} target
- * @param {Element} el
- */
- exports.replace = function (target, el) {
- var parent = target.parentNode
- if (parent) {
- parent.replaceChild(el, target)
- }
- }
- /**
- * Add event listener shorthand.
- *
- * @param {Element} el
- * @param {String} event
- * @param {Function} cb
- */
- exports.on = function (el, event, cb) {
- el.addEventListener(event, cb)
- }
- /**
- * Remove event listener shorthand.
- *
- * @param {Element} el
- * @param {String} event
- * @param {Function} cb
- */
- exports.off = function (el, event, cb) {
- el.removeEventListener(event, cb)
- }
- /**
- * Add class with compatibility for IE & SVG
- *
- * @param {Element} el
- * @param {Strong} cls
- */
- exports.addClass = function (el, cls) {
- if (el.classList) {
- el.classList.add(cls)
- } else {
- var cur = ' ' + (el.getAttribute('class') || '') + ' '
- if (cur.indexOf(' ' + cls + ' ') < 0) {
- el.setAttribute('class', (cur + cls).trim())
- }
- }
- }
- /**
- * Remove class with compatibility for IE & SVG
- *
- * @param {Element} el
- * @param {Strong} cls
- */
- exports.removeClass = function (el, cls) {
- if (el.classList) {
- el.classList.remove(cls)
- } else {
- var cur = ' ' + (el.getAttribute('class') || '') + ' '
- var tar = ' ' + cls + ' '
- while (cur.indexOf(tar) >= 0) {
- cur = cur.replace(tar, ' ')
- }
- el.setAttribute('class', cur.trim())
- }
- }
- /**
- * Extract raw content inside an element into a temporary
- * container div
- *
- * @param {Element} el
- * @param {Boolean} asFragment
- * @return {Element}
- */
- exports.extractContent = function (el, asFragment) {
- var child
- var rawContent
- /* istanbul ignore if */
- if (
- exports.isTemplate(el) &&
- el.content instanceof DocumentFragment
- ) {
- el = el.content
- }
- if (el.hasChildNodes()) {
- exports.trimNode(el)
- rawContent = asFragment
- ? document.createDocumentFragment()
- : document.createElement('div')
- /* eslint-disable no-cond-assign */
- while (child = el.firstChild) {
- /* eslint-enable no-cond-assign */
- rawContent.appendChild(child)
- }
- }
- return rawContent
- }
- /**
- * Trim possible empty head/tail textNodes inside a parent.
- *
- * @param {Node} node
- */
- exports.trimNode = function (node) {
- trim(node, node.firstChild)
- trim(node, node.lastChild)
- }
- function trim (parent, node) {
- if (node && node.nodeType === 3 && !node.data.trim()) {
- parent.removeChild(node)
- }
- }
- /**
- * Check if an element is a template tag.
- * Note if the template appears inside an SVG its tagName
- * will be in lowercase.
- *
- * @param {Element} el
- */
- exports.isTemplate = function (el) {
- return el.tagName &&
- el.tagName.toLowerCase() === 'template'
- }
- /**
- * Create an "anchor" for performing dom insertion/removals.
- * This is used in a number of scenarios:
- * - fragment instance
- * - v-html
- * - v-if
- * - component
- * - repeat
- *
- * @param {String} content
- * @param {Boolean} persist - IE trashes empty textNodes on
- * cloneNode(true), so in certain
- * cases the anchor needs to be
- * non-empty to be persisted in
- * templates.
- * @return {Comment|Text}
- */
- exports.createAnchor = function (content, persist) {
- return config.debug
- ? document.createComment(content)
- : document.createTextNode(persist ? ' ' : '')
- }
- /***/ },
- /* 5 */
- /***/ function(module, exports) {
- module.exports = {
- /**
- * The prefix to look for when parsing directives.
- *
- * @type {String}
- */
- prefix: 'v-',
- /**
- * Whether to print debug messages.
- * Also enables stack trace for warnings.
- *
- * @type {Boolean}
- */
- debug: false,
- /**
- * Strict mode.
- * Disables asset lookup in the view parent chain.
- */
- strict: false,
- /**
- * Whether to suppress warnings.
- *
- * @type {Boolean}
- */
- silent: false,
- /**
- * Whether allow observer to alter data objects'
- * __proto__.
- *
- * @type {Boolean}
- */
- proto: true,
- /**
- * Whether to parse mustache tags in templates.
- *
- * @type {Boolean}
- */
- interpolate: true,
- /**
- * Whether to use async rendering.
- */
- async: true,
- /**
- * Whether to warn against errors caught when evaluating
- * expressions.
- */
- warnExpressionErrors: true,
- /**
- * Internal flag to indicate the delimiters have been
- * changed.
- *
- * @type {Boolean}
- */
- _delimitersChanged: true,
- /**
- * List of asset types that a component can own.
- *
- * @type {Array}
- */
- _assetTypes: [
- 'component',
- 'directive',
- 'elementDirective',
- 'filter',
- 'transition',
- 'partial'
- ],
- /**
- * prop binding modes
- */
- _propBindingModes: {
- ONE_WAY: 0,
- TWO_WAY: 1,
- ONE_TIME: 2
- },
- /**
- * Max circular updates allowed in a batcher flush cycle.
- */
- _maxUpdateCount: 100
- }
- /**
- * Interpolation delimiters.
- * We need to mark the changed flag so that the text parser
- * knows it needs to recompile the regex.
- *
- * @type {Array<String>}
- */
- var delimiters = ['{{', '}}']
- Object.defineProperty(module.exports, 'delimiters', {
- get: function () {
- return delimiters
- },
- set: function (val) {
- delimiters = val
- this._delimitersChanged = true
- }
- })
- /***/ },
- /* 6 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- var extend = _.extend
- /**
- * Option overwriting strategies are functions that handle
- * how to merge a parent option value and a child option
- * value into the final value.
- *
- * All strategy functions follow the same signature:
- *
- * @param {*} parentVal
- * @param {*} childVal
- * @param {Vue} [vm]
- */
- var strats = Object.create(null)
- /**
- * Helper that recursively merges two data objects together.
- */
- function mergeData (to, from) {
- var key, toVal, fromVal
- for (key in from) {
- toVal = to[key]
- fromVal = from[key]
- if (!to.hasOwnProperty(key)) {
- to.$add(key, fromVal)
- } else if (_.isObject(toVal) && _.isObject(fromVal)) {
- mergeData(toVal, fromVal)
- }
- }
- return to
- }
- /**
- * Data
- */
- strats.data = function (parentVal, childVal, vm) {
- if (!vm) {
- // in a Vue.extend merge, both should be functions
- if (!childVal) {
- return parentVal
- }
- if (typeof childVal !== 'function') {
- ("development") !== 'production' && _.warn(
- 'The "data" option should be a function ' +
- 'that returns a per-instance value in component ' +
- 'definitions.'
- )
- return parentVal
- }
- if (!parentVal) {
- return childVal
- }
- // when parentVal & childVal are both present,
- // we need to return a function that returns the
- // merged result of both functions... no need to
- // check if parentVal is a function here because
- // it has to be a function to pass previous merges.
- return function mergedDataFn () {
- return mergeData(
- childVal.call(this),
- parentVal.call(this)
- )
- }
- } else if (parentVal || childVal) {
- return function mergedInstanceDataFn () {
- // instance merge
- var instanceData = typeof childVal === 'function'
- ? childVal.call(vm)
- : childVal
- var defaultData = typeof parentVal === 'function'
- ? parentVal.call(vm)
- : undefined
- if (instanceData) {
- return mergeData(instanceData, defaultData)
- } else {
- return defaultData
- }
- }
- }
- }
- /**
- * El
- */
- strats.el = function (parentVal, childVal, vm) {
- if (!vm && childVal && typeof childVal !== 'function') {
- ("development") !== 'production' && _.warn(
- 'The "el" option should be a function ' +
- 'that returns a per-instance value in component ' +
- 'definitions.'
- )
- return
- }
- var ret = childVal || parentVal
- // invoke the element factory if this is instance merge
- return vm && typeof ret === 'function'
- ? ret.call(vm)
- : ret
- }
- /**
- * Hooks and param attributes are merged as arrays.
- */
- strats.created =
- strats.ready =
- strats.attached =
- strats.detached =
- strats.beforeCompile =
- strats.compiled =
- strats.beforeDestroy =
- strats.destroyed =
- strats.props = function (parentVal, childVal) {
- return childVal
- ? parentVal
- ? parentVal.concat(childVal)
- : _.isArray(childVal)
- ? childVal
- : [childVal]
- : parentVal
- }
- /**
- * 0.11 deprecation warning
- */
- strats.paramAttributes = function () {
- /* istanbul ignore next */
- ("development") !== 'production' && _.warn(
- '"paramAttributes" option has been deprecated in 0.12. ' +
- 'Use "props" instead.'
- )
- }
- /**
- * Assets
- *
- * When a vm is present (instance creation), we need to do
- * a three-way merge between constructor options, instance
- * options and parent options.
- */
- function mergeAssets (parentVal, childVal) {
- var res = Object.create(parentVal)
- return childVal
- ? extend(res, guardArrayAssets(childVal))
- : res
- }
- config._assetTypes.forEach(function (type) {
- strats[type + 's'] = mergeAssets
- })
- /**
- * Events & Watchers.
- *
- * Events & watchers hashes should not overwrite one
- * another, so we merge them as arrays.
- */
- strats.watch =
- strats.events = function (parentVal, childVal) {
- if (!childVal) return parentVal
- if (!parentVal) return childVal
- var ret = {}
- extend(ret, parentVal)
- for (var key in childVal) {
- var parent = ret[key]
- var child = childVal[key]
- if (parent && !_.isArray(parent)) {
- parent = [parent]
- }
- ret[key] = parent
- ? parent.concat(child)
- : [child]
- }
- return ret
- }
- /**
- * Other object hashes.
- */
- strats.methods =
- strats.computed = function (parentVal, childVal) {
- if (!childVal) return parentVal
- if (!parentVal) return childVal
- var ret = Object.create(parentVal)
- extend(ret, childVal)
- return ret
- }
- /**
- * Default strategy.
- */
- var defaultStrat = function (parentVal, childVal) {
- return childVal === undefined
- ? parentVal
- : childVal
- }
- /**
- * Make sure component options get converted to actual
- * constructors.
- *
- * @param {Object} options
- */
- function guardComponents (options) {
- if (options.components) {
- var components = options.components =
- guardArrayAssets(options.components)
- var def
- var ids = Object.keys(components)
- for (var i = 0, l = ids.length; i < l; i++) {
- var key = ids[i]
- if (_.commonTagRE.test(key)) {
- ("development") !== 'production' && _.warn(
- 'Do not use built-in HTML elements as component ' +
- 'id: ' + key
- )
- continue
- }
- def = components[key]
- if (_.isPlainObject(def)) {
- def.id = def.id || key
- components[key] = def._Ctor || (def._Ctor = _.Vue.extend(def))
- }
- }
- }
- }
- /**
- * Ensure all props option syntax are normalized into the
- * Object-based format.
- *
- * @param {Object} options
- */
- function guardProps (options) {
- var props = options.props
- if (_.isPlainObject(props)) {
- options.props = Object.keys(props).map(function (key) {
- var val = props[key]
- if (!_.isPlainObject(val)) {
- val = { type: val }
- }
- val.name = key
- return val
- })
- } else if (_.isArray(props)) {
- options.props = props.map(function (prop) {
- return typeof prop === 'string'
- ? { name: prop }
- : prop
- })
- }
- }
- /**
- * Guard an Array-format assets option and converted it
- * into the key-value Object format.
- *
- * @param {Object|Array} assets
- * @return {Object}
- */
- function guardArrayAssets (assets) {
- if (_.isArray(assets)) {
- var res = {}
- var i = assets.length
- var asset
- while (i--) {
- asset = assets[i]
- var id = asset.id || (asset.options && asset.options.id)
- if (!id) {
- ("development") !== 'production' && _.warn(
- 'Array-syntax assets must provide an id field.'
- )
- } else {
- res[id] = asset
- }
- }
- return res
- }
- return assets
- }
- /**
- * Merge two option objects into a new one.
- * Core utility used in both instantiation and inheritance.
- *
- * @param {Object} parent
- * @param {Object} child
- * @param {Vue} [vm] - if vm is present, indicates this is
- * an instantiation merge.
- */
- exports.mergeOptions = function merge (parent, child, vm) {
- guardComponents(child)
- guardProps(child)
- var options = {}
- var key
- if (child.mixins) {
- for (var i = 0, l = child.mixins.length; i < l; i++) {
- parent = merge(parent, child.mixins[i], vm)
- }
- }
- for (key in parent) {
- mergeField(key)
- }
- for (key in child) {
- if (!(parent.hasOwnProperty(key))) {
- mergeField(key)
- }
- }
- function mergeField (key) {
- var strat = strats[key] || defaultStrat
- options[key] = strat(parent[key], child[key], vm, key)
- }
- return options
- }
- /**
- * Resolve an asset.
- * This function is used because child instances need access
- * to assets defined in its ancestor chain.
- *
- * @param {Object} options
- * @param {String} type
- * @param {String} id
- * @return {Object|Function}
- */
- exports.resolveAsset = function resolve (options, type, id) {
- var camelizedId = _.camelize(id)
- var asset = options[type][id] || options[type][camelizedId]
- while (
- !asset && options._parent &&
- (!config.strict || options._repeat)
- ) {
- options = options._parent.$options
- asset = options[type][id] || options[type][camelizedId]
- }
- return asset
- }
- /***/ },
- /* 7 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- /**
- * Check if an element is a component, if yes return its
- * component id.
- *
- * @param {Element} el
- * @param {Object} options
- * @return {String|undefined}
- */
- exports.commonTagRE = /^(div|p|span|img|a|br|ul|ol|li|h1|h2|h3|h4|h5|code|pre)$/
- exports.checkComponent = function (el, options) {
- var tag = el.tagName.toLowerCase()
- if (tag === 'component') {
- // dynamic syntax
- var exp = el.getAttribute('is')
- el.removeAttribute('is')
- return exp
- } else if (
- !exports.commonTagRE.test(tag) &&
- _.resolveAsset(options, 'components', tag)
- ) {
- return tag
- /* eslint-disable no-cond-assign */
- } else if (tag = _.attr(el, 'component')) {
- /* eslint-enable no-cond-assign */
- return tag
- }
- }
- /**
- * Set a prop's initial value on a vm and its data object.
- * The vm may have inherit:true so we need to make sure
- * we don't accidentally overwrite parent value.
- *
- * @param {Vue} vm
- * @param {Object} prop
- * @param {*} value
- */
- exports.initProp = function (vm, prop, value) {
- if (exports.assertProp(prop, value)) {
- var key = prop.path
- if (key in vm) {
- _.define(vm, key, value, true)
- } else {
- vm[key] = value
- }
- vm._data[key] = value
- }
- }
- /**
- * Assert whether a prop is valid.
- *
- * @param {Object} prop
- * @param {*} value
- */
- exports.assertProp = function (prop, value) {
- // if a prop is not provided and is not required,
- // skip the check.
- if (prop.raw === null && !prop.required) {
- return true
- }
- var options = prop.options
- var type = options.type
- var valid = true
- var expectedType
- if (type) {
- if (type === String) {
- expectedType = 'string'
- valid = typeof value === expectedType
- } else if (type === Number) {
- expectedType = 'number'
- valid = typeof value === 'number'
- } else if (type === Boolean) {
- expectedType = 'boolean'
- valid = typeof value === 'boolean'
- } else if (type === Function) {
- expectedType = 'function'
- valid = typeof value === 'function'
- } else if (type === Object) {
- expectedType = 'object'
- valid = _.isPlainObject(value)
- } else if (type === Array) {
- expectedType = 'array'
- valid = _.isArray(value)
- } else {
- valid = value instanceof type
- }
- }
- if (!valid) {
- ("development") !== 'production' && _.warn(
- 'Invalid prop: type check failed for ' +
- prop.path + '="' + prop.raw + '".' +
- ' Expected ' + formatType(expectedType) +
- ', got ' + formatValue(value) + '.'
- )
- return false
- }
- var validator = options.validator
- if (validator) {
- if (!validator.call(null, value)) {
- ("development") !== 'production' && _.warn(
- 'Invalid prop: custom validator check failed for ' +
- prop.path + '="' + prop.raw + '"'
- )
- return false
- }
- }
- return true
- }
- function formatType (val) {
- return val
- ? val.charAt(0).toUpperCase() + val.slice(1)
- : 'custom type'
- }
- function formatValue (val) {
- return Object.prototype.toString.call(val).slice(8, -1)
- }
- /***/ },
- /* 8 */
- /***/ function(module, exports, __webpack_require__) {
- /**
- * Enable debug utilities.
- */
- if (true) {
- var config = __webpack_require__(5)
- var hasConsole = typeof console !== 'undefined'
- /**
- * Log a message.
- *
- * @param {String} msg
- */
- exports.log = function (msg) {
- if (hasConsole && config.debug) {
- console.log('[Vue info]: ' + msg)
- }
- }
- /**
- * We've got a problem here.
- *
- * @param {String} msg
- */
- exports.warn = function (msg, e) {
- if (hasConsole && (!config.silent || config.debug)) {
- console.warn('[Vue warn]: ' + msg)
- /* istanbul ignore if */
- if (config.debug) {
- console.warn((e || new Error('Warning Stack Trace')).stack)
- }
- }
- }
- /**
- * Assert asset exists
- */
- exports.assertAsset = function (val, type, id) {
- /* istanbul ignore if */
- if (type === 'directive') {
- if (id === 'with') {
- exports.warn(
- 'v-with has been deprecated in ^0.12.0. ' +
- 'Use props instead.'
- )
- return
- }
- if (id === 'events') {
- exports.warn(
- 'v-events has been deprecated in ^0.12.0. ' +
- 'Pass down methods as callback props instead.'
- )
- return
- }
- }
- if (!val) {
- exports.warn('Failed to resolve ' + type + ': ' + id)
- }
- }
- }
- /***/ },
- /* 9 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- /**
- * Expose useful internals
- */
- exports.util = _
- exports.config = config
- exports.nextTick = _.nextTick
- exports.compiler = __webpack_require__(10)
- exports.parsers = {
- path: __webpack_require__(20),
- text: __webpack_require__(13),
- template: __webpack_require__(22),
- directive: __webpack_require__(15),
- expression: __webpack_require__(19)
- }
- /**
- * Each instance constructor, including Vue, has a unique
- * cid. This enables us to create wrapped "child
- * constructors" for prototypal inheritance and cache them.
- */
- exports.cid = 0
- var cid = 1
- /**
- * Class inheritance
- *
- * @param {Object} extendOptions
- */
- exports.extend = function (extendOptions) {
- extendOptions = extendOptions || {}
- var Super = this
- var Sub = createClass(
- extendOptions.name ||
- Super.options.name ||
- 'VueComponent'
- )
- Sub.prototype = Object.create(Super.prototype)
- Sub.prototype.constructor = Sub
- Sub.cid = cid++
- Sub.options = _.mergeOptions(
- Super.options,
- extendOptions
- )
- Sub['super'] = Super
- // allow further extension
- Sub.extend = Super.extend
- // create asset registers, so extended classes
- // can have their private assets too.
- config._assetTypes.forEach(function (type) {
- Sub[type] = Super[type]
- })
- return Sub
- }
- /**
- * A function that returns a sub-class constructor with the
- * given name. This gives us much nicer output when
- * logging instances in the console.
- *
- * @param {String} name
- * @return {Function}
- */
- function createClass (name) {
- return new Function(
- 'return function ' + _.classify(name) +
- ' (options) { this._init(options) }'
- )()
- }
- /**
- * Plugin system
- *
- * @param {Object} plugin
- */
- exports.use = function (plugin) {
- // additional parameters
- var args = _.toArray(arguments, 1)
- args.unshift(this)
- if (typeof plugin.install === 'function') {
- plugin.install.apply(plugin, args)
- } else {
- plugin.apply(null, args)
- }
- return this
- }
- /**
- * Create asset registration methods with the following
- * signature:
- *
- * @param {String} id
- * @param {*} definition
- */
- config._assetTypes.forEach(function (type) {
- exports[type] = function (id, definition) {
- if (!definition) {
- return this.options[type + 's'][id]
- } else {
- if (
- type === 'component' &&
- _.isPlainObject(definition)
- ) {
- definition.name = id
- definition = _.Vue.extend(definition)
- }
- this.options[type + 's'][id] = definition
- }
- }
- })
- /***/ },
- /* 10 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- _.extend(exports, __webpack_require__(11))
- _.extend(exports, __webpack_require__(24))
- /***/ },
- /* 11 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var compileProps = __webpack_require__(12)
- var config = __webpack_require__(5)
- var textParser = __webpack_require__(13)
- var dirParser = __webpack_require__(15)
- var templateParser = __webpack_require__(22)
- var resolveAsset = _.resolveAsset
- var componentDef = __webpack_require__(23)
- // terminal directives
- var terminalDirectives = [
- 'repeat',
- 'if'
- ]
- /**
- * Compile a template and return a reusable composite link
- * function, which recursively contains more link functions
- * inside. This top level compile function would normally
- * be called on instance root nodes, but can also be used
- * for partial compilation if the partial argument is true.
- *
- * The returned composite link function, when called, will
- * return an unlink function that tearsdown all directives
- * created during the linking phase.
- *
- * @param {Element|DocumentFragment} el
- * @param {Object} options
- * @param {Boolean} partial
- * @param {Vue} [host] - host vm of transcluded content
- * @return {Function}
- */
- exports.compile = function (el, options, partial, host) {
- // link function for the node itself.
- var nodeLinkFn = partial || !options._asComponent
- ? compileNode(el, options)
- : null
- // link function for the childNodes
- var childLinkFn =
- !(nodeLinkFn && nodeLinkFn.terminal) &&
- el.tagName !== 'SCRIPT' &&
- el.hasChildNodes()
- ? compileNodeList(el.childNodes, options)
- : null
- /**
- * A composite linker function to be called on a already
- * compiled piece of DOM, which instantiates all directive
- * instances.
- *
- * @param {Vue} vm
- * @param {Element|DocumentFragment} el
- * @return {Function|undefined}
- */
- return function compositeLinkFn (vm, el) {
- // cache childNodes before linking parent, fix #657
- var childNodes = _.toArray(el.childNodes)
- // link
- var dirs = linkAndCapture(function () {
- if (nodeLinkFn) nodeLinkFn(vm, el, host)
- if (childLinkFn) childLinkFn(vm, childNodes, host)
- }, vm)
- return makeUnlinkFn(vm, dirs)
- }
- }
- /**
- * Apply a linker to a vm/element pair and capture the
- * directives created during the process.
- *
- * @param {Function} linker
- * @param {Vue} vm
- */
- function linkAndCapture (linker, vm) {
- var originalDirCount = vm._directives.length
- linker()
- return vm._directives.slice(originalDirCount)
- }
- /**
- * Linker functions return an unlink function that
- * tearsdown all directives instances generated during
- * the process.
- *
- * We create unlink functions with only the necessary
- * information to avoid retaining additional closures.
- *
- * @param {Vue} vm
- * @param {Array} dirs
- * @param {Vue} [context]
- * @param {Array} [contextDirs]
- * @return {Function}
- */
- function makeUnlinkFn (vm, dirs, context, contextDirs) {
- return function unlink (destroying) {
- teardownDirs(vm, dirs, destroying)
- if (context && contextDirs) {
- teardownDirs(context, contextDirs)
- }
- }
- }
- /**
- * Teardown partial linked directives.
- *
- * @param {Vue} vm
- * @param {Array} dirs
- * @param {Boolean} destroying
- */
- function teardownDirs (vm, dirs, destroying) {
- var i = dirs.length
- while (i--) {
- dirs[i]._teardown()
- if (!destroying) {
- vm._directives.$remove(dirs[i])
- }
- }
- }
- /**
- * Compile link props on an instance.
- *
- * @param {Vue} vm
- * @param {Element} el
- * @param {Object} options
- * @return {Function}
- */
- exports.compileAndLinkProps = function (vm, el, props) {
- var propsLinkFn = compileProps(el, props)
- var propDirs = linkAndCapture(function () {
- propsLinkFn(vm, null)
- }, vm)
- return makeUnlinkFn(vm, propDirs)
- }
- /**
- * Compile the root element of an instance.
- *
- * 1. attrs on context container (context scope)
- * 2. attrs on the component template root node, if
- * replace:true (child scope)
- *
- * If this is a fragment instance, we only need to compile 1.
- *
- * @param {Vue} vm
- * @param {Element} el
- * @param {Object} options
- * @return {Function}
- */
- exports.compileRoot = function (el, options) {
- var containerAttrs = options._containerAttrs
- var replacerAttrs = options._replacerAttrs
- var contextLinkFn, replacerLinkFn
- // only need to compile other attributes for
- // non-fragment instances
- if (el.nodeType !== 11) {
- // for components, container and replacer need to be
- // compiled separately and linked in different scopes.
- if (options._asComponent) {
- // 2. container attributes
- if (containerAttrs) {
- contextLinkFn = compileDirectives(containerAttrs, options)
- }
- if (replacerAttrs) {
- // 3. replacer attributes
- replacerLinkFn = compileDirectives(replacerAttrs, options)
- }
- } else {
- // non-component, just compile as a normal element.
- replacerLinkFn = compileDirectives(el.attributes, options)
- }
- }
- return function rootLinkFn (vm, el) {
- // link context scope dirs
- var context = vm._context
- var contextDirs
- if (context && contextLinkFn) {
- contextDirs = linkAndCapture(function () {
- contextLinkFn(context, el)
- }, context)
- }
- // link self
- var selfDirs = linkAndCapture(function () {
- if (replacerLinkFn) replacerLinkFn(vm, el)
- }, vm)
- // return the unlink function that tearsdown context
- // container directives.
- return makeUnlinkFn(vm, selfDirs, context, contextDirs)
- }
- }
- /**
- * Compile a node and return a nodeLinkFn based on the
- * node type.
- *
- * @param {Node} node
- * @param {Object} options
- * @return {Function|null}
- */
- function compileNode (node, options) {
- var type = node.nodeType
- if (type === 1 && node.tagName !== 'SCRIPT') {
- return compileElement(node, options)
- } else if (type === 3 && config.interpolate && node.data.trim()) {
- return compileTextNode(node, options)
- } else {
- return null
- }
- }
- /**
- * Compile an element and return a nodeLinkFn.
- *
- * @param {Element} el
- * @param {Object} options
- * @return {Function|null}
- */
- function compileElement (el, options) {
- // preprocess textareas.
- // textarea treats its text content as the initial value.
- // just bind it as a v-attr directive for value.
- if (el.tagName === 'TEXTAREA') {
- if (textParser.parse(el.value)) {
- el.setAttribute('value', el.value)
- }
- }
- var linkFn
- var hasAttrs = el.hasAttributes()
- // check terminal directives (repeat & if)
- if (hasAttrs) {
- linkFn = checkTerminalDirectives(el, options)
- }
- // check element directives
- if (!linkFn) {
- linkFn = checkElementDirectives(el, options)
- }
- // check component
- if (!linkFn) {
- linkFn = checkComponent(el, options)
- }
- // normal directives
- if (!linkFn && hasAttrs) {
- linkFn = compileDirectives(el.attributes, options)
- }
- return linkFn
- }
- /**
- * Compile a textNode and return a nodeLinkFn.
- *
- * @param {TextNode} node
- * @param {Object} options
- * @return {Function|null} textNodeLinkFn
- */
- function compileTextNode (node, options) {
- var tokens = textParser.parse(node.data)
- if (!tokens) {
- return null
- }
- var frag = document.createDocumentFragment()
- var el, token
- for (var i = 0, l = tokens.length; i < l; i++) {
- token = tokens[i]
- el = token.tag
- ? processTextToken(token, options)
- : document.createTextNode(token.value)
- frag.appendChild(el)
- }
- return makeTextNodeLinkFn(tokens, frag, options)
- }
- /**
- * Process a single text token.
- *
- * @param {Object} token
- * @param {Object} options
- * @return {Node}
- */
- function processTextToken (token, options) {
- var el
- if (token.oneTime) {
- el = document.createTextNode(token.value)
- } else {
- if (token.html) {
- el = document.createComment('v-html')
- setTokenType('html')
- } else {
- // IE will clean up empty textNodes during
- // frag.cloneNode(true), so we have to give it
- // something here...
- el = document.createTextNode(' ')
- setTokenType('text')
- }
- }
- function setTokenType (type) {
- token.type = type
- token.def = resolveAsset(options, 'directives', type)
- token.descriptor = dirParser.parse(token.value)[0]
- }
- return el
- }
- /**
- * Build a function that processes a textNode.
- *
- * @param {Array<Object>} tokens
- * @param {DocumentFragment} frag
- */
- function makeTextNodeLinkFn (tokens, frag) {
- return function textNodeLinkFn (vm, el) {
- var fragClone = frag.cloneNode(true)
- var childNodes = _.toArray(fragClone.childNodes)
- var token, value, node
- for (var i = 0, l = tokens.length; i < l; i++) {
- token = tokens[i]
- value = token.value
- if (token.tag) {
- node = childNodes[i]
- if (token.oneTime) {
- value = vm.$eval(value)
- if (token.html) {
- _.replace(node, templateParser.parse(value, true))
- } else {
- node.data = value
- }
- } else {
- vm._bindDir(token.type, node,
- token.descriptor, token.def)
- }
- }
- }
- _.replace(el, fragClone)
- }
- }
- /**
- * Compile a node list and return a childLinkFn.
- *
- * @param {NodeList} nodeList
- * @param {Object} options
- * @return {Function|undefined}
- */
- function compileNodeList (nodeList, options) {
- var linkFns = []
- var nodeLinkFn, childLinkFn, node
- for (var i = 0, l = nodeList.length; i < l; i++) {
- node = nodeList[i]
- nodeLinkFn = compileNode(node, options)
- childLinkFn =
- !(nodeLinkFn && nodeLinkFn.terminal) &&
- node.tagName !== 'SCRIPT' &&
- node.hasChildNodes()
- ? compileNodeList(node.childNodes, options)
- : null
- linkFns.push(nodeLinkFn, childLinkFn)
- }
- return linkFns.length
- ? makeChildLinkFn(linkFns)
- : null
- }
- /**
- * Make a child link function for a node's childNodes.
- *
- * @param {Array<Function>} linkFns
- * @return {Function} childLinkFn
- */
- function makeChildLinkFn (linkFns) {
- return function childLinkFn (vm, nodes, host) {
- var node, nodeLinkFn, childrenLinkFn
- for (var i = 0, n = 0, l = linkFns.length; i < l; n++) {
- node = nodes[n]
- nodeLinkFn = linkFns[i++]
- childrenLinkFn = linkFns[i++]
- // cache childNodes before linking parent, fix #657
- var childNodes = _.toArray(node.childNodes)
- if (nodeLinkFn) {
- nodeLinkFn(vm, node, host)
- }
- if (childrenLinkFn) {
- childrenLinkFn(vm, childNodes, host)
- }
- }
- }
- }
- /**
- * Check for element directives (custom elements that should
- * be resovled as terminal directives).
- *
- * @param {Element} el
- * @param {Object} options
- */
- function checkElementDirectives (el, options) {
- var tag = el.tagName.toLowerCase()
- if (_.commonTagRE.test(tag)) return
- var def = resolveAsset(options, 'elementDirectives', tag)
- if (def) {
- return makeTerminalNodeLinkFn(el, tag, '', options, def)
- }
- }
- /**
- * Check if an element is a component. If yes, return
- * a component link function.
- *
- * @param {Element} el
- * @param {Object} options
- * @param {Boolean} hasAttrs
- * @return {Function|undefined}
- */
- function checkComponent (el, options, hasAttrs) {
- var componentId = _.checkComponent(el, options, hasAttrs)
- if (componentId) {
- var componentLinkFn = function (vm, el, host) {
- vm._bindDir('component', el, {
- expression: componentId
- }, componentDef, host)
- }
- componentLinkFn.terminal = true
- return componentLinkFn
- }
- }
- /**
- * Check an element for terminal directives in fixed order.
- * If it finds one, return a terminal link function.
- *
- * @param {Element} el
- * @param {Object} options
- * @return {Function} terminalLinkFn
- */
- function checkTerminalDirectives (el, options) {
- if (_.attr(el, 'pre') !== null) {
- return skip
- }
- var value, dirName
- for (var i = 0, l = terminalDirectives.length; i < l; i++) {
- dirName = terminalDirectives[i]
- if ((value = _.attr(el, dirName)) !== null) {
- return makeTerminalNodeLinkFn(el, dirName, value, options)
- }
- }
- }
- function skip () {}
- skip.terminal = true
- /**
- * Build a node link function for a terminal directive.
- * A terminal link function terminates the current
- * compilation recursion and handles compilation of the
- * subtree in the directive.
- *
- * @param {Element} el
- * @param {String} dirName
- * @param {String} value
- * @param {Object} options
- * @param {Object} [def]
- * @return {Function} terminalLinkFn
- */
- function makeTerminalNodeLinkFn (el, dirName, value, options, def) {
- var descriptor = dirParser.parse(value)[0]
- // no need to call resolveAsset since terminal directives
- // are always internal
- def = def || options.directives[dirName]
- var fn = function terminalNodeLinkFn (vm, el, host) {
- vm._bindDir(dirName, el, descriptor, def, host)
- }
- fn.terminal = true
- return fn
- }
- /**
- * Compile the directives on an element and return a linker.
- *
- * @param {Array|NamedNodeMap} attrs
- * @param {Object} options
- * @return {Function}
- */
- function compileDirectives (attrs, options) {
- var i = attrs.length
- var dirs = []
- var attr, name, value, dir, dirName, dirDef
- while (i--) {
- attr = attrs[i]
- name = attr.name
- value = attr.value
- if (name.indexOf(config.prefix) === 0) {
- dirName = name.slice(config.prefix.length)
- dirDef = resolveAsset(options, 'directives', dirName)
- if (true) {
- _.assertAsset(dirDef, 'directive', dirName)
- }
- if (dirDef) {
- dirs.push({
- name: dirName,
- descriptors: dirParser.parse(value),
- def: dirDef
- })
- }
- } else if (config.interpolate) {
- dir = collectAttrDirective(name, value, options)
- if (dir) {
- dirs.push(dir)
- }
- }
- }
- // sort by priority, LOW to HIGH
- if (dirs.length) {
- dirs.sort(directiveComparator)
- return makeNodeLinkFn(dirs)
- }
- }
- /**
- * Build a link function for all directives on a single node.
- *
- * @param {Array} directives
- * @return {Function} directivesLinkFn
- */
- function makeNodeLinkFn (directives) {
- return function nodeLinkFn (vm, el, host) {
- // reverse apply because it's sorted low to high
- var i = directives.length
- var dir, j, k
- while (i--) {
- dir = directives[i]
- if (dir._link) {
- // custom link fn
- dir._link(vm, el)
- } else {
- k = dir.descriptors.length
- for (j = 0; j < k; j++) {
- vm._bindDir(dir.name, el,
- dir.descriptors[j], dir.def, host)
- }
- }
- }
- }
- }
- /**
- * Check an attribute for potential dynamic bindings,
- * and return a directive object.
- *
- * Special case: class interpolations are translated into
- * v-class instead v-attr, so that it can work with user
- * provided v-class bindings.
- *
- * @param {String} name
- * @param {String} value
- * @param {Object} options
- * @return {Object}
- */
- function collectAttrDirective (name, value, options) {
- var tokens = textParser.parse(value)
- var isClass = name === 'class'
- if (tokens) {
- var dirName = isClass ? 'class' : 'attr'
- var def = options.directives[dirName]
- var i = tokens.length
- var allOneTime = true
- while (i--) {
- var token = tokens[i]
- if (token.tag && !token.oneTime) {
- allOneTime = false
- }
- }
- return {
- def: def,
- _link: allOneTime
- ? function (vm, el) {
- el.setAttribute(name, vm.$interpolate(value))
- }
- : function (vm, el) {
- var exp = textParser.tokensToExp(tokens, vm)
- var desc = isClass
- ? dirParser.parse(exp)[0]
- : dirParser.parse(name + ':' + exp)[0]
- if (isClass) {
- desc._rawClass = value
- }
- vm._bindDir(dirName, el, desc, def)
- }
- }
- }
- }
- /**
- * Directive priority sort comparator
- *
- * @param {Object} a
- * @param {Object} b
- */
- function directiveComparator (a, b) {
- a = a.def.priority || 0
- b = b.def.priority || 0
- return a > b ? 1 : -1
- }
- /***/ },
- /* 12 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var textParser = __webpack_require__(13)
- var propDef = __webpack_require__(16)
- var propBindingModes = __webpack_require__(5)._propBindingModes
- // regexes
- var identRE = __webpack_require__(20).identRE
- var dataAttrRE = /^data-/
- var settablePathRE = /^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\[[^\[\]]+\])*$/
- var literalValueRE = /^(true|false)$|^\d.*/
- /**
- * Compile param attributes on a root element and return
- * a props link function.
- *
- * @param {Element|DocumentFragment} el
- * @param {Array} propOptions
- * @return {Function} propsLinkFn
- */
- module.exports = function compileProps (el, propOptions) {
- var props = []
- var i = propOptions.length
- var options, name, attr, value, path, prop, literal, single
- while (i--) {
- options = propOptions[i]
- name = options.name
- // props could contain dashes, which will be
- // interpreted as minus calculations by the parser
- // so we need to camelize the path here
- path = _.camelize(name.replace(dataAttrRE, ''))
- if (!identRE.test(path)) {
- ("development") !== 'production' && _.warn(
- 'Invalid prop key: "' + name + '". Prop keys ' +
- 'must be valid identifiers.'
- )
- continue
- }
- attr = _.hyphenate(name)
- value = el.getAttribute(attr)
- if (value === null) {
- attr = 'data-' + attr
- value = el.getAttribute(attr)
- }
- // create a prop descriptor
- prop = {
- name: name,
- raw: value,
- path: path,
- options: options,
- mode: propBindingModes.ONE_WAY
- }
- if (value !== null) {
- // important so that this doesn't get compiled
- // again as a normal attribute binding
- el.removeAttribute(attr)
- var tokens = textParser.parse(value)
- if (tokens) {
- prop.dynamic = true
- prop.parentPath = textParser.tokensToExp(tokens)
- // check prop binding type.
- single = tokens.length === 1
- literal = literalValueRE.test(prop.parentPath)
- // one time: {{* prop}}
- if (literal || (single && tokens[0].oneTime)) {
- prop.mode = propBindingModes.ONE_TIME
- } else if (
- !literal &&
- (single && tokens[0].twoWay)
- ) {
- if (settablePathRE.test(prop.parentPath)) {
- prop.mode = propBindingModes.TWO_WAY
- } else {
- ("development") !== 'production' && _.warn(
- 'Cannot bind two-way prop with non-settable ' +
- 'parent path: ' + prop.parentPath
- )
- }
- }
- if (
- ("development") !== 'production' &&
- options.twoWay &&
- prop.mode !== propBindingModes.TWO_WAY
- ) {
- _.warn(
- 'Prop "' + name + '" expects a two-way binding type.'
- )
- }
- }
- } else if (options && options.required) {
- ("development") !== 'production' && _.warn(
- 'Missing required prop: ' + name
- )
- }
- props.push(prop)
- }
- return makePropsLinkFn(props)
- }
- /**
- * Build a function that applies props to a vm.
- *
- * @param {Array} props
- * @return {Function} propsLinkFn
- */
- function makePropsLinkFn (props) {
- return function propsLinkFn (vm, el) {
- // store resolved props info
- vm._props = {}
- var i = props.length
- var prop, path, options, value
- while (i--) {
- prop = props[i]
- path = prop.path
- vm._props[path] = prop
- options = prop.options
- if (prop.raw === null) {
- // initialize absent prop
- _.initProp(vm, prop, getDefault(options))
- } else if (prop.dynamic) {
- // dynamic prop
- if (vm._context) {
- if (prop.mode === propBindingModes.ONE_TIME) {
- // one time binding
- value = vm._context.$get(prop.parentPath)
- _.initProp(vm, prop, value)
- } else {
- // dynamic binding
- vm._bindDir('prop', el, prop, propDef)
- }
- } else {
- ("development") !== 'production' && _.warn(
- 'Cannot bind dynamic prop on a root instance' +
- ' with no parent: ' + prop.name + '="' +
- prop.raw + '"'
- )
- }
- } else {
- // literal, cast it and just set once
- var raw = prop.raw
- value = options.type === Boolean && raw === ''
- ? true
- // do not cast emptry string.
- // _.toNumber casts empty string to 0.
- : raw.trim()
- ? _.toBoolean(_.toNumber(raw))
- : raw
- _.initProp(vm, prop, value)
- }
- }
- }
- }
- /**
- * Get the default value of a prop.
- *
- * @param {Object} options
- * @return {*}
- */
- function getDefault (options) {
- // no default, return undefined
- if (!options.hasOwnProperty('default')) {
- // absent boolean value defaults to false
- return options.type === Boolean
- ? false
- : undefined
- }
- var def = options.default
- // warn against non-factory defaults for Object & Array
- if (_.isObject(def)) {
- ("development") !== 'production' && _.warn(
- 'Object/Array as default prop values will be shared ' +
- 'across multiple instances. Use a factory function ' +
- 'to return the default value instead.'
- )
- }
- // call factory function for non-Function types
- return typeof def === 'function' && options.type !== Function
- ? def()
- : def
- }
- /***/ },
- /* 13 */
- /***/ function(module, exports, __webpack_require__) {
- var Cache = __webpack_require__(14)
- var config = __webpack_require__(5)
- var dirParser = __webpack_require__(15)
- var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g
- var cache, tagRE, htmlRE, firstChar, lastChar
- /**
- * Escape a string so it can be used in a RegExp
- * constructor.
- *
- * @param {String} str
- */
- function escapeRegex (str) {
- return str.replace(regexEscapeRE, '\\$&')
- }
- /**
- * Compile the interpolation tag regex.
- *
- * @return {RegExp}
- */
- function compileRegex () {
- config._delimitersChanged = false
- var open = config.delimiters[0]
- var close = config.delimiters[1]
- firstChar = open.charAt(0)
- lastChar = close.charAt(close.length - 1)
- var firstCharRE = escapeRegex(firstChar)
- var lastCharRE = escapeRegex(lastChar)
- var openRE = escapeRegex(open)
- var closeRE = escapeRegex(close)
- tagRE = new RegExp(
- firstCharRE + '?' + openRE +
- '(.+?)' +
- closeRE + lastCharRE + '?',
- 'g'
- )
- htmlRE = new RegExp(
- '^' + firstCharRE + openRE +
- '.*' +
- closeRE + lastCharRE + '$'
- )
- // reset cache
- cache = new Cache(1000)
- }
- /**
- * Parse a template text string into an array of tokens.
- *
- * @param {String} text
- * @return {Array<Object> | null}
- * - {String} type
- * - {String} value
- * - {Boolean} [html]
- * - {Boolean} [oneTime]
- */
- exports.parse = function (text) {
- if (config._delimitersChanged) {
- compileRegex()
- }
- var hit = cache.get(text)
- if (hit) {
- return hit
- }
- text = text.replace(/\n/g, '')
- if (!tagRE.test(text)) {
- return null
- }
- var tokens = []
- var lastIndex = tagRE.lastIndex = 0
- var match, index, value, first, oneTime, twoWay
- /* eslint-disable no-cond-assign */
- while (match = tagRE.exec(text)) {
- /* eslint-enable no-cond-assign */
- index = match.index
- // push text token
- if (index > lastIndex) {
- tokens.push({
- value: text.slice(lastIndex, index)
- })
- }
- // tag token
- first = match[1].charCodeAt(0)
- oneTime = first === 42 // *
- twoWay = first === 64 // @
- value = oneTime || twoWay
- ? match[1].slice(1)
- : match[1]
- tokens.push({
- tag: true,
- value: value.trim(),
- html: htmlRE.test(match[0]),
- oneTime: oneTime,
- twoWay: twoWay
- })
- lastIndex = index + match[0].length
- }
- if (lastIndex < text.length) {
- tokens.push({
- value: text.slice(lastIndex)
- })
- }
- cache.put(text, tokens)
- return tokens
- }
- /**
- * Format a list of tokens into an expression.
- * e.g. tokens parsed from 'a {{b}} c' can be serialized
- * into one single expression as '"a " + b + " c"'.
- *
- * @param {Array} tokens
- * @param {Vue} [vm]
- * @return {String}
- */
- exports.tokensToExp = function (tokens, vm) {
- return tokens.length > 1
- ? tokens.map(function (token) {
- return formatToken(token, vm)
- }).join('+')
- : formatToken(tokens[0], vm, true)
- }
- /**
- * Format a single token.
- *
- * @param {Object} token
- * @param {Vue} [vm]
- * @param {Boolean} single
- * @return {String}
- */
- function formatToken (token, vm, single) {
- return token.tag
- ? vm && token.oneTime
- ? '"' + vm.$eval(token.value) + '"'
- : inlineFilters(token.value, single)
- : '"' + token.value + '"'
- }
- /**
- * For an attribute with multiple interpolation tags,
- * e.g. attr="some-{{thing | filter}}", in order to combine
- * the whole thing into a single watchable expression, we
- * have to inline those filters. This function does exactly
- * that. This is a bit hacky but it avoids heavy changes
- * to directive parser and watcher mechanism.
- *
- * @param {String} exp
- * @param {Boolean} single
- * @return {String}
- */
- var filterRE = /[^|]\|[^|]/
- function inlineFilters (exp, single) {
- if (!filterRE.test(exp)) {
- return single
- ? exp
- : '(' + exp + ')'
- } else {
- var dir = dirParser.parse(exp)[0]
- if (!dir.filters) {
- return '(' + exp + ')'
- } else {
- return 'this._applyFilters(' +
- dir.expression + // value
- ',null,' + // oldValue (null for read)
- JSON.stringify(dir.filters) + // filter descriptors
- ',false)' // write?
- }
- }
- }
- /***/ },
- /* 14 */
- /***/ function(module, exports) {
- /**
- * A doubly linked list-based Least Recently Used (LRU)
- * cache. Will keep most recently used items while
- * discarding least recently used items when its limit is
- * reached. This is a bare-bone version of
- * Rasmus Andersson's js-lru:
- *
- * https://github.com/rsms/js-lru
- *
- * @param {Number} limit
- * @constructor
- */
- function Cache (limit) {
- this.size = 0
- this.limit = limit
- this.head = this.tail = undefined
- this._keymap = Object.create(null)
- }
- var p = Cache.prototype
- /**
- * Put <value> into the cache associated with <key>.
- * Returns the entry which was removed to make room for
- * the new entry. Otherwise undefined is returned.
- * (i.e. if there was enough room already).
- *
- * @param {String} key
- * @param {*} value
- * @return {Entry|undefined}
- */
- p.put = function (key, value) {
- var entry = {
- key: key,
- value: value
- }
- this._keymap[key] = entry
- if (this.tail) {
- this.tail.newer = entry
- entry.older = this.tail
- } else {
- this.head = entry
- }
- this.tail = entry
- if (this.size === this.limit) {
- return this.shift()
- } else {
- this.size++
- }
- }
- /**
- * Purge the least recently used (oldest) entry from the
- * cache. Returns the removed entry or undefined if the
- * cache was empty.
- */
- p.shift = function () {
- var entry = this.head
- if (entry) {
- this.head = this.head.newer
- this.head.older = undefined
- entry.newer = entry.older = undefined
- this._keymap[entry.key] = undefined
- }
- return entry
- }
- /**
- * Get and register recent use of <key>. Returns the value
- * associated with <key> or undefined if not in cache.
- *
- * @param {String} key
- * @param {Boolean} returnEntry
- * @return {Entry|*}
- */
- p.get = function (key, returnEntry) {
- var entry = this._keymap[key]
- if (entry === undefined) return
- if (entry === this.tail) {
- return returnEntry
- ? entry
- : entry.value
- }
- // HEAD--------------TAIL
- // <.older .newer>
- // <--- add direction --
- // A B C <D> E
- if (entry.newer) {
- if (entry === this.head) {
- this.head = entry.newer
- }
- entry.newer.older = entry.older // C <-- E.
- }
- if (entry.older) {
- entry.older.newer = entry.newer // C. --> E
- }
- entry.newer = undefined // D --x
- entry.older = this.tail // D. --> E
- if (this.tail) {
- this.tail.newer = entry // E. <-- D
- }
- this.tail = entry
- return returnEntry
- ? entry
- : entry.value
- }
- module.exports = Cache
- /***/ },
- /* 15 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Cache = __webpack_require__(14)
- var cache = new Cache(1000)
- var argRE = /^[^\{\?]+$|^'[^']*'$|^"[^"]*"$/
- var filterTokenRE = /[^\s'"]+|'[^']+'|"[^"]+"/g
- var reservedArgRE = /^in$|^-?\d+/
- /**
- * Parser state
- */
- var str
- var c, i, l
- var inSingle
- var inDouble
- var curly
- var square
- var paren
- var begin
- var argIndex
- var dirs
- var dir
- var lastFilterIndex
- var arg
- /**
- * Push a directive object into the result Array
- */
- function pushDir () {
- dir.raw = str.slice(begin, i).trim()
- if (dir.expression === undefined) {
- dir.expression = str.slice(argIndex, i).trim()
- } else if (lastFilterIndex !== begin) {
- pushFilter()
- }
- if (i === 0 || dir.expression) {
- dirs.push(dir)
- }
- }
- /**
- * Push a filter to the current directive object
- */
- function pushFilter () {
- var exp = str.slice(lastFilterIndex, i).trim()
- var filter
- if (exp) {
- filter = {}
- var tokens = exp.match(filterTokenRE)
- filter.name = tokens[0]
- if (tokens.length > 1) {
- filter.args = tokens.slice(1).map(processFilterArg)
- }
- }
- if (filter) {
- (dir.filters = dir.filters || []).push(filter)
- }
- lastFilterIndex = i + 1
- }
- /**
- * Check if an argument is dynamic and strip quotes.
- *
- * @param {String} arg
- * @return {Object}
- */
- function processFilterArg (arg) {
- var stripped = reservedArgRE.test(arg)
- ? arg
- : _.stripQuotes(arg)
- return {
- value: stripped || arg,
- dynamic: !stripped
- }
- }
- /**
- * Parse a directive string into an Array of AST-like
- * objects representing directives.
- *
- * Example:
- *
- * "click: a = a + 1 | uppercase" will yield:
- * {
- * arg: 'click',
- * expression: 'a = a + 1',
- * filters: [
- * { name: 'uppercase', args: null }
- * ]
- * }
- *
- * @param {String} str
- * @return {Array<Object>}
- */
- exports.parse = function (s) {
- var hit = cache.get(s)
- if (hit) {
- return hit
- }
- // reset parser state
- str = s
- inSingle = inDouble = false
- curly = square = paren = begin = argIndex = 0
- lastFilterIndex = 0
- dirs = []
- dir = {}
- arg = null
- for (i = 0, l = str.length; i < l; i++) {
- c = str.charCodeAt(i)
- if (inSingle) {
- // check single quote
- if (c === 0x27) inSingle = !inSingle
- } else if (inDouble) {
- // check double quote
- if (c === 0x22) inDouble = !inDouble
- } else if (
- c === 0x2C && // comma
- !paren && !curly && !square
- ) {
- // reached the end of a directive
- pushDir()
- // reset & skip the comma
- dir = {}
- begin = argIndex = lastFilterIndex = i + 1
- } else if (
- c === 0x3A && // colon
- !dir.expression &&
- !dir.arg
- ) {
- // argument
- arg = str.slice(begin, i).trim()
- // test for valid argument here
- // since we may have caught stuff like first half of
- // an object literal or a ternary expression.
- if (argRE.test(arg)) {
- argIndex = i + 1
- dir.arg = _.stripQuotes(arg) || arg
- }
- } else if (
- c === 0x7C && // pipe
- str.charCodeAt(i + 1) !== 0x7C &&
- str.charCodeAt(i - 1) !== 0x7C
- ) {
- if (dir.expression === undefined) {
- // first filter, end of expression
- lastFilterIndex = i + 1
- dir.expression = str.slice(argIndex, i).trim()
- } else {
- // already has filter
- pushFilter()
- }
- } else {
- switch (c) {
- case 0x22: inDouble = true; break // "
- case 0x27: inSingle = true; break // '
- case 0x28: paren++; break // (
- case 0x29: paren--; break // )
- case 0x5B: square++; break // [
- case 0x5D: square--; break // ]
- case 0x7B: curly++; break // {
- case 0x7D: curly--; break // }
- }
- }
- }
- if (i === 0 || begin !== i) {
- pushDir()
- }
- cache.put(s, dirs)
- return dirs
- }
- /***/ },
- /* 16 */
- /***/ function(module, exports, __webpack_require__) {
- // NOTE: the prop internal directive is compiled and linked
- // during _initScope(), before the created hook is called.
- // The purpose is to make the initial prop values available
- // inside `created` hooks and `data` functions.
- var _ = __webpack_require__(1)
- var Watcher = __webpack_require__(17)
- var bindingModes = __webpack_require__(5)._propBindingModes
- module.exports = {
- bind: function () {
- var child = this.vm
- var parent = child._context
- // passed in from compiler directly
- var prop = this._descriptor
- var childKey = prop.path
- var parentKey = prop.parentPath
- this.parentWatcher = new Watcher(
- parent,
- parentKey,
- function (val) {
- if (_.assertProp(prop, val)) {
- child[childKey] = val
- }
- }
- )
- // set the child initial value.
- var value = this.parentWatcher.value
- if (childKey === '$data') {
- child._data = value
- } else {
- _.initProp(child, prop, value)
- }
- // setup two-way binding
- if (prop.mode === bindingModes.TWO_WAY) {
- // important: defer the child watcher creation until
- // the created hook (after data observation)
- var self = this
- child.$once('hook:created', function () {
- self.childWatcher = new Watcher(
- child,
- childKey,
- function (val) {
- parent.$set(parentKey, val)
- }
- )
- })
- }
- },
- unbind: function () {
- this.parentWatcher.teardown()
- if (this.childWatcher) {
- this.childWatcher.teardown()
- }
- }
- }
- /***/ },
- /* 17 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- var Dep = __webpack_require__(18)
- var expParser = __webpack_require__(19)
- var batcher = __webpack_require__(21)
- var uid = 0
- /**
- * A watcher parses an expression, collects dependencies,
- * and fires callback when the expression value changes.
- * This is used for both the $watch() api and directives.
- *
- * @param {Vue} vm
- * @param {String} expression
- * @param {Function} cb
- * @param {Object} options
- * - {Array} filters
- * - {Boolean} twoWay
- * - {Boolean} deep
- * - {Boolean} user
- * - {Boolean} lazy
- * - {Function} [preProcess]
- * @constructor
- */
- function Watcher (vm, expOrFn, cb, options) {
- var isFn = typeof expOrFn === 'function'
- this.vm = vm
- vm._watchers.push(this)
- this.expression = isFn ? expOrFn.toString() : expOrFn
- this.cb = cb
- this.id = ++uid // uid for batching
- this.active = true
- options = options || {}
- this.deep = !!options.deep
- this.user = !!options.user
- this.twoWay = !!options.twoWay
- this.lazy = !!options.lazy
- this.dirty = this.lazy
- this.filters = options.filters
- this.preProcess = options.preProcess
- this.deps = []
- this.newDeps = null
- // parse expression for getter/setter
- if (isFn) {
- this.getter = expOrFn
- this.setter = undefined
- } else {
- var res = expParser.parse(expOrFn, options.twoWay)
- this.getter = res.get
- this.setter = res.set
- }
- this.value = this.lazy
- ? undefined
- : this.get()
- // state for avoiding false triggers for deep and Array
- // watchers during vm._digest()
- this.queued = this.shallow = false
- }
- var p = Watcher.prototype
- /**
- * Add a dependency to this directive.
- *
- * @param {Dep} dep
- */
- p.addDep = function (dep) {
- var newDeps = this.newDeps
- var old = this.deps
- if (_.indexOf(newDeps, dep) < 0) {
- newDeps.push(dep)
- var i = _.indexOf(old, dep)
- if (i < 0) {
- dep.addSub(this)
- } else {
- old[i] = null
- }
- }
- }
- /**
- * Evaluate the getter, and re-collect dependencies.
- */
- p.get = function () {
- this.beforeGet()
- var vm = this.vm
- var value
- try {
- value = this.getter.call(vm, vm)
- } catch (e) {
- if (
- ("development") !== 'production' &&
- config.warnExpressionErrors
- ) {
- _.warn(
- 'Error when evaluating expression "' +
- this.expression + '". ' +
- (config.debug
- ? '' :
- 'Turn on debug mode to see stack trace.'
- ), e
- )
- }
- }
- // "touch" every property so they are all tracked as
- // dependencies for deep watching
- if (this.deep) {
- traverse(value)
- }
- if (this.preProcess) {
- value = this.preProcess(value)
- }
- if (this.filters) {
- value = vm._applyFilters(value, null, this.filters, false)
- }
- this.afterGet()
- return value
- }
- /**
- * Set the corresponding value with the setter.
- *
- * @param {*} value
- */
- p.set = function (value) {
- var vm = this.vm
- if (this.filters) {
- value = vm._applyFilters(
- value, this.value, this.filters, true)
- }
- try {
- this.setter.call(vm, vm, value)
- } catch (e) {
- if (
- ("development") !== 'production' &&
- config.warnExpressionErrors
- ) {
- _.warn(
- 'Error when evaluating setter "' +
- this.expression + '"', e
- )
- }
- }
- }
- /**
- * Prepare for dependency collection.
- */
- p.beforeGet = function () {
- Dep.target = this
- this.newDeps = []
- }
- /**
- * Clean up for dependency collection.
- */
- p.afterGet = function () {
- Dep.target = null
- var i = this.deps.length
- while (i--) {
- var dep = this.deps[i]
- if (dep) {
- dep.removeSub(this)
- }
- }
- this.deps = this.newDeps
- this.newDeps = null
- }
- /**
- * Subscriber interface.
- * Will be called when a dependency changes.
- *
- * @param {Boolean} shallow
- */
- p.update = function (shallow) {
- if (this.lazy) {
- this.dirty = true
- } else if (!config.async) {
- this.run()
- } else {
- // if queued, only overwrite shallow with non-shallow,
- // but not the other way around.
- this.shallow = this.queued
- ? shallow
- ? this.shallow
- : false
- : !!shallow
- this.queued = true
- batcher.push(this)
- }
- }
- /**
- * Batcher job interface.
- * Will be called by the batcher.
- */
- p.run = function () {
- if (this.active) {
- var value = this.get()
- if (
- value !== this.value ||
- // Deep watchers and Array watchers should fire even
- // when the value is the same, because the value may
- // have mutated; but only do so if this is a
- // non-shallow update (caused by a vm digest).
- ((_.isArray(value) || this.deep) && !this.shallow)
- ) {
- var oldValue = this.value
- this.value = value
- this.cb(value, oldValue)
- }
- this.queued = this.shallow = false
- }
- }
- /**
- * Evaluate the value of the watcher.
- * This only gets called for lazy watchers.
- */
- p.evaluate = function () {
- // avoid overwriting another watcher that is being
- // collected.
- var current = Dep.target
- this.value = this.get()
- this.dirty = false
- Dep.target = current
- }
- /**
- * Depend on all deps collected by this watcher.
- */
- p.depend = function () {
- var i = this.deps.length
- while (i--) {
- this.deps[i].depend()
- }
- }
- /**
- * Remove self from all dependencies' subcriber list.
- */
- p.teardown = function () {
- if (this.active) {
- // remove self from vm's watcher list
- // we can skip this if the vm if being destroyed
- // which can improve teardown performance.
- if (!this.vm._isBeingDestroyed) {
- this.vm._watchers.$remove(this)
- }
- var i = this.deps.length
- while (i--) {
- this.deps[i].removeSub(this)
- }
- this.active = false
- this.vm = this.cb = this.value = null
- }
- }
- /**
- * Recrusively traverse an object to evoke all converted
- * getters, so that every nested property inside the object
- * is collected as a "deep" dependency.
- *
- * @param {Object} obj
- */
- function traverse (obj) {
- var key, val, i
- for (key in obj) {
- val = obj[key]
- if (_.isArray(val)) {
- i = val.length
- while (i--) traverse(val[i])
- } else if (_.isObject(val)) {
- traverse(val)
- }
- }
- }
- module.exports = Watcher
- /***/ },
- /* 18 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- /**
- * A dep is an observable that can have multiple
- * directives subscribing to it.
- *
- * @constructor
- */
- function Dep () {
- this.subs = []
- }
- // the current target watcher being evaluated.
- // this is globally unique because there could be only one
- // watcher being evaluated at any time.
- Dep.target = null
- var p = Dep.prototype
- /**
- * Add a directive subscriber.
- *
- * @param {Directive} sub
- */
- p.addSub = function (sub) {
- this.subs.push(sub)
- }
- /**
- * Remove a directive subscriber.
- *
- * @param {Directive} sub
- */
- p.removeSub = function (sub) {
- this.subs.$remove(sub)
- }
- /**
- * Add self as a dependency to the target watcher.
- */
- p.depend = function () {
- Dep.target.addDep(this)
- }
- /**
- * Notify all subscribers of a new value.
- */
- p.notify = function () {
- // stablize the subscriber list first
- var subs = _.toArray(this.subs)
- for (var i = 0, l = subs.length; i < l; i++) {
- subs[i].update()
- }
- }
- module.exports = Dep
- /***/ },
- /* 19 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Path = __webpack_require__(20)
- var Cache = __webpack_require__(14)
- var expressionCache = new Cache(1000)
- var allowedKeywords =
- 'Math,Date,this,true,false,null,undefined,Infinity,NaN,' +
- 'isNaN,isFinite,decodeURI,decodeURIComponent,encodeURI,' +
- 'encodeURIComponent,parseInt,parseFloat'
- var allowedKeywordsRE =
- new RegExp('^(' + allowedKeywords.replace(/,/g, '\\b|') + '\\b)')
- // keywords that don't make sense inside expressions
- var improperKeywords =
- 'break,case,class,catch,const,continue,debugger,default,' +
- 'delete,do,else,export,extends,finally,for,function,if,' +
- 'import,in,instanceof,let,return,super,switch,throw,try,' +
- 'var,while,with,yield,enum,await,implements,package,' +
- 'proctected,static,interface,private,public'
- var improperKeywordsRE =
- new RegExp('^(' + improperKeywords.replace(/,/g, '\\b|') + '\\b)')
- var wsRE = /\s/g
- var newlineRE = /\n/g
- var saveRE = /[\{,]\s*[\w\$_]+\s*:|('[^']*'|"[^"]*")|new |typeof |void /g
- var restoreRE = /"(\d+)"/g
- var pathTestRE = /^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/
- var pathReplaceRE = /[^\w$\.]([A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\])*)/g
- var booleanLiteralRE = /^(true|false)$/
- /**
- * Save / Rewrite / Restore
- *
- * When rewriting paths found in an expression, it is
- * possible for the same letter sequences to be found in
- * strings and Object literal property keys. Therefore we
- * remove and store these parts in a temporary array, and
- * restore them after the path rewrite.
- */
- var saved = []
- /**
- * Save replacer
- *
- * The save regex can match two possible cases:
- * 1. An opening object literal
- * 2. A string
- * If matched as a plain string, we need to escape its
- * newlines, since the string needs to be preserved when
- * generating the function body.
- *
- * @param {String} str
- * @param {String} isString - str if matched as a string
- * @return {String} - placeholder with index
- */
- function save (str, isString) {
- var i = saved.length
- saved[i] = isString
- ? str.replace(newlineRE, '\\n')
- : str
- return '"' + i + '"'
- }
- /**
- * Path rewrite replacer
- *
- * @param {String} raw
- * @return {String}
- */
- function rewrite (raw) {
- var c = raw.charAt(0)
- var path = raw.slice(1)
- if (allowedKeywordsRE.test(path)) {
- return raw
- } else {
- path = path.indexOf('"') > -1
- ? path.replace(restoreRE, restore)
- : path
- return c + 'scope.' + path
- }
- }
- /**
- * Restore replacer
- *
- * @param {String} str
- * @param {String} i - matched save index
- * @return {String}
- */
- function restore (str, i) {
- return saved[i]
- }
- /**
- * Rewrite an expression, prefixing all path accessors with
- * `scope.` and generate getter/setter functions.
- *
- * @param {String} exp
- * @param {Boolean} needSet
- * @return {Function}
- */
- function compileExpFns (exp, needSet) {
- if (improperKeywordsRE.test(exp)) {
- ("development") !== 'production' && _.warn(
- 'Avoid using reserved keywords in expression: ' + exp
- )
- }
- // reset state
- saved.length = 0
- // save strings and object literal keys
- var body = exp
- .replace(saveRE, save)
- .replace(wsRE, '')
- // rewrite all paths
- // pad 1 space here becaue the regex matches 1 extra char
- body = (' ' + body)
- .replace(pathReplaceRE, rewrite)
- .replace(restoreRE, restore)
- var getter = makeGetter(body)
- if (getter) {
- return {
- get: getter,
- body: body,
- set: needSet
- ? makeSetter(body)
- : null
- }
- }
- }
- /**
- * Compile getter setters for a simple path.
- *
- * @param {String} exp
- * @return {Function}
- */
- function compilePathFns (exp) {
- var getter, path
- if (exp.indexOf('[') < 0) {
- // really simple path
- path = exp.split('.')
- path.raw = exp
- getter = Path.compileGetter(path)
- } else {
- // do the real parsing
- path = Path.parse(exp)
- getter = path.get
- }
- return {
- get: getter,
- // always generate setter for simple paths
- set: function (obj, val) {
- Path.set(obj, path, val)
- }
- }
- }
- /**
- * Build a getter function. Requires eval.
- *
- * We isolate the try/catch so it doesn't affect the
- * optimization of the parse function when it is not called.
- *
- * @param {String} body
- * @return {Function|undefined}
- */
- function makeGetter (body) {
- try {
- return new Function('scope', 'return ' + body + ';')
- } catch (e) {
- ("development") !== 'production' && _.warn(
- 'Invalid expression. ' +
- 'Generated function body: ' + body
- )
- }
- }
- /**
- * Build a setter function.
- *
- * This is only needed in rare situations like "a[b]" where
- * a settable path requires dynamic evaluation.
- *
- * This setter function may throw error when called if the
- * expression body is not a valid left-hand expression in
- * assignment.
- *
- * @param {String} body
- * @return {Function|undefined}
- */
- function makeSetter (body) {
- try {
- return new Function('scope', 'value', body + '=value;')
- } catch (e) {
- ("development") !== 'production' && _.warn(
- 'Invalid setter function body: ' + body
- )
- }
- }
- /**
- * Check for setter existence on a cache hit.
- *
- * @param {Function} hit
- */
- function checkSetter (hit) {
- if (!hit.set) {
- hit.set = makeSetter(hit.body)
- }
- }
- /**
- * Parse an expression into re-written getter/setters.
- *
- * @param {String} exp
- * @param {Boolean} needSet
- * @return {Function}
- */
- exports.parse = function (exp, needSet) {
- exp = exp.trim()
- // try cache
- var hit = expressionCache.get(exp)
- if (hit) {
- if (needSet) {
- checkSetter(hit)
- }
- return hit
- }
- // we do a simple path check to optimize for them.
- // the check fails valid paths with unusal whitespaces,
- // but that's too rare and we don't care.
- // also skip boolean literals and paths that start with
- // global "Math"
- var res = exports.isSimplePath(exp)
- ? compilePathFns(exp)
- : compileExpFns(exp, needSet)
- expressionCache.put(exp, res)
- return res
- }
- /**
- * Check if an expression is a simple path.
- *
- * @param {String} exp
- * @return {Boolean}
- */
- exports.isSimplePath = function (exp) {
- return pathTestRE.test(exp) &&
- // don't treat true/false as paths
- !booleanLiteralRE.test(exp) &&
- // Math constants e.g. Math.PI, Math.E etc.
- exp.slice(0, 5) !== 'Math.'
- }
- /***/ },
- /* 20 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Cache = __webpack_require__(14)
- var pathCache = new Cache(1000)
- var identRE = exports.identRE = /^[$_a-zA-Z]+[\w$]*$/
- // actions
- var APPEND = 0
- var PUSH = 1
- // states
- var BEFORE_PATH = 0
- var IN_PATH = 1
- var BEFORE_IDENT = 2
- var IN_IDENT = 3
- var BEFORE_ELEMENT = 4
- var AFTER_ZERO = 5
- var IN_INDEX = 6
- var IN_SINGLE_QUOTE = 7
- var IN_DOUBLE_QUOTE = 8
- var IN_SUB_PATH = 9
- var AFTER_ELEMENT = 10
- var AFTER_PATH = 11
- var ERROR = 12
- var pathStateMachine = []
- pathStateMachine[BEFORE_PATH] = {
- 'ws': [BEFORE_PATH],
- 'ident': [IN_IDENT, APPEND],
- '[': [BEFORE_ELEMENT],
- 'eof': [AFTER_PATH]
- }
- pathStateMachine[IN_PATH] = {
- 'ws': [IN_PATH],
- '.': [BEFORE_IDENT],
- '[': [BEFORE_ELEMENT],
- 'eof': [AFTER_PATH]
- }
- pathStateMachine[BEFORE_IDENT] = {
- 'ws': [BEFORE_IDENT],
- 'ident': [IN_IDENT, APPEND]
- }
- pathStateMachine[IN_IDENT] = {
- 'ident': [IN_IDENT, APPEND],
- '0': [IN_IDENT, APPEND],
- 'number': [IN_IDENT, APPEND],
- 'ws': [IN_PATH, PUSH],
- '.': [BEFORE_IDENT, PUSH],
- '[': [BEFORE_ELEMENT, PUSH],
- 'eof': [AFTER_PATH, PUSH]
- }
- pathStateMachine[BEFORE_ELEMENT] = {
- 'ws': [BEFORE_ELEMENT],
- '0': [AFTER_ZERO, APPEND],
- 'number': [IN_INDEX, APPEND],
- "'": [IN_SINGLE_QUOTE, APPEND, ''],
- '"': [IN_DOUBLE_QUOTE, APPEND, ''],
- 'ident': [IN_SUB_PATH, APPEND, '*']
- }
- pathStateMachine[AFTER_ZERO] = {
- 'ws': [AFTER_ELEMENT, PUSH],
- ']': [IN_PATH, PUSH]
- }
- pathStateMachine[IN_INDEX] = {
- '0': [IN_INDEX, APPEND],
- 'number': [IN_INDEX, APPEND],
- 'ws': [AFTER_ELEMENT],
- ']': [IN_PATH, PUSH]
- }
- pathStateMachine[IN_SINGLE_QUOTE] = {
- "'": [AFTER_ELEMENT],
- 'eof': ERROR,
- 'else': [IN_SINGLE_QUOTE, APPEND]
- }
- pathStateMachine[IN_DOUBLE_QUOTE] = {
- '"': [AFTER_ELEMENT],
- 'eof': ERROR,
- 'else': [IN_DOUBLE_QUOTE, APPEND]
- }
- pathStateMachine[IN_SUB_PATH] = {
- 'ident': [IN_SUB_PATH, APPEND],
- '0': [IN_SUB_PATH, APPEND],
- 'number': [IN_SUB_PATH, APPEND],
- 'ws': [AFTER_ELEMENT],
- ']': [IN_PATH, PUSH]
- }
- pathStateMachine[AFTER_ELEMENT] = {
- 'ws': [AFTER_ELEMENT],
- ']': [IN_PATH, PUSH]
- }
- /**
- * Determine the type of a character in a keypath.
- *
- * @param {Char} ch
- * @return {String} type
- */
- function getPathCharType (ch) {
- if (ch === undefined) {
- return 'eof'
- }
- var code = ch.charCodeAt(0)
- switch (code) {
- case 0x5B: // [
- case 0x5D: // ]
- case 0x2E: // .
- case 0x22: // "
- case 0x27: // '
- case 0x30: // 0
- return ch
- case 0x5F: // _
- case 0x24: // $
- return 'ident'
- case 0x20: // Space
- case 0x09: // Tab
- case 0x0A: // Newline
- case 0x0D: // Return
- case 0xA0: // No-break space
- case 0xFEFF: // Byte Order Mark
- case 0x2028: // Line Separator
- case 0x2029: // Paragraph Separator
- return 'ws'
- }
- // a-z, A-Z
- if (
- (code >= 0x61 && code <= 0x7A) ||
- (code >= 0x41 && code <= 0x5A)
- ) {
- return 'ident'
- }
- // 1-9
- if (code >= 0x31 && code <= 0x39) {
- return 'number'
- }
- return 'else'
- }
- /**
- * Parse a string path into an array of segments
- * Todo implement cache
- *
- * @param {String} path
- * @return {Array|undefined}
- */
- function parsePath (path) {
- var keys = []
- var index = -1
- var mode = BEFORE_PATH
- var c, newChar, key, type, transition, action, typeMap
- var actions = []
- actions[PUSH] = function () {
- if (key === undefined) {
- return
- }
- keys.push(key)
- key = undefined
- }
- actions[APPEND] = function () {
- if (key === undefined) {
- key = newChar
- } else {
- key += newChar
- }
- }
- function maybeUnescapeQuote () {
- var nextChar = path[index + 1]
- if ((mode === IN_SINGLE_QUOTE && nextChar === "'") ||
- (mode === IN_DOUBLE_QUOTE && nextChar === '"')) {
- index++
- newChar = nextChar
- actions[APPEND]()
- return true
- }
- }
- while (mode != null) {
- index++
- c = path[index]
- if (c === '\\' && maybeUnescapeQuote()) {
- continue
- }
- type = getPathCharType(c)
- typeMap = pathStateMachine[mode]
- transition = typeMap[type] || typeMap['else'] || ERROR
- if (transition === ERROR) {
- return // parse error
- }
- mode = transition[0]
- action = actions[transition[1]]
- if (action) {
- newChar = transition[2]
- newChar = newChar === undefined
- ? c
- : newChar === '*'
- ? newChar + c
- : newChar
- action()
- }
- if (mode === AFTER_PATH) {
- keys.raw = path
- return keys
- }
- }
- }
- /**
- * Format a accessor segment based on its type.
- *
- * @param {String} key
- * @return {Boolean}
- */
- function formatAccessor (key) {
- if (identRE.test(key)) { // identifier
- return '.' + key
- } else if (+key === key >>> 0) { // bracket index
- return '[' + key + ']'
- } else if (key.charAt(0) === '*') {
- return '[o' + formatAccessor(key.slice(1)) + ']'
- } else { // bracket string
- return '["' + key.replace(/"/g, '\\"') + '"]'
- }
- }
- /**
- * Compiles a getter function with a fixed path.
- * The fixed path getter supresses errors.
- *
- * @param {Array} path
- * @return {Function}
- */
- exports.compileGetter = function (path) {
- var body = 'return o' + path.map(formatAccessor).join('')
- return new Function('o', body)
- }
- /**
- * External parse that check for a cache hit first
- *
- * @param {String} path
- * @return {Array|undefined}
- */
- exports.parse = function (path) {
- var hit = pathCache.get(path)
- if (!hit) {
- hit = parsePath(path)
- if (hit) {
- hit.get = exports.compileGetter(hit)
- pathCache.put(path, hit)
- }
- }
- return hit
- }
- /**
- * Get from an object from a path string
- *
- * @param {Object} obj
- * @param {String} path
- */
- exports.get = function (obj, path) {
- path = exports.parse(path)
- if (path) {
- return path.get(obj)
- }
- }
- /**
- * Set on an object from a path
- *
- * @param {Object} obj
- * @param {String | Array} path
- * @param {*} val
- */
- exports.set = function (obj, path, val) {
- var original = obj
- if (typeof path === 'string') {
- path = exports.parse(path)
- }
- if (!path || !_.isObject(obj)) {
- return false
- }
- var last, key
- for (var i = 0, l = path.length; i < l; i++) {
- last = obj
- key = path[i]
- if (key.charAt(0) === '*') {
- key = original[key.slice(1)]
- }
- if (i < l - 1) {
- obj = obj[key]
- if (!_.isObject(obj)) {
- warnNonExistent(path)
- obj = {}
- last.$add(key, obj)
- }
- } else {
- if (_.isArray(obj)) {
- obj.$set(key, val)
- } else if (key in obj) {
- obj[key] = val
- } else {
- warnNonExistent(path)
- obj.$add(key, val)
- }
- }
- }
- return true
- }
- function warnNonExistent (path) {
- ("development") !== 'production' && _.warn(
- 'You are setting a non-existent path "' + path.raw + '" ' +
- 'on a vm instance. Consider pre-initializing the property ' +
- 'with the "data" option for more reliable reactivity ' +
- 'and better performance.'
- )
- }
- /***/ },
- /* 21 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- // we have two separate queues: one for directive updates
- // and one for user watcher registered via $watch().
- // we want to guarantee directive updates to be called
- // before user watchers so that when user watchers are
- // triggered, the DOM would have already been in updated
- // state.
- var queue = []
- var userQueue = []
- var has = {}
- var circular = {}
- var waiting = false
- var internalQueueDepleted = false
- /**
- * Reset the batcher's state.
- */
- function reset () {
- queue = []
- userQueue = []
- has = {}
- circular = {}
- waiting = internalQueueDepleted = false
- }
- /**
- * Flush both queues and run the watchers.
- */
- function flush () {
- run(queue)
- internalQueueDepleted = true
- run(userQueue)
- reset()
- }
- /**
- * Run the watchers in a single queue.
- *
- * @param {Array} queue
- */
- function run (queue) {
- // do not cache length because more watchers might be pushed
- // as we run existing watchers
- for (var i = 0; i < queue.length; i++) {
- var watcher = queue[i]
- var id = watcher.id
- has[id] = null
- watcher.run()
- // in dev build, check and stop circular updates.
- if (("development") !== 'production' && has[id] != null) {
- circular[id] = (circular[id] || 0) + 1
- if (circular[id] > config._maxUpdateCount) {
- queue.splice(has[id], 1)
- _.warn(
- 'You may have an infinite update loop for watcher ' +
- 'with expression: ' + watcher.expression
- )
- }
- }
- }
- }
- /**
- * Push a watcher into the watcher queue.
- * Jobs with duplicate IDs will be skipped unless it's
- * pushed when the queue is being flushed.
- *
- * @param {Watcher} watcher
- * properties:
- * - {Number} id
- * - {Function} run
- */
- exports.push = function (watcher) {
- var id = watcher.id
- if (has[id] == null) {
- // if an internal watcher is pushed, but the internal
- // queue is already depleted, we run it immediately.
- if (internalQueueDepleted && !watcher.user) {
- watcher.run()
- return
- }
- // push watcher into appropriate queue
- var q = watcher.user ? userQueue : queue
- has[id] = q.length
- q.push(watcher)
- // queue the flush
- if (!waiting) {
- waiting = true
- _.nextTick(flush)
- }
- }
- }
- /***/ },
- /* 22 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Cache = __webpack_require__(14)
- var templateCache = new Cache(1000)
- var idSelectorCache = new Cache(1000)
- var map = {
- _default: [0, '', ''],
- legend: [1, '<fieldset>', '</fieldset>'],
- tr: [2, '<table><tbody>', '</tbody></table>'],
- col: [
- 2,
- '<table><tbody></tbody><colgroup>',
- '</colgroup></table>'
- ]
- }
- map.td =
- map.th = [
- 3,
- '<table><tbody><tr>',
- '</tr></tbody></table>'
- ]
- map.option =
- map.optgroup = [
- 1,
- '<select multiple="multiple">',
- '</select>'
- ]
- map.thead =
- map.tbody =
- map.colgroup =
- map.caption =
- map.tfoot = [1, '<table>', '</table>']
- map.g =
- map.defs =
- map.symbol =
- map.use =
- map.image =
- map.text =
- map.circle =
- map.ellipse =
- map.line =
- map.path =
- map.polygon =
- map.polyline =
- map.rect = [
- 1,
- '<svg ' +
- 'xmlns="http://www.w3.org/2000/svg" ' +
- 'xmlns:xlink="http://www.w3.org/1999/xlink" ' +
- 'xmlns:ev="http://www.w3.org/2001/xml-events"' +
- 'version="1.1">',
- '</svg>'
- ]
- /**
- * Check if a node is a supported template node with a
- * DocumentFragment content.
- *
- * @param {Node} node
- * @return {Boolean}
- */
- function isRealTemplate (node) {
- return _.isTemplate(node) &&
- node.content instanceof DocumentFragment
- }
- var tagRE = /<([\w:]+)/
- var entityRE = /&\w+;/
- /**
- * Convert a string template to a DocumentFragment.
- * Determines correct wrapping by tag types. Wrapping
- * strategy found in jQuery & component/domify.
- *
- * @param {String} templateString
- * @return {DocumentFragment}
- */
- function stringToFragment (templateString) {
- // try a cache hit first
- var hit = templateCache.get(templateString)
- if (hit) {
- return hit
- }
- var frag = document.createDocumentFragment()
- var tagMatch = templateString.match(tagRE)
- var entityMatch = entityRE.test(templateString)
- if (!tagMatch && !entityMatch) {
- // text only, return a single text node.
- frag.appendChild(
- document.createTextNode(templateString)
- )
- } else {
- var tag = tagMatch && tagMatch[1]
- var wrap = map[tag] || map._default
- var depth = wrap[0]
- var prefix = wrap[1]
- var suffix = wrap[2]
- var node = document.createElement('div')
- node.innerHTML = prefix + templateString.trim() + suffix
- while (depth--) {
- node = node.lastChild
- }
- var child
- /* eslint-disable no-cond-assign */
- while (child = node.firstChild) {
- /* eslint-enable no-cond-assign */
- frag.appendChild(child)
- }
- }
- templateCache.put(templateString, frag)
- return frag
- }
- /**
- * Convert a template node to a DocumentFragment.
- *
- * @param {Node} node
- * @return {DocumentFragment}
- */
- function nodeToFragment (node) {
- // if its a template tag and the browser supports it,
- // its content is already a document fragment.
- if (isRealTemplate(node)) {
- _.trimNode(node.content)
- return node.content
- }
- // script template
- if (node.tagName === 'SCRIPT') {
- return stringToFragment(node.textContent)
- }
- // normal node, clone it to avoid mutating the original
- var clone = exports.clone(node)
- var frag = document.createDocumentFragment()
- var child
- /* eslint-disable no-cond-assign */
- while (child = clone.firstChild) {
- /* eslint-enable no-cond-assign */
- frag.appendChild(child)
- }
- _.trimNode(frag)
- return frag
- }
- // Test for the presence of the Safari template cloning bug
- // https://bugs.webkit.org/show_bug.cgi?id=137755
- var hasBrokenTemplate = _.inBrowser
- ? (function () {
- var a = document.createElement('div')
- a.innerHTML = '<template>1</template>'
- return !a.cloneNode(true).firstChild.innerHTML
- })()
- : false
- // Test for IE10/11 textarea placeholder clone bug
- var hasTextareaCloneBug = _.inBrowser
- ? (function () {
- var t = document.createElement('textarea')
- t.placeholder = 't'
- return t.cloneNode(true).value === 't'
- })()
- : false
- /**
- * 1. Deal with Safari cloning nested <template> bug by
- * manually cloning all template instances.
- * 2. Deal with IE10/11 textarea placeholder bug by setting
- * the correct value after cloning.
- *
- * @param {Element|DocumentFragment} node
- * @return {Element|DocumentFragment}
- */
- exports.clone = function (node) {
- if (!node.querySelectorAll) {
- return node.cloneNode()
- }
- var res = node.cloneNode(true)
- var i, original, cloned
- /* istanbul ignore if */
- if (hasBrokenTemplate) {
- var clone = res
- if (isRealTemplate(node)) {
- node = node.content
- clone = res.content
- }
- original = node.querySelectorAll('template')
- if (original.length) {
- cloned = clone.querySelectorAll('template')
- i = cloned.length
- while (i--) {
- cloned[i].parentNode.replaceChild(
- exports.clone(original[i]),
- cloned[i]
- )
- }
- }
- }
- /* istanbul ignore if */
- if (hasTextareaCloneBug) {
- if (node.tagName === 'TEXTAREA') {
- res.value = node.value
- } else {
- original = node.querySelectorAll('textarea')
- if (original.length) {
- cloned = res.querySelectorAll('textarea')
- i = cloned.length
- while (i--) {
- cloned[i].value = original[i].value
- }
- }
- }
- }
- return res
- }
- /**
- * Process the template option and normalizes it into a
- * a DocumentFragment that can be used as a partial or a
- * instance template.
- *
- * @param {*} template
- * Possible values include:
- * - DocumentFragment object
- * - Node object of type Template
- * - id selector: '#some-template-id'
- * - template string: '<div><span>{{msg}}</span></div>'
- * @param {Boolean} clone
- * @param {Boolean} noSelector
- * @return {DocumentFragment|undefined}
- */
- exports.parse = function (template, clone, noSelector) {
- var node, frag
- // if the template is already a document fragment,
- // do nothing
- if (template instanceof DocumentFragment) {
- _.trimNode(template)
- return clone
- ? exports.clone(template)
- : template
- }
- if (typeof template === 'string') {
- // id selector
- if (!noSelector && template.charAt(0) === '#') {
- // id selector can be cached too
- frag = idSelectorCache.get(template)
- if (!frag) {
- node = document.getElementById(template.slice(1))
- if (node) {
- frag = nodeToFragment(node)
- // save selector to cache
- idSelectorCache.put(template, frag)
- }
- }
- } else {
- // normal string template
- frag = stringToFragment(template)
- }
- } else if (template.nodeType) {
- // a direct node
- frag = nodeToFragment(template)
- }
- return frag && clone
- ? exports.clone(frag)
- : frag
- }
- /***/ },
- /* 23 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- var templateParser = __webpack_require__(22)
- module.exports = {
- isLiteral: true,
- /**
- * Setup. Two possible usages:
- *
- * - static:
- * v-component="comp"
- *
- * - dynamic:
- * v-component="{{currentView}}"
- */
- bind: function () {
- if (!this.el.__vue__) {
- // create a ref anchor
- this.anchor = _.createAnchor('v-component')
- _.replace(this.el, this.anchor)
- // check keep-alive options.
- // If yes, instead of destroying the active vm when
- // hiding (v-if) or switching (dynamic literal) it,
- // we simply remove it from the DOM and save it in a
- // cache object, with its constructor id as the key.
- this.keepAlive = this._checkParam('keep-alive') != null
- // wait for event before insertion
- this.waitForEvent = this._checkParam('wait-for')
- // check ref
- this.refID = this._checkParam(config.prefix + 'ref')
- if (this.keepAlive) {
- this.cache = {}
- }
- // check inline-template
- if (this._checkParam('inline-template') !== null) {
- // extract inline template as a DocumentFragment
- this.template = _.extractContent(this.el, true)
- }
- // component resolution related state
- this.pendingComponentCb =
- this.Component = null
- // transition related state
- this.pendingRemovals = 0
- this.pendingRemovalCb = null
- // if static, build right now.
- if (!this._isDynamicLiteral) {
- this.resolveComponent(this.expression, _.bind(this.initStatic, this))
- } else {
- // check dynamic component params
- this.transMode = this._checkParam('transition-mode')
- }
- } else {
- ("development") !== 'production' && _.warn(
- 'cannot mount component "' + this.expression + '" ' +
- 'on already mounted element: ' + this.el
- )
- }
- },
- /**
- * Initialize a static component.
- */
- initStatic: function () {
- // wait-for
- var anchor = this.anchor
- var options
- var waitFor = this.waitForEvent
- if (waitFor) {
- options = {
- created: function () {
- this.$once(waitFor, function () {
- this.$before(anchor)
- })
- }
- }
- }
- var child = this.build(options)
- this.setCurrent(child)
- if (!this.waitForEvent) {
- child.$before(anchor)
- }
- },
- /**
- * Public update, called by the watcher in the dynamic
- * literal scenario, e.g. v-component="{{view}}"
- */
- update: function (value) {
- this.setComponent(value)
- },
- /**
- * Switch dynamic components. May resolve the component
- * asynchronously, and perform transition based on
- * specified transition mode. Accepts a few additional
- * arguments specifically for vue-router.
- *
- * The callback is called when the full transition is
- * finished.
- *
- * @param {String} value
- * @param {Function} [cb]
- */
- setComponent: function (value, cb) {
- this.invalidatePending()
- if (!value) {
- // just remove current
- this.unbuild(true)
- this.remove(this.childVM, cb)
- this.unsetCurrent()
- } else {
- this.resolveComponent(value, _.bind(function () {
- this.unbuild(true)
- var options
- var self = this
- var waitFor = this.waitForEvent
- if (waitFor) {
- options = {
- created: function () {
- this.$once(waitFor, function () {
- self.transition(this, cb)
- })
- }
- }
- }
- var newComponent = this.build(options)
- if (!waitFor) {
- this.transition(newComponent, cb)
- }
- }, this))
- }
- },
- /**
- * Resolve the component constructor to use when creating
- * the child vm.
- */
- resolveComponent: function (id, cb) {
- var self = this
- this.pendingComponentCb = _.cancellable(function (Component) {
- self.Component = Component
- cb()
- })
- this.vm._resolveComponent(id, this.pendingComponentCb)
- },
- /**
- * When the component changes or unbinds before an async
- * constructor is resolved, we need to invalidate its
- * pending callback.
- */
- invalidatePending: function () {
- if (this.pendingComponentCb) {
- this.pendingComponentCb.cancel()
- this.pendingComponentCb = null
- }
- },
- /**
- * Instantiate/insert a new child vm.
- * If keep alive and has cached instance, insert that
- * instance; otherwise build a new one and cache it.
- *
- * @param {Object} [extraOptions]
- * @return {Vue} - the created instance
- */
- build: function (extraOptions) {
- if (this.keepAlive) {
- var cached = this.cache[this.Component.cid]
- if (cached) {
- return cached
- }
- }
- if (this.Component) {
- // default options
- var options = {
- el: templateParser.clone(this.el),
- template: this.template,
- // if no inline-template, then the compiled
- // linker can be cached for better performance.
- _linkerCachable: !this.template,
- _asComponent: true,
- _isRouterView: this._isRouterView,
- _context: this.vm
- }
- // extra options
- if (extraOptions) {
- _.extend(options, extraOptions)
- }
- var parent = this._host || this.vm
- var child = parent.$addChild(options, this.Component)
- if (this.keepAlive) {
- this.cache[this.Component.cid] = child
- }
- return child
- }
- },
- /**
- * Teardown the current child, but defers cleanup so
- * that we can separate the destroy and removal steps.
- *
- * @param {Boolean} defer
- */
- unbuild: function (defer) {
- var child = this.childVM
- if (!child || this.keepAlive) {
- return
- }
- // the sole purpose of `deferCleanup` is so that we can
- // "deactivate" the vm right now and perform DOM removal
- // later.
- child.$destroy(false, defer)
- },
- /**
- * Remove current destroyed child and manually do
- * the cleanup after removal.
- *
- * @param {Function} cb
- */
- remove: function (child, cb) {
- var keepAlive = this.keepAlive
- if (child) {
- // we may have a component switch when a previous
- // component is still being transitioned out.
- // we want to trigger only one lastest insertion cb
- // when the existing transition finishes. (#1119)
- this.pendingRemovals++
- this.pendingRemovalCb = cb
- var self = this
- child.$remove(function () {
- self.pendingRemovals--
- if (!keepAlive) child._cleanup()
- if (!self.pendingRemovals && self.pendingRemovalCb) {
- self.pendingRemovalCb()
- self.pendingRemovalCb = null
- }
- })
- } else if (cb) {
- cb()
- }
- },
- /**
- * Actually swap the components, depending on the
- * transition mode. Defaults to simultaneous.
- *
- * @param {Vue} target
- * @param {Function} [cb]
- */
- transition: function (target, cb) {
- var self = this
- var current = this.childVM
- this.unsetCurrent()
- this.setCurrent(target)
- switch (self.transMode) {
- case 'in-out':
- target.$before(self.anchor, function () {
- self.remove(current, cb)
- })
- break
- case 'out-in':
- self.remove(current, function () {
- target.$before(self.anchor, cb)
- })
- break
- default:
- self.remove(current)
- target.$before(self.anchor, cb)
- }
- },
- /**
- * Set childVM and parent ref
- */
- setCurrent: function (child) {
- this.childVM = child
- var refID = child._refID || this.refID
- if (refID) {
- this.vm.$[refID] = child
- }
- },
- /**
- * Unset childVM and parent ref
- */
- unsetCurrent: function () {
- var child = this.childVM
- this.childVM = null
- var refID = (child && child._refID) || this.refID
- if (refID) {
- this.vm.$[refID] = null
- }
- },
- /**
- * Unbind.
- */
- unbind: function () {
- this.invalidatePending()
- // Do not defer cleanup when unbinding
- this.unbuild()
- this.unsetCurrent()
- // destroy all keep-alive cached instances
- if (this.cache) {
- for (var key in this.cache) {
- this.cache[key].$destroy()
- }
- this.cache = null
- }
- }
- }
- /***/ },
- /* 24 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- var templateParser = __webpack_require__(22)
- /**
- * Process an element or a DocumentFragment based on a
- * instance option object. This allows us to transclude
- * a template node/fragment before the instance is created,
- * so the processed fragment can then be cloned and reused
- * in v-repeat.
- *
- * @param {Element} el
- * @param {Object} options
- * @return {Element|DocumentFragment}
- */
- exports.transclude = function (el, options) {
- // extract container attributes to pass them down
- // to compiler, because they need to be compiled in
- // parent scope. we are mutating the options object here
- // assuming the same object will be used for compile
- // right after this.
- if (options) {
- options._containerAttrs = extractAttrs(el)
- }
- // for template tags, what we want is its content as
- // a documentFragment (for fragment instances)
- if (_.isTemplate(el)) {
- el = templateParser.parse(el)
- }
- if (options) {
- if (options._asComponent && !options.template) {
- options.template = '<content></content>'
- }
- if (options.template) {
- options._content = _.extractContent(el)
- el = transcludeTemplate(el, options)
- }
- }
- if (el instanceof DocumentFragment) {
- // anchors for fragment instance
- // passing in `persist: true` to avoid them being
- // discarded by IE during template cloning
- _.prepend(_.createAnchor('v-start', true), el)
- el.appendChild(_.createAnchor('v-end', true))
- }
- return el
- }
- /**
- * Process the template option.
- * If the replace option is true this will swap the $el.
- *
- * @param {Element} el
- * @param {Object} options
- * @return {Element|DocumentFragment}
- */
- function transcludeTemplate (el, options) {
- var template = options.template
- var frag = templateParser.parse(template, true)
- if (frag) {
- var replacer = frag.firstChild
- var tag = replacer.tagName && replacer.tagName.toLowerCase()
- if (options.replace) {
- /* istanbul ignore if */
- if (el === document.body) {
- ("development") !== 'production' && _.warn(
- 'You are mounting an instance with a template to ' +
- '<body>. This will replace <body> entirely. You ' +
- 'should probably use `replace: false` here.'
- )
- }
- // there are many cases where the instance must
- // become a fragment instance: basically anything that
- // can create more than 1 root nodes.
- if (
- // multi-children template
- frag.childNodes.length > 1 ||
- // non-element template
- replacer.nodeType !== 1 ||
- // single nested component
- tag === 'component' ||
- _.resolveAsset(options, 'components', tag) ||
- replacer.hasAttribute(config.prefix + 'component') ||
- // element directive
- _.resolveAsset(options, 'elementDirectives', tag) ||
- // repeat block
- replacer.hasAttribute(config.prefix + 'repeat')
- ) {
- return frag
- } else {
- options._replacerAttrs = extractAttrs(replacer)
- mergeAttrs(el, replacer)
- return replacer
- }
- } else {
- el.appendChild(frag)
- return el
- }
- } else {
- ("development") !== 'production' && _.warn(
- 'Invalid template option: ' + template
- )
- }
- }
- /**
- * Helper to extract a component container's attributes
- * into a plain object array.
- *
- * @param {Element} el
- * @return {Array}
- */
- function extractAttrs (el) {
- if (el.nodeType === 1 && el.hasAttributes()) {
- return _.toArray(el.attributes)
- }
- }
- /**
- * Merge the attributes of two elements, and make sure
- * the class names are merged properly.
- *
- * @param {Element} from
- * @param {Element} to
- */
- function mergeAttrs (from, to) {
- var attrs = from.attributes
- var i = attrs.length
- var name, value
- while (i--) {
- name = attrs[i].name
- value = attrs[i].value
- if (!to.hasAttribute(name)) {
- to.setAttribute(name, value)
- } else if (name === 'class') {
- value = to.getAttribute(name) + ' ' + value
- to.setAttribute(name, value)
- }
- }
- }
- /***/ },
- /* 25 */
- /***/ function(module, exports, __webpack_require__) {
- // manipulation directives
- exports.text = __webpack_require__(26)
- exports.html = __webpack_require__(27)
- exports.attr = __webpack_require__(28)
- exports.show = __webpack_require__(29)
- exports['class'] = __webpack_require__(31)
- exports.el = __webpack_require__(32)
- exports.ref = __webpack_require__(33)
- exports.cloak = __webpack_require__(34)
- exports.style = __webpack_require__(35)
- exports.transition = __webpack_require__(36)
- // event listener directives
- exports.on = __webpack_require__(39)
- exports.model = __webpack_require__(40)
- // logic control directives
- exports.repeat = __webpack_require__(45)
- exports['if'] = __webpack_require__(46)
- // internal directives that should not be used directly
- // but we still want to expose them for advanced usage.
- exports._component = __webpack_require__(23)
- exports._prop = __webpack_require__(16)
- /***/ },
- /* 26 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- module.exports = {
- bind: function () {
- this.attr = this.el.nodeType === 3
- ? 'data'
- : 'textContent'
- },
- update: function (value) {
- this.el[this.attr] = _.toString(value)
- }
- }
- /***/ },
- /* 27 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var templateParser = __webpack_require__(22)
- module.exports = {
- bind: function () {
- // a comment node means this is a binding for
- // {{{ inline unescaped html }}}
- if (this.el.nodeType === 8) {
- // hold nodes
- this.nodes = []
- // replace the placeholder with proper anchor
- this.anchor = _.createAnchor('v-html')
- _.replace(this.el, this.anchor)
- }
- },
- update: function (value) {
- value = _.toString(value)
- if (this.nodes) {
- this.swap(value)
- } else {
- this.el.innerHTML = value
- }
- },
- swap: function (value) {
- // remove old nodes
- var i = this.nodes.length
- while (i--) {
- _.remove(this.nodes[i])
- }
- // convert new value to a fragment
- // do not attempt to retrieve from id selector
- var frag = templateParser.parse(value, true, true)
- // save a reference to these nodes so we can remove later
- this.nodes = _.toArray(frag.childNodes)
- _.before(frag, this.anchor)
- }
- }
- /***/ },
- /* 28 */
- /***/ function(module, exports) {
- // xlink
- var xlinkNS = 'http://www.w3.org/1999/xlink'
- var xlinkRE = /^xlink:/
- module.exports = {
- priority: 850,
- update: function (value) {
- if (this.arg) {
- this.setAttr(this.arg, value)
- } else if (typeof value === 'object') {
- this.objectHandler(value)
- }
- },
- objectHandler: function (value) {
- // cache object attrs so that only changed attrs
- // are actually updated.
- var cache = this.cache || (this.cache = {})
- var attr, val
- for (attr in cache) {
- if (!(attr in value)) {
- this.setAttr(attr, null)
- delete cache[attr]
- }
- }
- for (attr in value) {
- val = value[attr]
- if (val !== cache[attr]) {
- cache[attr] = val
- this.setAttr(attr, val)
- }
- }
- },
- setAttr: function (attr, value) {
- if (attr === 'value' && attr in this.el) {
- if (!this.valueRemoved) {
- this.el.removeAttribute(attr)
- this.valueRemoved = true
- }
- this.el.value = value
- } else if (value != null && value !== false) {
- if (xlinkRE.test(attr)) {
- this.el.setAttributeNS(xlinkNS, attr, value)
- } else {
- this.el.setAttribute(attr, value)
- }
- } else {
- this.el.removeAttribute(attr)
- }
- }
- }
- /***/ },
- /* 29 */
- /***/ function(module, exports, __webpack_require__) {
- var transition = __webpack_require__(30)
- module.exports = function (value) {
- var el = this.el
- transition.apply(el, value ? 1 : -1, function () {
- el.style.display = value ? '' : 'none'
- }, this.vm)
- }
- /***/ },
- /* 30 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- /**
- * Append with transition.
- *
- * @param {Element} el
- * @param {Element} target
- * @param {Vue} vm
- * @param {Function} [cb]
- */
- exports.append = function (el, target, vm, cb) {
- apply(el, 1, function () {
- target.appendChild(el)
- }, vm, cb)
- }
- /**
- * InsertBefore with transition.
- *
- * @param {Element} el
- * @param {Element} target
- * @param {Vue} vm
- * @param {Function} [cb]
- */
- exports.before = function (el, target, vm, cb) {
- apply(el, 1, function () {
- _.before(el, target)
- }, vm, cb)
- }
- /**
- * Remove with transition.
- *
- * @param {Element} el
- * @param {Vue} vm
- * @param {Function} [cb]
- */
- exports.remove = function (el, vm, cb) {
- apply(el, -1, function () {
- _.remove(el)
- }, vm, cb)
- }
- /**
- * Remove by appending to another parent with transition.
- * This is only used in block operations.
- *
- * @param {Element} el
- * @param {Element} target
- * @param {Vue} vm
- * @param {Function} [cb]
- */
- exports.removeThenAppend = function (el, target, vm, cb) {
- apply(el, -1, function () {
- target.appendChild(el)
- }, vm, cb)
- }
- /**
- * Append the childNodes of a fragment to target.
- *
- * @param {DocumentFragment} block
- * @param {Node} target
- * @param {Vue} vm
- */
- exports.blockAppend = function (block, target, vm) {
- var nodes = _.toArray(block.childNodes)
- for (var i = 0, l = nodes.length; i < l; i++) {
- exports.before(nodes[i], target, vm)
- }
- }
- /**
- * Remove a block of nodes between two edge nodes.
- *
- * @param {Node} start
- * @param {Node} end
- * @param {Vue} vm
- */
- exports.blockRemove = function (start, end, vm) {
- var node = start.nextSibling
- var next
- while (node !== end) {
- next = node.nextSibling
- exports.remove(node, vm)
- node = next
- }
- }
- /**
- * Apply transitions with an operation callback.
- *
- * @param {Element} el
- * @param {Number} direction
- * 1: enter
- * -1: leave
- * @param {Function} op - the actual DOM operation
- * @param {Vue} vm
- * @param {Function} [cb]
- */
- var apply = exports.apply = function (el, direction, op, vm, cb) {
- var transition = el.__v_trans
- if (
- !transition ||
- // skip if there are no js hooks and CSS transition is
- // not supported
- (!transition.hooks && !_.transitionEndEvent) ||
- // skip transitions for initial compile
- !vm._isCompiled ||
- // if the vm is being manipulated by a parent directive
- // during the parent's compilation phase, skip the
- // animation.
- (vm.$parent && !vm.$parent._isCompiled)
- ) {
- op()
- if (cb) cb()
- return
- }
- var action = direction > 0 ? 'enter' : 'leave'
- transition[action](op, cb)
- }
- /***/ },
- /* 31 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var addClass = _.addClass
- var removeClass = _.removeClass
- module.exports = {
- bind: function () {
- // interpolations like class="{{abc}}" are converted
- // to v-class, and we need to remove the raw,
- // uninterpolated className at binding time.
- var raw = this._descriptor._rawClass
- if (raw) {
- this.prevKeys = raw.trim().split(/\s+/)
- }
- },
- update: function (value) {
- if (this.arg) {
- // single toggle
- if (value) {
- addClass(this.el, this.arg)
- } else {
- removeClass(this.el, this.arg)
- }
- } else {
- if (value && typeof value === 'string') {
- this.handleObject(stringToObject(value))
- } else if (_.isPlainObject(value)) {
- this.handleObject(value)
- } else {
- this.cleanup()
- }
- }
- },
- handleObject: function (value) {
- this.cleanup(value)
- var keys = this.prevKeys = Object.keys(value)
- for (var i = 0, l = keys.length; i < l; i++) {
- var key = keys[i]
- if (value[key]) {
- addClass(this.el, key)
- } else {
- removeClass(this.el, key)
- }
- }
- },
- cleanup: function (value) {
- if (this.prevKeys) {
- var i = this.prevKeys.length
- while (i--) {
- var key = this.prevKeys[i]
- if (!value || !value.hasOwnProperty(key)) {
- removeClass(this.el, key)
- }
- }
- }
- }
- }
- function stringToObject (value) {
- var res = {}
- var keys = value.trim().split(/\s+/)
- var i = keys.length
- while (i--) {
- res[keys[i]] = true
- }
- return res
- }
- /***/ },
- /* 32 */
- /***/ function(module, exports) {
- module.exports = {
- isLiteral: true,
- bind: function () {
- this.vm.$$[this.expression] = this.el
- },
- unbind: function () {
- delete this.vm.$$[this.expression]
- }
- }
- /***/ },
- /* 33 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- module.exports = {
- isLiteral: true,
- bind: function () {
- var vm = this.el.__vue__
- if (!vm) {
- ("development") !== 'production' && _.warn(
- 'v-ref should only be used on a component root element.'
- )
- return
- }
- // If we get here, it means this is a `v-ref` on a
- // child, because parent scope `v-ref` is stripped in
- // `v-component` already. So we just record our own ref
- // here - it will overwrite parent ref in `v-component`,
- // if any.
- vm._refID = this.expression
- }
- }
- /***/ },
- /* 34 */
- /***/ function(module, exports, __webpack_require__) {
- var config = __webpack_require__(5)
- module.exports = {
- bind: function () {
- var el = this.el
- this.vm.$once('hook:compiled', function () {
- el.removeAttribute(config.prefix + 'cloak')
- })
- }
- }
- /***/ },
- /* 35 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var prefixes = ['-webkit-', '-moz-', '-ms-']
- var camelPrefixes = ['Webkit', 'Moz', 'ms']
- var importantRE = /!important;?$/
- var camelRE = /([a-z])([A-Z])/g
- var testEl = null
- var propCache = {}
- module.exports = {
- deep: true,
- update: function (value) {
- if (this.arg) {
- this.setProp(this.arg, value)
- } else {
- if (typeof value === 'object') {
- this.objectHandler(value)
- } else {
- this.el.style.cssText = value
- }
- }
- },
- objectHandler: function (value) {
- // cache object styles so that only changed props
- // are actually updated.
- var cache = this.cache || (this.cache = {})
- var prop, val
- for (prop in cache) {
- if (!(prop in value)) {
- this.setProp(prop, null)
- delete cache[prop]
- }
- }
- for (prop in value) {
- val = value[prop]
- if (val !== cache[prop]) {
- cache[prop] = val
- this.setProp(prop, val)
- }
- }
- },
- setProp: function (prop, value) {
- prop = normalize(prop)
- if (!prop) return // unsupported prop
- // cast possible numbers/booleans into strings
- if (value != null) value += ''
- if (value) {
- var isImportant = importantRE.test(value)
- ? 'important'
- : ''
- if (isImportant) {
- value = value.replace(importantRE, '').trim()
- }
- this.el.style.setProperty(prop, value, isImportant)
- } else {
- this.el.style.removeProperty(prop)
- }
- }
- }
- /**
- * Normalize a CSS property name.
- * - cache result
- * - auto prefix
- * - camelCase -> dash-case
- *
- * @param {String} prop
- * @return {String}
- */
- function normalize (prop) {
- if (propCache[prop]) {
- return propCache[prop]
- }
- var res = prefix(prop)
- propCache[prop] = propCache[res] = res
- return res
- }
- /**
- * Auto detect the appropriate prefix for a CSS property.
- * https://gist.github.com/paulirish/523692
- *
- * @param {String} prop
- * @return {String}
- */
- function prefix (prop) {
- prop = prop.replace(camelRE, '$1-$2').toLowerCase()
- var camel = _.camelize(prop)
- var upper = camel.charAt(0).toUpperCase() + camel.slice(1)
- if (!testEl) {
- testEl = document.createElement('div')
- }
- if (camel in testEl.style) {
- return prop
- }
- var i = prefixes.length
- var prefixed
- while (i--) {
- prefixed = camelPrefixes[i] + upper
- if (prefixed in testEl.style) {
- return prefixes[i] + prop
- }
- }
- }
- /***/ },
- /* 36 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Transition = __webpack_require__(37)
- module.exports = {
- priority: 1000,
- isLiteral: true,
- bind: function () {
- if (!this._isDynamicLiteral) {
- this.update(this.expression)
- }
- },
- update: function (id, oldId) {
- var el = this.el
- var vm = this.el.__vue__ || this.vm
- var hooks = _.resolveAsset(vm.$options, 'transitions', id)
- id = id || 'v'
- el.__v_trans = new Transition(el, id, hooks, vm)
- if (oldId) {
- _.removeClass(el, oldId + '-transition')
- }
- _.addClass(el, id + '-transition')
- }
- }
- /***/ },
- /* 37 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var queue = __webpack_require__(38)
- var addClass = _.addClass
- var removeClass = _.removeClass
- var transitionEndEvent = _.transitionEndEvent
- var animationEndEvent = _.animationEndEvent
- var transDurationProp = _.transitionProp + 'Duration'
- var animDurationProp = _.animationProp + 'Duration'
- var TYPE_TRANSITION = 1
- var TYPE_ANIMATION = 2
- var uid = 0
- /**
- * A Transition object that encapsulates the state and logic
- * of the transition.
- *
- * @param {Element} el
- * @param {String} id
- * @param {Object} hooks
- * @param {Vue} vm
- */
- function Transition (el, id, hooks, vm) {
- this.id = uid++
- this.el = el
- this.enterClass = id + '-enter'
- this.leaveClass = id + '-leave'
- this.hooks = hooks
- this.vm = vm
- // async state
- this.pendingCssEvent =
- this.pendingCssCb =
- this.cancel =
- this.pendingJsCb =
- this.op =
- this.cb = null
- this.justEntered = false
- this.typeCache = {}
- // bind
- var self = this
- ;['enterNextTick', 'enterDone', 'leaveNextTick', 'leaveDone']
- .forEach(function (m) {
- self[m] = _.bind(self[m], self)
- })
- }
- var p = Transition.prototype
- /**
- * Start an entering transition.
- *
- * 1. enter transition triggered
- * 2. call beforeEnter hook
- * 3. add enter class
- * 4. insert/show element
- * 5. call enter hook (with possible explicit js callback)
- * 6. reflow
- * 7. based on transition type:
- * - transition:
- * remove class now, wait for transitionend,
- * then done if there's no explicit js callback.
- * - animation:
- * wait for animationend, remove class,
- * then done if there's no explicit js callback.
- * - no css transition:
- * done now if there's no explicit js callback.
- * 8. wait for either done or js callback, then call
- * afterEnter hook.
- *
- * @param {Function} op - insert/show the element
- * @param {Function} [cb]
- */
- p.enter = function (op, cb) {
- this.cancelPending()
- this.callHook('beforeEnter')
- this.cb = cb
- addClass(this.el, this.enterClass)
- op()
- this.callHookWithCb('enter')
- this.cancel = this.hooks && this.hooks.enterCancelled
- queue.push(this.enterNextTick)
- }
- /**
- * The "nextTick" phase of an entering transition, which is
- * to be pushed into a queue and executed after a reflow so
- * that removing the class can trigger a CSS transition.
- */
- p.enterNextTick = function () {
- this.justEntered = true
- _.nextTick(function () {
- this.justEntered = false
- }, this)
- var type = this.getCssTransitionType(this.enterClass)
- var enterDone = this.enterDone
- if (type === TYPE_TRANSITION) {
- // trigger transition by removing enter class now
- removeClass(this.el, this.enterClass)
- this.setupCssCb(transitionEndEvent, enterDone)
- } else if (type === TYPE_ANIMATION) {
- this.setupCssCb(animationEndEvent, enterDone)
- } else if (!this.pendingJsCb) {
- enterDone()
- }
- }
- /**
- * The "cleanup" phase of an entering transition.
- */
- p.enterDone = function () {
- this.cancel = this.pendingJsCb = null
- removeClass(this.el, this.enterClass)
- this.callHook('afterEnter')
- if (this.cb) this.cb()
- }
- /**
- * Start a leaving transition.
- *
- * 1. leave transition triggered.
- * 2. call beforeLeave hook
- * 3. add leave class (trigger css transition)
- * 4. call leave hook (with possible explicit js callback)
- * 5. reflow if no explicit js callback is provided
- * 6. based on transition type:
- * - transition or animation:
- * wait for end event, remove class, then done if
- * there's no explicit js callback.
- * - no css transition:
- * done if there's no explicit js callback.
- * 7. wait for either done or js callback, then call
- * afterLeave hook.
- *
- * @param {Function} op - remove/hide the element
- * @param {Function} [cb]
- */
- p.leave = function (op, cb) {
- this.cancelPending()
- this.callHook('beforeLeave')
- this.op = op
- this.cb = cb
- addClass(this.el, this.leaveClass)
- this.callHookWithCb('leave')
- this.cancel = this.hooks && this.hooks.leaveCancelled
- // only need to handle leaveDone if
- // 1. the transition is already done (synchronously called
- // by the user, which causes this.op set to null)
- // 2. there's no explicit js callback
- if (this.op && !this.pendingJsCb) {
- // if a CSS transition leaves immediately after enter,
- // the transitionend event never fires. therefore we
- // detect such cases and end the leave immediately.
- if (this.justEntered) {
- this.leaveDone()
- } else {
- queue.push(this.leaveNextTick)
- }
- }
- }
- /**
- * The "nextTick" phase of a leaving transition.
- */
- p.leaveNextTick = function () {
- var type = this.getCssTransitionType(this.leaveClass)
- if (type) {
- var event = type === TYPE_TRANSITION
- ? transitionEndEvent
- : animationEndEvent
- this.setupCssCb(event, this.leaveDone)
- } else {
- this.leaveDone()
- }
- }
- /**
- * The "cleanup" phase of a leaving transition.
- */
- p.leaveDone = function () {
- this.cancel = this.pendingJsCb = null
- this.op()
- removeClass(this.el, this.leaveClass)
- this.callHook('afterLeave')
- if (this.cb) this.cb()
- this.op = null
- }
- /**
- * Cancel any pending callbacks from a previously running
- * but not finished transition.
- */
- p.cancelPending = function () {
- this.op = this.cb = null
- var hasPending = false
- if (this.pendingCssCb) {
- hasPending = true
- _.off(this.el, this.pendingCssEvent, this.pendingCssCb)
- this.pendingCssEvent = this.pendingCssCb = null
- }
- if (this.pendingJsCb) {
- hasPending = true
- this.pendingJsCb.cancel()
- this.pendingJsCb = null
- }
- if (hasPending) {
- removeClass(this.el, this.enterClass)
- removeClass(this.el, this.leaveClass)
- }
- if (this.cancel) {
- this.cancel.call(this.vm, this.el)
- this.cancel = null
- }
- }
- /**
- * Call a user-provided synchronous hook function.
- *
- * @param {String} type
- */
- p.callHook = function (type) {
- if (this.hooks && this.hooks[type]) {
- this.hooks[type].call(this.vm, this.el)
- }
- }
- /**
- * Call a user-provided, potentially-async hook function.
- * We check for the length of arguments to see if the hook
- * expects a `done` callback. If true, the transition's end
- * will be determined by when the user calls that callback;
- * otherwise, the end is determined by the CSS transition or
- * animation.
- *
- * @param {String} type
- */
- p.callHookWithCb = function (type) {
- var hook = this.hooks && this.hooks[type]
- if (hook) {
- if (hook.length > 1) {
- this.pendingJsCb = _.cancellable(this[type + 'Done'])
- }
- hook.call(this.vm, this.el, this.pendingJsCb)
- }
- }
- /**
- * Get an element's transition type based on the
- * calculated styles.
- *
- * @param {String} className
- * @return {Number}
- */
- p.getCssTransitionType = function (className) {
- /* istanbul ignore if */
- if (
- !transitionEndEvent ||
- // skip CSS transitions if page is not visible -
- // this solves the issue of transitionend events not
- // firing until the page is visible again.
- // pageVisibility API is supported in IE10+, same as
- // CSS transitions.
- document.hidden ||
- // explicit js-only transition
- (this.hooks && this.hooks.css === false)
- ) {
- return
- }
- var type = this.typeCache[className]
- if (type) return type
- var inlineStyles = this.el.style
- var computedStyles = window.getComputedStyle(this.el)
- var transDuration =
- inlineStyles[transDurationProp] ||
- computedStyles[transDurationProp]
- if (transDuration && transDuration !== '0s') {
- type = TYPE_TRANSITION
- } else {
- var animDuration =
- inlineStyles[animDurationProp] ||
- computedStyles[animDurationProp]
- if (animDuration && animDuration !== '0s') {
- type = TYPE_ANIMATION
- }
- }
- if (type) {
- this.typeCache[className] = type
- }
- return type
- }
- /**
- * Setup a CSS transitionend/animationend callback.
- *
- * @param {String} event
- * @param {Function} cb
- */
- p.setupCssCb = function (event, cb) {
- this.pendingCssEvent = event
- var self = this
- var el = this.el
- var onEnd = this.pendingCssCb = function (e) {
- if (e.target === el) {
- _.off(el, event, onEnd)
- self.pendingCssEvent = self.pendingCssCb = null
- if (!self.pendingJsCb && cb) {
- cb()
- }
- }
- }
- _.on(el, event, onEnd)
- }
- module.exports = Transition
- /***/ },
- /* 38 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var queue = []
- var queued = false
- /**
- * Push a job into the queue.
- *
- * @param {Function} job
- */
- exports.push = function (job) {
- queue.push(job)
- if (!queued) {
- queued = true
- _.nextTick(flush)
- }
- }
- /**
- * Flush the queue, and do one forced reflow before
- * triggering transitions.
- */
- function flush () {
- // Force layout
- var f = document.documentElement.offsetHeight
- for (var i = 0; i < queue.length; i++) {
- queue[i]()
- }
- queue = []
- queued = false
- // dummy return, so js linters don't complain about
- // unused variable f
- return f
- }
- /***/ },
- /* 39 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- module.exports = {
- acceptStatement: true,
- priority: 700,
- bind: function () {
- // deal with iframes
- if (
- this.el.tagName === 'IFRAME' &&
- this.arg !== 'load'
- ) {
- var self = this
- this.iframeBind = function () {
- _.on(self.el.contentWindow, self.arg, self.handler)
- }
- _.on(this.el, 'load', this.iframeBind)
- }
- },
- update: function (handler) {
- if (typeof handler !== 'function') {
- ("development") !== 'production' && _.warn(
- 'Directive v-on="' + this.arg + ': ' +
- this.expression + '" expects a function value, ' +
- 'got ' + handler
- )
- return
- }
- this.reset()
- var vm = this.vm
- this.handler = function (e) {
- e.targetVM = vm
- vm.$event = e
- var res = handler(e)
- vm.$event = null
- return res
- }
- if (this.iframeBind) {
- this.iframeBind()
- } else {
- _.on(this.el, this.arg, this.handler)
- }
- },
- reset: function () {
- var el = this.iframeBind
- ? this.el.contentWindow
- : this.el
- if (this.handler) {
- _.off(el, this.arg, this.handler)
- }
- },
- unbind: function () {
- this.reset()
- _.off(this.el, 'load', this.iframeBind)
- }
- }
- /***/ },
- /* 40 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var handlers = {
- text: __webpack_require__(41),
- radio: __webpack_require__(42),
- select: __webpack_require__(43),
- checkbox: __webpack_require__(44)
- }
- module.exports = {
- priority: 800,
- twoWay: true,
- handlers: handlers,
- /**
- * Possible elements:
- * <select>
- * <textarea>
- * <input type="*">
- * - text
- * - checkbox
- * - radio
- * - number
- * - TODO: more types may be supplied as a plugin
- */
- bind: function () {
- // friendly warning...
- this.checkFilters()
- if (this.hasRead && !this.hasWrite) {
- ("development") !== 'production' && _.warn(
- 'It seems you are using a read-only filter with ' +
- 'v-model. You might want to use a two-way filter ' +
- 'to ensure correct behavior.'
- )
- }
- var el = this.el
- var tag = el.tagName
- var handler
- if (tag === 'INPUT') {
- handler = handlers[el.type] || handlers.text
- } else if (tag === 'SELECT') {
- handler = handlers.select
- } else if (tag === 'TEXTAREA') {
- handler = handlers.text
- } else {
- ("development") !== 'production' && _.warn(
- 'v-model does not support element type: ' + tag
- )
- return
- }
- handler.bind.call(this)
- this.update = handler.update
- this.unbind = handler.unbind
- },
- /**
- * Check read/write filter stats.
- */
- checkFilters: function () {
- var filters = this.filters
- if (!filters) return
- var i = filters.length
- while (i--) {
- var filter = _.resolveAsset(this.vm.$options, 'filters', filters[i].name)
- if (typeof filter === 'function' || filter.read) {
- this.hasRead = true
- }
- if (filter.write) {
- this.hasWrite = true
- }
- }
- }
- }
- /***/ },
- /* 41 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- module.exports = {
- bind: function () {
- var self = this
- var el = this.el
- // check params
- // - lazy: update model on "change" instead of "input"
- var lazy = this._checkParam('lazy') != null
- // - number: cast value into number when updating model.
- var number = this._checkParam('number') != null
- // - debounce: debounce the input listener
- var debounce = parseInt(this._checkParam('debounce'), 10)
- // handle composition events.
- // http://blog.evanyou.me/2014/01/03/composition-event/
- // skip this for Android because it handles composition
- // events quite differently. Android doesn't trigger
- // composition events for language input methods e.g.
- // Chinese, but instead triggers them for spelling
- // suggestions... (see Discussion/#162)
- var composing = false
- if (!_.isAndroid) {
- this.onComposeStart = function () {
- composing = true
- }
- this.onComposeEnd = function () {
- composing = false
- // in IE11 the "compositionend" event fires AFTER
- // the "input" event, so the input handler is blocked
- // at the end... have to call it here.
- self.listener()
- }
- _.on(el, 'compositionstart', this.onComposeStart)
- _.on(el, 'compositionend', this.onComposeEnd)
- }
- function syncToModel () {
- var val = number
- ? _.toNumber(el.value)
- : el.value
- self.set(val)
- }
- // if the directive has filters, we need to
- // record cursor position and restore it after updating
- // the input with the filtered value.
- // also force update for type="range" inputs to enable
- // "lock in range" (see #506)
- if (this.hasRead || el.type === 'range') {
- this.listener = function () {
- if (composing) return
- var charsOffset
- // some HTML5 input types throw error here
- try {
- // record how many chars from the end of input
- // the cursor was at
- charsOffset = el.value.length - el.selectionStart
- } catch (e) {}
- // Fix IE10/11 infinite update cycle
- // https://github.com/yyx990803/vue/issues/592
- /* istanbul ignore if */
- if (charsOffset < 0) {
- return
- }
- syncToModel()
- _.nextTick(function () {
- // force a value update, because in
- // certain cases the write filters output the
- // same result for different input values, and
- // the Observer set events won't be triggered.
- var newVal = self._watcher.value
- self.update(newVal)
- if (charsOffset != null) {
- var cursorPos =
- _.toString(newVal).length - charsOffset
- el.setSelectionRange(cursorPos, cursorPos)
- }
- })
- }
- } else {
- this.listener = function () {
- if (composing) return
- syncToModel()
- }
- }
- if (debounce) {
- this.listener = _.debounce(this.listener, debounce)
- }
- // Now attach the main listener
- this.event = lazy ? 'change' : 'input'
- // Support jQuery events, since jQuery.trigger() doesn't
- // trigger native events in some cases and some plugins
- // rely on $.trigger()
- //
- // We want to make sure if a listener is attached using
- // jQuery, it is also removed with jQuery, that's why
- // we do the check for each directive instance and
- // store that check result on itself. This also allows
- // easier test coverage control by unsetting the global
- // jQuery variable in tests.
- this.hasjQuery = typeof jQuery === 'function'
- if (this.hasjQuery) {
- jQuery(el).on(this.event, this.listener)
- } else {
- _.on(el, this.event, this.listener)
- }
- // IE9 doesn't fire input event on backspace/del/cut
- if (!lazy && _.isIE9) {
- this.onCut = function () {
- _.nextTick(self.listener)
- }
- this.onDel = function (e) {
- if (e.keyCode === 46 || e.keyCode === 8) {
- self.listener()
- }
- }
- _.on(el, 'cut', this.onCut)
- _.on(el, 'keyup', this.onDel)
- }
- // set initial value if present
- if (
- el.hasAttribute('value') ||
- (el.tagName === 'TEXTAREA' && el.value.trim())
- ) {
- this._initValue = number
- ? _.toNumber(el.value)
- : el.value
- }
- },
- update: function (value) {
- this.el.value = _.toString(value)
- },
- unbind: function () {
- var el = this.el
- if (this.hasjQuery) {
- jQuery(el).off(this.event, this.listener)
- } else {
- _.off(el, this.event, this.listener)
- }
- if (this.onComposeStart) {
- _.off(el, 'compositionstart', this.onComposeStart)
- _.off(el, 'compositionend', this.onComposeEnd)
- }
- if (this.onCut) {
- _.off(el, 'cut', this.onCut)
- _.off(el, 'keyup', this.onDel)
- }
- }
- }
- /***/ },
- /* 42 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- module.exports = {
- bind: function () {
- var self = this
- var el = this.el
- var number = this._checkParam('number') != null
- function getValue () {
- return number
- ? _.toNumber(el.value)
- : el.value
- }
- this.listener = function () {
- self.set(getValue())
- }
- _.on(el, 'change', this.listener)
- if (el.checked) {
- this._initValue = getValue()
- }
- },
- update: function (value) {
- /* eslint-disable eqeqeq */
- this.el.checked = value == this.el.value
- /* eslint-enable eqeqeq */
- },
- unbind: function () {
- _.off(this.el, 'change', this.listener)
- }
- }
- /***/ },
- /* 43 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Watcher = __webpack_require__(17)
- var dirParser = __webpack_require__(15)
- module.exports = {
- bind: function () {
- var self = this
- var el = this.el
- // update DOM using latest value.
- this.forceUpdate = function () {
- if (self._watcher) {
- self.update(self._watcher.get())
- }
- }
- // check options param
- var optionsParam = this._checkParam('options')
- if (optionsParam) {
- initOptions.call(this, optionsParam)
- }
- this.number = this._checkParam('number') != null
- this.multiple = el.hasAttribute('multiple')
- this.listener = function () {
- var value = self.multiple
- ? getMultiValue(el)
- : el.value
- value = self.number
- ? _.isArray(value)
- ? value.map(_.toNumber)
- : _.toNumber(value)
- : value
- self.set(value)
- }
- _.on(el, 'change', this.listener)
- checkInitialValue.call(this)
- // All major browsers except Firefox resets
- // selectedIndex with value -1 to 0 when the element
- // is appended to a new parent, therefore we have to
- // force a DOM update whenever that happens...
- this.vm.$on('hook:attached', this.forceUpdate)
- },
- update: function (value) {
- var el = this.el
- el.selectedIndex = -1
- if (!value && value !== 0) {
- if (this.defaultOption) {
- this.defaultOption.selected = true
- }
- return
- }
- var multi = this.multiple && _.isArray(value)
- var options = el.options
- var i = options.length
- var option
- while (i--) {
- option = options[i]
- /* eslint-disable eqeqeq */
- option.selected = multi
- ? indexOf(value, option.value) > -1
- : value == option.value
- /* eslint-enable eqeqeq */
- }
- },
- unbind: function () {
- _.off(this.el, 'change', this.listener)
- this.vm.$off('hook:attached', this.forceUpdate)
- if (this.optionWatcher) {
- this.optionWatcher.teardown()
- }
- }
- }
- /**
- * Initialize the option list from the param.
- *
- * @param {String} expression
- */
- function initOptions (expression) {
- var self = this
- var el = self.el
- var defaultOption = self.defaultOption = self.el.options[0]
- var descriptor = dirParser.parse(expression)[0]
- function optionUpdateWatcher (value) {
- if (_.isArray(value)) {
- // clear old options.
- // cannot reset innerHTML here because IE family get
- // confused during compilation.
- var i = el.options.length
- while (i--) {
- var option = el.options[i]
- if (option !== defaultOption) {
- el.removeChild(option)
- }
- }
- buildOptions(el, value)
- self.forceUpdate()
- } else {
- ("development") !== 'production' && _.warn(
- 'Invalid options value for v-model: ' + value
- )
- }
- }
- this.optionWatcher = new Watcher(
- this.vm,
- descriptor.expression,
- optionUpdateWatcher,
- {
- deep: true,
- filters: descriptor.filters
- }
- )
- // update with initial value
- optionUpdateWatcher(this.optionWatcher.value)
- }
- /**
- * Build up option elements. IE9 doesn't create options
- * when setting innerHTML on <select> elements, so we have
- * to use DOM API here.
- *
- * @param {Element} parent - a <select> or an <optgroup>
- * @param {Array} options
- */
- function buildOptions (parent, options) {
- var op, el
- for (var i = 0, l = options.length; i < l; i++) {
- op = options[i]
- if (!op.options) {
- el = document.createElement('option')
- if (typeof op === 'string') {
- el.text = el.value = op
- } else {
- if (op.value != null) {
- el.value = op.value
- }
- el.text = op.text || op.value || ''
- if (op.disabled) {
- el.disabled = true
- }
- }
- } else {
- el = document.createElement('optgroup')
- el.label = op.label
- buildOptions(el, op.options)
- }
- parent.appendChild(el)
- }
- }
- /**
- * Check the initial value for selected options.
- */
- function checkInitialValue () {
- var initValue
- var options = this.el.options
- for (var i = 0, l = options.length; i < l; i++) {
- if (options[i].hasAttribute('selected')) {
- if (this.multiple) {
- (initValue || (initValue = []))
- .push(options[i].value)
- } else {
- initValue = options[i].value
- }
- }
- }
- if (typeof initValue !== 'undefined') {
- this._initValue = this.number
- ? _.toNumber(initValue)
- : initValue
- }
- }
- /**
- * Helper to extract a value array for select[multiple]
- *
- * @param {SelectElement} el
- * @return {Array}
- */
- function getMultiValue (el) {
- return Array.prototype.filter
- .call(el.options, filterSelected)
- .map(getOptionValue)
- }
- function filterSelected (op) {
- return op.selected
- }
- function getOptionValue (op) {
- return op.value || op.text
- }
- /**
- * Native Array.indexOf uses strict equal, but in this
- * case we need to match string/numbers with soft equal.
- *
- * @param {Array} arr
- * @param {*} val
- */
- function indexOf (arr, val) {
- var i = arr.length
- while (i--) {
- /* eslint-disable eqeqeq */
- if (arr[i] == val) return i
- /* eslint-enable eqeqeq */
- }
- return -1
- }
- /***/ },
- /* 44 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- module.exports = {
- bind: function () {
- var self = this
- var el = this.el
- this.listener = function () {
- self.set(el.checked)
- }
- _.on(el, 'change', this.listener)
- if (el.checked) {
- this._initValue = el.checked
- }
- },
- update: function (value) {
- this.el.checked = !!value
- },
- unbind: function () {
- _.off(this.el, 'change', this.listener)
- }
- }
- /***/ },
- /* 45 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- var isObject = _.isObject
- var isPlainObject = _.isPlainObject
- var textParser = __webpack_require__(13)
- var expParser = __webpack_require__(19)
- var templateParser = __webpack_require__(22)
- var compiler = __webpack_require__(10)
- var uid = 0
- // async component resolution states
- var UNRESOLVED = 0
- var PENDING = 1
- var RESOLVED = 2
- var ABORTED = 3
- module.exports = {
- /**
- * Setup.
- */
- bind: function () {
- // support for item in array syntax
- var inMatch = this.expression.match(/(.*) in (.*)/)
- if (inMatch) {
- this.arg = inMatch[1]
- this._watcherExp = inMatch[2]
- }
- // uid as a cache identifier
- this.id = '__v_repeat_' + (++uid)
- // setup anchor nodes
- this.start = _.createAnchor('v-repeat-start')
- this.end = _.createAnchor('v-repeat-end')
- _.replace(this.el, this.end)
- _.before(this.start, this.end)
- // check if this is a block repeat
- this.template = _.isTemplate(this.el)
- ? templateParser.parse(this.el, true)
- : this.el
- // check for trackby param
- this.idKey = this._checkParam('track-by')
- // check for transition stagger
- var stagger = +this._checkParam('stagger')
- this.enterStagger = +this._checkParam('enter-stagger') || stagger
- this.leaveStagger = +this._checkParam('leave-stagger') || stagger
- // check for v-ref/v-el
- this.refID = this._checkParam(config.prefix + 'ref')
- this.elID = this._checkParam(config.prefix + 'el')
- // check other directives that need to be handled
- // at v-repeat level
- this.checkIf()
- this.checkComponent()
- // create cache object
- this.cache = Object.create(null)
- // some helpful tips...
- /* istanbul ignore if */
- if (
- ("development") !== 'production' &&
- this.el.tagName === 'OPTION'
- ) {
- _.warn(
- 'Don\'t use v-repeat for v-model options; ' +
- 'use the `options` param instead: ' +
- 'http://vuejs.org/guide/forms.html#Dynamic_Select_Options'
- )
- }
- },
- /**
- * Warn against v-if usage.
- */
- checkIf: function () {
- if (_.attr(this.el, 'if') !== null) {
- ("development") !== 'production' && _.warn(
- 'Don\'t use v-if with v-repeat. ' +
- 'Use v-show or the "filterBy" filter instead.'
- )
- }
- },
- /**
- * Check the component constructor to use for repeated
- * instances. If static we resolve it now, otherwise it
- * needs to be resolved at build time with actual data.
- */
- checkComponent: function () {
- this.componentState = UNRESOLVED
- var options = this.vm.$options
- var id = _.checkComponent(this.el, options)
- if (!id) {
- // default constructor
- this.Component = _.Vue
- // inline repeats should inherit
- this.inline = true
- // important: transclude with no options, just
- // to ensure block start and block end
- this.template = compiler.transclude(this.template)
- var copy = _.extend({}, options)
- copy._asComponent = false
- this._linkFn = compiler.compile(this.template, copy)
- } else {
- this.Component = null
- this.asComponent = true
- // check inline-template
- if (this._checkParam('inline-template') !== null) {
- // extract inline template as a DocumentFragment
- this.inlineTemplate = _.extractContent(this.el, true)
- }
- var tokens = textParser.parse(id)
- if (tokens) {
- // dynamic component to be resolved later
- var componentExp = textParser.tokensToExp(tokens)
- this.componentGetter = expParser.parse(componentExp).get
- } else {
- // static
- this.componentId = id
- this.pendingData = null
- }
- }
- },
- resolveComponent: function () {
- this.componentState = PENDING
- this.vm._resolveComponent(this.componentId, _.bind(function (Component) {
- if (this.componentState === ABORTED) {
- return
- }
- this.Component = Component
- this.componentState = RESOLVED
- this.realUpdate(this.pendingData)
- this.pendingData = null
- }, this))
- },
- /**
- * Resolve a dynamic component to use for an instance.
- * The tricky part here is that there could be dynamic
- * components depending on instance data.
- *
- * @param {Object} data
- * @param {Object} meta
- * @return {Function}
- */
- resolveDynamicComponent: function (data, meta) {
- // create a temporary context object and copy data
- // and meta properties onto it.
- // use _.define to avoid accidentally overwriting scope
- // properties.
- var context = Object.create(this.vm)
- var key
- for (key in data) {
- _.define(context, key, data[key])
- }
- for (key in meta) {
- _.define(context, key, meta[key])
- }
- var id = this.componentGetter.call(context, context)
- var Component = _.resolveAsset(this.vm.$options, 'components', id)
- if (true) {
- _.assertAsset(Component, 'component', id)
- }
- if (!Component.options) {
- ("development") !== 'production' && _.warn(
- 'Async resolution is not supported for v-repeat ' +
- '+ dynamic component. (component: ' + id + ')'
- )
- return _.Vue
- }
- return Component
- },
- /**
- * Update.
- * This is called whenever the Array mutates. If we have
- * a component, we might need to wait for it to resolve
- * asynchronously.
- *
- * @param {Array|Number|String} data
- */
- update: function (data) {
- if (this.componentId) {
- var state = this.componentState
- if (state === UNRESOLVED) {
- this.pendingData = data
- // once resolved, it will call realUpdate
- this.resolveComponent()
- } else if (state === PENDING) {
- this.pendingData = data
- } else if (state === RESOLVED) {
- this.realUpdate(data)
- }
- } else {
- this.realUpdate(data)
- }
- },
- /**
- * The real update that actually modifies the DOM.
- *
- * @param {Array|Number|String} data
- */
- realUpdate: function (data) {
- this.vms = this.diff(data, this.vms)
- // update v-ref
- if (this.refID) {
- this.vm.$[this.refID] = this.converted
- ? toRefObject(this.vms)
- : this.vms
- }
- if (this.elID) {
- this.vm.$$[this.elID] = this.vms.map(function (vm) {
- return vm.$el
- })
- }
- },
- /**
- * Diff, based on new data and old data, determine the
- * minimum amount of DOM manipulations needed to make the
- * DOM reflect the new data Array.
- *
- * The algorithm diffs the new data Array by storing a
- * hidden reference to an owner vm instance on previously
- * seen data. This allows us to achieve O(n) which is
- * better than a levenshtein distance based algorithm,
- * which is O(m * n).
- *
- * @param {Array} data
- * @param {Array} oldVms
- * @return {Array}
- */
- diff: function (data, oldVms) {
- var idKey = this.idKey
- var converted = this.converted
- var start = this.start
- var end = this.end
- var inDoc = _.inDoc(start)
- var alias = this.arg
- var init = !oldVms
- var vms = new Array(data.length)
- var obj, raw, vm, i, l, primitive
- // First pass, go through the new Array and fill up
- // the new vms array. If a piece of data has a cached
- // instance for it, we reuse it. Otherwise build a new
- // instance.
- for (i = 0, l = data.length; i < l; i++) {
- obj = data[i]
- raw = converted ? obj.$value : obj
- primitive = !isObject(raw)
- vm = !init && this.getVm(raw, i, converted ? obj.$key : null)
- if (vm) { // reusable instance
- vm._reused = true
- vm.$index = i // update $index
- // update data for track-by or object repeat,
- // since in these two cases the data is replaced
- // rather than mutated.
- if (idKey || converted || primitive) {
- if (alias) {
- vm[alias] = raw
- } else if (_.isPlainObject(raw)) {
- vm.$data = raw
- } else {
- vm.$value = raw
- }
- }
- } else { // new instance
- vm = this.build(obj, i, true)
- vm._reused = false
- }
- vms[i] = vm
- // insert if this is first run
- if (init) {
- vm.$before(end)
- }
- }
- // if this is the first run, we're done.
- if (init) {
- return vms
- }
- // Second pass, go through the old vm instances and
- // destroy those who are not reused (and remove them
- // from cache)
- var removalIndex = 0
- var totalRemoved = oldVms.length - vms.length
- for (i = 0, l = oldVms.length; i < l; i++) {
- vm = oldVms[i]
- if (!vm._reused) {
- this.uncacheVm(vm)
- vm.$destroy(false, true) // defer cleanup until removal
- this.remove(vm, removalIndex++, totalRemoved, inDoc)
- }
- }
- // final pass, move/insert new instances into the
- // right place.
- var targetPrev, prevEl, currentPrev
- var insertionIndex = 0
- for (i = 0, l = vms.length; i < l; i++) {
- vm = vms[i]
- // this is the vm that we should be after
- targetPrev = vms[i - 1]
- prevEl = targetPrev
- ? targetPrev._staggerCb
- ? targetPrev._staggerAnchor
- : targetPrev._fragmentEnd || targetPrev.$el
- : start
- if (vm._reused && !vm._staggerCb) {
- currentPrev = findPrevVm(vm, start, this.id)
- if (currentPrev !== targetPrev) {
- this.move(vm, prevEl)
- }
- } else {
- // new instance, or still in stagger.
- // insert with updated stagger index.
- this.insert(vm, insertionIndex++, prevEl, inDoc)
- }
- vm._reused = false
- }
- return vms
- },
- /**
- * Build a new instance and cache it.
- *
- * @param {Object} data
- * @param {Number} index
- * @param {Boolean} needCache
- */
- build: function (data, index, needCache) {
- var meta = { $index: index }
- if (this.converted) {
- meta.$key = data.$key
- }
- var raw = this.converted ? data.$value : data
- var alias = this.arg
- if (alias) {
- data = {}
- data[alias] = raw
- } else if (!isPlainObject(raw)) {
- // non-object values
- data = {}
- meta.$value = raw
- } else {
- // default
- data = raw
- }
- // resolve constructor
- var Component = this.Component || this.resolveDynamicComponent(data, meta)
- var parent = this._host || this.vm
- var vm = parent.$addChild({
- el: templateParser.clone(this.template),
- data: data,
- inherit: this.inline,
- template: this.inlineTemplate,
- // repeater meta, e.g. $index, $key
- _meta: meta,
- // mark this as an inline-repeat instance
- _repeat: this.inline,
- // is this a component?
- _asComponent: this.asComponent,
- // linker cachable if no inline-template
- _linkerCachable: !this.inlineTemplate && Component !== _.Vue,
- // pre-compiled linker for simple repeats
- _linkFn: this._linkFn,
- // identifier, shows that this vm belongs to this collection
- _repeatId: this.id,
- // transclusion content owner
- _context: this.vm
- }, Component)
- // cache instance
- if (needCache) {
- this.cacheVm(raw, vm, index, this.converted ? meta.$key : null)
- }
- // sync back changes for two-way bindings of primitive values
- var dir = this
- if (this.rawType === 'object' && isPrimitive(raw)) {
- vm.$watch(alias || '$value', function (val) {
- if (dir.filters) {
- ("development") !== 'production' && _.warn(
- 'You seem to be mutating the $value reference of ' +
- 'a v-repeat instance (likely through v-model) ' +
- 'and filtering the v-repeat at the same time. ' +
- 'This will not work properly with an Array of ' +
- 'primitive values. Please use an Array of ' +
- 'Objects instead.'
- )
- }
- dir._withLock(function () {
- if (dir.converted) {
- dir.rawValue[vm.$key] = val
- } else {
- dir.rawValue.$set(vm.$index, val)
- }
- })
- })
- }
- return vm
- },
- /**
- * Unbind, teardown everything
- */
- unbind: function () {
- this.componentState = ABORTED
- if (this.refID) {
- this.vm.$[this.refID] = null
- }
- if (this.vms) {
- var i = this.vms.length
- var vm
- while (i--) {
- vm = this.vms[i]
- this.uncacheVm(vm)
- vm.$destroy()
- }
- }
- },
- /**
- * Cache a vm instance based on its data.
- *
- * If the data is an object, we save the vm's reference on
- * the data object as a hidden property. Otherwise we
- * cache them in an object and for each primitive value
- * there is an array in case there are duplicates.
- *
- * @param {Object} data
- * @param {Vue} vm
- * @param {Number} index
- * @param {String} [key]
- */
- cacheVm: function (data, vm, index, key) {
- var idKey = this.idKey
- var cache = this.cache
- var primitive = !isObject(data)
- var id
- if (key || idKey || primitive) {
- id = idKey
- ? idKey === '$index'
- ? index
- : data[idKey]
- : (key || index)
- if (!cache[id]) {
- cache[id] = vm
- } else if (!primitive && idKey !== '$index') {
- ("development") !== 'production' && _.warn(
- 'Duplicate track-by key in v-repeat: ' + id
- )
- }
- } else {
- id = this.id
- if (data.hasOwnProperty(id)) {
- if (data[id] === null) {
- data[id] = vm
- } else {
- ("development") !== 'production' && _.warn(
- 'Duplicate objects are not supported in v-repeat ' +
- 'when using components or transitions.'
- )
- }
- } else {
- _.define(data, id, vm)
- }
- }
- vm._raw = data
- },
- /**
- * Try to get a cached instance from a piece of data.
- *
- * @param {Object} data
- * @param {Number} index
- * @param {String} [key]
- * @return {Vue|undefined}
- */
- getVm: function (data, index, key) {
- var idKey = this.idKey
- var primitive = !isObject(data)
- if (key || idKey || primitive) {
- var id = idKey
- ? idKey === '$index'
- ? index
- : data[idKey]
- : (key || index)
- return this.cache[id]
- } else {
- return data[this.id]
- }
- },
- /**
- * Delete a cached vm instance.
- *
- * @param {Vue} vm
- */
- uncacheVm: function (vm) {
- var data = vm._raw
- var idKey = this.idKey
- var index = vm.$index
- // fix #948: avoid accidentally fall through to
- // a parent repeater which happens to have $key.
- var key = vm.hasOwnProperty('$key') && vm.$key
- var primitive = !isObject(data)
- if (idKey || key || primitive) {
- var id = idKey
- ? idKey === '$index'
- ? index
- : data[idKey]
- : (key || index)
- this.cache[id] = null
- } else {
- data[this.id] = null
- vm._raw = null
- }
- },
- /**
- * Insert an instance.
- *
- * @param {Vue} vm
- * @param {Number} index
- * @param {Node} prevEl
- * @param {Boolean} inDoc
- */
- insert: function (vm, index, prevEl, inDoc) {
- if (vm._staggerCb) {
- vm._staggerCb.cancel()
- vm._staggerCb = null
- }
- var staggerAmount = this.getStagger(vm, index, null, 'enter')
- if (inDoc && staggerAmount) {
- // create an anchor and insert it synchronously,
- // so that we can resolve the correct order without
- // worrying about some elements not inserted yet
- var anchor = vm._staggerAnchor
- if (!anchor) {
- anchor = vm._staggerAnchor = _.createAnchor('stagger-anchor')
- anchor.__vue__ = vm
- }
- _.after(anchor, prevEl)
- var op = vm._staggerCb = _.cancellable(function () {
- vm._staggerCb = null
- vm.$before(anchor)
- _.remove(anchor)
- })
- setTimeout(op, staggerAmount)
- } else {
- vm.$after(prevEl)
- }
- },
- /**
- * Move an already inserted instance.
- *
- * @param {Vue} vm
- * @param {Node} prevEl
- */
- move: function (vm, prevEl) {
- vm.$after(prevEl, null, false)
- },
- /**
- * Remove an instance.
- *
- * @param {Vue} vm
- * @param {Number} index
- * @param {Boolean} inDoc
- */
- remove: function (vm, index, total, inDoc) {
- if (vm._staggerCb) {
- vm._staggerCb.cancel()
- vm._staggerCb = null
- // it's not possible for the same vm to be removed
- // twice, so if we have a pending stagger callback,
- // it means this vm is queued for enter but removed
- // before its transition started. Since it is already
- // destroyed, we can just leave it in detached state.
- return
- }
- var staggerAmount = this.getStagger(vm, index, total, 'leave')
- if (inDoc && staggerAmount) {
- var op = vm._staggerCb = _.cancellable(function () {
- vm._staggerCb = null
- remove()
- })
- setTimeout(op, staggerAmount)
- } else {
- remove()
- }
- function remove () {
- vm.$remove(function () {
- vm._cleanup()
- })
- }
- },
- /**
- * Get the stagger amount for an insertion/removal.
- *
- * @param {Vue} vm
- * @param {Number} index
- * @param {String} type
- * @param {Number} total
- */
- getStagger: function (vm, index, total, type) {
- type = type + 'Stagger'
- var transition = vm.$el.__v_trans
- var hooks = transition && transition.hooks
- var hook = hooks && (hooks[type] || hooks.stagger)
- return hook
- ? hook.call(vm, index, total)
- : index * this[type]
- },
- /**
- * Pre-process the value before piping it through the
- * filters, and convert non-Array objects to arrays.
- *
- * This function will be bound to this directive instance
- * and passed into the watcher.
- *
- * @param {*} value
- * @return {Array}
- * @private
- */
- _preProcess: function (value) {
- // regardless of type, store the un-filtered raw value.
- this.rawValue = value
- var type = this.rawType = typeof value
- if (!isPlainObject(value)) {
- this.converted = false
- if (type === 'number') {
- value = range(value)
- } else if (type === 'string') {
- value = _.toArray(value)
- }
- return value || []
- } else {
- // convert plain object to array.
- var keys = Object.keys(value)
- var i = keys.length
- var res = new Array(i)
- var key
- while (i--) {
- key = keys[i]
- res[i] = {
- $key: key,
- $value: value[key]
- }
- }
- this.converted = true
- return res
- }
- }
- }
- /**
- * Helper to find the previous element that is an instance
- * root node. This is necessary because a destroyed vm's
- * element could still be lingering in the DOM before its
- * leaving transition finishes, but its __vue__ reference
- * should have been removed so we can skip them.
- *
- * If this is a block repeat, we want to make sure we only
- * return vm that is bound to this v-repeat. (see #929)
- *
- * @param {Vue} vm
- * @param {Comment|Text} anchor
- * @return {Vue}
- */
- function findPrevVm (vm, anchor, id) {
- var el = vm.$el.previousSibling
- /* istanbul ignore if */
- if (!el) return
- while (
- (!el.__vue__ || el.__vue__.$options._repeatId !== id) &&
- el !== anchor
- ) {
- el = el.previousSibling
- }
- return el.__vue__
- }
- /**
- * Create a range array from given number.
- *
- * @param {Number} n
- * @return {Array}
- */
- function range (n) {
- var i = -1
- var ret = new Array(n)
- while (++i < n) {
- ret[i] = i
- }
- return ret
- }
- /**
- * Convert a vms array to an object ref for v-ref on an
- * Object value.
- *
- * @param {Array} vms
- * @return {Object}
- */
- function toRefObject (vms) {
- var ref = {}
- for (var i = 0, l = vms.length; i < l; i++) {
- ref[vms[i].$key] = vms[i]
- }
- return ref
- }
- /**
- * Check if a value is a primitive one:
- * String, Number, Boolean, null or undefined.
- *
- * @param {*} value
- * @return {Boolean}
- */
- function isPrimitive (value) {
- var type = typeof value
- return value == null ||
- type === 'string' ||
- type === 'number' ||
- type === 'boolean'
- }
- /***/ },
- /* 46 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var compiler = __webpack_require__(10)
- var templateParser = __webpack_require__(22)
- var transition = __webpack_require__(30)
- var Cache = __webpack_require__(14)
- var cache = new Cache(1000)
- module.exports = {
- bind: function () {
- var el = this.el
- if (!el.__vue__) {
- this.start = _.createAnchor('v-if-start')
- this.end = _.createAnchor('v-if-end')
- _.replace(el, this.end)
- _.before(this.start, this.end)
- if (_.isTemplate(el)) {
- this.template = templateParser.parse(el, true)
- } else {
- this.template = document.createDocumentFragment()
- this.template.appendChild(templateParser.clone(el))
- }
- // compile the nested partial
- var cacheId = (this.vm.constructor.cid || '') + el.outerHTML
- this.linker = cache.get(cacheId)
- if (!this.linker) {
- this.linker = compiler.compile(
- this.template,
- this.vm.$options,
- true, // partial
- this._host // important
- )
- cache.put(cacheId, this.linker)
- }
- } else {
- ("development") !== 'production' && _.warn(
- 'v-if="' + this.expression + '" cannot be ' +
- 'used on an instance root element.'
- )
- this.invalid = true
- }
- },
- update: function (value) {
- if (this.invalid) return
- if (value) {
- // avoid duplicate compiles, since update() can be
- // called with different truthy values
- if (!this.unlink) {
- this.link(
- templateParser.clone(this.template),
- this.linker
- )
- }
- } else {
- this.teardown()
- }
- },
- link: function (frag, linker) {
- var vm = this.vm
- this.unlink = linker(vm, frag)
- transition.blockAppend(frag, this.end, vm)
- // call attached for all the child components created
- // during the compilation
- if (_.inDoc(vm.$el)) {
- var children = this.getContainedComponents()
- if (children) children.forEach(callAttach)
- }
- },
- teardown: function () {
- if (!this.unlink) return
- // collect children beforehand
- var children
- if (_.inDoc(this.vm.$el)) {
- children = this.getContainedComponents()
- }
- transition.blockRemove(this.start, this.end, this.vm)
- if (children) children.forEach(callDetach)
- this.unlink()
- this.unlink = null
- },
- getContainedComponents: function () {
- var vm = this.vm
- var start = this.start.nextSibling
- var end = this.end
- function contains (c) {
- var cur = start
- var next
- while (next !== end) {
- next = cur.nextSibling
- if (
- cur === c.$el ||
- cur.contains && cur.contains(c.$el)
- ) {
- return true
- }
- cur = next
- }
- return false
- }
- return vm.$children.length &&
- vm.$children.filter(contains)
- },
- unbind: function () {
- if (this.unlink) this.unlink()
- }
- }
- function callAttach (child) {
- if (!child._isAttached) {
- child._callHook('attached')
- }
- }
- function callDetach (child) {
- if (child._isAttached) {
- child._callHook('detached')
- }
- }
- /***/ },
- /* 47 */
- /***/ function(module, exports, __webpack_require__) {
- exports.content = __webpack_require__(48)
- exports.partial = __webpack_require__(49)
- /***/ },
- /* 48 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var clone = __webpack_require__(22).clone
- // This is the elementDirective that handles <content>
- // transclusions. It relies on the raw content of an
- // instance being stored as `$options._content` during
- // the transclude phase.
- module.exports = {
- bind: function () {
- var vm = this.vm
- var host = vm
- // we need find the content context, which is the
- // closest non-inline-repeater instance.
- while (host.$options._repeat) {
- host = host.$parent
- }
- var raw = host.$options._content
- var content
- if (!raw) {
- this.fallback()
- return
- }
- var context = host._context
- var selector = this._checkParam('select')
- if (!selector) {
- // Default content
- var self = this
- var compileDefaultContent = function () {
- self.compile(
- extractFragment(raw.childNodes, raw, true),
- context,
- vm
- )
- }
- if (!host._isCompiled) {
- // defer until the end of instance compilation,
- // because the default outlet must wait until all
- // other possible outlets with selectors have picked
- // out their contents.
- host.$once('hook:compiled', compileDefaultContent)
- } else {
- compileDefaultContent()
- }
- } else {
- // select content
- var nodes = raw.querySelectorAll(selector)
- if (nodes.length) {
- content = extractFragment(nodes, raw)
- if (content.hasChildNodes()) {
- this.compile(content, context, vm)
- } else {
- this.fallback()
- }
- } else {
- this.fallback()
- }
- }
- },
- fallback: function () {
- this.compile(_.extractContent(this.el, true), this.vm)
- },
- compile: function (content, context, host) {
- if (content && context) {
- this.unlink = context.$compile(content, host)
- }
- if (content) {
- _.replace(this.el, content)
- } else {
- _.remove(this.el)
- }
- },
- unbind: function () {
- if (this.unlink) {
- this.unlink()
- }
- }
- }
- /**
- * Extract qualified content nodes from a node list.
- *
- * @param {NodeList} nodes
- * @param {Element} parent
- * @param {Boolean} main
- * @return {DocumentFragment}
- */
- function extractFragment (nodes, parent, main) {
- var frag = document.createDocumentFragment()
- for (var i = 0, l = nodes.length; i < l; i++) {
- var node = nodes[i]
- // if this is the main outlet, we want to skip all
- // previously selected nodes;
- // otherwise, we want to mark the node as selected.
- // clone the node so the original raw content remains
- // intact. this ensures proper re-compilation in cases
- // where the outlet is inside a conditional block
- if (main && !node.__v_selected) {
- frag.appendChild(clone(node))
- } else if (!main && node.parentNode === parent) {
- node.__v_selected = true
- frag.appendChild(clone(node))
- }
- }
- return frag
- }
- /***/ },
- /* 49 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var templateParser = __webpack_require__(22)
- var textParser = __webpack_require__(13)
- var compiler = __webpack_require__(10)
- var Cache = __webpack_require__(14)
- var cache = new Cache(1000)
- // v-partial reuses logic from v-if
- var vIf = __webpack_require__(46)
- module.exports = {
- link: vIf.link,
- teardown: vIf.teardown,
- getContainedComponents: vIf.getContainedComponents,
- bind: function () {
- var el = this.el
- this.start = _.createAnchor('v-partial-start')
- this.end = _.createAnchor('v-partial-end')
- _.replace(el, this.end)
- _.before(this.start, this.end)
- var id = el.getAttribute('name')
- var tokens = textParser.parse(id)
- if (tokens) {
- // dynamic partial
- this.setupDynamic(tokens)
- } else {
- // static partial
- this.insert(id)
- }
- },
- setupDynamic: function (tokens) {
- var self = this
- var exp = textParser.tokensToExp(tokens)
- this.unwatch = this.vm.$watch(exp, function (value) {
- self.teardown()
- self.insert(value)
- }, {
- immediate: true,
- user: false
- })
- },
- insert: function (id) {
- var partial = _.resolveAsset(this.vm.$options, 'partials', id)
- if (true) {
- _.assertAsset(partial, 'partial', id)
- }
- if (partial) {
- var frag = templateParser.parse(partial, true)
- // cache partials based on constructor id.
- var cacheId = (this.vm.constructor.cid || '') + partial
- var linker = this.compile(frag, cacheId)
- // this is provided by v-if
- this.link(frag, linker)
- }
- },
- compile: function (frag, cacheId) {
- var hit = cache.get(cacheId)
- if (hit) return hit
- var linker = compiler.compile(frag, this.vm.$options, true)
- cache.put(cacheId, linker)
- return linker
- },
- unbind: function () {
- if (this.unlink) this.unlink()
- if (this.unwatch) this.unwatch()
- }
- }
- /***/ },
- /* 50 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- /**
- * Stringify value.
- *
- * @param {Number} indent
- */
- exports.json = {
- read: function (value, indent) {
- return typeof value === 'string'
- ? value
- : JSON.stringify(value, null, Number(indent) || 2)
- },
- write: function (value) {
- try {
- return JSON.parse(value)
- } catch (e) {
- return value
- }
- }
- }
- /**
- * 'abc' => 'Abc'
- */
- exports.capitalize = function (value) {
- if (!value && value !== 0) return ''
- value = value.toString()
- return value.charAt(0).toUpperCase() + value.slice(1)
- }
- /**
- * 'abc' => 'ABC'
- */
- exports.uppercase = function (value) {
- return (value || value === 0)
- ? value.toString().toUpperCase()
- : ''
- }
- /**
- * 'AbC' => 'abc'
- */
- exports.lowercase = function (value) {
- return (value || value === 0)
- ? value.toString().toLowerCase()
- : ''
- }
- /**
- * 12345 => $12,345.00
- *
- * @param {String} sign
- */
- var digitsRE = /(\d{3})(?=\d)/g
- exports.currency = function (value, currency) {
- value = parseFloat(value)
- if (!isFinite(value) || (!value && value !== 0)) return ''
- currency = currency || '$'
- var stringified = Math.abs(value).toFixed(2)
- var _int = stringified.slice(0, -3)
- var i = _int.length % 3
- var head = i > 0
- ? (_int.slice(0, i) + (_int.length > 3 ? ',' : ''))
- : ''
- var _float = stringified.slice(-3)
- var sign = value < 0 ? '-' : ''
- return currency + sign + head +
- _int.slice(i).replace(digitsRE, '$1,') +
- _float
- }
- /**
- * 'item' => 'items'
- *
- * @params
- * an array of strings corresponding to
- * the single, double, triple ... forms of the word to
- * be pluralized. When the number to be pluralized
- * exceeds the length of the args, it will use the last
- * entry in the array.
- *
- * e.g. ['single', 'double', 'triple', 'multiple']
- */
- exports.pluralize = function (value) {
- var args = _.toArray(arguments, 1)
- return args.length > 1
- ? (args[value % 10 - 1] || args[args.length - 1])
- : (args[0] + (value === 1 ? '' : 's'))
- }
- /**
- * A special filter that takes a handler function,
- * wraps it so it only gets triggered on specific
- * keypresses. v-on only.
- *
- * @param {String} key
- */
- var keyCodes = {
- esc: 27,
- tab: 9,
- enter: 13,
- 'delete': 46,
- up: 38,
- left: 37,
- right: 39,
- down: 40
- }
- exports.key = function (handler, key) {
- if (!handler) return
- var code = keyCodes[key]
- if (!code) {
- code = parseInt(key, 10)
- }
- return function (e) {
- if (e.keyCode === code) {
- return handler.call(this, e)
- }
- }
- }
- // expose keycode hash
- exports.key.keyCodes = keyCodes
- /**
- * Install special array filters
- */
- _.extend(exports, __webpack_require__(51))
- /***/ },
- /* 51 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Path = __webpack_require__(20)
- /**
- * Filter filter for v-repeat
- *
- * @param {String} searchKey
- * @param {String} [delimiter]
- * @param {String} dataKey
- */
- exports.filterBy = function (arr, search, delimiter, dataKey) {
- // allow optional `in` delimiter
- // because why not
- if (delimiter && delimiter !== 'in') {
- dataKey = delimiter
- }
- if (search == null) {
- return arr
- }
- // cast to lowercase string
- search = ('' + search).toLowerCase()
- return arr.filter(function (item) {
- return dataKey
- ? contains(Path.get(item, dataKey), search)
- : contains(item, search)
- })
- }
- /**
- * Filter filter for v-repeat
- *
- * @param {String} sortKey
- * @param {String} reverse
- */
- exports.orderBy = function (arr, sortKey, reverse) {
- if (!sortKey) {
- return arr
- }
- var order = 1
- if (arguments.length > 2) {
- if (reverse === '-1') {
- order = -1
- } else {
- order = reverse ? -1 : 1
- }
- }
- // sort on a copy to avoid mutating original array
- return arr.slice().sort(function (a, b) {
- if (sortKey !== '$key' && sortKey !== '$value') {
- if (a && '$value' in a) a = a.$value
- if (b && '$value' in b) b = b.$value
- }
- a = _.isObject(a) ? Path.get(a, sortKey) : a
- b = _.isObject(b) ? Path.get(b, sortKey) : b
- return a === b ? 0 : a > b ? order : -order
- })
- }
- /**
- * String contain helper
- *
- * @param {*} val
- * @param {String} search
- */
- function contains (val, search) {
- if (_.isPlainObject(val)) {
- for (var key in val) {
- if (contains(val[key], search)) {
- return true
- }
- }
- } else if (_.isArray(val)) {
- var i = val.length
- while (i--) {
- if (contains(val[i], search)) {
- return true
- }
- }
- } else if (val != null) {
- return val.toString().toLowerCase().indexOf(search) > -1
- }
- }
- /***/ },
- /* 52 */
- /***/ function(module, exports, __webpack_require__) {
- var mergeOptions = __webpack_require__(1).mergeOptions
- /**
- * The main init sequence. This is called for every
- * instance, including ones that are created from extended
- * constructors.
- *
- * @param {Object} options - this options object should be
- * the result of merging class
- * options and the options passed
- * in to the constructor.
- */
- exports._init = function (options) {
- options = options || {}
- this.$el = null
- this.$parent = options._parent
- this.$root = options._root || this
- this.$children = []
- this.$ = {} // child vm references
- this.$$ = {} // element references
- this._watchers = [] // all watchers as an array
- this._directives = [] // all directives
- this._childCtors = {} // inherit:true constructors
- // a flag to avoid this being observed
- this._isVue = true
- // events bookkeeping
- this._events = {} // registered callbacks
- this._eventsCount = {} // for $broadcast optimization
- this._eventCancelled = false // for event cancellation
- // fragment instance properties
- this._isFragment = false
- this._fragmentStart = // @type {CommentNode}
- this._fragmentEnd = null // @type {CommentNode}
- // lifecycle state
- this._isCompiled =
- this._isDestroyed =
- this._isReady =
- this._isAttached =
- this._isBeingDestroyed = false
- this._unlinkFn = null
- // context: the scope in which the component was used,
- // and the scope in which props and contents of this
- // instance should be compiled in.
- this._context =
- options._context ||
- options._parent
- // push self into parent / transclusion host
- if (this.$parent) {
- this.$parent.$children.push(this)
- }
- // props used in v-repeat diffing
- this._reused = false
- this._staggerOp = null
- // merge options.
- options = this.$options = mergeOptions(
- this.constructor.options,
- options,
- this
- )
- // initialize data as empty object.
- // it will be filled up in _initScope().
- this._data = {}
- // initialize data observation and scope inheritance.
- this._initScope()
- // setup event system and option events.
- this._initEvents()
- // call created hook
- this._callHook('created')
- // if `el` option is passed, start compilation.
- if (options.el) {
- this.$mount(options.el)
- }
- }
- /***/ },
- /* 53 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var inDoc = _.inDoc
- /**
- * Setup the instance's option events & watchers.
- * If the value is a string, we pull it from the
- * instance's methods by name.
- */
- exports._initEvents = function () {
- var options = this.$options
- registerCallbacks(this, '$on', options.events)
- registerCallbacks(this, '$watch', options.watch)
- }
- /**
- * Register callbacks for option events and watchers.
- *
- * @param {Vue} vm
- * @param {String} action
- * @param {Object} hash
- */
- function registerCallbacks (vm, action, hash) {
- if (!hash) return
- var handlers, key, i, j
- for (key in hash) {
- handlers = hash[key]
- if (_.isArray(handlers)) {
- for (i = 0, j = handlers.length; i < j; i++) {
- register(vm, action, key, handlers[i])
- }
- } else {
- register(vm, action, key, handlers)
- }
- }
- }
- /**
- * Helper to register an event/watch callback.
- *
- * @param {Vue} vm
- * @param {String} action
- * @param {String} key
- * @param {Function|String|Object} handler
- * @param {Object} [options]
- */
- function register (vm, action, key, handler, options) {
- var type = typeof handler
- if (type === 'function') {
- vm[action](key, handler, options)
- } else if (type === 'string') {
- var methods = vm.$options.methods
- var method = methods && methods[handler]
- if (method) {
- vm[action](key, method, options)
- } else {
- ("development") !== 'production' && _.warn(
- 'Unknown method: "' + handler + '" when ' +
- 'registering callback for ' + action +
- ': "' + key + '".'
- )
- }
- } else if (handler && type === 'object') {
- register(vm, action, key, handler.handler, handler)
- }
- }
- /**
- * Setup recursive attached/detached calls
- */
- exports._initDOMHooks = function () {
- this.$on('hook:attached', onAttached)
- this.$on('hook:detached', onDetached)
- }
- /**
- * Callback to recursively call attached hook on children
- */
- function onAttached () {
- if (!this._isAttached) {
- this._isAttached = true
- this.$children.forEach(callAttach)
- }
- }
- /**
- * Iterator to call attached hook
- *
- * @param {Vue} child
- */
- function callAttach (child) {
- if (!child._isAttached && inDoc(child.$el)) {
- child._callHook('attached')
- }
- }
- /**
- * Callback to recursively call detached hook on children
- */
- function onDetached () {
- if (this._isAttached) {
- this._isAttached = false
- this.$children.forEach(callDetach)
- }
- }
- /**
- * Iterator to call detached hook
- *
- * @param {Vue} child
- */
- function callDetach (child) {
- if (child._isAttached && !inDoc(child.$el)) {
- child._callHook('detached')
- }
- }
- /**
- * Trigger all handlers for a hook
- *
- * @param {String} hook
- */
- exports._callHook = function (hook) {
- var handlers = this.$options[hook]
- if (handlers) {
- for (var i = 0, j = handlers.length; i < j; i++) {
- handlers[i].call(this)
- }
- }
- this.$emit('hook:' + hook)
- }
- /***/ },
- /* 54 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var compiler = __webpack_require__(10)
- var Observer = __webpack_require__(55)
- var Dep = __webpack_require__(18)
- var Watcher = __webpack_require__(17)
- /**
- * Setup the scope of an instance, which contains:
- * - observed data
- * - computed properties
- * - user methods
- * - meta properties
- */
- exports._initScope = function () {
- this._initProps()
- this._initMeta()
- this._initMethods()
- this._initData()
- this._initComputed()
- }
- /**
- * Initialize props.
- */
- exports._initProps = function () {
- var options = this.$options
- var el = options.el
- var props = options.props
- if (props && !el) {
- ("development") !== 'production' && _.warn(
- 'Props will not be compiled if no `el` option is ' +
- 'provided at instantiation.'
- )
- }
- // make sure to convert string selectors into element now
- el = options.el = _.query(el)
- this._propsUnlinkFn = el && props
- ? compiler.compileAndLinkProps(
- this, el, props
- )
- : null
- }
- /**
- * Initialize the data.
- */
- exports._initData = function () {
- var propsData = this._data
- var optionsDataFn = this.$options.data
- var optionsData = optionsDataFn && optionsDataFn()
- if (optionsData) {
- this._data = optionsData
- for (var prop in propsData) {
- if (
- this._props[prop].raw !== null ||
- !optionsData.hasOwnProperty(prop)
- ) {
- optionsData.$set(prop, propsData[prop])
- }
- }
- }
- var data = this._data
- // proxy data on instance
- var keys = Object.keys(data)
- var i, key
- i = keys.length
- while (i--) {
- key = keys[i]
- if (!_.isReserved(key)) {
- this._proxy(key)
- }
- }
- // observe data
- Observer.create(data, this)
- }
- /**
- * Swap the isntance's $data. Called in $data's setter.
- *
- * @param {Object} newData
- */
- exports._setData = function (newData) {
- newData = newData || {}
- var oldData = this._data
- this._data = newData
- var keys, key, i
- // copy props.
- // this should only happen during a v-repeat of component
- // that also happens to have compiled props.
- var props = this.$options.props
- if (props) {
- i = props.length
- while (i--) {
- key = props[i].name
- if (key !== '$data' && !newData.hasOwnProperty(key)) {
- newData.$set(key, oldData[key])
- }
- }
- }
- // unproxy keys not present in new data
- keys = Object.keys(oldData)
- i = keys.length
- while (i--) {
- key = keys[i]
- if (!_.isReserved(key) && !(key in newData)) {
- this._unproxy(key)
- }
- }
- // proxy keys not already proxied,
- // and trigger change for changed values
- keys = Object.keys(newData)
- i = keys.length
- while (i--) {
- key = keys[i]
- if (!this.hasOwnProperty(key) && !_.isReserved(key)) {
- // new property
- this._proxy(key)
- }
- }
- oldData.__ob__.removeVm(this)
- Observer.create(newData, this)
- this._digest()
- }
- /**
- * Proxy a property, so that
- * vm.prop === vm._data.prop
- *
- * @param {String} key
- */
- exports._proxy = function (key) {
- // need to store ref to self here
- // because these getter/setters might
- // be called by child instances!
- var self = this
- Object.defineProperty(self, key, {
- configurable: true,
- enumerable: true,
- get: function proxyGetter () {
- return self._data[key]
- },
- set: function proxySetter (val) {
- self._data[key] = val
- }
- })
- }
- /**
- * Unproxy a property.
- *
- * @param {String} key
- */
- exports._unproxy = function (key) {
- delete this[key]
- }
- /**
- * Force update on every watcher in scope.
- */
- exports._digest = function () {
- var i = this._watchers.length
- while (i--) {
- this._watchers[i].update(true) // shallow updates
- }
- var children = this.$children
- i = children.length
- while (i--) {
- var child = children[i]
- if (child.$options.inherit) {
- child._digest()
- }
- }
- }
- /**
- * Setup computed properties. They are essentially
- * special getter/setters
- */
- function noop () {}
- exports._initComputed = function () {
- var computed = this.$options.computed
- if (computed) {
- for (var key in computed) {
- var userDef = computed[key]
- var def = {
- enumerable: true,
- configurable: true
- }
- if (typeof userDef === 'function') {
- def.get = makeComputedGetter(userDef, this)
- def.set = noop
- } else {
- def.get = userDef.get
- ? makeComputedGetter(userDef.get, this)
- : noop
- def.set = userDef.set
- ? _.bind(userDef.set, this)
- : noop
- }
- Object.defineProperty(this, key, def)
- }
- }
- }
- function makeComputedGetter (getter, owner) {
- var watcher = new Watcher(owner, getter, null, {
- lazy: true
- })
- return function computedGetter () {
- if (watcher.dirty) {
- watcher.evaluate()
- }
- if (Dep.target) {
- watcher.depend()
- }
- return watcher.value
- }
- }
- /**
- * Setup instance methods. Methods must be bound to the
- * instance since they might be called by children
- * inheriting them.
- */
- exports._initMethods = function () {
- var methods = this.$options.methods
- if (methods) {
- for (var key in methods) {
- this[key] = _.bind(methods[key], this)
- }
- }
- }
- /**
- * Initialize meta information like $index, $key & $value.
- */
- exports._initMeta = function () {
- var metas = this.$options._meta
- if (metas) {
- for (var key in metas) {
- this._defineMeta(key, metas[key])
- }
- }
- }
- /**
- * Define a meta property, e.g $index, $key, $value
- * which only exists on the vm instance but not in $data.
- *
- * @param {String} key
- * @param {*} value
- */
- exports._defineMeta = function (key, value) {
- var dep = new Dep()
- Object.defineProperty(this, key, {
- enumerable: true,
- configurable: true,
- get: function metaGetter () {
- if (Dep.target) {
- dep.depend()
- }
- return value
- },
- set: function metaSetter (val) {
- if (val !== value) {
- value = val
- dep.notify()
- }
- }
- })
- }
- /***/ },
- /* 55 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- var Dep = __webpack_require__(18)
- var arrayMethods = __webpack_require__(56)
- var arrayKeys = Object.getOwnPropertyNames(arrayMethods)
- __webpack_require__(57)
- /**
- * Observer class that are attached to each observed
- * object. Once attached, the observer converts target
- * object's property keys into getter/setters that
- * collect dependencies and dispatches updates.
- *
- * @param {Array|Object} value
- * @constructor
- */
- function Observer (value) {
- this.value = value
- this.dep = new Dep()
- _.define(value, '__ob__', this)
- if (_.isArray(value)) {
- var augment = config.proto && _.hasProto
- ? protoAugment
- : copyAugment
- augment(value, arrayMethods, arrayKeys)
- this.observeArray(value)
- } else {
- this.walk(value)
- }
- }
- // Static methods
- /**
- * Attempt to create an observer instance for a value,
- * returns the new observer if successfully observed,
- * or the existing observer if the value already has one.
- *
- * @param {*} value
- * @param {Vue} [vm]
- * @return {Observer|undefined}
- * @static
- */
- Observer.create = function (value, vm) {
- var ob
- if (
- value &&
- value.hasOwnProperty('__ob__') &&
- value.__ob__ instanceof Observer
- ) {
- ob = value.__ob__
- } else if (
- _.isObject(value) &&
- !Object.isFrozen(value) &&
- !value._isVue
- ) {
- ob = new Observer(value)
- }
- if (ob && vm) {
- ob.addVm(vm)
- }
- return ob
- }
- // Instance methods
- var p = Observer.prototype
- /**
- * Walk through each property and convert them into
- * getter/setters. This method should only be called when
- * value type is Object. Properties prefixed with `$` or `_`
- * and accessor properties are ignored.
- *
- * @param {Object} obj
- */
- p.walk = function (obj) {
- var keys = Object.keys(obj)
- var i = keys.length
- var key, prefix
- while (i--) {
- key = keys[i]
- prefix = key.charCodeAt(0)
- if (prefix !== 0x24 && prefix !== 0x5F) { // skip $ or _
- this.convert(key, obj[key])
- }
- }
- }
- /**
- * Try to carete an observer for a child value,
- * and if value is array, link dep to the array.
- *
- * @param {*} val
- * @return {Dep|undefined}
- */
- p.observe = function (val) {
- return Observer.create(val)
- }
- /**
- * Observe a list of Array items.
- *
- * @param {Array} items
- */
- p.observeArray = function (items) {
- var i = items.length
- while (i--) {
- this.observe(items[i])
- }
- }
- /**
- * Convert a property into getter/setter so we can emit
- * the events when the property is accessed/changed.
- *
- * @param {String} key
- * @param {*} val
- */
- p.convert = function (key, val) {
- var ob = this
- var childOb = ob.observe(val)
- var dep = new Dep()
- Object.defineProperty(ob.value, key, {
- enumerable: true,
- configurable: true,
- get: function () {
- if (Dep.target) {
- dep.depend()
- if (childOb) {
- childOb.dep.depend()
- }
- if (_.isArray(val)) {
- for (var e, i = 0, l = val.length; i < l; i++) {
- e = val[i]
- e && e.__ob__ && e.__ob__.dep.depend()
- }
- }
- }
- return val
- },
- set: function (newVal) {
- if (newVal === val) return
- val = newVal
- childOb = ob.observe(newVal)
- dep.notify()
- }
- })
- }
- /**
- * Add an owner vm, so that when $add/$delete mutations
- * happen we can notify owner vms to proxy the keys and
- * digest the watchers. This is only called when the object
- * is observed as an instance's root $data.
- *
- * @param {Vue} vm
- */
- p.addVm = function (vm) {
- (this.vms || (this.vms = [])).push(vm)
- }
- /**
- * Remove an owner vm. This is called when the object is
- * swapped out as an instance's $data object.
- *
- * @param {Vue} vm
- */
- p.removeVm = function (vm) {
- this.vms.$remove(vm)
- }
- // helpers
- /**
- * Augment an target Object or Array by intercepting
- * the prototype chain using __proto__
- *
- * @param {Object|Array} target
- * @param {Object} proto
- */
- function protoAugment (target, src) {
- target.__proto__ = src
- }
- /**
- * Augment an target Object or Array by defining
- * hidden properties.
- *
- * @param {Object|Array} target
- * @param {Object} proto
- */
- function copyAugment (target, src, keys) {
- var i = keys.length
- var key
- while (i--) {
- key = keys[i]
- _.define(target, key, src[key])
- }
- }
- module.exports = Observer
- /***/ },
- /* 56 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var arrayProto = Array.prototype
- var arrayMethods = Object.create(arrayProto)
- /**
- * Intercept mutating methods and emit events
- */
- ;[
- 'push',
- 'pop',
- 'shift',
- 'unshift',
- 'splice',
- 'sort',
- 'reverse'
- ]
- .forEach(function (method) {
- // cache original method
- var original = arrayProto[method]
- _.define(arrayMethods, method, function mutator () {
- // avoid leaking arguments:
- // http://jsperf.com/closure-with-arguments
- var i = arguments.length
- var args = new Array(i)
- while (i--) {
- args[i] = arguments[i]
- }
- var result = original.apply(this, args)
- var ob = this.__ob__
- var inserted
- switch (method) {
- case 'push':
- inserted = args
- break
- case 'unshift':
- inserted = args
- break
- case 'splice':
- inserted = args.slice(2)
- break
- }
- if (inserted) ob.observeArray(inserted)
- // notify change
- ob.dep.notify()
- return result
- })
- })
- /**
- * Swap the element at the given index with a new value
- * and emits corresponding event.
- *
- * @param {Number} index
- * @param {*} val
- * @return {*} - replaced element
- */
- _.define(
- arrayProto,
- '$set',
- function $set (index, val) {
- if (index >= this.length) {
- this.length = index + 1
- }
- return this.splice(index, 1, val)[0]
- }
- )
- /**
- * Convenience method to remove the element at given index.
- *
- * @param {Number} index
- * @param {*} val
- */
- _.define(
- arrayProto,
- '$remove',
- function $remove (index) {
- /* istanbul ignore if */
- if (!this.length) return
- if (typeof index !== 'number') {
- index = _.indexOf(this, index)
- }
- if (index > -1) {
- return this.splice(index, 1)
- }
- }
- )
- module.exports = arrayMethods
- /***/ },
- /* 57 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var objProto = Object.prototype
- /**
- * Add a new property to an observed object
- * and emits corresponding event
- *
- * @param {String} key
- * @param {*} val
- * @public
- */
- _.define(
- objProto,
- '$add',
- function $add (key, val) {
- if (this.hasOwnProperty(key)) return
- var ob = this.__ob__
- if (!ob || _.isReserved(key)) {
- this[key] = val
- return
- }
- ob.convert(key, val)
- ob.dep.notify()
- if (ob.vms) {
- var i = ob.vms.length
- while (i--) {
- var vm = ob.vms[i]
- vm._proxy(key)
- vm._digest()
- }
- }
- }
- )
- /**
- * Set a property on an observed object, calling add to
- * ensure the property is observed.
- *
- * @param {String} key
- * @param {*} val
- * @public
- */
- _.define(
- objProto,
- '$set',
- function $set (key, val) {
- this.$add(key, val)
- this[key] = val
- }
- )
- /**
- * Deletes a property from an observed object
- * and emits corresponding event
- *
- * @param {String} key
- * @public
- */
- _.define(
- objProto,
- '$delete',
- function $delete (key) {
- if (!this.hasOwnProperty(key)) return
- delete this[key]
- var ob = this.__ob__
- if (!ob || _.isReserved(key)) {
- return
- }
- ob.dep.notify()
- if (ob.vms) {
- var i = ob.vms.length
- while (i--) {
- var vm = ob.vms[i]
- vm._unproxy(key)
- vm._digest()
- }
- }
- }
- )
- /***/ },
- /* 58 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var Directive = __webpack_require__(59)
- var compiler = __webpack_require__(10)
- /**
- * Transclude, compile and link element.
- *
- * If a pre-compiled linker is available, that means the
- * passed in element will be pre-transcluded and compiled
- * as well - all we need to do is to call the linker.
- *
- * Otherwise we need to call transclude/compile/link here.
- *
- * @param {Element} el
- * @return {Element}
- */
- exports._compile = function (el) {
- var options = this.$options
- var host = this._host
- if (options._linkFn) {
- // pre-transcluded with linker, just use it
- this._initElement(el)
- this._unlinkFn = options._linkFn(this, el, host)
- } else {
- // transclude and init element
- // transclude can potentially replace original
- // so we need to keep reference; this step also injects
- // the template and caches the original attributes
- // on the container node and replacer node.
- var original = el
- el = compiler.transclude(el, options)
- this._initElement(el)
- // root is always compiled per-instance, because
- // container attrs and props can be different every time.
- var rootLinker = compiler.compileRoot(el, options)
- // compile and link the rest
- var contentLinkFn
- var ctor = this.constructor
- // component compilation can be cached
- // as long as it's not using inline-template
- if (options._linkerCachable) {
- contentLinkFn = ctor.linker
- if (!contentLinkFn) {
- contentLinkFn = ctor.linker = compiler.compile(el, options)
- }
- }
- // link phase
- var rootUnlinkFn = rootLinker(this, el)
- var contentUnlinkFn = contentLinkFn
- ? contentLinkFn(this, el)
- : compiler.compile(el, options)(this, el, host)
- // register composite unlink function
- // to be called during instance destruction
- this._unlinkFn = function () {
- rootUnlinkFn()
- // passing destroying: true to avoid searching and
- // splicing the directives
- contentUnlinkFn(true)
- }
- // finally replace original
- if (options.replace) {
- _.replace(original, el)
- }
- }
- return el
- }
- /**
- * Initialize instance element. Called in the public
- * $mount() method.
- *
- * @param {Element} el
- */
- exports._initElement = function (el) {
- if (el instanceof DocumentFragment) {
- this._isFragment = true
- this.$el = this._fragmentStart = el.firstChild
- this._fragmentEnd = el.lastChild
- // set persisted text anchors to empty
- if (this._fragmentStart.nodeType === 3) {
- this._fragmentStart.data = this._fragmentEnd.data = ''
- }
- this._blockFragment = el
- } else {
- this.$el = el
- }
- this.$el.__vue__ = this
- this._callHook('beforeCompile')
- }
- /**
- * Create and bind a directive to an element.
- *
- * @param {String} name - directive name
- * @param {Node} node - target node
- * @param {Object} desc - parsed directive descriptor
- * @param {Object} def - directive definition object
- * @param {Vue|undefined} host - transclusion host component
- */
- exports._bindDir = function (name, node, desc, def, host) {
- this._directives.push(
- new Directive(name, node, this, desc, def, host)
- )
- }
- /**
- * Teardown an instance, unobserves the data, unbind all the
- * directives, turn off all the event listeners, etc.
- *
- * @param {Boolean} remove - whether to remove the DOM node.
- * @param {Boolean} deferCleanup - if true, defer cleanup to
- * be called later
- */
- exports._destroy = function (remove, deferCleanup) {
- if (this._isBeingDestroyed) {
- return
- }
- this._callHook('beforeDestroy')
- this._isBeingDestroyed = true
- var i
- // remove self from parent. only necessary
- // if parent is not being destroyed as well.
- var parent = this.$parent
- if (parent && !parent._isBeingDestroyed) {
- parent.$children.$remove(this)
- }
- // destroy all children.
- i = this.$children.length
- while (i--) {
- this.$children[i].$destroy()
- }
- // teardown props
- if (this._propsUnlinkFn) {
- this._propsUnlinkFn()
- }
- // teardown all directives. this also tearsdown all
- // directive-owned watchers.
- if (this._unlinkFn) {
- this._unlinkFn()
- }
- i = this._watchers.length
- while (i--) {
- this._watchers[i].teardown()
- }
- // remove reference to self on $el
- if (this.$el) {
- this.$el.__vue__ = null
- }
- // remove DOM element
- var self = this
- if (remove && this.$el) {
- this.$remove(function () {
- self._cleanup()
- })
- } else if (!deferCleanup) {
- this._cleanup()
- }
- }
- /**
- * Clean up to ensure garbage collection.
- * This is called after the leave transition if there
- * is any.
- */
- exports._cleanup = function () {
- // remove reference from data ob
- // frozen object may not have observer.
- if (this._data.__ob__) {
- this._data.__ob__.removeVm(this)
- }
- // Clean up references to private properties and other
- // instances. preserve reference to _data so that proxy
- // accessors still work. The only potential side effect
- // here is that mutating the instance after it's destroyed
- // may affect the state of other components that are still
- // observing the same object, but that seems to be a
- // reasonable responsibility for the user rather than
- // always throwing an error on them.
- this.$el =
- this.$parent =
- this.$root =
- this.$children =
- this._watchers =
- this._directives = null
- // call the last hook...
- this._isDestroyed = true
- this._callHook('destroyed')
- // turn off all instance listeners.
- this.$off()
- }
- /***/ },
- /* 59 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var config = __webpack_require__(5)
- var Watcher = __webpack_require__(17)
- var textParser = __webpack_require__(13)
- var expParser = __webpack_require__(19)
- /**
- * A directive links a DOM element with a piece of data,
- * which is the result of evaluating an expression.
- * It registers a watcher with the expression and calls
- * the DOM update function when a change is triggered.
- *
- * @param {String} name
- * @param {Node} el
- * @param {Vue} vm
- * @param {Object} descriptor
- * - {String} expression
- * - {String} [arg]
- * - {Array<Object>} [filters]
- * @param {Object} def - directive definition object
- * @param {Vue|undefined} host - transclusion host target
- * @constructor
- */
- function Directive (name, el, vm, descriptor, def, host) {
- // public
- this.name = name
- this.el = el
- this.vm = vm
- // copy descriptor props
- this.raw = descriptor.raw
- this.expression = descriptor.expression
- this.arg = descriptor.arg
- this.filters = descriptor.filters
- // private
- this._descriptor = descriptor
- this._host = host
- this._locked = false
- this._bound = false
- // init
- this._bind(def)
- }
- var p = Directive.prototype
- /**
- * Initialize the directive, mixin definition properties,
- * setup the watcher, call definition bind() and update()
- * if present.
- *
- * @param {Object} def
- */
- p._bind = function (def) {
- if (
- (this.name !== 'cloak' || this.vm._isCompiled) &&
- this.el && this.el.removeAttribute
- ) {
- this.el.removeAttribute(config.prefix + this.name)
- }
- if (typeof def === 'function') {
- this.update = def
- } else {
- _.extend(this, def)
- }
- this._watcherExp = this.expression
- this._checkDynamicLiteral()
- if (this.bind) {
- this.bind()
- }
- if (this._watcherExp &&
- (this.update || this.twoWay) &&
- (!this.isLiteral || this._isDynamicLiteral) &&
- !this._checkStatement()) {
- // wrapped updater for context
- var dir = this
- var update = this._update = this.update
- ? function (val, oldVal) {
- if (!dir._locked) {
- dir.update(val, oldVal)
- }
- }
- : function () {} // noop if no update is provided
- // pre-process hook called before the value is piped
- // through the filters. used in v-repeat.
- var preProcess = this._preProcess
- ? _.bind(this._preProcess, this)
- : null
- var watcher = this._watcher = new Watcher(
- this.vm,
- this._watcherExp,
- update, // callback
- {
- filters: this.filters,
- twoWay: this.twoWay,
- deep: this.deep,
- preProcess: preProcess
- }
- )
- if (this._initValue != null) {
- watcher.set(this._initValue)
- } else if (this.update) {
- this.update(watcher.value)
- }
- }
- this._bound = true
- }
- /**
- * check if this is a dynamic literal binding.
- *
- * e.g. v-component="{{currentView}}"
- */
- p._checkDynamicLiteral = function () {
- var expression = this.expression
- if (expression && this.isLiteral) {
- var tokens = textParser.parse(expression)
- if (tokens) {
- var exp = textParser.tokensToExp(tokens)
- this.expression = this.vm.$get(exp)
- this._watcherExp = exp
- this._isDynamicLiteral = true
- }
- }
- }
- /**
- * Check if the directive is a function caller
- * and if the expression is a callable one. If both true,
- * we wrap up the expression and use it as the event
- * handler.
- *
- * e.g. v-on="click: a++"
- *
- * @return {Boolean}
- */
- p._checkStatement = function () {
- var expression = this.expression
- if (
- expression && this.acceptStatement &&
- !expParser.isSimplePath(expression)
- ) {
- var fn = expParser.parse(expression).get
- var vm = this.vm
- var handler = function () {
- fn.call(vm, vm)
- }
- if (this.filters) {
- handler = vm._applyFilters(handler, null, this.filters)
- }
- this.update(handler)
- return true
- }
- }
- /**
- * Check for an attribute directive param, e.g. lazy
- *
- * @param {String} name
- * @return {String}
- */
- p._checkParam = function (name) {
- var param = this.el.getAttribute(name)
- if (param !== null) {
- this.el.removeAttribute(name)
- param = this.vm.$interpolate(param)
- }
- return param
- }
- /**
- * Teardown the watcher and call unbind.
- */
- p._teardown = function () {
- if (this._bound) {
- this._bound = false
- if (this.unbind) {
- this.unbind()
- }
- if (this._watcher) {
- this._watcher.teardown()
- }
- this.vm = this.el = this._watcher = null
- }
- }
- /**
- * Set the corresponding value with the setter.
- * This should only be used in two-way directives
- * e.g. v-model.
- *
- * @param {*} value
- * @public
- */
- p.set = function (value) {
- if (this.twoWay) {
- this._withLock(function () {
- this._watcher.set(value)
- })
- }
- }
- /**
- * Execute a function while preventing that function from
- * triggering updates on this directive instance.
- *
- * @param {Function} fn
- */
- p._withLock = function (fn) {
- var self = this
- self._locked = true
- fn.call(self)
- _.nextTick(function () {
- self._locked = false
- })
- }
- module.exports = Directive
- /***/ },
- /* 60 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- /**
- * Apply a list of filter (descriptors) to a value.
- * Using plain for loops here because this will be called in
- * the getter of any watcher with filters so it is very
- * performance sensitive.
- *
- * @param {*} value
- * @param {*} [oldValue]
- * @param {Array} filters
- * @param {Boolean} write
- * @return {*}
- */
- exports._applyFilters = function (value, oldValue, filters, write) {
- var filter, fn, args, arg, offset, i, l, j, k
- for (i = 0, l = filters.length; i < l; i++) {
- filter = filters[i]
- fn = _.resolveAsset(this.$options, 'filters', filter.name)
- if (true) {
- _.assertAsset(fn, 'filter', filter.name)
- }
- if (!fn) continue
- fn = write ? fn.write : (fn.read || fn)
- if (typeof fn !== 'function') continue
- args = write ? [value, oldValue] : [value]
- offset = write ? 2 : 1
- if (filter.args) {
- for (j = 0, k = filter.args.length; j < k; j++) {
- arg = filter.args[j]
- args[j + offset] = arg.dynamic
- ? this.$get(arg.value)
- : arg.value
- }
- }
- value = fn.apply(this, args)
- }
- return value
- }
- /**
- * Resolve a component, depending on whether the component
- * is defined normally or using an async factory function.
- * Resolves synchronously if already resolved, otherwise
- * resolves asynchronously and caches the resolved
- * constructor on the factory.
- *
- * @param {String} id
- * @param {Function} cb
- */
- exports._resolveComponent = function (id, cb) {
- var factory = _.resolveAsset(this.$options, 'components', id)
- if (true) {
- _.assertAsset(factory, 'component', id)
- }
- if (!factory) {
- return
- }
- // async component factory
- if (!factory.options) {
- if (factory.resolved) {
- // cached
- cb(factory.resolved)
- } else if (factory.requested) {
- // pool callbacks
- factory.pendingCallbacks.push(cb)
- } else {
- factory.requested = true
- var cbs = factory.pendingCallbacks = [cb]
- factory(function resolve (res) {
- if (_.isPlainObject(res)) {
- res = _.Vue.extend(res)
- }
- // cache resolved
- factory.resolved = res
- // invoke callbacks
- for (var i = 0, l = cbs.length; i < l; i++) {
- cbs[i](res)
- }
- }, function reject (reason) {
- ("development") !== 'production' && _.warn(
- 'Failed to resolve async component: ' + id + '. ' +
- (reason ? '\nReason: ' + reason : '')
- )
- })
- }
- } else {
- // normal component
- cb(factory)
- }
- }
- /***/ },
- /* 61 */
- /***/ function(module, exports, __webpack_require__) {
- var Watcher = __webpack_require__(17)
- var Path = __webpack_require__(20)
- var textParser = __webpack_require__(13)
- var dirParser = __webpack_require__(15)
- var expParser = __webpack_require__(19)
- var filterRE = /[^|]\|[^|]/
- /**
- * Get the value from an expression on this vm.
- *
- * @param {String} exp
- * @return {*}
- */
- exports.$get = function (exp) {
- var res = expParser.parse(exp)
- if (res) {
- try {
- return res.get.call(this, this)
- } catch (e) {}
- }
- }
- /**
- * Set the value from an expression on this vm.
- * The expression must be a valid left-hand
- * expression in an assignment.
- *
- * @param {String} exp
- * @param {*} val
- */
- exports.$set = function (exp, val) {
- var res = expParser.parse(exp, true)
- if (res && res.set) {
- res.set.call(this, this, val)
- }
- }
- /**
- * Add a property on the VM
- *
- * @param {String} key
- * @param {*} val
- */
- exports.$add = function (key, val) {
- this._data.$add(key, val)
- }
- /**
- * Delete a property on the VM
- *
- * @param {String} key
- */
- exports.$delete = function (key) {
- this._data.$delete(key)
- }
- /**
- * Watch an expression, trigger callback when its
- * value changes.
- *
- * @param {String} exp
- * @param {Function} cb
- * @param {Object} [options]
- * - {Boolean} deep
- * - {Boolean} immediate
- * - {Boolean} user
- * @return {Function} - unwatchFn
- */
- exports.$watch = function (exp, cb, options) {
- var vm = this
- var wrappedCb = function (val, oldVal) {
- cb.call(vm, val, oldVal)
- }
- var watcher = new Watcher(vm, exp, wrappedCb, {
- deep: options && options.deep,
- user: !options || options.user !== false
- })
- if (options && options.immediate) {
- wrappedCb(watcher.value)
- }
- return function unwatchFn () {
- watcher.teardown()
- }
- }
- /**
- * Evaluate a text directive, including filters.
- *
- * @param {String} text
- * @return {String}
- */
- exports.$eval = function (text) {
- // check for filters.
- if (filterRE.test(text)) {
- var dir = dirParser.parse(text)[0]
- // the filter regex check might give false positive
- // for pipes inside strings, so it's possible that
- // we don't get any filters here
- var val = this.$get(dir.expression)
- return dir.filters
- ? this._applyFilters(val, null, dir.filters)
- : val
- } else {
- // no filter
- return this.$get(text)
- }
- }
- /**
- * Interpolate a piece of template text.
- *
- * @param {String} text
- * @return {String}
- */
- exports.$interpolate = function (text) {
- var tokens = textParser.parse(text)
- var vm = this
- if (tokens) {
- return tokens.length === 1
- ? vm.$eval(tokens[0].value)
- : tokens.map(function (token) {
- return token.tag
- ? vm.$eval(token.value)
- : token.value
- }).join('')
- } else {
- return text
- }
- }
- /**
- * Log instance data as a plain JS object
- * so that it is easier to inspect in console.
- * This method assumes console is available.
- *
- * @param {String} [path]
- */
- exports.$log = function (path) {
- var data = path
- ? Path.get(this._data, path)
- : this._data
- if (data) {
- data = JSON.parse(JSON.stringify(data))
- }
- console.log(data)
- }
- /***/ },
- /* 62 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var transition = __webpack_require__(30)
- /**
- * Convenience on-instance nextTick. The callback is
- * auto-bound to the instance, and this avoids component
- * modules having to rely on the global Vue.
- *
- * @param {Function} fn
- */
- exports.$nextTick = function (fn) {
- _.nextTick(fn, this)
- }
- /**
- * Append instance to target
- *
- * @param {Node} target
- * @param {Function} [cb]
- * @param {Boolean} [withTransition] - defaults to true
- */
- exports.$appendTo = function (target, cb, withTransition) {
- return insert(
- this, target, cb, withTransition,
- append, transition.append
- )
- }
- /**
- * Prepend instance to target
- *
- * @param {Node} target
- * @param {Function} [cb]
- * @param {Boolean} [withTransition] - defaults to true
- */
- exports.$prependTo = function (target, cb, withTransition) {
- target = query(target)
- if (target.hasChildNodes()) {
- this.$before(target.firstChild, cb, withTransition)
- } else {
- this.$appendTo(target, cb, withTransition)
- }
- return this
- }
- /**
- * Insert instance before target
- *
- * @param {Node} target
- * @param {Function} [cb]
- * @param {Boolean} [withTransition] - defaults to true
- */
- exports.$before = function (target, cb, withTransition) {
- return insert(
- this, target, cb, withTransition,
- before, transition.before
- )
- }
- /**
- * Insert instance after target
- *
- * @param {Node} target
- * @param {Function} [cb]
- * @param {Boolean} [withTransition] - defaults to true
- */
- exports.$after = function (target, cb, withTransition) {
- target = query(target)
- if (target.nextSibling) {
- this.$before(target.nextSibling, cb, withTransition)
- } else {
- this.$appendTo(target.parentNode, cb, withTransition)
- }
- return this
- }
- /**
- * Remove instance from DOM
- *
- * @param {Function} [cb]
- * @param {Boolean} [withTransition] - defaults to true
- */
- exports.$remove = function (cb, withTransition) {
- if (!this.$el.parentNode) {
- return cb && cb()
- }
- var inDoc = this._isAttached && _.inDoc(this.$el)
- // if we are not in document, no need to check
- // for transitions
- if (!inDoc) withTransition = false
- var op
- var self = this
- var realCb = function () {
- if (inDoc) self._callHook('detached')
- if (cb) cb()
- }
- if (
- this._isFragment &&
- !this._blockFragment.hasChildNodes()
- ) {
- op = withTransition === false
- ? append
- : transition.removeThenAppend
- blockOp(this, this._blockFragment, op, realCb)
- } else {
- op = withTransition === false
- ? remove
- : transition.remove
- op(this.$el, this, realCb)
- }
- return this
- }
- /**
- * Shared DOM insertion function.
- *
- * @param {Vue} vm
- * @param {Element} target
- * @param {Function} [cb]
- * @param {Boolean} [withTransition]
- * @param {Function} op1 - op for non-transition insert
- * @param {Function} op2 - op for transition insert
- * @return vm
- */
- function insert (vm, target, cb, withTransition, op1, op2) {
- target = query(target)
- var targetIsDetached = !_.inDoc(target)
- var op = withTransition === false || targetIsDetached
- ? op1
- : op2
- var shouldCallHook =
- !targetIsDetached &&
- !vm._isAttached &&
- !_.inDoc(vm.$el)
- if (vm._isFragment) {
- blockOp(vm, target, op, cb)
- } else {
- op(vm.$el, target, vm, cb)
- }
- if (shouldCallHook) {
- vm._callHook('attached')
- }
- return vm
- }
- /**
- * Execute a transition operation on a fragment instance,
- * iterating through all its block nodes.
- *
- * @param {Vue} vm
- * @param {Node} target
- * @param {Function} op
- * @param {Function} cb
- */
- function blockOp (vm, target, op, cb) {
- var current = vm._fragmentStart
- var end = vm._fragmentEnd
- var next
- while (next !== end) {
- next = current.nextSibling
- op(current, target, vm)
- current = next
- }
- op(end, target, vm, cb)
- }
- /**
- * Check for selectors
- *
- * @param {String|Element} el
- */
- function query (el) {
- return typeof el === 'string'
- ? document.querySelector(el)
- : el
- }
- /**
- * Append operation that takes a callback.
- *
- * @param {Node} el
- * @param {Node} target
- * @param {Vue} vm - unused
- * @param {Function} [cb]
- */
- function append (el, target, vm, cb) {
- target.appendChild(el)
- if (cb) cb()
- }
- /**
- * InsertBefore operation that takes a callback.
- *
- * @param {Node} el
- * @param {Node} target
- * @param {Vue} vm - unused
- * @param {Function} [cb]
- */
- function before (el, target, vm, cb) {
- _.before(el, target)
- if (cb) cb()
- }
- /**
- * Remove operation that takes a callback.
- *
- * @param {Node} el
- * @param {Vue} vm - unused
- * @param {Function} [cb]
- */
- function remove (el, vm, cb) {
- _.remove(el)
- if (cb) cb()
- }
- /***/ },
- /* 63 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- /**
- * Listen on the given `event` with `fn`.
- *
- * @param {String} event
- * @param {Function} fn
- */
- exports.$on = function (event, fn) {
- (this._events[event] || (this._events[event] = []))
- .push(fn)
- modifyListenerCount(this, event, 1)
- return this
- }
- /**
- * Adds an `event` listener that will be invoked a single
- * time then automatically removed.
- *
- * @param {String} event
- * @param {Function} fn
- */
- exports.$once = function (event, fn) {
- var self = this
- function on () {
- self.$off(event, on)
- fn.apply(this, arguments)
- }
- on.fn = fn
- this.$on(event, on)
- return this
- }
- /**
- * Remove the given callback for `event` or all
- * registered callbacks.
- *
- * @param {String} event
- * @param {Function} fn
- */
- exports.$off = function (event, fn) {
- var cbs
- // all
- if (!arguments.length) {
- if (this.$parent) {
- for (event in this._events) {
- cbs = this._events[event]
- if (cbs) {
- modifyListenerCount(this, event, -cbs.length)
- }
- }
- }
- this._events = {}
- return this
- }
- // specific event
- cbs = this._events[event]
- if (!cbs) {
- return this
- }
- if (arguments.length === 1) {
- modifyListenerCount(this, event, -cbs.length)
- this._events[event] = null
- return this
- }
- // specific handler
- var cb
- var i = cbs.length
- while (i--) {
- cb = cbs[i]
- if (cb === fn || cb.fn === fn) {
- modifyListenerCount(this, event, -1)
- cbs.splice(i, 1)
- break
- }
- }
- return this
- }
- /**
- * Trigger an event on self.
- *
- * @param {String} event
- */
- exports.$emit = function (event) {
- this._eventCancelled = false
- var cbs = this._events[event]
- if (cbs) {
- // avoid leaking arguments:
- // http://jsperf.com/closure-with-arguments
- var i = arguments.length - 1
- var args = new Array(i)
- while (i--) {
- args[i] = arguments[i + 1]
- }
- i = 0
- cbs = cbs.length > 1
- ? _.toArray(cbs)
- : cbs
- for (var l = cbs.length; i < l; i++) {
- if (cbs[i].apply(this, args) === false) {
- this._eventCancelled = true
- }
- }
- }
- return this
- }
- /**
- * Recursively broadcast an event to all children instances.
- *
- * @param {String} event
- * @param {...*} additional arguments
- */
- exports.$broadcast = function (event) {
- // if no child has registered for this event,
- // then there's no need to broadcast.
- if (!this._eventsCount[event]) return
- var children = this.$children
- for (var i = 0, l = children.length; i < l; i++) {
- var child = children[i]
- child.$emit.apply(child, arguments)
- if (!child._eventCancelled) {
- child.$broadcast.apply(child, arguments)
- }
- }
- return this
- }
- /**
- * Recursively propagate an event up the parent chain.
- *
- * @param {String} event
- * @param {...*} additional arguments
- */
- exports.$dispatch = function () {
- var parent = this.$parent
- while (parent) {
- parent.$emit.apply(parent, arguments)
- parent = parent._eventCancelled
- ? null
- : parent.$parent
- }
- return this
- }
- /**
- * Modify the listener counts on all parents.
- * This bookkeeping allows $broadcast to return early when
- * no child has listened to a certain event.
- *
- * @param {Vue} vm
- * @param {String} event
- * @param {Number} count
- */
- var hookRE = /^hook:/
- function modifyListenerCount (vm, event, count) {
- var parent = vm.$parent
- // hooks do not get broadcasted so no need
- // to do bookkeeping for them
- if (!parent || !count || hookRE.test(event)) return
- while (parent) {
- parent._eventsCount[event] =
- (parent._eventsCount[event] || 0) + count
- parent = parent.$parent
- }
- }
- /***/ },
- /* 64 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- /**
- * Create a child instance that prototypally inherits
- * data on parent. To achieve that we create an intermediate
- * constructor with its prototype pointing to parent.
- *
- * @param {Object} opts
- * @param {Function} [BaseCtor]
- * @return {Vue}
- * @public
- */
- exports.$addChild = function (opts, BaseCtor) {
- BaseCtor = BaseCtor || _.Vue
- opts = opts || {}
- var parent = this
- var ChildVue
- var inherit = opts.inherit !== undefined
- ? opts.inherit
- : BaseCtor.options.inherit
- if (inherit) {
- var ctors = parent._childCtors
- ChildVue = ctors[BaseCtor.cid]
- if (!ChildVue) {
- var optionName = BaseCtor.options.name
- var className = optionName
- ? _.classify(optionName)
- : 'VueComponent'
- ChildVue = new Function(
- 'return function ' + className + ' (options) {' +
- 'this.constructor = ' + className + ';' +
- 'this._init(options) }'
- )()
- ChildVue.options = BaseCtor.options
- ChildVue.linker = BaseCtor.linker
- // important: transcluded inline repeaters should
- // inherit from outer scope rather than host
- ChildVue.prototype = opts._context || this
- ctors[BaseCtor.cid] = ChildVue
- }
- } else {
- ChildVue = BaseCtor
- }
- opts._parent = parent
- opts._root = parent.$root
- var child = new ChildVue(opts)
- return child
- }
- /***/ },
- /* 65 */
- /***/ function(module, exports, __webpack_require__) {
- var _ = __webpack_require__(1)
- var compiler = __webpack_require__(10)
- /**
- * Set instance target element and kick off the compilation
- * process. The passed in `el` can be a selector string, an
- * existing Element, or a DocumentFragment (for block
- * instances).
- *
- * @param {Element|DocumentFragment|string} el
- * @public
- */
- exports.$mount = function (el) {
- if (this._isCompiled) {
- ("development") !== 'production' && _.warn(
- '$mount() should be called only once.'
- )
- return
- }
- el = _.query(el)
- if (!el) {
- el = document.createElement('div')
- }
- this._compile(el)
- this._isCompiled = true
- this._callHook('compiled')
- this._initDOMHooks()
- if (_.inDoc(this.$el)) {
- this._callHook('attached')
- ready.call(this)
- } else {
- this.$once('hook:attached', ready)
- }
- return this
- }
- /**
- * Mark an instance as ready.
- */
- function ready () {
- this._isAttached = true
- this._isReady = true
- this._callHook('ready')
- }
- /**
- * Teardown the instance, simply delegate to the internal
- * _destroy.
- */
- exports.$destroy = function (remove, deferCleanup) {
- this._destroy(remove, deferCleanup)
- }
- /**
- * Partially compile a piece of DOM and return a
- * decompile function.
- *
- * @param {Element|DocumentFragment} el
- * @param {Vue} [host]
- * @return {Function}
- */
- exports.$compile = function (el, host) {
- return compiler.compile(el, this.$options, true, host)(this, el)
- }
- /***/ }
- /******/ ])
- });
- ;
|