bundle.js 1.1 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715
  1. /******/ (function(modules) { // webpackBootstrap
  2. /******/ // The module cache
  3. /******/ var installedModules = {};
  4. /******/ // The require function
  5. /******/ function __webpack_require__(moduleId) {
  6. /******/ // Check if module is in cache
  7. /******/ if(installedModules[moduleId])
  8. /******/ return installedModules[moduleId].exports;
  9. /******/ // Create a new module (and put it into the cache)
  10. /******/ var module = installedModules[moduleId] = {
  11. /******/ exports: {},
  12. /******/ id: moduleId,
  13. /******/ loaded: false
  14. /******/ };
  15. /******/ // Execute the module function
  16. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  17. /******/ // Flag the module as loaded
  18. /******/ module.loaded = true;
  19. /******/ // Return the exports of the module
  20. /******/ return module.exports;
  21. /******/ }
  22. /******/ // expose the modules object (__webpack_modules__)
  23. /******/ __webpack_require__.m = modules;
  24. /******/ // expose the module cache
  25. /******/ __webpack_require__.c = installedModules;
  26. /******/ // __webpack_public_path__
  27. /******/ __webpack_require__.p = "";
  28. /******/ // Load entry module and return exports
  29. /******/ return __webpack_require__(0);
  30. /******/ })
  31. /************************************************************************/
  32. /******/ ([
  33. /* 0 */
  34. /***/ function(module, exports, __webpack_require__) {
  35. var React = __webpack_require__(1);
  36. var ReactDOM = __webpack_require__(158);
  37. var Demo = __webpack_require__(159);
  38. ReactDOM.render(React.createElement(Demo, null), document.getElementById('demo'));
  39. /***/ },
  40. /* 1 */
  41. /***/ function(module, exports, __webpack_require__) {
  42. 'use strict';
  43. module.exports = __webpack_require__(2);
  44. /***/ },
  45. /* 2 */
  46. /***/ function(module, exports, __webpack_require__) {
  47. /**
  48. * Copyright 2013-2015, Facebook, Inc.
  49. * All rights reserved.
  50. *
  51. * This source code is licensed under the BSD-style license found in the
  52. * LICENSE file in the root directory of this source tree. An additional grant
  53. * of patent rights can be found in the PATENTS file in the same directory.
  54. *
  55. * @providesModule React
  56. */
  57. 'use strict';
  58. var ReactDOM = __webpack_require__(3);
  59. var ReactDOMServer = __webpack_require__(148);
  60. var ReactIsomorphic = __webpack_require__(152);
  61. var assign = __webpack_require__(39);
  62. var deprecated = __webpack_require__(157);
  63. // `version` will be added here by ReactIsomorphic.
  64. var React = {};
  65. assign(React, ReactIsomorphic);
  66. assign(React, {
  67. // ReactDOM
  68. findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),
  69. render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),
  70. unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),
  71. // ReactDOMServer
  72. renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),
  73. renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)
  74. });
  75. React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;
  76. React.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer;
  77. module.exports = React;
  78. /***/ },
  79. /* 3 */
  80. /***/ function(module, exports, __webpack_require__) {
  81. /* WEBPACK VAR INJECTION */(function(process) {/**
  82. * Copyright 2013-2015, Facebook, Inc.
  83. * All rights reserved.
  84. *
  85. * This source code is licensed under the BSD-style license found in the
  86. * LICENSE file in the root directory of this source tree. An additional grant
  87. * of patent rights can be found in the PATENTS file in the same directory.
  88. *
  89. * @providesModule ReactDOM
  90. */
  91. /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/
  92. 'use strict';
  93. var ReactCurrentOwner = __webpack_require__(5);
  94. var ReactDOMTextComponent = __webpack_require__(6);
  95. var ReactDefaultInjection = __webpack_require__(71);
  96. var ReactInstanceHandles = __webpack_require__(45);
  97. var ReactMount = __webpack_require__(28);
  98. var ReactPerf = __webpack_require__(18);
  99. var ReactReconciler = __webpack_require__(50);
  100. var ReactUpdates = __webpack_require__(54);
  101. var ReactVersion = __webpack_require__(146);
  102. var findDOMNode = __webpack_require__(91);
  103. var renderSubtreeIntoContainer = __webpack_require__(147);
  104. var warning = __webpack_require__(25);
  105. ReactDefaultInjection.inject();
  106. var render = ReactPerf.measure('React', 'render', ReactMount.render);
  107. var React = {
  108. findDOMNode: findDOMNode,
  109. render: render,
  110. unmountComponentAtNode: ReactMount.unmountComponentAtNode,
  111. version: ReactVersion,
  112. /* eslint-disable camelcase */
  113. unstable_batchedUpdates: ReactUpdates.batchedUpdates,
  114. unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer
  115. };
  116. // Inject the runtime into a devtools global hook regardless of browser.
  117. // Allows for debugging when the hook is injected on the page.
  118. /* eslint-enable camelcase */
  119. if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
  120. __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
  121. CurrentOwner: ReactCurrentOwner,
  122. InstanceHandles: ReactInstanceHandles,
  123. Mount: ReactMount,
  124. Reconciler: ReactReconciler,
  125. TextComponent: ReactDOMTextComponent
  126. });
  127. }
  128. if (process.env.NODE_ENV !== 'production') {
  129. var ExecutionEnvironment = __webpack_require__(9);
  130. if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
  131. // First check if devtools is not installed
  132. if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
  133. // If we're in Chrome or Firefox, provide a download link if not installed.
  134. if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
  135. console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');
  136. }
  137. }
  138. // If we're in IE8, check to see if we are in compatibility mode and provide
  139. // information on preventing compatibility mode
  140. var ieCompatibilityMode = document.documentMode && document.documentMode < 8;
  141. process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv="X-UA-Compatible" content="IE=edge" />') : undefined;
  142. var expectedFeatures = [
  143. // shims
  144. Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,
  145. // shams
  146. Object.create, Object.freeze];
  147. for (var i = 0; i < expectedFeatures.length; i++) {
  148. if (!expectedFeatures[i]) {
  149. console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');
  150. break;
  151. }
  152. }
  153. }
  154. }
  155. module.exports = React;
  156. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  157. /***/ },
  158. /* 4 */
  159. /***/ function(module, exports) {
  160. // shim for using process in browser
  161. var process = module.exports = {};
  162. var queue = [];
  163. var draining = false;
  164. var currentQueue;
  165. var queueIndex = -1;
  166. function cleanUpNextTick() {
  167. draining = false;
  168. if (currentQueue.length) {
  169. queue = currentQueue.concat(queue);
  170. } else {
  171. queueIndex = -1;
  172. }
  173. if (queue.length) {
  174. drainQueue();
  175. }
  176. }
  177. function drainQueue() {
  178. if (draining) {
  179. return;
  180. }
  181. var timeout = setTimeout(cleanUpNextTick);
  182. draining = true;
  183. var len = queue.length;
  184. while(len) {
  185. currentQueue = queue;
  186. queue = [];
  187. while (++queueIndex < len) {
  188. if (currentQueue) {
  189. currentQueue[queueIndex].run();
  190. }
  191. }
  192. queueIndex = -1;
  193. len = queue.length;
  194. }
  195. currentQueue = null;
  196. draining = false;
  197. clearTimeout(timeout);
  198. }
  199. process.nextTick = function (fun) {
  200. var args = new Array(arguments.length - 1);
  201. if (arguments.length > 1) {
  202. for (var i = 1; i < arguments.length; i++) {
  203. args[i - 1] = arguments[i];
  204. }
  205. }
  206. queue.push(new Item(fun, args));
  207. if (queue.length === 1 && !draining) {
  208. setTimeout(drainQueue, 0);
  209. }
  210. };
  211. // v8 likes predictible objects
  212. function Item(fun, array) {
  213. this.fun = fun;
  214. this.array = array;
  215. }
  216. Item.prototype.run = function () {
  217. this.fun.apply(null, this.array);
  218. };
  219. process.title = 'browser';
  220. process.browser = true;
  221. process.env = {};
  222. process.argv = [];
  223. process.version = ''; // empty string to avoid regexp issues
  224. process.versions = {};
  225. function noop() {}
  226. process.on = noop;
  227. process.addListener = noop;
  228. process.once = noop;
  229. process.off = noop;
  230. process.removeListener = noop;
  231. process.removeAllListeners = noop;
  232. process.emit = noop;
  233. process.binding = function (name) {
  234. throw new Error('process.binding is not supported');
  235. };
  236. process.cwd = function () { return '/' };
  237. process.chdir = function (dir) {
  238. throw new Error('process.chdir is not supported');
  239. };
  240. process.umask = function() { return 0; };
  241. /***/ },
  242. /* 5 */
  243. /***/ function(module, exports) {
  244. /**
  245. * Copyright 2013-2015, Facebook, Inc.
  246. * All rights reserved.
  247. *
  248. * This source code is licensed under the BSD-style license found in the
  249. * LICENSE file in the root directory of this source tree. An additional grant
  250. * of patent rights can be found in the PATENTS file in the same directory.
  251. *
  252. * @providesModule ReactCurrentOwner
  253. */
  254. 'use strict';
  255. /**
  256. * Keeps track of the current owner.
  257. *
  258. * The current owner is the component who should own any components that are
  259. * currently being constructed.
  260. */
  261. var ReactCurrentOwner = {
  262. /**
  263. * @internal
  264. * @type {ReactComponent}
  265. */
  266. current: null
  267. };
  268. module.exports = ReactCurrentOwner;
  269. /***/ },
  270. /* 6 */
  271. /***/ function(module, exports, __webpack_require__) {
  272. /* WEBPACK VAR INJECTION */(function(process) {/**
  273. * Copyright 2013-2015, Facebook, Inc.
  274. * All rights reserved.
  275. *
  276. * This source code is licensed under the BSD-style license found in the
  277. * LICENSE file in the root directory of this source tree. An additional grant
  278. * of patent rights can be found in the PATENTS file in the same directory.
  279. *
  280. * @providesModule ReactDOMTextComponent
  281. * @typechecks static-only
  282. */
  283. 'use strict';
  284. var DOMChildrenOperations = __webpack_require__(7);
  285. var DOMPropertyOperations = __webpack_require__(22);
  286. var ReactComponentBrowserEnvironment = __webpack_require__(26);
  287. var ReactMount = __webpack_require__(28);
  288. var assign = __webpack_require__(39);
  289. var escapeTextContentForBrowser = __webpack_require__(21);
  290. var setTextContent = __webpack_require__(20);
  291. var validateDOMNesting = __webpack_require__(70);
  292. /**
  293. * Text nodes violate a couple assumptions that React makes about components:
  294. *
  295. * - When mounting text into the DOM, adjacent text nodes are merged.
  296. * - Text nodes cannot be assigned a React root ID.
  297. *
  298. * This component is used to wrap strings in elements so that they can undergo
  299. * the same reconciliation that is applied to elements.
  300. *
  301. * TODO: Investigate representing React components in the DOM with text nodes.
  302. *
  303. * @class ReactDOMTextComponent
  304. * @extends ReactComponent
  305. * @internal
  306. */
  307. var ReactDOMTextComponent = function (props) {
  308. // This constructor and its argument is currently used by mocks.
  309. };
  310. assign(ReactDOMTextComponent.prototype, {
  311. /**
  312. * @param {ReactText} text
  313. * @internal
  314. */
  315. construct: function (text) {
  316. // TODO: This is really a ReactText (ReactNode), not a ReactElement
  317. this._currentElement = text;
  318. this._stringText = '' + text;
  319. // Properties
  320. this._rootNodeID = null;
  321. this._mountIndex = 0;
  322. },
  323. /**
  324. * Creates the markup for this text node. This node is not intended to have
  325. * any features besides containing text content.
  326. *
  327. * @param {string} rootID DOM ID of the root node.
  328. * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
  329. * @return {string} Markup for this text node.
  330. * @internal
  331. */
  332. mountComponent: function (rootID, transaction, context) {
  333. if (process.env.NODE_ENV !== 'production') {
  334. if (context[validateDOMNesting.ancestorInfoContextKey]) {
  335. validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]);
  336. }
  337. }
  338. this._rootNodeID = rootID;
  339. if (transaction.useCreateElement) {
  340. var ownerDocument = context[ReactMount.ownerDocumentContextKey];
  341. var el = ownerDocument.createElement('span');
  342. DOMPropertyOperations.setAttributeForID(el, rootID);
  343. // Populate node cache
  344. ReactMount.getID(el);
  345. setTextContent(el, this._stringText);
  346. return el;
  347. } else {
  348. var escapedText = escapeTextContentForBrowser(this._stringText);
  349. if (transaction.renderToStaticMarkup) {
  350. // Normally we'd wrap this in a `span` for the reasons stated above, but
  351. // since this is a situation where React won't take over (static pages),
  352. // we can simply return the text as it is.
  353. return escapedText;
  354. }
  355. return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';
  356. }
  357. },
  358. /**
  359. * Updates this component by updating the text content.
  360. *
  361. * @param {ReactText} nextText The next text content
  362. * @param {ReactReconcileTransaction} transaction
  363. * @internal
  364. */
  365. receiveComponent: function (nextText, transaction) {
  366. if (nextText !== this._currentElement) {
  367. this._currentElement = nextText;
  368. var nextStringText = '' + nextText;
  369. if (nextStringText !== this._stringText) {
  370. // TODO: Save this as pending props and use performUpdateIfNecessary
  371. // and/or updateComponent to do the actual update for consistency with
  372. // other component types?
  373. this._stringText = nextStringText;
  374. var node = ReactMount.getNode(this._rootNodeID);
  375. DOMChildrenOperations.updateTextContent(node, nextStringText);
  376. }
  377. }
  378. },
  379. unmountComponent: function () {
  380. ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
  381. }
  382. });
  383. module.exports = ReactDOMTextComponent;
  384. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  385. /***/ },
  386. /* 7 */
  387. /***/ function(module, exports, __webpack_require__) {
  388. /* WEBPACK VAR INJECTION */(function(process) {/**
  389. * Copyright 2013-2015, Facebook, Inc.
  390. * All rights reserved.
  391. *
  392. * This source code is licensed under the BSD-style license found in the
  393. * LICENSE file in the root directory of this source tree. An additional grant
  394. * of patent rights can be found in the PATENTS file in the same directory.
  395. *
  396. * @providesModule DOMChildrenOperations
  397. * @typechecks static-only
  398. */
  399. 'use strict';
  400. var Danger = __webpack_require__(8);
  401. var ReactMultiChildUpdateTypes = __webpack_require__(16);
  402. var ReactPerf = __webpack_require__(18);
  403. var setInnerHTML = __webpack_require__(19);
  404. var setTextContent = __webpack_require__(20);
  405. var invariant = __webpack_require__(13);
  406. /**
  407. * Inserts `childNode` as a child of `parentNode` at the `index`.
  408. *
  409. * @param {DOMElement} parentNode Parent node in which to insert.
  410. * @param {DOMElement} childNode Child node to insert.
  411. * @param {number} index Index at which to insert the child.
  412. * @internal
  413. */
  414. function insertChildAt(parentNode, childNode, index) {
  415. // By exploiting arrays returning `undefined` for an undefined index, we can
  416. // rely exclusively on `insertBefore(node, null)` instead of also using
  417. // `appendChild(node)`. However, using `undefined` is not allowed by all
  418. // browsers so we must replace it with `null`.
  419. // fix render order error in safari
  420. // IE8 will throw error when index out of list size.
  421. var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index);
  422. parentNode.insertBefore(childNode, beforeChild);
  423. }
  424. /**
  425. * Operations for updating with DOM children.
  426. */
  427. var DOMChildrenOperations = {
  428. dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,
  429. updateTextContent: setTextContent,
  430. /**
  431. * Updates a component's children by processing a series of updates. The
  432. * update configurations are each expected to have a `parentNode` property.
  433. *
  434. * @param {array<object>} updates List of update configurations.
  435. * @param {array<string>} markupList List of markup strings.
  436. * @internal
  437. */
  438. processUpdates: function (updates, markupList) {
  439. var update;
  440. // Mapping from parent IDs to initial child orderings.
  441. var initialChildren = null;
  442. // List of children that will be moved or removed.
  443. var updatedChildren = null;
  444. for (var i = 0; i < updates.length; i++) {
  445. update = updates[i];
  446. if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {
  447. var updatedIndex = update.fromIndex;
  448. var updatedChild = update.parentNode.childNodes[updatedIndex];
  449. var parentID = update.parentID;
  450. !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined;
  451. initialChildren = initialChildren || {};
  452. initialChildren[parentID] = initialChildren[parentID] || [];
  453. initialChildren[parentID][updatedIndex] = updatedChild;
  454. updatedChildren = updatedChildren || [];
  455. updatedChildren.push(updatedChild);
  456. }
  457. }
  458. var renderedMarkup;
  459. // markupList is either a list of markup or just a list of elements
  460. if (markupList.length && typeof markupList[0] === 'string') {
  461. renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);
  462. } else {
  463. renderedMarkup = markupList;
  464. }
  465. // Remove updated children first so that `toIndex` is consistent.
  466. if (updatedChildren) {
  467. for (var j = 0; j < updatedChildren.length; j++) {
  468. updatedChildren[j].parentNode.removeChild(updatedChildren[j]);
  469. }
  470. }
  471. for (var k = 0; k < updates.length; k++) {
  472. update = updates[k];
  473. switch (update.type) {
  474. case ReactMultiChildUpdateTypes.INSERT_MARKUP:
  475. insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);
  476. break;
  477. case ReactMultiChildUpdateTypes.MOVE_EXISTING:
  478. insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);
  479. break;
  480. case ReactMultiChildUpdateTypes.SET_MARKUP:
  481. setInnerHTML(update.parentNode, update.content);
  482. break;
  483. case ReactMultiChildUpdateTypes.TEXT_CONTENT:
  484. setTextContent(update.parentNode, update.content);
  485. break;
  486. case ReactMultiChildUpdateTypes.REMOVE_NODE:
  487. // Already removed by the for-loop above.
  488. break;
  489. }
  490. }
  491. }
  492. };
  493. ReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {
  494. updateTextContent: 'updateTextContent'
  495. });
  496. module.exports = DOMChildrenOperations;
  497. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  498. /***/ },
  499. /* 8 */
  500. /***/ function(module, exports, __webpack_require__) {
  501. /* WEBPACK VAR INJECTION */(function(process) {/**
  502. * Copyright 2013-2015, Facebook, Inc.
  503. * All rights reserved.
  504. *
  505. * This source code is licensed under the BSD-style license found in the
  506. * LICENSE file in the root directory of this source tree. An additional grant
  507. * of patent rights can be found in the PATENTS file in the same directory.
  508. *
  509. * @providesModule Danger
  510. * @typechecks static-only
  511. */
  512. 'use strict';
  513. var ExecutionEnvironment = __webpack_require__(9);
  514. var createNodesFromMarkup = __webpack_require__(10);
  515. var emptyFunction = __webpack_require__(15);
  516. var getMarkupWrap = __webpack_require__(14);
  517. var invariant = __webpack_require__(13);
  518. var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/;
  519. var RESULT_INDEX_ATTR = 'data-danger-index';
  520. /**
  521. * Extracts the `nodeName` from a string of markup.
  522. *
  523. * NOTE: Extracting the `nodeName` does not require a regular expression match
  524. * because we make assumptions about React-generated markup (i.e. there are no
  525. * spaces surrounding the opening tag and there is at least one attribute).
  526. *
  527. * @param {string} markup String of markup.
  528. * @return {string} Node name of the supplied markup.
  529. * @see http://jsperf.com/extract-nodename
  530. */
  531. function getNodeName(markup) {
  532. return markup.substring(1, markup.indexOf(' '));
  533. }
  534. var Danger = {
  535. /**
  536. * Renders markup into an array of nodes. The markup is expected to render
  537. * into a list of root nodes. Also, the length of `resultList` and
  538. * `markupList` should be the same.
  539. *
  540. * @param {array<string>} markupList List of markup strings to render.
  541. * @return {array<DOMElement>} List of rendered nodes.
  542. * @internal
  543. */
  544. dangerouslyRenderMarkup: function (markupList) {
  545. !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined;
  546. var nodeName;
  547. var markupByNodeName = {};
  548. // Group markup by `nodeName` if a wrap is necessary, else by '*'.
  549. for (var i = 0; i < markupList.length; i++) {
  550. !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined;
  551. nodeName = getNodeName(markupList[i]);
  552. nodeName = getMarkupWrap(nodeName) ? nodeName : '*';
  553. markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];
  554. markupByNodeName[nodeName][i] = markupList[i];
  555. }
  556. var resultList = [];
  557. var resultListAssignmentCount = 0;
  558. for (nodeName in markupByNodeName) {
  559. if (!markupByNodeName.hasOwnProperty(nodeName)) {
  560. continue;
  561. }
  562. var markupListByNodeName = markupByNodeName[nodeName];
  563. // This for-in loop skips the holes of the sparse array. The order of
  564. // iteration should follow the order of assignment, which happens to match
  565. // numerical index order, but we don't rely on that.
  566. var resultIndex;
  567. for (resultIndex in markupListByNodeName) {
  568. if (markupListByNodeName.hasOwnProperty(resultIndex)) {
  569. var markup = markupListByNodeName[resultIndex];
  570. // Push the requested markup with an additional RESULT_INDEX_ATTR
  571. // attribute. If the markup does not start with a < character, it
  572. // will be discarded below (with an appropriate console.error).
  573. markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,
  574. // This index will be parsed back out below.
  575. '$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" ');
  576. }
  577. }
  578. // Render each group of markup with similar wrapping `nodeName`.
  579. var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.
  580. );
  581. for (var j = 0; j < renderNodes.length; ++j) {
  582. var renderNode = renderNodes[j];
  583. if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {
  584. resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);
  585. renderNode.removeAttribute(RESULT_INDEX_ATTR);
  586. !!resultList.hasOwnProperty(resultIndex) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined;
  587. resultList[resultIndex] = renderNode;
  588. // This should match resultList.length and markupList.length when
  589. // we're done.
  590. resultListAssignmentCount += 1;
  591. } else if (process.env.NODE_ENV !== 'production') {
  592. console.error('Danger: Discarding unexpected node:', renderNode);
  593. }
  594. }
  595. }
  596. // Although resultList was populated out of order, it should now be a dense
  597. // array.
  598. !(resultListAssignmentCount === resultList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined;
  599. !(resultList.length === markupList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined;
  600. return resultList;
  601. },
  602. /**
  603. * Replaces a node with a string of markup at its current position within its
  604. * parent. The markup must render into a single root node.
  605. *
  606. * @param {DOMElement} oldChild Child node to replace.
  607. * @param {string} markup Markup to render in place of the child node.
  608. * @internal
  609. */
  610. dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {
  611. !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;
  612. !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined;
  613. !(oldChild.tagName.toLowerCase() !== 'html') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined;
  614. var newChild;
  615. if (typeof markup === 'string') {
  616. newChild = createNodesFromMarkup(markup, emptyFunction)[0];
  617. } else {
  618. newChild = markup;
  619. }
  620. oldChild.parentNode.replaceChild(newChild, oldChild);
  621. }
  622. };
  623. module.exports = Danger;
  624. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  625. /***/ },
  626. /* 9 */
  627. /***/ function(module, exports) {
  628. /**
  629. * Copyright 2013-2015, Facebook, Inc.
  630. * All rights reserved.
  631. *
  632. * This source code is licensed under the BSD-style license found in the
  633. * LICENSE file in the root directory of this source tree. An additional grant
  634. * of patent rights can be found in the PATENTS file in the same directory.
  635. *
  636. * @providesModule ExecutionEnvironment
  637. */
  638. 'use strict';
  639. var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
  640. /**
  641. * Simple, lightweight module assisting with the detection and context of
  642. * Worker. Helps avoid circular dependencies and allows code to reason about
  643. * whether or not they are in a Worker, even if they never include the main
  644. * `ReactWorker` dependency.
  645. */
  646. var ExecutionEnvironment = {
  647. canUseDOM: canUseDOM,
  648. canUseWorkers: typeof Worker !== 'undefined',
  649. canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),
  650. canUseViewport: canUseDOM && !!window.screen,
  651. isInWorker: !canUseDOM // For now, this is true - might change in the future.
  652. };
  653. module.exports = ExecutionEnvironment;
  654. /***/ },
  655. /* 10 */
  656. /***/ function(module, exports, __webpack_require__) {
  657. /* WEBPACK VAR INJECTION */(function(process) {/**
  658. * Copyright 2013-2015, Facebook, Inc.
  659. * All rights reserved.
  660. *
  661. * This source code is licensed under the BSD-style license found in the
  662. * LICENSE file in the root directory of this source tree. An additional grant
  663. * of patent rights can be found in the PATENTS file in the same directory.
  664. *
  665. * @providesModule createNodesFromMarkup
  666. * @typechecks
  667. */
  668. /*eslint-disable fb-www/unsafe-html*/
  669. 'use strict';
  670. var ExecutionEnvironment = __webpack_require__(9);
  671. var createArrayFromMixed = __webpack_require__(11);
  672. var getMarkupWrap = __webpack_require__(14);
  673. var invariant = __webpack_require__(13);
  674. /**
  675. * Dummy container used to render all markup.
  676. */
  677. var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
  678. /**
  679. * Pattern used by `getNodeName`.
  680. */
  681. var nodeNamePattern = /^\s*<(\w+)/;
  682. /**
  683. * Extracts the `nodeName` of the first element in a string of markup.
  684. *
  685. * @param {string} markup String of markup.
  686. * @return {?string} Node name of the supplied markup.
  687. */
  688. function getNodeName(markup) {
  689. var nodeNameMatch = markup.match(nodeNamePattern);
  690. return nodeNameMatch && nodeNameMatch[1].toLowerCase();
  691. }
  692. /**
  693. * Creates an array containing the nodes rendered from the supplied markup. The
  694. * optionally supplied `handleScript` function will be invoked once for each
  695. * <script> element that is rendered. If no `handleScript` function is supplied,
  696. * an exception is thrown if any <script> elements are rendered.
  697. *
  698. * @param {string} markup A string of valid HTML markup.
  699. * @param {?function} handleScript Invoked once for each rendered <script>.
  700. * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
  701. */
  702. function createNodesFromMarkup(markup, handleScript) {
  703. var node = dummyNode;
  704. !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined;
  705. var nodeName = getNodeName(markup);
  706. var wrap = nodeName && getMarkupWrap(nodeName);
  707. if (wrap) {
  708. node.innerHTML = wrap[1] + markup + wrap[2];
  709. var wrapDepth = wrap[0];
  710. while (wrapDepth--) {
  711. node = node.lastChild;
  712. }
  713. } else {
  714. node.innerHTML = markup;
  715. }
  716. var scripts = node.getElementsByTagName('script');
  717. if (scripts.length) {
  718. !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined;
  719. createArrayFromMixed(scripts).forEach(handleScript);
  720. }
  721. var nodes = createArrayFromMixed(node.childNodes);
  722. while (node.lastChild) {
  723. node.removeChild(node.lastChild);
  724. }
  725. return nodes;
  726. }
  727. module.exports = createNodesFromMarkup;
  728. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  729. /***/ },
  730. /* 11 */
  731. /***/ function(module, exports, __webpack_require__) {
  732. /**
  733. * Copyright 2013-2015, Facebook, Inc.
  734. * All rights reserved.
  735. *
  736. * This source code is licensed under the BSD-style license found in the
  737. * LICENSE file in the root directory of this source tree. An additional grant
  738. * of patent rights can be found in the PATENTS file in the same directory.
  739. *
  740. * @providesModule createArrayFromMixed
  741. * @typechecks
  742. */
  743. 'use strict';
  744. var toArray = __webpack_require__(12);
  745. /**
  746. * Perform a heuristic test to determine if an object is "array-like".
  747. *
  748. * A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
  749. * Joshu replied: "Mu."
  750. *
  751. * This function determines if its argument has "array nature": it returns
  752. * true if the argument is an actual array, an `arguments' object, or an
  753. * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
  754. *
  755. * It will return false for other array-like objects like Filelist.
  756. *
  757. * @param {*} obj
  758. * @return {boolean}
  759. */
  760. function hasArrayNature(obj) {
  761. return(
  762. // not null/false
  763. !!obj && (
  764. // arrays are objects, NodeLists are functions in Safari
  765. typeof obj == 'object' || typeof obj == 'function') &&
  766. // quacks like an array
  767. 'length' in obj &&
  768. // not window
  769. !('setInterval' in obj) &&
  770. // no DOM node should be considered an array-like
  771. // a 'select' element has 'length' and 'item' properties on IE8
  772. typeof obj.nodeType != 'number' && (
  773. // a real array
  774. Array.isArray(obj) ||
  775. // arguments
  776. 'callee' in obj ||
  777. // HTMLCollection/NodeList
  778. 'item' in obj)
  779. );
  780. }
  781. /**
  782. * Ensure that the argument is an array by wrapping it in an array if it is not.
  783. * Creates a copy of the argument if it is already an array.
  784. *
  785. * This is mostly useful idiomatically:
  786. *
  787. * var createArrayFromMixed = require('createArrayFromMixed');
  788. *
  789. * function takesOneOrMoreThings(things) {
  790. * things = createArrayFromMixed(things);
  791. * ...
  792. * }
  793. *
  794. * This allows you to treat `things' as an array, but accept scalars in the API.
  795. *
  796. * If you need to convert an array-like object, like `arguments`, into an array
  797. * use toArray instead.
  798. *
  799. * @param {*} obj
  800. * @return {array}
  801. */
  802. function createArrayFromMixed(obj) {
  803. if (!hasArrayNature(obj)) {
  804. return [obj];
  805. } else if (Array.isArray(obj)) {
  806. return obj.slice();
  807. } else {
  808. return toArray(obj);
  809. }
  810. }
  811. module.exports = createArrayFromMixed;
  812. /***/ },
  813. /* 12 */
  814. /***/ function(module, exports, __webpack_require__) {
  815. /* WEBPACK VAR INJECTION */(function(process) {/**
  816. * Copyright 2013-2015, Facebook, Inc.
  817. * All rights reserved.
  818. *
  819. * This source code is licensed under the BSD-style license found in the
  820. * LICENSE file in the root directory of this source tree. An additional grant
  821. * of patent rights can be found in the PATENTS file in the same directory.
  822. *
  823. * @providesModule toArray
  824. * @typechecks
  825. */
  826. 'use strict';
  827. var invariant = __webpack_require__(13);
  828. /**
  829. * Convert array-like objects to arrays.
  830. *
  831. * This API assumes the caller knows the contents of the data type. For less
  832. * well defined inputs use createArrayFromMixed.
  833. *
  834. * @param {object|function|filelist} obj
  835. * @return {array}
  836. */
  837. function toArray(obj) {
  838. var length = obj.length;
  839. // Some browse builtin objects can report typeof 'function' (e.g. NodeList in
  840. // old versions of Safari).
  841. !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined;
  842. !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined;
  843. !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined;
  844. // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
  845. // without method will throw during the slice call and skip straight to the
  846. // fallback.
  847. if (obj.hasOwnProperty) {
  848. try {
  849. return Array.prototype.slice.call(obj);
  850. } catch (e) {
  851. // IE < 9 does not support Array#slice on collections objects
  852. }
  853. }
  854. // Fall back to copying key by key. This assumes all keys have a value,
  855. // so will not preserve sparsely populated inputs.
  856. var ret = Array(length);
  857. for (var ii = 0; ii < length; ii++) {
  858. ret[ii] = obj[ii];
  859. }
  860. return ret;
  861. }
  862. module.exports = toArray;
  863. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  864. /***/ },
  865. /* 13 */
  866. /***/ function(module, exports, __webpack_require__) {
  867. /* WEBPACK VAR INJECTION */(function(process) {/**
  868. * Copyright 2013-2015, Facebook, Inc.
  869. * All rights reserved.
  870. *
  871. * This source code is licensed under the BSD-style license found in the
  872. * LICENSE file in the root directory of this source tree. An additional grant
  873. * of patent rights can be found in the PATENTS file in the same directory.
  874. *
  875. * @providesModule invariant
  876. */
  877. 'use strict';
  878. /**
  879. * Use invariant() to assert state which your program assumes to be true.
  880. *
  881. * Provide sprintf-style format (only %s is supported) and arguments
  882. * to provide information about what broke and what you were
  883. * expecting.
  884. *
  885. * The invariant message will be stripped in production, but the invariant
  886. * will remain to ensure logic does not differ in production.
  887. */
  888. function invariant(condition, format, a, b, c, d, e, f) {
  889. if (process.env.NODE_ENV !== 'production') {
  890. if (format === undefined) {
  891. throw new Error('invariant requires an error message argument');
  892. }
  893. }
  894. if (!condition) {
  895. var error;
  896. if (format === undefined) {
  897. error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
  898. } else {
  899. var args = [a, b, c, d, e, f];
  900. var argIndex = 0;
  901. error = new Error(format.replace(/%s/g, function () {
  902. return args[argIndex++];
  903. }));
  904. error.name = 'Invariant Violation';
  905. }
  906. error.framesToPop = 1; // we don't care about invariant's own frame
  907. throw error;
  908. }
  909. }
  910. module.exports = invariant;
  911. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  912. /***/ },
  913. /* 14 */
  914. /***/ function(module, exports, __webpack_require__) {
  915. /* WEBPACK VAR INJECTION */(function(process) {/**
  916. * Copyright 2013-2015, Facebook, Inc.
  917. * All rights reserved.
  918. *
  919. * This source code is licensed under the BSD-style license found in the
  920. * LICENSE file in the root directory of this source tree. An additional grant
  921. * of patent rights can be found in the PATENTS file in the same directory.
  922. *
  923. * @providesModule getMarkupWrap
  924. */
  925. /*eslint-disable fb-www/unsafe-html */
  926. 'use strict';
  927. var ExecutionEnvironment = __webpack_require__(9);
  928. var invariant = __webpack_require__(13);
  929. /**
  930. * Dummy container used to detect which wraps are necessary.
  931. */
  932. var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
  933. /**
  934. * Some browsers cannot use `innerHTML` to render certain elements standalone,
  935. * so we wrap them, render the wrapped nodes, then extract the desired node.
  936. *
  937. * In IE8, certain elements cannot render alone, so wrap all elements ('*').
  938. */
  939. var shouldWrap = {};
  940. var selectWrap = [1, '<select multiple="true">', '</select>'];
  941. var tableWrap = [1, '<table>', '</table>'];
  942. var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
  943. var svgWrap = [1, '<svg xmlns="http://www.w3.org/2000/svg">', '</svg>'];
  944. var markupWrap = {
  945. '*': [1, '?<div>', '</div>'],
  946. 'area': [1, '<map>', '</map>'],
  947. 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
  948. 'legend': [1, '<fieldset>', '</fieldset>'],
  949. 'param': [1, '<object>', '</object>'],
  950. 'tr': [2, '<table><tbody>', '</tbody></table>'],
  951. 'optgroup': selectWrap,
  952. 'option': selectWrap,
  953. 'caption': tableWrap,
  954. 'colgroup': tableWrap,
  955. 'tbody': tableWrap,
  956. 'tfoot': tableWrap,
  957. 'thead': tableWrap,
  958. 'td': trWrap,
  959. 'th': trWrap
  960. };
  961. // Initialize the SVG elements since we know they'll always need to be wrapped
  962. // consistently. If they are created inside a <div> they will be initialized in
  963. // the wrong namespace (and will not display).
  964. var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];
  965. svgElements.forEach(function (nodeName) {
  966. markupWrap[nodeName] = svgWrap;
  967. shouldWrap[nodeName] = true;
  968. });
  969. /**
  970. * Gets the markup wrap configuration for the supplied `nodeName`.
  971. *
  972. * NOTE: This lazily detects which wraps are necessary for the current browser.
  973. *
  974. * @param {string} nodeName Lowercase `nodeName`.
  975. * @return {?array} Markup wrap configuration, if applicable.
  976. */
  977. function getMarkupWrap(nodeName) {
  978. !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined;
  979. if (!markupWrap.hasOwnProperty(nodeName)) {
  980. nodeName = '*';
  981. }
  982. if (!shouldWrap.hasOwnProperty(nodeName)) {
  983. if (nodeName === '*') {
  984. dummyNode.innerHTML = '<link />';
  985. } else {
  986. dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
  987. }
  988. shouldWrap[nodeName] = !dummyNode.firstChild;
  989. }
  990. return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
  991. }
  992. module.exports = getMarkupWrap;
  993. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  994. /***/ },
  995. /* 15 */
  996. /***/ function(module, exports) {
  997. /**
  998. * Copyright 2013-2015, Facebook, Inc.
  999. * All rights reserved.
  1000. *
  1001. * This source code is licensed under the BSD-style license found in the
  1002. * LICENSE file in the root directory of this source tree. An additional grant
  1003. * of patent rights can be found in the PATENTS file in the same directory.
  1004. *
  1005. * @providesModule emptyFunction
  1006. */
  1007. "use strict";
  1008. function makeEmptyFunction(arg) {
  1009. return function () {
  1010. return arg;
  1011. };
  1012. }
  1013. /**
  1014. * This function accepts and discards inputs; it has no side effects. This is
  1015. * primarily useful idiomatically for overridable function endpoints which
  1016. * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
  1017. */
  1018. function emptyFunction() {}
  1019. emptyFunction.thatReturns = makeEmptyFunction;
  1020. emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
  1021. emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
  1022. emptyFunction.thatReturnsNull = makeEmptyFunction(null);
  1023. emptyFunction.thatReturnsThis = function () {
  1024. return this;
  1025. };
  1026. emptyFunction.thatReturnsArgument = function (arg) {
  1027. return arg;
  1028. };
  1029. module.exports = emptyFunction;
  1030. /***/ },
  1031. /* 16 */
  1032. /***/ function(module, exports, __webpack_require__) {
  1033. /**
  1034. * Copyright 2013-2015, Facebook, Inc.
  1035. * All rights reserved.
  1036. *
  1037. * This source code is licensed under the BSD-style license found in the
  1038. * LICENSE file in the root directory of this source tree. An additional grant
  1039. * of patent rights can be found in the PATENTS file in the same directory.
  1040. *
  1041. * @providesModule ReactMultiChildUpdateTypes
  1042. */
  1043. 'use strict';
  1044. var keyMirror = __webpack_require__(17);
  1045. /**
  1046. * When a component's children are updated, a series of update configuration
  1047. * objects are created in order to batch and serialize the required changes.
  1048. *
  1049. * Enumerates all the possible types of update configurations.
  1050. *
  1051. * @internal
  1052. */
  1053. var ReactMultiChildUpdateTypes = keyMirror({
  1054. INSERT_MARKUP: null,
  1055. MOVE_EXISTING: null,
  1056. REMOVE_NODE: null,
  1057. SET_MARKUP: null,
  1058. TEXT_CONTENT: null
  1059. });
  1060. module.exports = ReactMultiChildUpdateTypes;
  1061. /***/ },
  1062. /* 17 */
  1063. /***/ function(module, exports, __webpack_require__) {
  1064. /* WEBPACK VAR INJECTION */(function(process) {/**
  1065. * Copyright 2013-2015, Facebook, Inc.
  1066. * All rights reserved.
  1067. *
  1068. * This source code is licensed under the BSD-style license found in the
  1069. * LICENSE file in the root directory of this source tree. An additional grant
  1070. * of patent rights can be found in the PATENTS file in the same directory.
  1071. *
  1072. * @providesModule keyMirror
  1073. * @typechecks static-only
  1074. */
  1075. 'use strict';
  1076. var invariant = __webpack_require__(13);
  1077. /**
  1078. * Constructs an enumeration with keys equal to their value.
  1079. *
  1080. * For example:
  1081. *
  1082. * var COLORS = keyMirror({blue: null, red: null});
  1083. * var myColor = COLORS.blue;
  1084. * var isColorValid = !!COLORS[myColor];
  1085. *
  1086. * The last line could not be performed if the values of the generated enum were
  1087. * not equal to their keys.
  1088. *
  1089. * Input: {key1: val1, key2: val2}
  1090. * Output: {key1: key1, key2: key2}
  1091. *
  1092. * @param {object} obj
  1093. * @return {object}
  1094. */
  1095. var keyMirror = function (obj) {
  1096. var ret = {};
  1097. var key;
  1098. !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined;
  1099. for (key in obj) {
  1100. if (!obj.hasOwnProperty(key)) {
  1101. continue;
  1102. }
  1103. ret[key] = key;
  1104. }
  1105. return ret;
  1106. };
  1107. module.exports = keyMirror;
  1108. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  1109. /***/ },
  1110. /* 18 */
  1111. /***/ function(module, exports, __webpack_require__) {
  1112. /* WEBPACK VAR INJECTION */(function(process) {/**
  1113. * Copyright 2013-2015, Facebook, Inc.
  1114. * All rights reserved.
  1115. *
  1116. * This source code is licensed under the BSD-style license found in the
  1117. * LICENSE file in the root directory of this source tree. An additional grant
  1118. * of patent rights can be found in the PATENTS file in the same directory.
  1119. *
  1120. * @providesModule ReactPerf
  1121. * @typechecks static-only
  1122. */
  1123. 'use strict';
  1124. /**
  1125. * ReactPerf is a general AOP system designed to measure performance. This
  1126. * module only has the hooks: see ReactDefaultPerf for the analysis tool.
  1127. */
  1128. var ReactPerf = {
  1129. /**
  1130. * Boolean to enable/disable measurement. Set to false by default to prevent
  1131. * accidental logging and perf loss.
  1132. */
  1133. enableMeasure: false,
  1134. /**
  1135. * Holds onto the measure function in use. By default, don't measure
  1136. * anything, but we'll override this if we inject a measure function.
  1137. */
  1138. storedMeasure: _noMeasure,
  1139. /**
  1140. * @param {object} object
  1141. * @param {string} objectName
  1142. * @param {object<string>} methodNames
  1143. */
  1144. measureMethods: function (object, objectName, methodNames) {
  1145. if (process.env.NODE_ENV !== 'production') {
  1146. for (var key in methodNames) {
  1147. if (!methodNames.hasOwnProperty(key)) {
  1148. continue;
  1149. }
  1150. object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);
  1151. }
  1152. }
  1153. },
  1154. /**
  1155. * Use this to wrap methods you want to measure. Zero overhead in production.
  1156. *
  1157. * @param {string} objName
  1158. * @param {string} fnName
  1159. * @param {function} func
  1160. * @return {function}
  1161. */
  1162. measure: function (objName, fnName, func) {
  1163. if (process.env.NODE_ENV !== 'production') {
  1164. var measuredFunc = null;
  1165. var wrapper = function () {
  1166. if (ReactPerf.enableMeasure) {
  1167. if (!measuredFunc) {
  1168. measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);
  1169. }
  1170. return measuredFunc.apply(this, arguments);
  1171. }
  1172. return func.apply(this, arguments);
  1173. };
  1174. wrapper.displayName = objName + '_' + fnName;
  1175. return wrapper;
  1176. }
  1177. return func;
  1178. },
  1179. injection: {
  1180. /**
  1181. * @param {function} measure
  1182. */
  1183. injectMeasure: function (measure) {
  1184. ReactPerf.storedMeasure = measure;
  1185. }
  1186. }
  1187. };
  1188. /**
  1189. * Simply passes through the measured function, without measuring it.
  1190. *
  1191. * @param {string} objName
  1192. * @param {string} fnName
  1193. * @param {function} func
  1194. * @return {function}
  1195. */
  1196. function _noMeasure(objName, fnName, func) {
  1197. return func;
  1198. }
  1199. module.exports = ReactPerf;
  1200. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  1201. /***/ },
  1202. /* 19 */
  1203. /***/ function(module, exports, __webpack_require__) {
  1204. /**
  1205. * Copyright 2013-2015, Facebook, Inc.
  1206. * All rights reserved.
  1207. *
  1208. * This source code is licensed under the BSD-style license found in the
  1209. * LICENSE file in the root directory of this source tree. An additional grant
  1210. * of patent rights can be found in the PATENTS file in the same directory.
  1211. *
  1212. * @providesModule setInnerHTML
  1213. */
  1214. /* globals MSApp */
  1215. 'use strict';
  1216. var ExecutionEnvironment = __webpack_require__(9);
  1217. var WHITESPACE_TEST = /^[ \r\n\t\f]/;
  1218. var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;
  1219. /**
  1220. * Set the innerHTML property of a node, ensuring that whitespace is preserved
  1221. * even in IE8.
  1222. *
  1223. * @param {DOMElement} node
  1224. * @param {string} html
  1225. * @internal
  1226. */
  1227. var setInnerHTML = function (node, html) {
  1228. node.innerHTML = html;
  1229. };
  1230. // Win8 apps: Allow all html to be inserted
  1231. if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
  1232. setInnerHTML = function (node, html) {
  1233. MSApp.execUnsafeLocalFunction(function () {
  1234. node.innerHTML = html;
  1235. });
  1236. };
  1237. }
  1238. if (ExecutionEnvironment.canUseDOM) {
  1239. // IE8: When updating a just created node with innerHTML only leading
  1240. // whitespace is removed. When updating an existing node with innerHTML
  1241. // whitespace in root TextNodes is also collapsed.
  1242. // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
  1243. // Feature detection; only IE8 is known to behave improperly like this.
  1244. var testElement = document.createElement('div');
  1245. testElement.innerHTML = ' ';
  1246. if (testElement.innerHTML === '') {
  1247. setInnerHTML = function (node, html) {
  1248. // Magic theory: IE8 supposedly differentiates between added and updated
  1249. // nodes when processing innerHTML, innerHTML on updated nodes suffers
  1250. // from worse whitespace behavior. Re-adding a node like this triggers
  1251. // the initial and more favorable whitespace behavior.
  1252. // TODO: What to do on a detached node?
  1253. if (node.parentNode) {
  1254. node.parentNode.replaceChild(node, node);
  1255. }
  1256. // We also implement a workaround for non-visible tags disappearing into
  1257. // thin air on IE8, this only happens if there is no visible text
  1258. // in-front of the non-visible tags. Piggyback on the whitespace fix
  1259. // and simply check if any non-visible tags appear in the source.
  1260. if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {
  1261. // Recover leading whitespace by temporarily prepending any character.
  1262. // \uFEFF has the potential advantage of being zero-width/invisible.
  1263. // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode
  1264. // in hopes that this is preserved even if "\uFEFF" is transformed to
  1265. // the actual Unicode character (by Babel, for example).
  1266. // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216
  1267. node.innerHTML = String.fromCharCode(0xFEFF) + html;
  1268. // deleteData leaves an empty `TextNode` which offsets the index of all
  1269. // children. Definitely want to avoid this.
  1270. var textNode = node.firstChild;
  1271. if (textNode.data.length === 1) {
  1272. node.removeChild(textNode);
  1273. } else {
  1274. textNode.deleteData(0, 1);
  1275. }
  1276. } else {
  1277. node.innerHTML = html;
  1278. }
  1279. };
  1280. }
  1281. }
  1282. module.exports = setInnerHTML;
  1283. /***/ },
  1284. /* 20 */
  1285. /***/ function(module, exports, __webpack_require__) {
  1286. /**
  1287. * Copyright 2013-2015, Facebook, Inc.
  1288. * All rights reserved.
  1289. *
  1290. * This source code is licensed under the BSD-style license found in the
  1291. * LICENSE file in the root directory of this source tree. An additional grant
  1292. * of patent rights can be found in the PATENTS file in the same directory.
  1293. *
  1294. * @providesModule setTextContent
  1295. */
  1296. 'use strict';
  1297. var ExecutionEnvironment = __webpack_require__(9);
  1298. var escapeTextContentForBrowser = __webpack_require__(21);
  1299. var setInnerHTML = __webpack_require__(19);
  1300. /**
  1301. * Set the textContent property of a node, ensuring that whitespace is preserved
  1302. * even in IE8. innerText is a poor substitute for textContent and, among many
  1303. * issues, inserts <br> instead of the literal newline chars. innerHTML behaves
  1304. * as it should.
  1305. *
  1306. * @param {DOMElement} node
  1307. * @param {string} text
  1308. * @internal
  1309. */
  1310. var setTextContent = function (node, text) {
  1311. node.textContent = text;
  1312. };
  1313. if (ExecutionEnvironment.canUseDOM) {
  1314. if (!('textContent' in document.documentElement)) {
  1315. setTextContent = function (node, text) {
  1316. setInnerHTML(node, escapeTextContentForBrowser(text));
  1317. };
  1318. }
  1319. }
  1320. module.exports = setTextContent;
  1321. /***/ },
  1322. /* 21 */
  1323. /***/ function(module, exports) {
  1324. /**
  1325. * Copyright 2013-2015, Facebook, Inc.
  1326. * All rights reserved.
  1327. *
  1328. * This source code is licensed under the BSD-style license found in the
  1329. * LICENSE file in the root directory of this source tree. An additional grant
  1330. * of patent rights can be found in the PATENTS file in the same directory.
  1331. *
  1332. * @providesModule escapeTextContentForBrowser
  1333. */
  1334. 'use strict';
  1335. var ESCAPE_LOOKUP = {
  1336. '&': '&amp;',
  1337. '>': '&gt;',
  1338. '<': '&lt;',
  1339. '"': '&quot;',
  1340. '\'': '&#x27;'
  1341. };
  1342. var ESCAPE_REGEX = /[&><"']/g;
  1343. function escaper(match) {
  1344. return ESCAPE_LOOKUP[match];
  1345. }
  1346. /**
  1347. * Escapes text to prevent scripting attacks.
  1348. *
  1349. * @param {*} text Text value to escape.
  1350. * @return {string} An escaped string.
  1351. */
  1352. function escapeTextContentForBrowser(text) {
  1353. return ('' + text).replace(ESCAPE_REGEX, escaper);
  1354. }
  1355. module.exports = escapeTextContentForBrowser;
  1356. /***/ },
  1357. /* 22 */
  1358. /***/ function(module, exports, __webpack_require__) {
  1359. /* WEBPACK VAR INJECTION */(function(process) {/**
  1360. * Copyright 2013-2015, Facebook, Inc.
  1361. * All rights reserved.
  1362. *
  1363. * This source code is licensed under the BSD-style license found in the
  1364. * LICENSE file in the root directory of this source tree. An additional grant
  1365. * of patent rights can be found in the PATENTS file in the same directory.
  1366. *
  1367. * @providesModule DOMPropertyOperations
  1368. * @typechecks static-only
  1369. */
  1370. 'use strict';
  1371. var DOMProperty = __webpack_require__(23);
  1372. var ReactPerf = __webpack_require__(18);
  1373. var quoteAttributeValueForBrowser = __webpack_require__(24);
  1374. var warning = __webpack_require__(25);
  1375. // Simplified subset
  1376. var VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\w\.\-]*$/;
  1377. var illegalAttributeNameCache = {};
  1378. var validatedAttributeNameCache = {};
  1379. function isAttributeNameSafe(attributeName) {
  1380. if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {
  1381. return true;
  1382. }
  1383. if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {
  1384. return false;
  1385. }
  1386. if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
  1387. validatedAttributeNameCache[attributeName] = true;
  1388. return true;
  1389. }
  1390. illegalAttributeNameCache[attributeName] = true;
  1391. process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined;
  1392. return false;
  1393. }
  1394. function shouldIgnoreValue(propertyInfo, value) {
  1395. return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;
  1396. }
  1397. if (process.env.NODE_ENV !== 'production') {
  1398. var reactProps = {
  1399. children: true,
  1400. dangerouslySetInnerHTML: true,
  1401. key: true,
  1402. ref: true
  1403. };
  1404. var warnedProperties = {};
  1405. var warnUnknownProperty = function (name) {
  1406. if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
  1407. return;
  1408. }
  1409. warnedProperties[name] = true;
  1410. var lowerCasedName = name.toLowerCase();
  1411. // data-* attributes should be lowercase; suggest the lowercase version
  1412. var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
  1413. // For now, only warn when we have a suggested correction. This prevents
  1414. // logging too much when using transferPropsTo.
  1415. process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined;
  1416. };
  1417. }
  1418. /**
  1419. * Operations for dealing with DOM properties.
  1420. */
  1421. var DOMPropertyOperations = {
  1422. /**
  1423. * Creates markup for the ID property.
  1424. *
  1425. * @param {string} id Unescaped ID.
  1426. * @return {string} Markup string.
  1427. */
  1428. createMarkupForID: function (id) {
  1429. return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);
  1430. },
  1431. setAttributeForID: function (node, id) {
  1432. node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);
  1433. },
  1434. /**
  1435. * Creates markup for a property.
  1436. *
  1437. * @param {string} name
  1438. * @param {*} value
  1439. * @return {?string} Markup string, or null if the property was invalid.
  1440. */
  1441. createMarkupForProperty: function (name, value) {
  1442. var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
  1443. if (propertyInfo) {
  1444. if (shouldIgnoreValue(propertyInfo, value)) {
  1445. return '';
  1446. }
  1447. var attributeName = propertyInfo.attributeName;
  1448. if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
  1449. return attributeName + '=""';
  1450. }
  1451. return attributeName + '=' + quoteAttributeValueForBrowser(value);
  1452. } else if (DOMProperty.isCustomAttribute(name)) {
  1453. if (value == null) {
  1454. return '';
  1455. }
  1456. return name + '=' + quoteAttributeValueForBrowser(value);
  1457. } else if (process.env.NODE_ENV !== 'production') {
  1458. warnUnknownProperty(name);
  1459. }
  1460. return null;
  1461. },
  1462. /**
  1463. * Creates markup for a custom property.
  1464. *
  1465. * @param {string} name
  1466. * @param {*} value
  1467. * @return {string} Markup string, or empty string if the property was invalid.
  1468. */
  1469. createMarkupForCustomAttribute: function (name, value) {
  1470. if (!isAttributeNameSafe(name) || value == null) {
  1471. return '';
  1472. }
  1473. return name + '=' + quoteAttributeValueForBrowser(value);
  1474. },
  1475. /**
  1476. * Sets the value for a property on a node.
  1477. *
  1478. * @param {DOMElement} node
  1479. * @param {string} name
  1480. * @param {*} value
  1481. */
  1482. setValueForProperty: function (node, name, value) {
  1483. var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
  1484. if (propertyInfo) {
  1485. var mutationMethod = propertyInfo.mutationMethod;
  1486. if (mutationMethod) {
  1487. mutationMethod(node, value);
  1488. } else if (shouldIgnoreValue(propertyInfo, value)) {
  1489. this.deleteValueForProperty(node, name);
  1490. } else if (propertyInfo.mustUseAttribute) {
  1491. var attributeName = propertyInfo.attributeName;
  1492. var namespace = propertyInfo.attributeNamespace;
  1493. // `setAttribute` with objects becomes only `[object]` in IE8/9,
  1494. // ('' + value) makes it output the correct toString()-value.
  1495. if (namespace) {
  1496. node.setAttributeNS(namespace, attributeName, '' + value);
  1497. } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
  1498. node.setAttribute(attributeName, '');
  1499. } else {
  1500. node.setAttribute(attributeName, '' + value);
  1501. }
  1502. } else {
  1503. var propName = propertyInfo.propertyName;
  1504. // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the
  1505. // property type before comparing; only `value` does and is string.
  1506. if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {
  1507. // Contrary to `setAttribute`, object properties are properly
  1508. // `toString`ed by IE8/9.
  1509. node[propName] = value;
  1510. }
  1511. }
  1512. } else if (DOMProperty.isCustomAttribute(name)) {
  1513. DOMPropertyOperations.setValueForAttribute(node, name, value);
  1514. } else if (process.env.NODE_ENV !== 'production') {
  1515. warnUnknownProperty(name);
  1516. }
  1517. },
  1518. setValueForAttribute: function (node, name, value) {
  1519. if (!isAttributeNameSafe(name)) {
  1520. return;
  1521. }
  1522. if (value == null) {
  1523. node.removeAttribute(name);
  1524. } else {
  1525. node.setAttribute(name, '' + value);
  1526. }
  1527. },
  1528. /**
  1529. * Deletes the value for a property on a node.
  1530. *
  1531. * @param {DOMElement} node
  1532. * @param {string} name
  1533. */
  1534. deleteValueForProperty: function (node, name) {
  1535. var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
  1536. if (propertyInfo) {
  1537. var mutationMethod = propertyInfo.mutationMethod;
  1538. if (mutationMethod) {
  1539. mutationMethod(node, undefined);
  1540. } else if (propertyInfo.mustUseAttribute) {
  1541. node.removeAttribute(propertyInfo.attributeName);
  1542. } else {
  1543. var propName = propertyInfo.propertyName;
  1544. var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);
  1545. if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) {
  1546. node[propName] = defaultValue;
  1547. }
  1548. }
  1549. } else if (DOMProperty.isCustomAttribute(name)) {
  1550. node.removeAttribute(name);
  1551. } else if (process.env.NODE_ENV !== 'production') {
  1552. warnUnknownProperty(name);
  1553. }
  1554. }
  1555. };
  1556. ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {
  1557. setValueForProperty: 'setValueForProperty',
  1558. setValueForAttribute: 'setValueForAttribute',
  1559. deleteValueForProperty: 'deleteValueForProperty'
  1560. });
  1561. module.exports = DOMPropertyOperations;
  1562. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  1563. /***/ },
  1564. /* 23 */
  1565. /***/ function(module, exports, __webpack_require__) {
  1566. /* WEBPACK VAR INJECTION */(function(process) {/**
  1567. * Copyright 2013-2015, Facebook, Inc.
  1568. * All rights reserved.
  1569. *
  1570. * This source code is licensed under the BSD-style license found in the
  1571. * LICENSE file in the root directory of this source tree. An additional grant
  1572. * of patent rights can be found in the PATENTS file in the same directory.
  1573. *
  1574. * @providesModule DOMProperty
  1575. * @typechecks static-only
  1576. */
  1577. 'use strict';
  1578. var invariant = __webpack_require__(13);
  1579. function checkMask(value, bitmask) {
  1580. return (value & bitmask) === bitmask;
  1581. }
  1582. var DOMPropertyInjection = {
  1583. /**
  1584. * Mapping from normalized, camelcased property names to a configuration that
  1585. * specifies how the associated DOM property should be accessed or rendered.
  1586. */
  1587. MUST_USE_ATTRIBUTE: 0x1,
  1588. MUST_USE_PROPERTY: 0x2,
  1589. HAS_SIDE_EFFECTS: 0x4,
  1590. HAS_BOOLEAN_VALUE: 0x8,
  1591. HAS_NUMERIC_VALUE: 0x10,
  1592. HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,
  1593. HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,
  1594. /**
  1595. * Inject some specialized knowledge about the DOM. This takes a config object
  1596. * with the following properties:
  1597. *
  1598. * isCustomAttribute: function that given an attribute name will return true
  1599. * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
  1600. * attributes where it's impossible to enumerate all of the possible
  1601. * attribute names,
  1602. *
  1603. * Properties: object mapping DOM property name to one of the
  1604. * DOMPropertyInjection constants or null. If your attribute isn't in here,
  1605. * it won't get written to the DOM.
  1606. *
  1607. * DOMAttributeNames: object mapping React attribute name to the DOM
  1608. * attribute name. Attribute names not specified use the **lowercase**
  1609. * normalized name.
  1610. *
  1611. * DOMAttributeNamespaces: object mapping React attribute name to the DOM
  1612. * attribute namespace URL. (Attribute names not specified use no namespace.)
  1613. *
  1614. * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
  1615. * Property names not specified use the normalized name.
  1616. *
  1617. * DOMMutationMethods: Properties that require special mutation methods. If
  1618. * `value` is undefined, the mutation method should unset the property.
  1619. *
  1620. * @param {object} domPropertyConfig the config as described above.
  1621. */
  1622. injectDOMPropertyConfig: function (domPropertyConfig) {
  1623. var Injection = DOMPropertyInjection;
  1624. var Properties = domPropertyConfig.Properties || {};
  1625. var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};
  1626. var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
  1627. var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
  1628. var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
  1629. if (domPropertyConfig.isCustomAttribute) {
  1630. DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
  1631. }
  1632. for (var propName in Properties) {
  1633. !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined;
  1634. var lowerCased = propName.toLowerCase();
  1635. var propConfig = Properties[propName];
  1636. var propertyInfo = {
  1637. attributeName: lowerCased,
  1638. attributeNamespace: null,
  1639. propertyName: propName,
  1640. mutationMethod: null,
  1641. mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE),
  1642. mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),
  1643. hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),
  1644. hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),
  1645. hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),
  1646. hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),
  1647. hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
  1648. };
  1649. !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined;
  1650. !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined;
  1651. !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined;
  1652. if (process.env.NODE_ENV !== 'production') {
  1653. DOMProperty.getPossibleStandardName[lowerCased] = propName;
  1654. }
  1655. if (DOMAttributeNames.hasOwnProperty(propName)) {
  1656. var attributeName = DOMAttributeNames[propName];
  1657. propertyInfo.attributeName = attributeName;
  1658. if (process.env.NODE_ENV !== 'production') {
  1659. DOMProperty.getPossibleStandardName[attributeName] = propName;
  1660. }
  1661. }
  1662. if (DOMAttributeNamespaces.hasOwnProperty(propName)) {
  1663. propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];
  1664. }
  1665. if (DOMPropertyNames.hasOwnProperty(propName)) {
  1666. propertyInfo.propertyName = DOMPropertyNames[propName];
  1667. }
  1668. if (DOMMutationMethods.hasOwnProperty(propName)) {
  1669. propertyInfo.mutationMethod = DOMMutationMethods[propName];
  1670. }
  1671. DOMProperty.properties[propName] = propertyInfo;
  1672. }
  1673. }
  1674. };
  1675. var defaultValueCache = {};
  1676. /**
  1677. * DOMProperty exports lookup objects that can be used like functions:
  1678. *
  1679. * > DOMProperty.isValid['id']
  1680. * true
  1681. * > DOMProperty.isValid['foobar']
  1682. * undefined
  1683. *
  1684. * Although this may be confusing, it performs better in general.
  1685. *
  1686. * @see http://jsperf.com/key-exists
  1687. * @see http://jsperf.com/key-missing
  1688. */
  1689. var DOMProperty = {
  1690. ID_ATTRIBUTE_NAME: 'data-reactid',
  1691. /**
  1692. * Map from property "standard name" to an object with info about how to set
  1693. * the property in the DOM. Each object contains:
  1694. *
  1695. * attributeName:
  1696. * Used when rendering markup or with `*Attribute()`.
  1697. * attributeNamespace
  1698. * propertyName:
  1699. * Used on DOM node instances. (This includes properties that mutate due to
  1700. * external factors.)
  1701. * mutationMethod:
  1702. * If non-null, used instead of the property or `setAttribute()` after
  1703. * initial render.
  1704. * mustUseAttribute:
  1705. * Whether the property must be accessed and mutated using `*Attribute()`.
  1706. * (This includes anything that fails `<propName> in <element>`.)
  1707. * mustUseProperty:
  1708. * Whether the property must be accessed and mutated as an object property.
  1709. * hasSideEffects:
  1710. * Whether or not setting a value causes side effects such as triggering
  1711. * resources to be loaded or text selection changes. If true, we read from
  1712. * the DOM before updating to ensure that the value is only set if it has
  1713. * changed.
  1714. * hasBooleanValue:
  1715. * Whether the property should be removed when set to a falsey value.
  1716. * hasNumericValue:
  1717. * Whether the property must be numeric or parse as a numeric and should be
  1718. * removed when set to a falsey value.
  1719. * hasPositiveNumericValue:
  1720. * Whether the property must be positive numeric or parse as a positive
  1721. * numeric and should be removed when set to a falsey value.
  1722. * hasOverloadedBooleanValue:
  1723. * Whether the property can be used as a flag as well as with a value.
  1724. * Removed when strictly equal to false; present without a value when
  1725. * strictly equal to true; present with a value otherwise.
  1726. */
  1727. properties: {},
  1728. /**
  1729. * Mapping from lowercase property names to the properly cased version, used
  1730. * to warn in the case of missing properties. Available only in __DEV__.
  1731. * @type {Object}
  1732. */
  1733. getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,
  1734. /**
  1735. * All of the isCustomAttribute() functions that have been injected.
  1736. */
  1737. _isCustomAttributeFunctions: [],
  1738. /**
  1739. * Checks whether a property name is a custom attribute.
  1740. * @method
  1741. */
  1742. isCustomAttribute: function (attributeName) {
  1743. for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {
  1744. var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];
  1745. if (isCustomAttributeFn(attributeName)) {
  1746. return true;
  1747. }
  1748. }
  1749. return false;
  1750. },
  1751. /**
  1752. * Returns the default property value for a DOM property (i.e., not an
  1753. * attribute). Most default values are '' or false, but not all. Worse yet,
  1754. * some (in particular, `type`) vary depending on the type of element.
  1755. *
  1756. * TODO: Is it better to grab all the possible properties when creating an
  1757. * element to avoid having to create the same element twice?
  1758. */
  1759. getDefaultValueForProperty: function (nodeName, prop) {
  1760. var nodeDefaults = defaultValueCache[nodeName];
  1761. var testElement;
  1762. if (!nodeDefaults) {
  1763. defaultValueCache[nodeName] = nodeDefaults = {};
  1764. }
  1765. if (!(prop in nodeDefaults)) {
  1766. testElement = document.createElement(nodeName);
  1767. nodeDefaults[prop] = testElement[prop];
  1768. }
  1769. return nodeDefaults[prop];
  1770. },
  1771. injection: DOMPropertyInjection
  1772. };
  1773. module.exports = DOMProperty;
  1774. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  1775. /***/ },
  1776. /* 24 */
  1777. /***/ function(module, exports, __webpack_require__) {
  1778. /**
  1779. * Copyright 2013-2015, Facebook, Inc.
  1780. * All rights reserved.
  1781. *
  1782. * This source code is licensed under the BSD-style license found in the
  1783. * LICENSE file in the root directory of this source tree. An additional grant
  1784. * of patent rights can be found in the PATENTS file in the same directory.
  1785. *
  1786. * @providesModule quoteAttributeValueForBrowser
  1787. */
  1788. 'use strict';
  1789. var escapeTextContentForBrowser = __webpack_require__(21);
  1790. /**
  1791. * Escapes attribute value to prevent scripting attacks.
  1792. *
  1793. * @param {*} value Value to escape.
  1794. * @return {string} An escaped string.
  1795. */
  1796. function quoteAttributeValueForBrowser(value) {
  1797. return '"' + escapeTextContentForBrowser(value) + '"';
  1798. }
  1799. module.exports = quoteAttributeValueForBrowser;
  1800. /***/ },
  1801. /* 25 */
  1802. /***/ function(module, exports, __webpack_require__) {
  1803. /* WEBPACK VAR INJECTION */(function(process) {/**
  1804. * Copyright 2014-2015, Facebook, Inc.
  1805. * All rights reserved.
  1806. *
  1807. * This source code is licensed under the BSD-style license found in the
  1808. * LICENSE file in the root directory of this source tree. An additional grant
  1809. * of patent rights can be found in the PATENTS file in the same directory.
  1810. *
  1811. * @providesModule warning
  1812. */
  1813. 'use strict';
  1814. var emptyFunction = __webpack_require__(15);
  1815. /**
  1816. * Similar to invariant but only logs a warning if the condition is not met.
  1817. * This can be used to log issues in development environments in critical
  1818. * paths. Removing the logging code for production environments will keep the
  1819. * same logic and follow the same code paths.
  1820. */
  1821. var warning = emptyFunction;
  1822. if (process.env.NODE_ENV !== 'production') {
  1823. warning = function (condition, format) {
  1824. for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
  1825. args[_key - 2] = arguments[_key];
  1826. }
  1827. if (format === undefined) {
  1828. throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
  1829. }
  1830. if (format.indexOf('Failed Composite propType: ') === 0) {
  1831. return; // Ignore CompositeComponent proptype check.
  1832. }
  1833. if (!condition) {
  1834. var argIndex = 0;
  1835. var message = 'Warning: ' + format.replace(/%s/g, function () {
  1836. return args[argIndex++];
  1837. });
  1838. if (typeof console !== 'undefined') {
  1839. console.error(message);
  1840. }
  1841. try {
  1842. // --- Welcome to debugging React ---
  1843. // This error was thrown as a convenience so that you can use this stack
  1844. // to find the callsite that caused this warning to fire.
  1845. throw new Error(message);
  1846. } catch (x) {}
  1847. }
  1848. };
  1849. }
  1850. module.exports = warning;
  1851. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  1852. /***/ },
  1853. /* 26 */
  1854. /***/ function(module, exports, __webpack_require__) {
  1855. /**
  1856. * Copyright 2013-2015, Facebook, Inc.
  1857. * All rights reserved.
  1858. *
  1859. * This source code is licensed under the BSD-style license found in the
  1860. * LICENSE file in the root directory of this source tree. An additional grant
  1861. * of patent rights can be found in the PATENTS file in the same directory.
  1862. *
  1863. * @providesModule ReactComponentBrowserEnvironment
  1864. */
  1865. 'use strict';
  1866. var ReactDOMIDOperations = __webpack_require__(27);
  1867. var ReactMount = __webpack_require__(28);
  1868. /**
  1869. * Abstracts away all functionality of the reconciler that requires knowledge of
  1870. * the browser context. TODO: These callers should be refactored to avoid the
  1871. * need for this injection.
  1872. */
  1873. var ReactComponentBrowserEnvironment = {
  1874. processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,
  1875. replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,
  1876. /**
  1877. * If a particular environment requires that some resources be cleaned up,
  1878. * specify this in the injected Mixin. In the DOM, we would likely want to
  1879. * purge any cached node ID lookups.
  1880. *
  1881. * @private
  1882. */
  1883. unmountIDFromEnvironment: function (rootNodeID) {
  1884. ReactMount.purgeID(rootNodeID);
  1885. }
  1886. };
  1887. module.exports = ReactComponentBrowserEnvironment;
  1888. /***/ },
  1889. /* 27 */
  1890. /***/ function(module, exports, __webpack_require__) {
  1891. /* WEBPACK VAR INJECTION */(function(process) {/**
  1892. * Copyright 2013-2015, Facebook, Inc.
  1893. * All rights reserved.
  1894. *
  1895. * This source code is licensed under the BSD-style license found in the
  1896. * LICENSE file in the root directory of this source tree. An additional grant
  1897. * of patent rights can be found in the PATENTS file in the same directory.
  1898. *
  1899. * @providesModule ReactDOMIDOperations
  1900. * @typechecks static-only
  1901. */
  1902. 'use strict';
  1903. var DOMChildrenOperations = __webpack_require__(7);
  1904. var DOMPropertyOperations = __webpack_require__(22);
  1905. var ReactMount = __webpack_require__(28);
  1906. var ReactPerf = __webpack_require__(18);
  1907. var invariant = __webpack_require__(13);
  1908. /**
  1909. * Errors for properties that should not be updated with `updatePropertyByID()`.
  1910. *
  1911. * @type {object}
  1912. * @private
  1913. */
  1914. var INVALID_PROPERTY_ERRORS = {
  1915. dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',
  1916. style: '`style` must be set using `updateStylesByID()`.'
  1917. };
  1918. /**
  1919. * Operations used to process updates to DOM nodes.
  1920. */
  1921. var ReactDOMIDOperations = {
  1922. /**
  1923. * Updates a DOM node with new property values. This should only be used to
  1924. * update DOM properties in `DOMProperty`.
  1925. *
  1926. * @param {string} id ID of the node to update.
  1927. * @param {string} name A valid property name, see `DOMProperty`.
  1928. * @param {*} value New value of the property.
  1929. * @internal
  1930. */
  1931. updatePropertyByID: function (id, name, value) {
  1932. var node = ReactMount.getNode(id);
  1933. !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined;
  1934. // If we're updating to null or undefined, we should remove the property
  1935. // from the DOM node instead of inadvertantly setting to a string. This
  1936. // brings us in line with the same behavior we have on initial render.
  1937. if (value != null) {
  1938. DOMPropertyOperations.setValueForProperty(node, name, value);
  1939. } else {
  1940. DOMPropertyOperations.deleteValueForProperty(node, name);
  1941. }
  1942. },
  1943. /**
  1944. * Replaces a DOM node that exists in the document with markup.
  1945. *
  1946. * @param {string} id ID of child to be replaced.
  1947. * @param {string} markup Dangerous markup to inject in place of child.
  1948. * @internal
  1949. * @see {Danger.dangerouslyReplaceNodeWithMarkup}
  1950. */
  1951. dangerouslyReplaceNodeWithMarkupByID: function (id, markup) {
  1952. var node = ReactMount.getNode(id);
  1953. DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);
  1954. },
  1955. /**
  1956. * Updates a component's children by processing a series of updates.
  1957. *
  1958. * @param {array<object>} updates List of update configurations.
  1959. * @param {array<string>} markup List of markup strings.
  1960. * @internal
  1961. */
  1962. dangerouslyProcessChildrenUpdates: function (updates, markup) {
  1963. for (var i = 0; i < updates.length; i++) {
  1964. updates[i].parentNode = ReactMount.getNode(updates[i].parentID);
  1965. }
  1966. DOMChildrenOperations.processUpdates(updates, markup);
  1967. }
  1968. };
  1969. ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {
  1970. dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',
  1971. dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'
  1972. });
  1973. module.exports = ReactDOMIDOperations;
  1974. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  1975. /***/ },
  1976. /* 28 */
  1977. /***/ function(module, exports, __webpack_require__) {
  1978. /* WEBPACK VAR INJECTION */(function(process) {/**
  1979. * Copyright 2013-2015, Facebook, Inc.
  1980. * All rights reserved.
  1981. *
  1982. * This source code is licensed under the BSD-style license found in the
  1983. * LICENSE file in the root directory of this source tree. An additional grant
  1984. * of patent rights can be found in the PATENTS file in the same directory.
  1985. *
  1986. * @providesModule ReactMount
  1987. */
  1988. 'use strict';
  1989. var DOMProperty = __webpack_require__(23);
  1990. var ReactBrowserEventEmitter = __webpack_require__(29);
  1991. var ReactCurrentOwner = __webpack_require__(5);
  1992. var ReactDOMFeatureFlags = __webpack_require__(41);
  1993. var ReactElement = __webpack_require__(42);
  1994. var ReactEmptyComponentRegistry = __webpack_require__(44);
  1995. var ReactInstanceHandles = __webpack_require__(45);
  1996. var ReactInstanceMap = __webpack_require__(47);
  1997. var ReactMarkupChecksum = __webpack_require__(48);
  1998. var ReactPerf = __webpack_require__(18);
  1999. var ReactReconciler = __webpack_require__(50);
  2000. var ReactUpdateQueue = __webpack_require__(53);
  2001. var ReactUpdates = __webpack_require__(54);
  2002. var assign = __webpack_require__(39);
  2003. var emptyObject = __webpack_require__(58);
  2004. var containsNode = __webpack_require__(59);
  2005. var instantiateReactComponent = __webpack_require__(62);
  2006. var invariant = __webpack_require__(13);
  2007. var setInnerHTML = __webpack_require__(19);
  2008. var shouldUpdateReactComponent = __webpack_require__(67);
  2009. var validateDOMNesting = __webpack_require__(70);
  2010. var warning = __webpack_require__(25);
  2011. var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
  2012. var nodeCache = {};
  2013. var ELEMENT_NODE_TYPE = 1;
  2014. var DOC_NODE_TYPE = 9;
  2015. var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
  2016. var ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2);
  2017. /** Mapping from reactRootID to React component instance. */
  2018. var instancesByReactRootID = {};
  2019. /** Mapping from reactRootID to `container` nodes. */
  2020. var containersByReactRootID = {};
  2021. if (process.env.NODE_ENV !== 'production') {
  2022. /** __DEV__-only mapping from reactRootID to root elements. */
  2023. var rootElementsByReactRootID = {};
  2024. }
  2025. // Used to store breadth-first search state in findComponentRoot.
  2026. var findComponentRootReusableArray = [];
  2027. /**
  2028. * Finds the index of the first character
  2029. * that's not common between the two given strings.
  2030. *
  2031. * @return {number} the index of the character where the strings diverge
  2032. */
  2033. function firstDifferenceIndex(string1, string2) {
  2034. var minLen = Math.min(string1.length, string2.length);
  2035. for (var i = 0; i < minLen; i++) {
  2036. if (string1.charAt(i) !== string2.charAt(i)) {
  2037. return i;
  2038. }
  2039. }
  2040. return string1.length === string2.length ? -1 : minLen;
  2041. }
  2042. /**
  2043. * @param {DOMElement|DOMDocument} container DOM element that may contain
  2044. * a React component
  2045. * @return {?*} DOM element that may have the reactRoot ID, or null.
  2046. */
  2047. function getReactRootElementInContainer(container) {
  2048. if (!container) {
  2049. return null;
  2050. }
  2051. if (container.nodeType === DOC_NODE_TYPE) {
  2052. return container.documentElement;
  2053. } else {
  2054. return container.firstChild;
  2055. }
  2056. }
  2057. /**
  2058. * @param {DOMElement} container DOM element that may contain a React component.
  2059. * @return {?string} A "reactRoot" ID, if a React component is rendered.
  2060. */
  2061. function getReactRootID(container) {
  2062. var rootElement = getReactRootElementInContainer(container);
  2063. return rootElement && ReactMount.getID(rootElement);
  2064. }
  2065. /**
  2066. * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form
  2067. * element can return its control whose name or ID equals ATTR_NAME. All
  2068. * DOM nodes support `getAttributeNode` but this can also get called on
  2069. * other objects so just return '' if we're given something other than a
  2070. * DOM node (such as window).
  2071. *
  2072. * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.
  2073. * @return {string} ID of the supplied `domNode`.
  2074. */
  2075. function getID(node) {
  2076. var id = internalGetID(node);
  2077. if (id) {
  2078. if (nodeCache.hasOwnProperty(id)) {
  2079. var cached = nodeCache[id];
  2080. if (cached !== node) {
  2081. !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined;
  2082. nodeCache[id] = node;
  2083. }
  2084. } else {
  2085. nodeCache[id] = node;
  2086. }
  2087. }
  2088. return id;
  2089. }
  2090. function internalGetID(node) {
  2091. // If node is something like a window, document, or text node, none of
  2092. // which support attributes or a .getAttribute method, gracefully return
  2093. // the empty string, as if the attribute were missing.
  2094. return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';
  2095. }
  2096. /**
  2097. * Sets the React-specific ID of the given node.
  2098. *
  2099. * @param {DOMElement} node The DOM node whose ID will be set.
  2100. * @param {string} id The value of the ID attribute.
  2101. */
  2102. function setID(node, id) {
  2103. var oldID = internalGetID(node);
  2104. if (oldID !== id) {
  2105. delete nodeCache[oldID];
  2106. }
  2107. node.setAttribute(ATTR_NAME, id);
  2108. nodeCache[id] = node;
  2109. }
  2110. /**
  2111. * Finds the node with the supplied React-generated DOM ID.
  2112. *
  2113. * @param {string} id A React-generated DOM ID.
  2114. * @return {DOMElement} DOM node with the suppled `id`.
  2115. * @internal
  2116. */
  2117. function getNode(id) {
  2118. if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {
  2119. nodeCache[id] = ReactMount.findReactNodeByID(id);
  2120. }
  2121. return nodeCache[id];
  2122. }
  2123. /**
  2124. * Finds the node with the supplied public React instance.
  2125. *
  2126. * @param {*} instance A public React instance.
  2127. * @return {?DOMElement} DOM node with the suppled `id`.
  2128. * @internal
  2129. */
  2130. function getNodeFromInstance(instance) {
  2131. var id = ReactInstanceMap.get(instance)._rootNodeID;
  2132. if (ReactEmptyComponentRegistry.isNullComponentID(id)) {
  2133. return null;
  2134. }
  2135. if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {
  2136. nodeCache[id] = ReactMount.findReactNodeByID(id);
  2137. }
  2138. return nodeCache[id];
  2139. }
  2140. /**
  2141. * A node is "valid" if it is contained by a currently mounted container.
  2142. *
  2143. * This means that the node does not have to be contained by a document in
  2144. * order to be considered valid.
  2145. *
  2146. * @param {?DOMElement} node The candidate DOM node.
  2147. * @param {string} id The expected ID of the node.
  2148. * @return {boolean} Whether the node is contained by a mounted container.
  2149. */
  2150. function isValid(node, id) {
  2151. if (node) {
  2152. !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined;
  2153. var container = ReactMount.findReactContainerForID(id);
  2154. if (container && containsNode(container, node)) {
  2155. return true;
  2156. }
  2157. }
  2158. return false;
  2159. }
  2160. /**
  2161. * Causes the cache to forget about one React-specific ID.
  2162. *
  2163. * @param {string} id The ID to forget.
  2164. */
  2165. function purgeID(id) {
  2166. delete nodeCache[id];
  2167. }
  2168. var deepestNodeSoFar = null;
  2169. function findDeepestCachedAncestorImpl(ancestorID) {
  2170. var ancestor = nodeCache[ancestorID];
  2171. if (ancestor && isValid(ancestor, ancestorID)) {
  2172. deepestNodeSoFar = ancestor;
  2173. } else {
  2174. // This node isn't populated in the cache, so presumably none of its
  2175. // descendants are. Break out of the loop.
  2176. return false;
  2177. }
  2178. }
  2179. /**
  2180. * Return the deepest cached node whose ID is a prefix of `targetID`.
  2181. */
  2182. function findDeepestCachedAncestor(targetID) {
  2183. deepestNodeSoFar = null;
  2184. ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);
  2185. var foundNode = deepestNodeSoFar;
  2186. deepestNodeSoFar = null;
  2187. return foundNode;
  2188. }
  2189. /**
  2190. * Mounts this component and inserts it into the DOM.
  2191. *
  2192. * @param {ReactComponent} componentInstance The instance to mount.
  2193. * @param {string} rootID DOM ID of the root node.
  2194. * @param {DOMElement} container DOM element to mount into.
  2195. * @param {ReactReconcileTransaction} transaction
  2196. * @param {boolean} shouldReuseMarkup If true, do not insert markup
  2197. */
  2198. function mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) {
  2199. if (ReactDOMFeatureFlags.useCreateElement) {
  2200. context = assign({}, context);
  2201. if (container.nodeType === DOC_NODE_TYPE) {
  2202. context[ownerDocumentContextKey] = container;
  2203. } else {
  2204. context[ownerDocumentContextKey] = container.ownerDocument;
  2205. }
  2206. }
  2207. if (process.env.NODE_ENV !== 'production') {
  2208. if (context === emptyObject) {
  2209. context = {};
  2210. }
  2211. var tag = container.nodeName.toLowerCase();
  2212. context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null);
  2213. }
  2214. var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context);
  2215. componentInstance._renderedComponent._topLevelWrapper = componentInstance;
  2216. ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction);
  2217. }
  2218. /**
  2219. * Batched mount.
  2220. *
  2221. * @param {ReactComponent} componentInstance The instance to mount.
  2222. * @param {string} rootID DOM ID of the root node.
  2223. * @param {DOMElement} container DOM element to mount into.
  2224. * @param {boolean} shouldReuseMarkup If true, do not insert markup
  2225. */
  2226. function batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) {
  2227. var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(
  2228. /* forceHTML */shouldReuseMarkup);
  2229. transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context);
  2230. ReactUpdates.ReactReconcileTransaction.release(transaction);
  2231. }
  2232. /**
  2233. * Unmounts a component and removes it from the DOM.
  2234. *
  2235. * @param {ReactComponent} instance React component instance.
  2236. * @param {DOMElement} container DOM element to unmount from.
  2237. * @final
  2238. * @internal
  2239. * @see {ReactMount.unmountComponentAtNode}
  2240. */
  2241. function unmountComponentFromNode(instance, container) {
  2242. ReactReconciler.unmountComponent(instance);
  2243. if (container.nodeType === DOC_NODE_TYPE) {
  2244. container = container.documentElement;
  2245. }
  2246. // http://jsperf.com/emptying-a-node
  2247. while (container.lastChild) {
  2248. container.removeChild(container.lastChild);
  2249. }
  2250. }
  2251. /**
  2252. * True if the supplied DOM node has a direct React-rendered child that is
  2253. * not a React root element. Useful for warning in `render`,
  2254. * `unmountComponentAtNode`, etc.
  2255. *
  2256. * @param {?DOMElement} node The candidate DOM node.
  2257. * @return {boolean} True if the DOM element contains a direct child that was
  2258. * rendered by React but is not a root element.
  2259. * @internal
  2260. */
  2261. function hasNonRootReactChild(node) {
  2262. var reactRootID = getReactRootID(node);
  2263. return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false;
  2264. }
  2265. /**
  2266. * Returns the first (deepest) ancestor of a node which is rendered by this copy
  2267. * of React.
  2268. */
  2269. function findFirstReactDOMImpl(node) {
  2270. // This node might be from another React instance, so we make sure not to
  2271. // examine the node cache here
  2272. for (; node && node.parentNode !== node; node = node.parentNode) {
  2273. if (node.nodeType !== 1) {
  2274. // Not a DOMElement, therefore not a React component
  2275. continue;
  2276. }
  2277. var nodeID = internalGetID(node);
  2278. if (!nodeID) {
  2279. continue;
  2280. }
  2281. var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);
  2282. // If containersByReactRootID contains the container we find by crawling up
  2283. // the tree, we know that this instance of React rendered the node.
  2284. // nb. isValid's strategy (with containsNode) does not work because render
  2285. // trees may be nested and we don't want a false positive in that case.
  2286. var current = node;
  2287. var lastID;
  2288. do {
  2289. lastID = internalGetID(current);
  2290. current = current.parentNode;
  2291. if (current == null) {
  2292. // The passed-in node has been detached from the container it was
  2293. // originally rendered into.
  2294. return null;
  2295. }
  2296. } while (lastID !== reactRootID);
  2297. if (current === containersByReactRootID[reactRootID]) {
  2298. return node;
  2299. }
  2300. }
  2301. return null;
  2302. }
  2303. /**
  2304. * Temporary (?) hack so that we can store all top-level pending updates on
  2305. * composites instead of having to worry about different types of components
  2306. * here.
  2307. */
  2308. var TopLevelWrapper = function () {};
  2309. TopLevelWrapper.prototype.isReactComponent = {};
  2310. if (process.env.NODE_ENV !== 'production') {
  2311. TopLevelWrapper.displayName = 'TopLevelWrapper';
  2312. }
  2313. TopLevelWrapper.prototype.render = function () {
  2314. // this.props is actually a ReactElement
  2315. return this.props;
  2316. };
  2317. /**
  2318. * Mounting is the process of initializing a React component by creating its
  2319. * representative DOM elements and inserting them into a supplied `container`.
  2320. * Any prior content inside `container` is destroyed in the process.
  2321. *
  2322. * ReactMount.render(
  2323. * component,
  2324. * document.getElementById('container')
  2325. * );
  2326. *
  2327. * <div id="container"> <-- Supplied `container`.
  2328. * <div data-reactid=".3"> <-- Rendered reactRoot of React
  2329. * // ... component.
  2330. * </div>
  2331. * </div>
  2332. *
  2333. * Inside of `container`, the first element rendered is the "reactRoot".
  2334. */
  2335. var ReactMount = {
  2336. TopLevelWrapper: TopLevelWrapper,
  2337. /** Exposed for debugging purposes **/
  2338. _instancesByReactRootID: instancesByReactRootID,
  2339. /**
  2340. * This is a hook provided to support rendering React components while
  2341. * ensuring that the apparent scroll position of its `container` does not
  2342. * change.
  2343. *
  2344. * @param {DOMElement} container The `container` being rendered into.
  2345. * @param {function} renderCallback This must be called once to do the render.
  2346. */
  2347. scrollMonitor: function (container, renderCallback) {
  2348. renderCallback();
  2349. },
  2350. /**
  2351. * Take a component that's already mounted into the DOM and replace its props
  2352. * @param {ReactComponent} prevComponent component instance already in the DOM
  2353. * @param {ReactElement} nextElement component instance to render
  2354. * @param {DOMElement} container container to render into
  2355. * @param {?function} callback function triggered on completion
  2356. */
  2357. _updateRootComponent: function (prevComponent, nextElement, container, callback) {
  2358. ReactMount.scrollMonitor(container, function () {
  2359. ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);
  2360. if (callback) {
  2361. ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);
  2362. }
  2363. });
  2364. if (process.env.NODE_ENV !== 'production') {
  2365. // Record the root element in case it later gets transplanted.
  2366. rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);
  2367. }
  2368. return prevComponent;
  2369. },
  2370. /**
  2371. * Register a component into the instance map and starts scroll value
  2372. * monitoring
  2373. * @param {ReactComponent} nextComponent component instance to render
  2374. * @param {DOMElement} container container to render into
  2375. * @return {string} reactRoot ID prefix
  2376. */
  2377. _registerComponent: function (nextComponent, container) {
  2378. !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined;
  2379. ReactBrowserEventEmitter.ensureScrollValueMonitoring();
  2380. var reactRootID = ReactMount.registerContainer(container);
  2381. instancesByReactRootID[reactRootID] = nextComponent;
  2382. return reactRootID;
  2383. },
  2384. /**
  2385. * Render a new component into the DOM.
  2386. * @param {ReactElement} nextElement element to render
  2387. * @param {DOMElement} container container to render into
  2388. * @param {boolean} shouldReuseMarkup if we should skip the markup insertion
  2389. * @return {ReactComponent} nextComponent
  2390. */
  2391. _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {
  2392. // Various parts of our code (such as ReactCompositeComponent's
  2393. // _renderValidatedComponent) assume that calls to render aren't nested;
  2394. // verify that that's the case.
  2395. process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;
  2396. var componentInstance = instantiateReactComponent(nextElement, null);
  2397. var reactRootID = ReactMount._registerComponent(componentInstance, container);
  2398. // The initial render is synchronous but any updates that happen during
  2399. // rendering, in componentWillMount or componentDidMount, will be batched
  2400. // according to the current batching strategy.
  2401. ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context);
  2402. if (process.env.NODE_ENV !== 'production') {
  2403. // Record the root element in case it later gets transplanted.
  2404. rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);
  2405. }
  2406. return componentInstance;
  2407. },
  2408. /**
  2409. * Renders a React component into the DOM in the supplied `container`.
  2410. *
  2411. * If the React component was previously rendered into `container`, this will
  2412. * perform an update on it and only mutate the DOM as necessary to reflect the
  2413. * latest React component.
  2414. *
  2415. * @param {ReactComponent} parentComponent The conceptual parent of this render tree.
  2416. * @param {ReactElement} nextElement Component element to render.
  2417. * @param {DOMElement} container DOM element to render into.
  2418. * @param {?function} callback function triggered on completion
  2419. * @return {ReactComponent} Component instance rendered in `container`.
  2420. */
  2421. renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
  2422. !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined;
  2423. return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);
  2424. },
  2425. _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
  2426. !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :
  2427. // Check if it quacks like an element
  2428. nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined;
  2429. process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined;
  2430. var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);
  2431. var prevComponent = instancesByReactRootID[getReactRootID(container)];
  2432. if (prevComponent) {
  2433. var prevWrappedElement = prevComponent._currentElement;
  2434. var prevElement = prevWrappedElement.props;
  2435. if (shouldUpdateReactComponent(prevElement, nextElement)) {
  2436. var publicInst = prevComponent._renderedComponent.getPublicInstance();
  2437. var updatedCallback = callback && function () {
  2438. callback.call(publicInst);
  2439. };
  2440. ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);
  2441. return publicInst;
  2442. } else {
  2443. ReactMount.unmountComponentAtNode(container);
  2444. }
  2445. }
  2446. var reactRootElement = getReactRootElementInContainer(container);
  2447. var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);
  2448. var containerHasNonRootReactChild = hasNonRootReactChild(container);
  2449. if (process.env.NODE_ENV !== 'production') {
  2450. process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined;
  2451. if (!containerHasReactMarkup || reactRootElement.nextSibling) {
  2452. var rootElementSibling = reactRootElement;
  2453. while (rootElementSibling) {
  2454. if (internalGetID(rootElementSibling)) {
  2455. process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined;
  2456. break;
  2457. }
  2458. rootElementSibling = rootElementSibling.nextSibling;
  2459. }
  2460. }
  2461. }
  2462. var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;
  2463. var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();
  2464. if (callback) {
  2465. callback.call(component);
  2466. }
  2467. return component;
  2468. },
  2469. /**
  2470. * Renders a React component into the DOM in the supplied `container`.
  2471. *
  2472. * If the React component was previously rendered into `container`, this will
  2473. * perform an update on it and only mutate the DOM as necessary to reflect the
  2474. * latest React component.
  2475. *
  2476. * @param {ReactElement} nextElement Component element to render.
  2477. * @param {DOMElement} container DOM element to render into.
  2478. * @param {?function} callback function triggered on completion
  2479. * @return {ReactComponent} Component instance rendered in `container`.
  2480. */
  2481. render: function (nextElement, container, callback) {
  2482. return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);
  2483. },
  2484. /**
  2485. * Registers a container node into which React components will be rendered.
  2486. * This also creates the "reactRoot" ID that will be assigned to the element
  2487. * rendered within.
  2488. *
  2489. * @param {DOMElement} container DOM element to register as a container.
  2490. * @return {string} The "reactRoot" ID of elements rendered within.
  2491. */
  2492. registerContainer: function (container) {
  2493. var reactRootID = getReactRootID(container);
  2494. if (reactRootID) {
  2495. // If one exists, make sure it is a valid "reactRoot" ID.
  2496. reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);
  2497. }
  2498. if (!reactRootID) {
  2499. // No valid "reactRoot" ID found, create one.
  2500. reactRootID = ReactInstanceHandles.createReactRootID();
  2501. }
  2502. containersByReactRootID[reactRootID] = container;
  2503. return reactRootID;
  2504. },
  2505. /**
  2506. * Unmounts and destroys the React component rendered in the `container`.
  2507. *
  2508. * @param {DOMElement} container DOM element containing a React component.
  2509. * @return {boolean} True if a component was found in and unmounted from
  2510. * `container`
  2511. */
  2512. unmountComponentAtNode: function (container) {
  2513. // Various parts of our code (such as ReactCompositeComponent's
  2514. // _renderValidatedComponent) assume that calls to render aren't nested;
  2515. // verify that that's the case. (Strictly speaking, unmounting won't cause a
  2516. // render but we still don't expect to be in a render call here.)
  2517. process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;
  2518. !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined;
  2519. var reactRootID = getReactRootID(container);
  2520. var component = instancesByReactRootID[reactRootID];
  2521. if (!component) {
  2522. // Check if the node being unmounted was rendered by React, but isn't a
  2523. // root node.
  2524. var containerHasNonRootReactChild = hasNonRootReactChild(container);
  2525. // Check if the container itself is a React root node.
  2526. var containerID = internalGetID(container);
  2527. var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID);
  2528. if (process.env.NODE_ENV !== 'production') {
  2529. process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined;
  2530. }
  2531. return false;
  2532. }
  2533. ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container);
  2534. delete instancesByReactRootID[reactRootID];
  2535. delete containersByReactRootID[reactRootID];
  2536. if (process.env.NODE_ENV !== 'production') {
  2537. delete rootElementsByReactRootID[reactRootID];
  2538. }
  2539. return true;
  2540. },
  2541. /**
  2542. * Finds the container DOM element that contains React component to which the
  2543. * supplied DOM `id` belongs.
  2544. *
  2545. * @param {string} id The ID of an element rendered by a React component.
  2546. * @return {?DOMElement} DOM element that contains the `id`.
  2547. */
  2548. findReactContainerForID: function (id) {
  2549. var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);
  2550. var container = containersByReactRootID[reactRootID];
  2551. if (process.env.NODE_ENV !== 'production') {
  2552. var rootElement = rootElementsByReactRootID[reactRootID];
  2553. if (rootElement && rootElement.parentNode !== container) {
  2554. process.env.NODE_ENV !== 'production' ? warning(
  2555. // Call internalGetID here because getID calls isValid which calls
  2556. // findReactContainerForID (this function).
  2557. internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined;
  2558. var containerChild = container.firstChild;
  2559. if (containerChild && reactRootID === internalGetID(containerChild)) {
  2560. // If the container has a new child with the same ID as the old
  2561. // root element, then rootElementsByReactRootID[reactRootID] is
  2562. // just stale and needs to be updated. The case that deserves a
  2563. // warning is when the container is empty.
  2564. rootElementsByReactRootID[reactRootID] = containerChild;
  2565. } else {
  2566. process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined;
  2567. }
  2568. }
  2569. }
  2570. return container;
  2571. },
  2572. /**
  2573. * Finds an element rendered by React with the supplied ID.
  2574. *
  2575. * @param {string} id ID of a DOM node in the React component.
  2576. * @return {DOMElement} Root DOM node of the React component.
  2577. */
  2578. findReactNodeByID: function (id) {
  2579. var reactRoot = ReactMount.findReactContainerForID(id);
  2580. return ReactMount.findComponentRoot(reactRoot, id);
  2581. },
  2582. /**
  2583. * Traverses up the ancestors of the supplied node to find a node that is a
  2584. * DOM representation of a React component rendered by this copy of React.
  2585. *
  2586. * @param {*} node
  2587. * @return {?DOMEventTarget}
  2588. * @internal
  2589. */
  2590. getFirstReactDOM: function (node) {
  2591. return findFirstReactDOMImpl(node);
  2592. },
  2593. /**
  2594. * Finds a node with the supplied `targetID` inside of the supplied
  2595. * `ancestorNode`. Exploits the ID naming scheme to perform the search
  2596. * quickly.
  2597. *
  2598. * @param {DOMEventTarget} ancestorNode Search from this root.
  2599. * @pararm {string} targetID ID of the DOM representation of the component.
  2600. * @return {DOMEventTarget} DOM node with the supplied `targetID`.
  2601. * @internal
  2602. */
  2603. findComponentRoot: function (ancestorNode, targetID) {
  2604. var firstChildren = findComponentRootReusableArray;
  2605. var childIndex = 0;
  2606. var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;
  2607. if (process.env.NODE_ENV !== 'production') {
  2608. // This will throw on the next line; give an early warning
  2609. process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\'t find the root component node for data-reactid value ' + '`%s`. If you\'re seeing this message, it probably means that ' + 'you\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined;
  2610. }
  2611. firstChildren[0] = deepestAncestor.firstChild;
  2612. firstChildren.length = 1;
  2613. while (childIndex < firstChildren.length) {
  2614. var child = firstChildren[childIndex++];
  2615. var targetChild;
  2616. while (child) {
  2617. var childID = ReactMount.getID(child);
  2618. if (childID) {
  2619. // Even if we find the node we're looking for, we finish looping
  2620. // through its siblings to ensure they're cached so that we don't have
  2621. // to revisit this node again. Otherwise, we make n^2 calls to getID
  2622. // when visiting the many children of a single node in order.
  2623. if (targetID === childID) {
  2624. targetChild = child;
  2625. } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {
  2626. // If we find a child whose ID is an ancestor of the given ID,
  2627. // then we can be sure that we only want to search the subtree
  2628. // rooted at this child, so we can throw out the rest of the
  2629. // search state.
  2630. firstChildren.length = childIndex = 0;
  2631. firstChildren.push(child.firstChild);
  2632. }
  2633. } else {
  2634. // If this child had no ID, then there's a chance that it was
  2635. // injected automatically by the browser, as when a `<table>`
  2636. // element sprouts an extra `<tbody>` child as a side effect of
  2637. // `.innerHTML` parsing. Optimistically continue down this
  2638. // branch, but not before examining the other siblings.
  2639. firstChildren.push(child.firstChild);
  2640. }
  2641. child = child.nextSibling;
  2642. }
  2643. if (targetChild) {
  2644. // Emptying firstChildren/findComponentRootReusableArray is
  2645. // not necessary for correctness, but it helps the GC reclaim
  2646. // any nodes that were left at the end of the search.
  2647. firstChildren.length = 0;
  2648. return targetChild;
  2649. }
  2650. }
  2651. firstChildren.length = 0;
  2652. true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined;
  2653. },
  2654. _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) {
  2655. !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined;
  2656. if (shouldReuseMarkup) {
  2657. var rootElement = getReactRootElementInContainer(container);
  2658. if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {
  2659. return;
  2660. } else {
  2661. var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
  2662. rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
  2663. var rootMarkup = rootElement.outerHTML;
  2664. rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);
  2665. var normalizedMarkup = markup;
  2666. if (process.env.NODE_ENV !== 'production') {
  2667. // because rootMarkup is retrieved from the DOM, various normalizations
  2668. // will have occurred which will not be present in `markup`. Here,
  2669. // insert markup into a <div> or <iframe> depending on the container
  2670. // type to perform the same normalizations before comparing.
  2671. var normalizer;
  2672. if (container.nodeType === ELEMENT_NODE_TYPE) {
  2673. normalizer = document.createElement('div');
  2674. normalizer.innerHTML = markup;
  2675. normalizedMarkup = normalizer.innerHTML;
  2676. } else {
  2677. normalizer = document.createElement('iframe');
  2678. document.body.appendChild(normalizer);
  2679. normalizer.contentDocument.write(markup);
  2680. normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;
  2681. document.body.removeChild(normalizer);
  2682. }
  2683. }
  2684. var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);
  2685. var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);
  2686. !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s', difference) : invariant(false) : undefined;
  2687. if (process.env.NODE_ENV !== 'production') {
  2688. process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : undefined;
  2689. }
  2690. }
  2691. }
  2692. !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;
  2693. if (transaction.useCreateElement) {
  2694. while (container.lastChild) {
  2695. container.removeChild(container.lastChild);
  2696. }
  2697. container.appendChild(markup);
  2698. } else {
  2699. setInnerHTML(container, markup);
  2700. }
  2701. },
  2702. ownerDocumentContextKey: ownerDocumentContextKey,
  2703. /**
  2704. * React ID utilities.
  2705. */
  2706. getReactRootID: getReactRootID,
  2707. getID: getID,
  2708. setID: setID,
  2709. getNode: getNode,
  2710. getNodeFromInstance: getNodeFromInstance,
  2711. isValid: isValid,
  2712. purgeID: purgeID
  2713. };
  2714. ReactPerf.measureMethods(ReactMount, 'ReactMount', {
  2715. _renderNewRootComponent: '_renderNewRootComponent',
  2716. _mountImageIntoNode: '_mountImageIntoNode'
  2717. });
  2718. module.exports = ReactMount;
  2719. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  2720. /***/ },
  2721. /* 29 */
  2722. /***/ function(module, exports, __webpack_require__) {
  2723. /**
  2724. * Copyright 2013-2015, Facebook, Inc.
  2725. * All rights reserved.
  2726. *
  2727. * This source code is licensed under the BSD-style license found in the
  2728. * LICENSE file in the root directory of this source tree. An additional grant
  2729. * of patent rights can be found in the PATENTS file in the same directory.
  2730. *
  2731. * @providesModule ReactBrowserEventEmitter
  2732. * @typechecks static-only
  2733. */
  2734. 'use strict';
  2735. var EventConstants = __webpack_require__(30);
  2736. var EventPluginHub = __webpack_require__(31);
  2737. var EventPluginRegistry = __webpack_require__(32);
  2738. var ReactEventEmitterMixin = __webpack_require__(37);
  2739. var ReactPerf = __webpack_require__(18);
  2740. var ViewportMetrics = __webpack_require__(38);
  2741. var assign = __webpack_require__(39);
  2742. var isEventSupported = __webpack_require__(40);
  2743. /**
  2744. * Summary of `ReactBrowserEventEmitter` event handling:
  2745. *
  2746. * - Top-level delegation is used to trap most native browser events. This
  2747. * may only occur in the main thread and is the responsibility of
  2748. * ReactEventListener, which is injected and can therefore support pluggable
  2749. * event sources. This is the only work that occurs in the main thread.
  2750. *
  2751. * - We normalize and de-duplicate events to account for browser quirks. This
  2752. * may be done in the worker thread.
  2753. *
  2754. * - Forward these native events (with the associated top-level type used to
  2755. * trap it) to `EventPluginHub`, which in turn will ask plugins if they want
  2756. * to extract any synthetic events.
  2757. *
  2758. * - The `EventPluginHub` will then process each event by annotating them with
  2759. * "dispatches", a sequence of listeners and IDs that care about that event.
  2760. *
  2761. * - The `EventPluginHub` then dispatches the events.
  2762. *
  2763. * Overview of React and the event system:
  2764. *
  2765. * +------------+ .
  2766. * | DOM | .
  2767. * +------------+ .
  2768. * | .
  2769. * v .
  2770. * +------------+ .
  2771. * | ReactEvent | .
  2772. * | Listener | .
  2773. * +------------+ . +-----------+
  2774. * | . +--------+|SimpleEvent|
  2775. * | . | |Plugin |
  2776. * +-----|------+ . v +-----------+
  2777. * | | | . +--------------+ +------------+
  2778. * | +-----------.--->|EventPluginHub| | Event |
  2779. * | | . | | +-----------+ | Propagators|
  2780. * | ReactEvent | . | | |TapEvent | |------------|
  2781. * | Emitter | . | |<---+|Plugin | |other plugin|
  2782. * | | . | | +-----------+ | utilities |
  2783. * | +-----------.--->| | +------------+
  2784. * | | | . +--------------+
  2785. * +-----|------+ . ^ +-----------+
  2786. * | . | |Enter/Leave|
  2787. * + . +-------+|Plugin |
  2788. * +-------------+ . +-----------+
  2789. * | application | .
  2790. * |-------------| .
  2791. * | | .
  2792. * | | .
  2793. * +-------------+ .
  2794. * .
  2795. * React Core . General Purpose Event Plugin System
  2796. */
  2797. var alreadyListeningTo = {};
  2798. var isMonitoringScrollValue = false;
  2799. var reactTopListenersCounter = 0;
  2800. // For events like 'submit' which don't consistently bubble (which we trap at a
  2801. // lower node than `document`), binding at `document` would cause duplicate
  2802. // events so we don't include them here
  2803. var topEventMapping = {
  2804. topAbort: 'abort',
  2805. topBlur: 'blur',
  2806. topCanPlay: 'canplay',
  2807. topCanPlayThrough: 'canplaythrough',
  2808. topChange: 'change',
  2809. topClick: 'click',
  2810. topCompositionEnd: 'compositionend',
  2811. topCompositionStart: 'compositionstart',
  2812. topCompositionUpdate: 'compositionupdate',
  2813. topContextMenu: 'contextmenu',
  2814. topCopy: 'copy',
  2815. topCut: 'cut',
  2816. topDoubleClick: 'dblclick',
  2817. topDrag: 'drag',
  2818. topDragEnd: 'dragend',
  2819. topDragEnter: 'dragenter',
  2820. topDragExit: 'dragexit',
  2821. topDragLeave: 'dragleave',
  2822. topDragOver: 'dragover',
  2823. topDragStart: 'dragstart',
  2824. topDrop: 'drop',
  2825. topDurationChange: 'durationchange',
  2826. topEmptied: 'emptied',
  2827. topEncrypted: 'encrypted',
  2828. topEnded: 'ended',
  2829. topError: 'error',
  2830. topFocus: 'focus',
  2831. topInput: 'input',
  2832. topKeyDown: 'keydown',
  2833. topKeyPress: 'keypress',
  2834. topKeyUp: 'keyup',
  2835. topLoadedData: 'loadeddata',
  2836. topLoadedMetadata: 'loadedmetadata',
  2837. topLoadStart: 'loadstart',
  2838. topMouseDown: 'mousedown',
  2839. topMouseMove: 'mousemove',
  2840. topMouseOut: 'mouseout',
  2841. topMouseOver: 'mouseover',
  2842. topMouseUp: 'mouseup',
  2843. topPaste: 'paste',
  2844. topPause: 'pause',
  2845. topPlay: 'play',
  2846. topPlaying: 'playing',
  2847. topProgress: 'progress',
  2848. topRateChange: 'ratechange',
  2849. topScroll: 'scroll',
  2850. topSeeked: 'seeked',
  2851. topSeeking: 'seeking',
  2852. topSelectionChange: 'selectionchange',
  2853. topStalled: 'stalled',
  2854. topSuspend: 'suspend',
  2855. topTextInput: 'textInput',
  2856. topTimeUpdate: 'timeupdate',
  2857. topTouchCancel: 'touchcancel',
  2858. topTouchEnd: 'touchend',
  2859. topTouchMove: 'touchmove',
  2860. topTouchStart: 'touchstart',
  2861. topVolumeChange: 'volumechange',
  2862. topWaiting: 'waiting',
  2863. topWheel: 'wheel'
  2864. };
  2865. /**
  2866. * To ensure no conflicts with other potential React instances on the page
  2867. */
  2868. var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);
  2869. function getListeningForDocument(mountAt) {
  2870. // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`
  2871. // directly.
  2872. if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {
  2873. mountAt[topListenersIDKey] = reactTopListenersCounter++;
  2874. alreadyListeningTo[mountAt[topListenersIDKey]] = {};
  2875. }
  2876. return alreadyListeningTo[mountAt[topListenersIDKey]];
  2877. }
  2878. /**
  2879. * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
  2880. * example:
  2881. *
  2882. * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);
  2883. *
  2884. * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
  2885. *
  2886. * @internal
  2887. */
  2888. var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {
  2889. /**
  2890. * Injectable event backend
  2891. */
  2892. ReactEventListener: null,
  2893. injection: {
  2894. /**
  2895. * @param {object} ReactEventListener
  2896. */
  2897. injectReactEventListener: function (ReactEventListener) {
  2898. ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);
  2899. ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;
  2900. }
  2901. },
  2902. /**
  2903. * Sets whether or not any created callbacks should be enabled.
  2904. *
  2905. * @param {boolean} enabled True if callbacks should be enabled.
  2906. */
  2907. setEnabled: function (enabled) {
  2908. if (ReactBrowserEventEmitter.ReactEventListener) {
  2909. ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);
  2910. }
  2911. },
  2912. /**
  2913. * @return {boolean} True if callbacks are enabled.
  2914. */
  2915. isEnabled: function () {
  2916. return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());
  2917. },
  2918. /**
  2919. * We listen for bubbled touch events on the document object.
  2920. *
  2921. * Firefox v8.01 (and possibly others) exhibited strange behavior when
  2922. * mounting `onmousemove` events at some node that was not the document
  2923. * element. The symptoms were that if your mouse is not moving over something
  2924. * contained within that mount point (for example on the background) the
  2925. * top-level listeners for `onmousemove` won't be called. However, if you
  2926. * register the `mousemove` on the document object, then it will of course
  2927. * catch all `mousemove`s. This along with iOS quirks, justifies restricting
  2928. * top-level listeners to the document object only, at least for these
  2929. * movement types of events and possibly all events.
  2930. *
  2931. * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
  2932. *
  2933. * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but
  2934. * they bubble to document.
  2935. *
  2936. * @param {string} registrationName Name of listener (e.g. `onClick`).
  2937. * @param {object} contentDocumentHandle Document which owns the container
  2938. */
  2939. listenTo: function (registrationName, contentDocumentHandle) {
  2940. var mountAt = contentDocumentHandle;
  2941. var isListening = getListeningForDocument(mountAt);
  2942. var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];
  2943. var topLevelTypes = EventConstants.topLevelTypes;
  2944. for (var i = 0; i < dependencies.length; i++) {
  2945. var dependency = dependencies[i];
  2946. if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {
  2947. if (dependency === topLevelTypes.topWheel) {
  2948. if (isEventSupported('wheel')) {
  2949. ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);
  2950. } else if (isEventSupported('mousewheel')) {
  2951. ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);
  2952. } else {
  2953. // Firefox needs to capture a different mouse scroll event.
  2954. // @see http://www.quirksmode.org/dom/events/tests/scroll.html
  2955. ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);
  2956. }
  2957. } else if (dependency === topLevelTypes.topScroll) {
  2958. if (isEventSupported('scroll', true)) {
  2959. ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);
  2960. } else {
  2961. ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);
  2962. }
  2963. } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {
  2964. if (isEventSupported('focus', true)) {
  2965. ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);
  2966. ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);
  2967. } else if (isEventSupported('focusin')) {
  2968. // IE has `focusin` and `focusout` events which bubble.
  2969. // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
  2970. ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);
  2971. ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);
  2972. }
  2973. // to make sure blur and focus event listeners are only attached once
  2974. isListening[topLevelTypes.topBlur] = true;
  2975. isListening[topLevelTypes.topFocus] = true;
  2976. } else if (topEventMapping.hasOwnProperty(dependency)) {
  2977. ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);
  2978. }
  2979. isListening[dependency] = true;
  2980. }
  2981. }
  2982. },
  2983. trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
  2984. return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);
  2985. },
  2986. trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
  2987. return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);
  2988. },
  2989. /**
  2990. * Listens to window scroll and resize events. We cache scroll values so that
  2991. * application code can access them without triggering reflows.
  2992. *
  2993. * NOTE: Scroll events do not bubble.
  2994. *
  2995. * @see http://www.quirksmode.org/dom/events/scroll.html
  2996. */
  2997. ensureScrollValueMonitoring: function () {
  2998. if (!isMonitoringScrollValue) {
  2999. var refresh = ViewportMetrics.refreshScrollValues;
  3000. ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
  3001. isMonitoringScrollValue = true;
  3002. }
  3003. },
  3004. eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,
  3005. registrationNameModules: EventPluginHub.registrationNameModules,
  3006. putListener: EventPluginHub.putListener,
  3007. getListener: EventPluginHub.getListener,
  3008. deleteListener: EventPluginHub.deleteListener,
  3009. deleteAllListeners: EventPluginHub.deleteAllListeners
  3010. });
  3011. ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {
  3012. putListener: 'putListener',
  3013. deleteListener: 'deleteListener'
  3014. });
  3015. module.exports = ReactBrowserEventEmitter;
  3016. /***/ },
  3017. /* 30 */
  3018. /***/ function(module, exports, __webpack_require__) {
  3019. /**
  3020. * Copyright 2013-2015, Facebook, Inc.
  3021. * All rights reserved.
  3022. *
  3023. * This source code is licensed under the BSD-style license found in the
  3024. * LICENSE file in the root directory of this source tree. An additional grant
  3025. * of patent rights can be found in the PATENTS file in the same directory.
  3026. *
  3027. * @providesModule EventConstants
  3028. */
  3029. 'use strict';
  3030. var keyMirror = __webpack_require__(17);
  3031. var PropagationPhases = keyMirror({ bubbled: null, captured: null });
  3032. /**
  3033. * Types of raw signals from the browser caught at the top level.
  3034. */
  3035. var topLevelTypes = keyMirror({
  3036. topAbort: null,
  3037. topBlur: null,
  3038. topCanPlay: null,
  3039. topCanPlayThrough: null,
  3040. topChange: null,
  3041. topClick: null,
  3042. topCompositionEnd: null,
  3043. topCompositionStart: null,
  3044. topCompositionUpdate: null,
  3045. topContextMenu: null,
  3046. topCopy: null,
  3047. topCut: null,
  3048. topDoubleClick: null,
  3049. topDrag: null,
  3050. topDragEnd: null,
  3051. topDragEnter: null,
  3052. topDragExit: null,
  3053. topDragLeave: null,
  3054. topDragOver: null,
  3055. topDragStart: null,
  3056. topDrop: null,
  3057. topDurationChange: null,
  3058. topEmptied: null,
  3059. topEncrypted: null,
  3060. topEnded: null,
  3061. topError: null,
  3062. topFocus: null,
  3063. topInput: null,
  3064. topKeyDown: null,
  3065. topKeyPress: null,
  3066. topKeyUp: null,
  3067. topLoad: null,
  3068. topLoadedData: null,
  3069. topLoadedMetadata: null,
  3070. topLoadStart: null,
  3071. topMouseDown: null,
  3072. topMouseMove: null,
  3073. topMouseOut: null,
  3074. topMouseOver: null,
  3075. topMouseUp: null,
  3076. topPaste: null,
  3077. topPause: null,
  3078. topPlay: null,
  3079. topPlaying: null,
  3080. topProgress: null,
  3081. topRateChange: null,
  3082. topReset: null,
  3083. topScroll: null,
  3084. topSeeked: null,
  3085. topSeeking: null,
  3086. topSelectionChange: null,
  3087. topStalled: null,
  3088. topSubmit: null,
  3089. topSuspend: null,
  3090. topTextInput: null,
  3091. topTimeUpdate: null,
  3092. topTouchCancel: null,
  3093. topTouchEnd: null,
  3094. topTouchMove: null,
  3095. topTouchStart: null,
  3096. topVolumeChange: null,
  3097. topWaiting: null,
  3098. topWheel: null
  3099. });
  3100. var EventConstants = {
  3101. topLevelTypes: topLevelTypes,
  3102. PropagationPhases: PropagationPhases
  3103. };
  3104. module.exports = EventConstants;
  3105. /***/ },
  3106. /* 31 */
  3107. /***/ function(module, exports, __webpack_require__) {
  3108. /* WEBPACK VAR INJECTION */(function(process) {/**
  3109. * Copyright 2013-2015, Facebook, Inc.
  3110. * All rights reserved.
  3111. *
  3112. * This source code is licensed under the BSD-style license found in the
  3113. * LICENSE file in the root directory of this source tree. An additional grant
  3114. * of patent rights can be found in the PATENTS file in the same directory.
  3115. *
  3116. * @providesModule EventPluginHub
  3117. */
  3118. 'use strict';
  3119. var EventPluginRegistry = __webpack_require__(32);
  3120. var EventPluginUtils = __webpack_require__(33);
  3121. var ReactErrorUtils = __webpack_require__(34);
  3122. var accumulateInto = __webpack_require__(35);
  3123. var forEachAccumulated = __webpack_require__(36);
  3124. var invariant = __webpack_require__(13);
  3125. var warning = __webpack_require__(25);
  3126. /**
  3127. * Internal store for event listeners
  3128. */
  3129. var listenerBank = {};
  3130. /**
  3131. * Internal queue of events that have accumulated their dispatches and are
  3132. * waiting to have their dispatches executed.
  3133. */
  3134. var eventQueue = null;
  3135. /**
  3136. * Dispatches an event and releases it back into the pool, unless persistent.
  3137. *
  3138. * @param {?object} event Synthetic event to be dispatched.
  3139. * @param {boolean} simulated If the event is simulated (changes exn behavior)
  3140. * @private
  3141. */
  3142. var executeDispatchesAndRelease = function (event, simulated) {
  3143. if (event) {
  3144. EventPluginUtils.executeDispatchesInOrder(event, simulated);
  3145. if (!event.isPersistent()) {
  3146. event.constructor.release(event);
  3147. }
  3148. }
  3149. };
  3150. var executeDispatchesAndReleaseSimulated = function (e) {
  3151. return executeDispatchesAndRelease(e, true);
  3152. };
  3153. var executeDispatchesAndReleaseTopLevel = function (e) {
  3154. return executeDispatchesAndRelease(e, false);
  3155. };
  3156. /**
  3157. * - `InstanceHandle`: [required] Module that performs logical traversals of DOM
  3158. * hierarchy given ids of the logical DOM elements involved.
  3159. */
  3160. var InstanceHandle = null;
  3161. function validateInstanceHandle() {
  3162. var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;
  3163. process.env.NODE_ENV !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined;
  3164. }
  3165. /**
  3166. * This is a unified interface for event plugins to be installed and configured.
  3167. *
  3168. * Event plugins can implement the following properties:
  3169. *
  3170. * `extractEvents` {function(string, DOMEventTarget, string, object): *}
  3171. * Required. When a top-level event is fired, this method is expected to
  3172. * extract synthetic events that will in turn be queued and dispatched.
  3173. *
  3174. * `eventTypes` {object}
  3175. * Optional, plugins that fire events must publish a mapping of registration
  3176. * names that are used to register listeners. Values of this mapping must
  3177. * be objects that contain `registrationName` or `phasedRegistrationNames`.
  3178. *
  3179. * `executeDispatch` {function(object, function, string)}
  3180. * Optional, allows plugins to override how an event gets dispatched. By
  3181. * default, the listener is simply invoked.
  3182. *
  3183. * Each plugin that is injected into `EventsPluginHub` is immediately operable.
  3184. *
  3185. * @public
  3186. */
  3187. var EventPluginHub = {
  3188. /**
  3189. * Methods for injecting dependencies.
  3190. */
  3191. injection: {
  3192. /**
  3193. * @param {object} InjectedMount
  3194. * @public
  3195. */
  3196. injectMount: EventPluginUtils.injection.injectMount,
  3197. /**
  3198. * @param {object} InjectedInstanceHandle
  3199. * @public
  3200. */
  3201. injectInstanceHandle: function (InjectedInstanceHandle) {
  3202. InstanceHandle = InjectedInstanceHandle;
  3203. if (process.env.NODE_ENV !== 'production') {
  3204. validateInstanceHandle();
  3205. }
  3206. },
  3207. getInstanceHandle: function () {
  3208. if (process.env.NODE_ENV !== 'production') {
  3209. validateInstanceHandle();
  3210. }
  3211. return InstanceHandle;
  3212. },
  3213. /**
  3214. * @param {array} InjectedEventPluginOrder
  3215. * @public
  3216. */
  3217. injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,
  3218. /**
  3219. * @param {object} injectedNamesToPlugins Map from names to plugin modules.
  3220. */
  3221. injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName
  3222. },
  3223. eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,
  3224. registrationNameModules: EventPluginRegistry.registrationNameModules,
  3225. /**
  3226. * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
  3227. *
  3228. * @param {string} id ID of the DOM element.
  3229. * @param {string} registrationName Name of listener (e.g. `onClick`).
  3230. * @param {?function} listener The callback to store.
  3231. */
  3232. putListener: function (id, registrationName, listener) {
  3233. !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined;
  3234. var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
  3235. bankForRegistrationName[id] = listener;
  3236. var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
  3237. if (PluginModule && PluginModule.didPutListener) {
  3238. PluginModule.didPutListener(id, registrationName, listener);
  3239. }
  3240. },
  3241. /**
  3242. * @param {string} id ID of the DOM element.
  3243. * @param {string} registrationName Name of listener (e.g. `onClick`).
  3244. * @return {?function} The stored callback.
  3245. */
  3246. getListener: function (id, registrationName) {
  3247. var bankForRegistrationName = listenerBank[registrationName];
  3248. return bankForRegistrationName && bankForRegistrationName[id];
  3249. },
  3250. /**
  3251. * Deletes a listener from the registration bank.
  3252. *
  3253. * @param {string} id ID of the DOM element.
  3254. * @param {string} registrationName Name of listener (e.g. `onClick`).
  3255. */
  3256. deleteListener: function (id, registrationName) {
  3257. var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
  3258. if (PluginModule && PluginModule.willDeleteListener) {
  3259. PluginModule.willDeleteListener(id, registrationName);
  3260. }
  3261. var bankForRegistrationName = listenerBank[registrationName];
  3262. // TODO: This should never be null -- when is it?
  3263. if (bankForRegistrationName) {
  3264. delete bankForRegistrationName[id];
  3265. }
  3266. },
  3267. /**
  3268. * Deletes all listeners for the DOM element with the supplied ID.
  3269. *
  3270. * @param {string} id ID of the DOM element.
  3271. */
  3272. deleteAllListeners: function (id) {
  3273. for (var registrationName in listenerBank) {
  3274. if (!listenerBank[registrationName][id]) {
  3275. continue;
  3276. }
  3277. var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
  3278. if (PluginModule && PluginModule.willDeleteListener) {
  3279. PluginModule.willDeleteListener(id, registrationName);
  3280. }
  3281. delete listenerBank[registrationName][id];
  3282. }
  3283. },
  3284. /**
  3285. * Allows registered plugins an opportunity to extract events from top-level
  3286. * native browser events.
  3287. *
  3288. * @param {string} topLevelType Record from `EventConstants`.
  3289. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  3290. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  3291. * @param {object} nativeEvent Native browser event.
  3292. * @return {*} An accumulation of synthetic events.
  3293. * @internal
  3294. */
  3295. extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  3296. var events;
  3297. var plugins = EventPluginRegistry.plugins;
  3298. for (var i = 0; i < plugins.length; i++) {
  3299. // Not every plugin in the ordering may be loaded at runtime.
  3300. var possiblePlugin = plugins[i];
  3301. if (possiblePlugin) {
  3302. var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);
  3303. if (extractedEvents) {
  3304. events = accumulateInto(events, extractedEvents);
  3305. }
  3306. }
  3307. }
  3308. return events;
  3309. },
  3310. /**
  3311. * Enqueues a synthetic event that should be dispatched when
  3312. * `processEventQueue` is invoked.
  3313. *
  3314. * @param {*} events An accumulation of synthetic events.
  3315. * @internal
  3316. */
  3317. enqueueEvents: function (events) {
  3318. if (events) {
  3319. eventQueue = accumulateInto(eventQueue, events);
  3320. }
  3321. },
  3322. /**
  3323. * Dispatches all synthetic events on the event queue.
  3324. *
  3325. * @internal
  3326. */
  3327. processEventQueue: function (simulated) {
  3328. // Set `eventQueue` to null before processing it so that we can tell if more
  3329. // events get enqueued while processing.
  3330. var processingEventQueue = eventQueue;
  3331. eventQueue = null;
  3332. if (simulated) {
  3333. forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);
  3334. } else {
  3335. forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);
  3336. }
  3337. !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined;
  3338. // This would be a good time to rethrow if any of the event handlers threw.
  3339. ReactErrorUtils.rethrowCaughtError();
  3340. },
  3341. /**
  3342. * These are needed for tests only. Do not use!
  3343. */
  3344. __purge: function () {
  3345. listenerBank = {};
  3346. },
  3347. __getListenerBank: function () {
  3348. return listenerBank;
  3349. }
  3350. };
  3351. module.exports = EventPluginHub;
  3352. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  3353. /***/ },
  3354. /* 32 */
  3355. /***/ function(module, exports, __webpack_require__) {
  3356. /* WEBPACK VAR INJECTION */(function(process) {/**
  3357. * Copyright 2013-2015, Facebook, Inc.
  3358. * All rights reserved.
  3359. *
  3360. * This source code is licensed under the BSD-style license found in the
  3361. * LICENSE file in the root directory of this source tree. An additional grant
  3362. * of patent rights can be found in the PATENTS file in the same directory.
  3363. *
  3364. * @providesModule EventPluginRegistry
  3365. * @typechecks static-only
  3366. */
  3367. 'use strict';
  3368. var invariant = __webpack_require__(13);
  3369. /**
  3370. * Injectable ordering of event plugins.
  3371. */
  3372. var EventPluginOrder = null;
  3373. /**
  3374. * Injectable mapping from names to event plugin modules.
  3375. */
  3376. var namesToPlugins = {};
  3377. /**
  3378. * Recomputes the plugin list using the injected plugins and plugin ordering.
  3379. *
  3380. * @private
  3381. */
  3382. function recomputePluginOrdering() {
  3383. if (!EventPluginOrder) {
  3384. // Wait until an `EventPluginOrder` is injected.
  3385. return;
  3386. }
  3387. for (var pluginName in namesToPlugins) {
  3388. var PluginModule = namesToPlugins[pluginName];
  3389. var pluginIndex = EventPluginOrder.indexOf(pluginName);
  3390. !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined;
  3391. if (EventPluginRegistry.plugins[pluginIndex]) {
  3392. continue;
  3393. }
  3394. !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined;
  3395. EventPluginRegistry.plugins[pluginIndex] = PluginModule;
  3396. var publishedEvents = PluginModule.eventTypes;
  3397. for (var eventName in publishedEvents) {
  3398. !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined;
  3399. }
  3400. }
  3401. }
  3402. /**
  3403. * Publishes an event so that it can be dispatched by the supplied plugin.
  3404. *
  3405. * @param {object} dispatchConfig Dispatch configuration for the event.
  3406. * @param {object} PluginModule Plugin publishing the event.
  3407. * @return {boolean} True if the event was successfully published.
  3408. * @private
  3409. */
  3410. function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
  3411. !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined;
  3412. EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
  3413. var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
  3414. if (phasedRegistrationNames) {
  3415. for (var phaseName in phasedRegistrationNames) {
  3416. if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
  3417. var phasedRegistrationName = phasedRegistrationNames[phaseName];
  3418. publishRegistrationName(phasedRegistrationName, PluginModule, eventName);
  3419. }
  3420. }
  3421. return true;
  3422. } else if (dispatchConfig.registrationName) {
  3423. publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);
  3424. return true;
  3425. }
  3426. return false;
  3427. }
  3428. /**
  3429. * Publishes a registration name that is used to identify dispatched events and
  3430. * can be used with `EventPluginHub.putListener` to register listeners.
  3431. *
  3432. * @param {string} registrationName Registration name to add.
  3433. * @param {object} PluginModule Plugin publishing the event.
  3434. * @private
  3435. */
  3436. function publishRegistrationName(registrationName, PluginModule, eventName) {
  3437. !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined;
  3438. EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
  3439. EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
  3440. }
  3441. /**
  3442. * Registers plugins so that they can extract and dispatch events.
  3443. *
  3444. * @see {EventPluginHub}
  3445. */
  3446. var EventPluginRegistry = {
  3447. /**
  3448. * Ordered list of injected plugins.
  3449. */
  3450. plugins: [],
  3451. /**
  3452. * Mapping from event name to dispatch config
  3453. */
  3454. eventNameDispatchConfigs: {},
  3455. /**
  3456. * Mapping from registration name to plugin module
  3457. */
  3458. registrationNameModules: {},
  3459. /**
  3460. * Mapping from registration name to event name
  3461. */
  3462. registrationNameDependencies: {},
  3463. /**
  3464. * Injects an ordering of plugins (by plugin name). This allows the ordering
  3465. * to be decoupled from injection of the actual plugins so that ordering is
  3466. * always deterministic regardless of packaging, on-the-fly injection, etc.
  3467. *
  3468. * @param {array} InjectedEventPluginOrder
  3469. * @internal
  3470. * @see {EventPluginHub.injection.injectEventPluginOrder}
  3471. */
  3472. injectEventPluginOrder: function (InjectedEventPluginOrder) {
  3473. !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined;
  3474. // Clone the ordering so it cannot be dynamically mutated.
  3475. EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
  3476. recomputePluginOrdering();
  3477. },
  3478. /**
  3479. * Injects plugins to be used by `EventPluginHub`. The plugin names must be
  3480. * in the ordering injected by `injectEventPluginOrder`.
  3481. *
  3482. * Plugins can be injected as part of page initialization or on-the-fly.
  3483. *
  3484. * @param {object} injectedNamesToPlugins Map from names to plugin modules.
  3485. * @internal
  3486. * @see {EventPluginHub.injection.injectEventPluginsByName}
  3487. */
  3488. injectEventPluginsByName: function (injectedNamesToPlugins) {
  3489. var isOrderingDirty = false;
  3490. for (var pluginName in injectedNamesToPlugins) {
  3491. if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {
  3492. continue;
  3493. }
  3494. var PluginModule = injectedNamesToPlugins[pluginName];
  3495. if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
  3496. !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined;
  3497. namesToPlugins[pluginName] = PluginModule;
  3498. isOrderingDirty = true;
  3499. }
  3500. }
  3501. if (isOrderingDirty) {
  3502. recomputePluginOrdering();
  3503. }
  3504. },
  3505. /**
  3506. * Looks up the plugin for the supplied event.
  3507. *
  3508. * @param {object} event A synthetic event.
  3509. * @return {?object} The plugin that created the supplied event.
  3510. * @internal
  3511. */
  3512. getPluginModuleForEvent: function (event) {
  3513. var dispatchConfig = event.dispatchConfig;
  3514. if (dispatchConfig.registrationName) {
  3515. return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;
  3516. }
  3517. for (var phase in dispatchConfig.phasedRegistrationNames) {
  3518. if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {
  3519. continue;
  3520. }
  3521. var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];
  3522. if (PluginModule) {
  3523. return PluginModule;
  3524. }
  3525. }
  3526. return null;
  3527. },
  3528. /**
  3529. * Exposed for unit testing.
  3530. * @private
  3531. */
  3532. _resetEventPlugins: function () {
  3533. EventPluginOrder = null;
  3534. for (var pluginName in namesToPlugins) {
  3535. if (namesToPlugins.hasOwnProperty(pluginName)) {
  3536. delete namesToPlugins[pluginName];
  3537. }
  3538. }
  3539. EventPluginRegistry.plugins.length = 0;
  3540. var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;
  3541. for (var eventName in eventNameDispatchConfigs) {
  3542. if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {
  3543. delete eventNameDispatchConfigs[eventName];
  3544. }
  3545. }
  3546. var registrationNameModules = EventPluginRegistry.registrationNameModules;
  3547. for (var registrationName in registrationNameModules) {
  3548. if (registrationNameModules.hasOwnProperty(registrationName)) {
  3549. delete registrationNameModules[registrationName];
  3550. }
  3551. }
  3552. }
  3553. };
  3554. module.exports = EventPluginRegistry;
  3555. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  3556. /***/ },
  3557. /* 33 */
  3558. /***/ function(module, exports, __webpack_require__) {
  3559. /* WEBPACK VAR INJECTION */(function(process) {/**
  3560. * Copyright 2013-2015, Facebook, Inc.
  3561. * All rights reserved.
  3562. *
  3563. * This source code is licensed under the BSD-style license found in the
  3564. * LICENSE file in the root directory of this source tree. An additional grant
  3565. * of patent rights can be found in the PATENTS file in the same directory.
  3566. *
  3567. * @providesModule EventPluginUtils
  3568. */
  3569. 'use strict';
  3570. var EventConstants = __webpack_require__(30);
  3571. var ReactErrorUtils = __webpack_require__(34);
  3572. var invariant = __webpack_require__(13);
  3573. var warning = __webpack_require__(25);
  3574. /**
  3575. * Injected dependencies:
  3576. */
  3577. /**
  3578. * - `Mount`: [required] Module that can convert between React dom IDs and
  3579. * actual node references.
  3580. */
  3581. var injection = {
  3582. Mount: null,
  3583. injectMount: function (InjectedMount) {
  3584. injection.Mount = InjectedMount;
  3585. if (process.env.NODE_ENV !== 'production') {
  3586. process.env.NODE_ENV !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined;
  3587. }
  3588. }
  3589. };
  3590. var topLevelTypes = EventConstants.topLevelTypes;
  3591. function isEndish(topLevelType) {
  3592. return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;
  3593. }
  3594. function isMoveish(topLevelType) {
  3595. return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;
  3596. }
  3597. function isStartish(topLevelType) {
  3598. return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;
  3599. }
  3600. var validateEventDispatches;
  3601. if (process.env.NODE_ENV !== 'production') {
  3602. validateEventDispatches = function (event) {
  3603. var dispatchListeners = event._dispatchListeners;
  3604. var dispatchIDs = event._dispatchIDs;
  3605. var listenersIsArr = Array.isArray(dispatchListeners);
  3606. var idsIsArr = Array.isArray(dispatchIDs);
  3607. var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;
  3608. var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;
  3609. process.env.NODE_ENV !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined;
  3610. };
  3611. }
  3612. /**
  3613. * Dispatch the event to the listener.
  3614. * @param {SyntheticEvent} event SyntheticEvent to handle
  3615. * @param {boolean} simulated If the event is simulated (changes exn behavior)
  3616. * @param {function} listener Application-level callback
  3617. * @param {string} domID DOM id to pass to the callback.
  3618. */
  3619. function executeDispatch(event, simulated, listener, domID) {
  3620. var type = event.type || 'unknown-event';
  3621. event.currentTarget = injection.Mount.getNode(domID);
  3622. if (simulated) {
  3623. ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID);
  3624. } else {
  3625. ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID);
  3626. }
  3627. event.currentTarget = null;
  3628. }
  3629. /**
  3630. * Standard/simple iteration through an event's collected dispatches.
  3631. */
  3632. function executeDispatchesInOrder(event, simulated) {
  3633. var dispatchListeners = event._dispatchListeners;
  3634. var dispatchIDs = event._dispatchIDs;
  3635. if (process.env.NODE_ENV !== 'production') {
  3636. validateEventDispatches(event);
  3637. }
  3638. if (Array.isArray(dispatchListeners)) {
  3639. for (var i = 0; i < dispatchListeners.length; i++) {
  3640. if (event.isPropagationStopped()) {
  3641. break;
  3642. }
  3643. // Listeners and IDs are two parallel arrays that are always in sync.
  3644. executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]);
  3645. }
  3646. } else if (dispatchListeners) {
  3647. executeDispatch(event, simulated, dispatchListeners, dispatchIDs);
  3648. }
  3649. event._dispatchListeners = null;
  3650. event._dispatchIDs = null;
  3651. }
  3652. /**
  3653. * Standard/simple iteration through an event's collected dispatches, but stops
  3654. * at the first dispatch execution returning true, and returns that id.
  3655. *
  3656. * @return {?string} id of the first dispatch execution who's listener returns
  3657. * true, or null if no listener returned true.
  3658. */
  3659. function executeDispatchesInOrderStopAtTrueImpl(event) {
  3660. var dispatchListeners = event._dispatchListeners;
  3661. var dispatchIDs = event._dispatchIDs;
  3662. if (process.env.NODE_ENV !== 'production') {
  3663. validateEventDispatches(event);
  3664. }
  3665. if (Array.isArray(dispatchListeners)) {
  3666. for (var i = 0; i < dispatchListeners.length; i++) {
  3667. if (event.isPropagationStopped()) {
  3668. break;
  3669. }
  3670. // Listeners and IDs are two parallel arrays that are always in sync.
  3671. if (dispatchListeners[i](event, dispatchIDs[i])) {
  3672. return dispatchIDs[i];
  3673. }
  3674. }
  3675. } else if (dispatchListeners) {
  3676. if (dispatchListeners(event, dispatchIDs)) {
  3677. return dispatchIDs;
  3678. }
  3679. }
  3680. return null;
  3681. }
  3682. /**
  3683. * @see executeDispatchesInOrderStopAtTrueImpl
  3684. */
  3685. function executeDispatchesInOrderStopAtTrue(event) {
  3686. var ret = executeDispatchesInOrderStopAtTrueImpl(event);
  3687. event._dispatchIDs = null;
  3688. event._dispatchListeners = null;
  3689. return ret;
  3690. }
  3691. /**
  3692. * Execution of a "direct" dispatch - there must be at most one dispatch
  3693. * accumulated on the event or it is considered an error. It doesn't really make
  3694. * sense for an event with multiple dispatches (bubbled) to keep track of the
  3695. * return values at each dispatch execution, but it does tend to make sense when
  3696. * dealing with "direct" dispatches.
  3697. *
  3698. * @return {*} The return value of executing the single dispatch.
  3699. */
  3700. function executeDirectDispatch(event) {
  3701. if (process.env.NODE_ENV !== 'production') {
  3702. validateEventDispatches(event);
  3703. }
  3704. var dispatchListener = event._dispatchListeners;
  3705. var dispatchID = event._dispatchIDs;
  3706. !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined;
  3707. var res = dispatchListener ? dispatchListener(event, dispatchID) : null;
  3708. event._dispatchListeners = null;
  3709. event._dispatchIDs = null;
  3710. return res;
  3711. }
  3712. /**
  3713. * @param {SyntheticEvent} event
  3714. * @return {boolean} True iff number of dispatches accumulated is greater than 0.
  3715. */
  3716. function hasDispatches(event) {
  3717. return !!event._dispatchListeners;
  3718. }
  3719. /**
  3720. * General utilities that are useful in creating custom Event Plugins.
  3721. */
  3722. var EventPluginUtils = {
  3723. isEndish: isEndish,
  3724. isMoveish: isMoveish,
  3725. isStartish: isStartish,
  3726. executeDirectDispatch: executeDirectDispatch,
  3727. executeDispatchesInOrder: executeDispatchesInOrder,
  3728. executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
  3729. hasDispatches: hasDispatches,
  3730. getNode: function (id) {
  3731. return injection.Mount.getNode(id);
  3732. },
  3733. getID: function (node) {
  3734. return injection.Mount.getID(node);
  3735. },
  3736. injection: injection
  3737. };
  3738. module.exports = EventPluginUtils;
  3739. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  3740. /***/ },
  3741. /* 34 */
  3742. /***/ function(module, exports, __webpack_require__) {
  3743. /* WEBPACK VAR INJECTION */(function(process) {/**
  3744. * Copyright 2013-2015, Facebook, Inc.
  3745. * All rights reserved.
  3746. *
  3747. * This source code is licensed under the BSD-style license found in the
  3748. * LICENSE file in the root directory of this source tree. An additional grant
  3749. * of patent rights can be found in the PATENTS file in the same directory.
  3750. *
  3751. * @providesModule ReactErrorUtils
  3752. * @typechecks
  3753. */
  3754. 'use strict';
  3755. var caughtError = null;
  3756. /**
  3757. * Call a function while guarding against errors that happens within it.
  3758. *
  3759. * @param {?String} name of the guard to use for logging or debugging
  3760. * @param {Function} func The function to invoke
  3761. * @param {*} a First argument
  3762. * @param {*} b Second argument
  3763. */
  3764. function invokeGuardedCallback(name, func, a, b) {
  3765. try {
  3766. return func(a, b);
  3767. } catch (x) {
  3768. if (caughtError === null) {
  3769. caughtError = x;
  3770. }
  3771. return undefined;
  3772. }
  3773. }
  3774. var ReactErrorUtils = {
  3775. invokeGuardedCallback: invokeGuardedCallback,
  3776. /**
  3777. * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event
  3778. * handler are sure to be rethrown by rethrowCaughtError.
  3779. */
  3780. invokeGuardedCallbackWithCatch: invokeGuardedCallback,
  3781. /**
  3782. * During execution of guarded functions we will capture the first error which
  3783. * we will rethrow to be handled by the top level error handler.
  3784. */
  3785. rethrowCaughtError: function () {
  3786. if (caughtError) {
  3787. var error = caughtError;
  3788. caughtError = null;
  3789. throw error;
  3790. }
  3791. }
  3792. };
  3793. if (process.env.NODE_ENV !== 'production') {
  3794. /**
  3795. * To help development we can get better devtools integration by simulating a
  3796. * real browser event.
  3797. */
  3798. if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
  3799. var fakeNode = document.createElement('react');
  3800. ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
  3801. var boundFunc = func.bind(null, a, b);
  3802. var evtType = 'react-' + name;
  3803. fakeNode.addEventListener(evtType, boundFunc, false);
  3804. var evt = document.createEvent('Event');
  3805. evt.initEvent(evtType, false, false);
  3806. fakeNode.dispatchEvent(evt);
  3807. fakeNode.removeEventListener(evtType, boundFunc, false);
  3808. };
  3809. }
  3810. }
  3811. module.exports = ReactErrorUtils;
  3812. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  3813. /***/ },
  3814. /* 35 */
  3815. /***/ function(module, exports, __webpack_require__) {
  3816. /* WEBPACK VAR INJECTION */(function(process) {/**
  3817. * Copyright 2014-2015, Facebook, Inc.
  3818. * All rights reserved.
  3819. *
  3820. * This source code is licensed under the BSD-style license found in the
  3821. * LICENSE file in the root directory of this source tree. An additional grant
  3822. * of patent rights can be found in the PATENTS file in the same directory.
  3823. *
  3824. * @providesModule accumulateInto
  3825. */
  3826. 'use strict';
  3827. var invariant = __webpack_require__(13);
  3828. /**
  3829. *
  3830. * Accumulates items that must not be null or undefined into the first one. This
  3831. * is used to conserve memory by avoiding array allocations, and thus sacrifices
  3832. * API cleanness. Since `current` can be null before being passed in and not
  3833. * null after this function, make sure to assign it back to `current`:
  3834. *
  3835. * `a = accumulateInto(a, b);`
  3836. *
  3837. * This API should be sparingly used. Try `accumulate` for something cleaner.
  3838. *
  3839. * @return {*|array<*>} An accumulation of items.
  3840. */
  3841. function accumulateInto(current, next) {
  3842. !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined;
  3843. if (current == null) {
  3844. return next;
  3845. }
  3846. // Both are not empty. Warning: Never call x.concat(y) when you are not
  3847. // certain that x is an Array (x could be a string with concat method).
  3848. var currentIsArray = Array.isArray(current);
  3849. var nextIsArray = Array.isArray(next);
  3850. if (currentIsArray && nextIsArray) {
  3851. current.push.apply(current, next);
  3852. return current;
  3853. }
  3854. if (currentIsArray) {
  3855. current.push(next);
  3856. return current;
  3857. }
  3858. if (nextIsArray) {
  3859. // A bit too dangerous to mutate `next`.
  3860. return [current].concat(next);
  3861. }
  3862. return [current, next];
  3863. }
  3864. module.exports = accumulateInto;
  3865. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  3866. /***/ },
  3867. /* 36 */
  3868. /***/ function(module, exports) {
  3869. /**
  3870. * Copyright 2013-2015, Facebook, Inc.
  3871. * All rights reserved.
  3872. *
  3873. * This source code is licensed under the BSD-style license found in the
  3874. * LICENSE file in the root directory of this source tree. An additional grant
  3875. * of patent rights can be found in the PATENTS file in the same directory.
  3876. *
  3877. * @providesModule forEachAccumulated
  3878. */
  3879. 'use strict';
  3880. /**
  3881. * @param {array} arr an "accumulation" of items which is either an Array or
  3882. * a single item. Useful when paired with the `accumulate` module. This is a
  3883. * simple utility that allows us to reason about a collection of items, but
  3884. * handling the case when there is exactly one item (and we do not need to
  3885. * allocate an array).
  3886. */
  3887. var forEachAccumulated = function (arr, cb, scope) {
  3888. if (Array.isArray(arr)) {
  3889. arr.forEach(cb, scope);
  3890. } else if (arr) {
  3891. cb.call(scope, arr);
  3892. }
  3893. };
  3894. module.exports = forEachAccumulated;
  3895. /***/ },
  3896. /* 37 */
  3897. /***/ function(module, exports, __webpack_require__) {
  3898. /**
  3899. * Copyright 2013-2015, Facebook, Inc.
  3900. * All rights reserved.
  3901. *
  3902. * This source code is licensed under the BSD-style license found in the
  3903. * LICENSE file in the root directory of this source tree. An additional grant
  3904. * of patent rights can be found in the PATENTS file in the same directory.
  3905. *
  3906. * @providesModule ReactEventEmitterMixin
  3907. */
  3908. 'use strict';
  3909. var EventPluginHub = __webpack_require__(31);
  3910. function runEventQueueInBatch(events) {
  3911. EventPluginHub.enqueueEvents(events);
  3912. EventPluginHub.processEventQueue(false);
  3913. }
  3914. var ReactEventEmitterMixin = {
  3915. /**
  3916. * Streams a fired top-level event to `EventPluginHub` where plugins have the
  3917. * opportunity to create `ReactEvent`s to be dispatched.
  3918. *
  3919. * @param {string} topLevelType Record from `EventConstants`.
  3920. * @param {object} topLevelTarget The listening component root node.
  3921. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  3922. * @param {object} nativeEvent Native environment event.
  3923. */
  3924. handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  3925. var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);
  3926. runEventQueueInBatch(events);
  3927. }
  3928. };
  3929. module.exports = ReactEventEmitterMixin;
  3930. /***/ },
  3931. /* 38 */
  3932. /***/ function(module, exports) {
  3933. /**
  3934. * Copyright 2013-2015, Facebook, Inc.
  3935. * All rights reserved.
  3936. *
  3937. * This source code is licensed under the BSD-style license found in the
  3938. * LICENSE file in the root directory of this source tree. An additional grant
  3939. * of patent rights can be found in the PATENTS file in the same directory.
  3940. *
  3941. * @providesModule ViewportMetrics
  3942. */
  3943. 'use strict';
  3944. var ViewportMetrics = {
  3945. currentScrollLeft: 0,
  3946. currentScrollTop: 0,
  3947. refreshScrollValues: function (scrollPosition) {
  3948. ViewportMetrics.currentScrollLeft = scrollPosition.x;
  3949. ViewportMetrics.currentScrollTop = scrollPosition.y;
  3950. }
  3951. };
  3952. module.exports = ViewportMetrics;
  3953. /***/ },
  3954. /* 39 */
  3955. /***/ function(module, exports) {
  3956. /**
  3957. * Copyright 2014-2015, Facebook, Inc.
  3958. * All rights reserved.
  3959. *
  3960. * This source code is licensed under the BSD-style license found in the
  3961. * LICENSE file in the root directory of this source tree. An additional grant
  3962. * of patent rights can be found in the PATENTS file in the same directory.
  3963. *
  3964. * @providesModule Object.assign
  3965. */
  3966. // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign
  3967. 'use strict';
  3968. function assign(target, sources) {
  3969. if (target == null) {
  3970. throw new TypeError('Object.assign target cannot be null or undefined');
  3971. }
  3972. var to = Object(target);
  3973. var hasOwnProperty = Object.prototype.hasOwnProperty;
  3974. for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {
  3975. var nextSource = arguments[nextIndex];
  3976. if (nextSource == null) {
  3977. continue;
  3978. }
  3979. var from = Object(nextSource);
  3980. // We don't currently support accessors nor proxies. Therefore this
  3981. // copy cannot throw. If we ever supported this then we must handle
  3982. // exceptions and side-effects. We don't support symbols so they won't
  3983. // be transferred.
  3984. for (var key in from) {
  3985. if (hasOwnProperty.call(from, key)) {
  3986. to[key] = from[key];
  3987. }
  3988. }
  3989. }
  3990. return to;
  3991. }
  3992. module.exports = assign;
  3993. /***/ },
  3994. /* 40 */
  3995. /***/ function(module, exports, __webpack_require__) {
  3996. /**
  3997. * Copyright 2013-2015, Facebook, Inc.
  3998. * All rights reserved.
  3999. *
  4000. * This source code is licensed under the BSD-style license found in the
  4001. * LICENSE file in the root directory of this source tree. An additional grant
  4002. * of patent rights can be found in the PATENTS file in the same directory.
  4003. *
  4004. * @providesModule isEventSupported
  4005. */
  4006. 'use strict';
  4007. var ExecutionEnvironment = __webpack_require__(9);
  4008. var useHasFeature;
  4009. if (ExecutionEnvironment.canUseDOM) {
  4010. useHasFeature = document.implementation && document.implementation.hasFeature &&
  4011. // always returns true in newer browsers as per the standard.
  4012. // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
  4013. document.implementation.hasFeature('', '') !== true;
  4014. }
  4015. /**
  4016. * Checks if an event is supported in the current execution environment.
  4017. *
  4018. * NOTE: This will not work correctly for non-generic events such as `change`,
  4019. * `reset`, `load`, `error`, and `select`.
  4020. *
  4021. * Borrows from Modernizr.
  4022. *
  4023. * @param {string} eventNameSuffix Event name, e.g. "click".
  4024. * @param {?boolean} capture Check if the capture phase is supported.
  4025. * @return {boolean} True if the event is supported.
  4026. * @internal
  4027. * @license Modernizr 3.0.0pre (Custom Build) | MIT
  4028. */
  4029. function isEventSupported(eventNameSuffix, capture) {
  4030. if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {
  4031. return false;
  4032. }
  4033. var eventName = 'on' + eventNameSuffix;
  4034. var isSupported = (eventName in document);
  4035. if (!isSupported) {
  4036. var element = document.createElement('div');
  4037. element.setAttribute(eventName, 'return;');
  4038. isSupported = typeof element[eventName] === 'function';
  4039. }
  4040. if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
  4041. // This is the only way to test support for the `wheel` event in IE9+.
  4042. isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
  4043. }
  4044. return isSupported;
  4045. }
  4046. module.exports = isEventSupported;
  4047. /***/ },
  4048. /* 41 */
  4049. /***/ function(module, exports) {
  4050. /**
  4051. * Copyright 2013-2015, Facebook, Inc.
  4052. * All rights reserved.
  4053. *
  4054. * This source code is licensed under the BSD-style license found in the
  4055. * LICENSE file in the root directory of this source tree. An additional grant
  4056. * of patent rights can be found in the PATENTS file in the same directory.
  4057. *
  4058. * @providesModule ReactDOMFeatureFlags
  4059. */
  4060. 'use strict';
  4061. var ReactDOMFeatureFlags = {
  4062. useCreateElement: false
  4063. };
  4064. module.exports = ReactDOMFeatureFlags;
  4065. /***/ },
  4066. /* 42 */
  4067. /***/ function(module, exports, __webpack_require__) {
  4068. /* WEBPACK VAR INJECTION */(function(process) {/**
  4069. * Copyright 2014-2015, Facebook, Inc.
  4070. * All rights reserved.
  4071. *
  4072. * This source code is licensed under the BSD-style license found in the
  4073. * LICENSE file in the root directory of this source tree. An additional grant
  4074. * of patent rights can be found in the PATENTS file in the same directory.
  4075. *
  4076. * @providesModule ReactElement
  4077. */
  4078. 'use strict';
  4079. var ReactCurrentOwner = __webpack_require__(5);
  4080. var assign = __webpack_require__(39);
  4081. var canDefineProperty = __webpack_require__(43);
  4082. // The Symbol used to tag the ReactElement type. If there is no native Symbol
  4083. // nor polyfill, then a plain number is used for performance.
  4084. var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;
  4085. var RESERVED_PROPS = {
  4086. key: true,
  4087. ref: true,
  4088. __self: true,
  4089. __source: true
  4090. };
  4091. /**
  4092. * Base constructor for all React elements. This is only used to make this
  4093. * work with a dynamic instanceof check. Nothing should live on this prototype.
  4094. *
  4095. * @param {*} type
  4096. * @param {*} key
  4097. * @param {string|object} ref
  4098. * @param {*} self A *temporary* helper to detect places where `this` is
  4099. * different from the `owner` when React.createElement is called, so that we
  4100. * can warn. We want to get rid of owner and replace string `ref`s with arrow
  4101. * functions, and as long as `this` and owner are the same, there will be no
  4102. * change in behavior.
  4103. * @param {*} source An annotation object (added by a transpiler or otherwise)
  4104. * indicating filename, line number, and/or other information.
  4105. * @param {*} owner
  4106. * @param {*} props
  4107. * @internal
  4108. */
  4109. var ReactElement = function (type, key, ref, self, source, owner, props) {
  4110. var element = {
  4111. // This tag allow us to uniquely identify this as a React Element
  4112. $$typeof: REACT_ELEMENT_TYPE,
  4113. // Built-in properties that belong on the element
  4114. type: type,
  4115. key: key,
  4116. ref: ref,
  4117. props: props,
  4118. // Record the component responsible for creating this element.
  4119. _owner: owner
  4120. };
  4121. if (process.env.NODE_ENV !== 'production') {
  4122. // The validation flag is currently mutative. We put it on
  4123. // an external backing store so that we can freeze the whole object.
  4124. // This can be replaced with a WeakMap once they are implemented in
  4125. // commonly used development environments.
  4126. element._store = {};
  4127. // To make comparing ReactElements easier for testing purposes, we make
  4128. // the validation flag non-enumerable (where possible, which should
  4129. // include every environment we run tests in), so the test framework
  4130. // ignores it.
  4131. if (canDefineProperty) {
  4132. Object.defineProperty(element._store, 'validated', {
  4133. configurable: false,
  4134. enumerable: false,
  4135. writable: true,
  4136. value: false
  4137. });
  4138. // self and source are DEV only properties.
  4139. Object.defineProperty(element, '_self', {
  4140. configurable: false,
  4141. enumerable: false,
  4142. writable: false,
  4143. value: self
  4144. });
  4145. // Two elements created in two different places should be considered
  4146. // equal for testing purposes and therefore we hide it from enumeration.
  4147. Object.defineProperty(element, '_source', {
  4148. configurable: false,
  4149. enumerable: false,
  4150. writable: false,
  4151. value: source
  4152. });
  4153. } else {
  4154. element._store.validated = false;
  4155. element._self = self;
  4156. element._source = source;
  4157. }
  4158. Object.freeze(element.props);
  4159. Object.freeze(element);
  4160. }
  4161. return element;
  4162. };
  4163. ReactElement.createElement = function (type, config, children) {
  4164. var propName;
  4165. // Reserved names are extracted
  4166. var props = {};
  4167. var key = null;
  4168. var ref = null;
  4169. var self = null;
  4170. var source = null;
  4171. if (config != null) {
  4172. ref = config.ref === undefined ? null : config.ref;
  4173. key = config.key === undefined ? null : '' + config.key;
  4174. self = config.__self === undefined ? null : config.__self;
  4175. source = config.__source === undefined ? null : config.__source;
  4176. // Remaining properties are added to a new props object
  4177. for (propName in config) {
  4178. if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  4179. props[propName] = config[propName];
  4180. }
  4181. }
  4182. }
  4183. // Children can be more than one argument, and those are transferred onto
  4184. // the newly allocated props object.
  4185. var childrenLength = arguments.length - 2;
  4186. if (childrenLength === 1) {
  4187. props.children = children;
  4188. } else if (childrenLength > 1) {
  4189. var childArray = Array(childrenLength);
  4190. for (var i = 0; i < childrenLength; i++) {
  4191. childArray[i] = arguments[i + 2];
  4192. }
  4193. props.children = childArray;
  4194. }
  4195. // Resolve default props
  4196. if (type && type.defaultProps) {
  4197. var defaultProps = type.defaultProps;
  4198. for (propName in defaultProps) {
  4199. if (typeof props[propName] === 'undefined') {
  4200. props[propName] = defaultProps[propName];
  4201. }
  4202. }
  4203. }
  4204. return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
  4205. };
  4206. ReactElement.createFactory = function (type) {
  4207. var factory = ReactElement.createElement.bind(null, type);
  4208. // Expose the type on the factory and the prototype so that it can be
  4209. // easily accessed on elements. E.g. `<Foo />.type === Foo`.
  4210. // This should not be named `constructor` since this may not be the function
  4211. // that created the element, and it may not even be a constructor.
  4212. // Legacy hook TODO: Warn if this is accessed
  4213. factory.type = type;
  4214. return factory;
  4215. };
  4216. ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
  4217. var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
  4218. return newElement;
  4219. };
  4220. ReactElement.cloneAndReplaceProps = function (oldElement, newProps) {
  4221. var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps);
  4222. if (process.env.NODE_ENV !== 'production') {
  4223. // If the key on the original is valid, then the clone is valid
  4224. newElement._store.validated = oldElement._store.validated;
  4225. }
  4226. return newElement;
  4227. };
  4228. ReactElement.cloneElement = function (element, config, children) {
  4229. var propName;
  4230. // Original props are copied
  4231. var props = assign({}, element.props);
  4232. // Reserved names are extracted
  4233. var key = element.key;
  4234. var ref = element.ref;
  4235. // Self is preserved since the owner is preserved.
  4236. var self = element._self;
  4237. // Source is preserved since cloneElement is unlikely to be targeted by a
  4238. // transpiler, and the original source is probably a better indicator of the
  4239. // true owner.
  4240. var source = element._source;
  4241. // Owner will be preserved, unless ref is overridden
  4242. var owner = element._owner;
  4243. if (config != null) {
  4244. if (config.ref !== undefined) {
  4245. // Silently steal the ref from the parent.
  4246. ref = config.ref;
  4247. owner = ReactCurrentOwner.current;
  4248. }
  4249. if (config.key !== undefined) {
  4250. key = '' + config.key;
  4251. }
  4252. // Remaining properties override existing props
  4253. for (propName in config) {
  4254. if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  4255. props[propName] = config[propName];
  4256. }
  4257. }
  4258. }
  4259. // Children can be more than one argument, and those are transferred onto
  4260. // the newly allocated props object.
  4261. var childrenLength = arguments.length - 2;
  4262. if (childrenLength === 1) {
  4263. props.children = children;
  4264. } else if (childrenLength > 1) {
  4265. var childArray = Array(childrenLength);
  4266. for (var i = 0; i < childrenLength; i++) {
  4267. childArray[i] = arguments[i + 2];
  4268. }
  4269. props.children = childArray;
  4270. }
  4271. return ReactElement(element.type, key, ref, self, source, owner, props);
  4272. };
  4273. /**
  4274. * @param {?object} object
  4275. * @return {boolean} True if `object` is a valid component.
  4276. * @final
  4277. */
  4278. ReactElement.isValidElement = function (object) {
  4279. return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  4280. };
  4281. module.exports = ReactElement;
  4282. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  4283. /***/ },
  4284. /* 43 */
  4285. /***/ function(module, exports, __webpack_require__) {
  4286. /* WEBPACK VAR INJECTION */(function(process) {/**
  4287. * Copyright 2013-2015, Facebook, Inc.
  4288. * All rights reserved.
  4289. *
  4290. * This source code is licensed under the BSD-style license found in the
  4291. * LICENSE file in the root directory of this source tree. An additional grant
  4292. * of patent rights can be found in the PATENTS file in the same directory.
  4293. *
  4294. * @providesModule canDefineProperty
  4295. */
  4296. 'use strict';
  4297. var canDefineProperty = false;
  4298. if (process.env.NODE_ENV !== 'production') {
  4299. try {
  4300. Object.defineProperty({}, 'x', { get: function () {} });
  4301. canDefineProperty = true;
  4302. } catch (x) {
  4303. // IE will fail on defineProperty
  4304. }
  4305. }
  4306. module.exports = canDefineProperty;
  4307. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  4308. /***/ },
  4309. /* 44 */
  4310. /***/ function(module, exports) {
  4311. /**
  4312. * Copyright 2014-2015, Facebook, Inc.
  4313. * All rights reserved.
  4314. *
  4315. * This source code is licensed under the BSD-style license found in the
  4316. * LICENSE file in the root directory of this source tree. An additional grant
  4317. * of patent rights can be found in the PATENTS file in the same directory.
  4318. *
  4319. * @providesModule ReactEmptyComponentRegistry
  4320. */
  4321. 'use strict';
  4322. // This registry keeps track of the React IDs of the components that rendered to
  4323. // `null` (in reality a placeholder such as `noscript`)
  4324. var nullComponentIDsRegistry = {};
  4325. /**
  4326. * @param {string} id Component's `_rootNodeID`.
  4327. * @return {boolean} True if the component is rendered to null.
  4328. */
  4329. function isNullComponentID(id) {
  4330. return !!nullComponentIDsRegistry[id];
  4331. }
  4332. /**
  4333. * Mark the component as having rendered to null.
  4334. * @param {string} id Component's `_rootNodeID`.
  4335. */
  4336. function registerNullComponentID(id) {
  4337. nullComponentIDsRegistry[id] = true;
  4338. }
  4339. /**
  4340. * Unmark the component as having rendered to null: it renders to something now.
  4341. * @param {string} id Component's `_rootNodeID`.
  4342. */
  4343. function deregisterNullComponentID(id) {
  4344. delete nullComponentIDsRegistry[id];
  4345. }
  4346. var ReactEmptyComponentRegistry = {
  4347. isNullComponentID: isNullComponentID,
  4348. registerNullComponentID: registerNullComponentID,
  4349. deregisterNullComponentID: deregisterNullComponentID
  4350. };
  4351. module.exports = ReactEmptyComponentRegistry;
  4352. /***/ },
  4353. /* 45 */
  4354. /***/ function(module, exports, __webpack_require__) {
  4355. /* WEBPACK VAR INJECTION */(function(process) {/**
  4356. * Copyright 2013-2015, Facebook, Inc.
  4357. * All rights reserved.
  4358. *
  4359. * This source code is licensed under the BSD-style license found in the
  4360. * LICENSE file in the root directory of this source tree. An additional grant
  4361. * of patent rights can be found in the PATENTS file in the same directory.
  4362. *
  4363. * @providesModule ReactInstanceHandles
  4364. * @typechecks static-only
  4365. */
  4366. 'use strict';
  4367. var ReactRootIndex = __webpack_require__(46);
  4368. var invariant = __webpack_require__(13);
  4369. var SEPARATOR = '.';
  4370. var SEPARATOR_LENGTH = SEPARATOR.length;
  4371. /**
  4372. * Maximum depth of traversals before we consider the possibility of a bad ID.
  4373. */
  4374. var MAX_TREE_DEPTH = 10000;
  4375. /**
  4376. * Creates a DOM ID prefix to use when mounting React components.
  4377. *
  4378. * @param {number} index A unique integer
  4379. * @return {string} React root ID.
  4380. * @internal
  4381. */
  4382. function getReactRootIDString(index) {
  4383. return SEPARATOR + index.toString(36);
  4384. }
  4385. /**
  4386. * Checks if a character in the supplied ID is a separator or the end.
  4387. *
  4388. * @param {string} id A React DOM ID.
  4389. * @param {number} index Index of the character to check.
  4390. * @return {boolean} True if the character is a separator or end of the ID.
  4391. * @private
  4392. */
  4393. function isBoundary(id, index) {
  4394. return id.charAt(index) === SEPARATOR || index === id.length;
  4395. }
  4396. /**
  4397. * Checks if the supplied string is a valid React DOM ID.
  4398. *
  4399. * @param {string} id A React DOM ID, maybe.
  4400. * @return {boolean} True if the string is a valid React DOM ID.
  4401. * @private
  4402. */
  4403. function isValidID(id) {
  4404. return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;
  4405. }
  4406. /**
  4407. * Checks if the first ID is an ancestor of or equal to the second ID.
  4408. *
  4409. * @param {string} ancestorID
  4410. * @param {string} descendantID
  4411. * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.
  4412. * @internal
  4413. */
  4414. function isAncestorIDOf(ancestorID, descendantID) {
  4415. return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length);
  4416. }
  4417. /**
  4418. * Gets the parent ID of the supplied React DOM ID, `id`.
  4419. *
  4420. * @param {string} id ID of a component.
  4421. * @return {string} ID of the parent, or an empty string.
  4422. * @private
  4423. */
  4424. function getParentID(id) {
  4425. return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';
  4426. }
  4427. /**
  4428. * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the
  4429. * supplied `destinationID`. If they are equal, the ID is returned.
  4430. *
  4431. * @param {string} ancestorID ID of an ancestor node of `destinationID`.
  4432. * @param {string} destinationID ID of the destination node.
  4433. * @return {string} Next ID on the path from `ancestorID` to `destinationID`.
  4434. * @private
  4435. */
  4436. function getNextDescendantID(ancestorID, destinationID) {
  4437. !(isValidID(ancestorID) && isValidID(destinationID)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined;
  4438. !isAncestorIDOf(ancestorID, destinationID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined;
  4439. if (ancestorID === destinationID) {
  4440. return ancestorID;
  4441. }
  4442. // Skip over the ancestor and the immediate separator. Traverse until we hit
  4443. // another separator or we reach the end of `destinationID`.
  4444. var start = ancestorID.length + SEPARATOR_LENGTH;
  4445. var i;
  4446. for (i = start; i < destinationID.length; i++) {
  4447. if (isBoundary(destinationID, i)) {
  4448. break;
  4449. }
  4450. }
  4451. return destinationID.substr(0, i);
  4452. }
  4453. /**
  4454. * Gets the nearest common ancestor ID of two IDs.
  4455. *
  4456. * Using this ID scheme, the nearest common ancestor ID is the longest common
  4457. * prefix of the two IDs that immediately preceded a "marker" in both strings.
  4458. *
  4459. * @param {string} oneID
  4460. * @param {string} twoID
  4461. * @return {string} Nearest common ancestor ID, or the empty string if none.
  4462. * @private
  4463. */
  4464. function getFirstCommonAncestorID(oneID, twoID) {
  4465. var minLength = Math.min(oneID.length, twoID.length);
  4466. if (minLength === 0) {
  4467. return '';
  4468. }
  4469. var lastCommonMarkerIndex = 0;
  4470. // Use `<=` to traverse until the "EOL" of the shorter string.
  4471. for (var i = 0; i <= minLength; i++) {
  4472. if (isBoundary(oneID, i) && isBoundary(twoID, i)) {
  4473. lastCommonMarkerIndex = i;
  4474. } else if (oneID.charAt(i) !== twoID.charAt(i)) {
  4475. break;
  4476. }
  4477. }
  4478. var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);
  4479. !isValidID(longestCommonID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined;
  4480. return longestCommonID;
  4481. }
  4482. /**
  4483. * Traverses the parent path between two IDs (either up or down). The IDs must
  4484. * not be the same, and there must exist a parent path between them. If the
  4485. * callback returns `false`, traversal is stopped.
  4486. *
  4487. * @param {?string} start ID at which to start traversal.
  4488. * @param {?string} stop ID at which to end traversal.
  4489. * @param {function} cb Callback to invoke each ID with.
  4490. * @param {*} arg Argument to invoke the callback with.
  4491. * @param {?boolean} skipFirst Whether or not to skip the first node.
  4492. * @param {?boolean} skipLast Whether or not to skip the last node.
  4493. * @private
  4494. */
  4495. function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {
  4496. start = start || '';
  4497. stop = stop || '';
  4498. !(start !== stop) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined;
  4499. var traverseUp = isAncestorIDOf(stop, start);
  4500. !(traverseUp || isAncestorIDOf(start, stop)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined;
  4501. // Traverse from `start` to `stop` one depth at a time.
  4502. var depth = 0;
  4503. var traverse = traverseUp ? getParentID : getNextDescendantID;
  4504. for (var id = start;; /* until break */id = traverse(id, stop)) {
  4505. var ret;
  4506. if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {
  4507. ret = cb(id, traverseUp, arg);
  4508. }
  4509. if (ret === false || id === stop) {
  4510. // Only break //after// visiting `stop`.
  4511. break;
  4512. }
  4513. !(depth++ < MAX_TREE_DEPTH) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined;
  4514. }
  4515. }
  4516. /**
  4517. * Manages the IDs assigned to DOM representations of React components. This
  4518. * uses a specific scheme in order to traverse the DOM efficiently (e.g. in
  4519. * order to simulate events).
  4520. *
  4521. * @internal
  4522. */
  4523. var ReactInstanceHandles = {
  4524. /**
  4525. * Constructs a React root ID
  4526. * @return {string} A React root ID.
  4527. */
  4528. createReactRootID: function () {
  4529. return getReactRootIDString(ReactRootIndex.createReactRootIndex());
  4530. },
  4531. /**
  4532. * Constructs a React ID by joining a root ID with a name.
  4533. *
  4534. * @param {string} rootID Root ID of a parent component.
  4535. * @param {string} name A component's name (as flattened children).
  4536. * @return {string} A React ID.
  4537. * @internal
  4538. */
  4539. createReactID: function (rootID, name) {
  4540. return rootID + name;
  4541. },
  4542. /**
  4543. * Gets the DOM ID of the React component that is the root of the tree that
  4544. * contains the React component with the supplied DOM ID.
  4545. *
  4546. * @param {string} id DOM ID of a React component.
  4547. * @return {?string} DOM ID of the React component that is the root.
  4548. * @internal
  4549. */
  4550. getReactRootIDFromNodeID: function (id) {
  4551. if (id && id.charAt(0) === SEPARATOR && id.length > 1) {
  4552. var index = id.indexOf(SEPARATOR, 1);
  4553. return index > -1 ? id.substr(0, index) : id;
  4554. }
  4555. return null;
  4556. },
  4557. /**
  4558. * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
  4559. * should would receive a `mouseEnter` or `mouseLeave` event.
  4560. *
  4561. * NOTE: Does not invoke the callback on the nearest common ancestor because
  4562. * nothing "entered" or "left" that element.
  4563. *
  4564. * @param {string} leaveID ID being left.
  4565. * @param {string} enterID ID being entered.
  4566. * @param {function} cb Callback to invoke on each entered/left ID.
  4567. * @param {*} upArg Argument to invoke the callback with on left IDs.
  4568. * @param {*} downArg Argument to invoke the callback with on entered IDs.
  4569. * @internal
  4570. */
  4571. traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) {
  4572. var ancestorID = getFirstCommonAncestorID(leaveID, enterID);
  4573. if (ancestorID !== leaveID) {
  4574. traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);
  4575. }
  4576. if (ancestorID !== enterID) {
  4577. traverseParentPath(ancestorID, enterID, cb, downArg, true, false);
  4578. }
  4579. },
  4580. /**
  4581. * Simulates the traversal of a two-phase, capture/bubble event dispatch.
  4582. *
  4583. * NOTE: This traversal happens on IDs without touching the DOM.
  4584. *
  4585. * @param {string} targetID ID of the target node.
  4586. * @param {function} cb Callback to invoke.
  4587. * @param {*} arg Argument to invoke the callback with.
  4588. * @internal
  4589. */
  4590. traverseTwoPhase: function (targetID, cb, arg) {
  4591. if (targetID) {
  4592. traverseParentPath('', targetID, cb, arg, true, false);
  4593. traverseParentPath(targetID, '', cb, arg, false, true);
  4594. }
  4595. },
  4596. /**
  4597. * Same as `traverseTwoPhase` but skips the `targetID`.
  4598. */
  4599. traverseTwoPhaseSkipTarget: function (targetID, cb, arg) {
  4600. if (targetID) {
  4601. traverseParentPath('', targetID, cb, arg, true, true);
  4602. traverseParentPath(targetID, '', cb, arg, true, true);
  4603. }
  4604. },
  4605. /**
  4606. * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For
  4607. * example, passing `.0.$row-0.1` would result in `cb` getting called
  4608. * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.
  4609. *
  4610. * NOTE: This traversal happens on IDs without touching the DOM.
  4611. *
  4612. * @param {string} targetID ID of the target node.
  4613. * @param {function} cb Callback to invoke.
  4614. * @param {*} arg Argument to invoke the callback with.
  4615. * @internal
  4616. */
  4617. traverseAncestors: function (targetID, cb, arg) {
  4618. traverseParentPath('', targetID, cb, arg, true, false);
  4619. },
  4620. getFirstCommonAncestorID: getFirstCommonAncestorID,
  4621. /**
  4622. * Exposed for unit testing.
  4623. * @private
  4624. */
  4625. _getNextDescendantID: getNextDescendantID,
  4626. isAncestorIDOf: isAncestorIDOf,
  4627. SEPARATOR: SEPARATOR
  4628. };
  4629. module.exports = ReactInstanceHandles;
  4630. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  4631. /***/ },
  4632. /* 46 */
  4633. /***/ function(module, exports) {
  4634. /**
  4635. * Copyright 2013-2015, Facebook, Inc.
  4636. * All rights reserved.
  4637. *
  4638. * This source code is licensed under the BSD-style license found in the
  4639. * LICENSE file in the root directory of this source tree. An additional grant
  4640. * of patent rights can be found in the PATENTS file in the same directory.
  4641. *
  4642. * @providesModule ReactRootIndex
  4643. * @typechecks
  4644. */
  4645. 'use strict';
  4646. var ReactRootIndexInjection = {
  4647. /**
  4648. * @param {function} _createReactRootIndex
  4649. */
  4650. injectCreateReactRootIndex: function (_createReactRootIndex) {
  4651. ReactRootIndex.createReactRootIndex = _createReactRootIndex;
  4652. }
  4653. };
  4654. var ReactRootIndex = {
  4655. createReactRootIndex: null,
  4656. injection: ReactRootIndexInjection
  4657. };
  4658. module.exports = ReactRootIndex;
  4659. /***/ },
  4660. /* 47 */
  4661. /***/ function(module, exports) {
  4662. /**
  4663. * Copyright 2013-2015, Facebook, Inc.
  4664. * All rights reserved.
  4665. *
  4666. * This source code is licensed under the BSD-style license found in the
  4667. * LICENSE file in the root directory of this source tree. An additional grant
  4668. * of patent rights can be found in the PATENTS file in the same directory.
  4669. *
  4670. * @providesModule ReactInstanceMap
  4671. */
  4672. 'use strict';
  4673. /**
  4674. * `ReactInstanceMap` maintains a mapping from a public facing stateful
  4675. * instance (key) and the internal representation (value). This allows public
  4676. * methods to accept the user facing instance as an argument and map them back
  4677. * to internal methods.
  4678. */
  4679. // TODO: Replace this with ES6: var ReactInstanceMap = new Map();
  4680. var ReactInstanceMap = {
  4681. /**
  4682. * This API should be called `delete` but we'd have to make sure to always
  4683. * transform these to strings for IE support. When this transform is fully
  4684. * supported we can rename it.
  4685. */
  4686. remove: function (key) {
  4687. key._reactInternalInstance = undefined;
  4688. },
  4689. get: function (key) {
  4690. return key._reactInternalInstance;
  4691. },
  4692. has: function (key) {
  4693. return key._reactInternalInstance !== undefined;
  4694. },
  4695. set: function (key, value) {
  4696. key._reactInternalInstance = value;
  4697. }
  4698. };
  4699. module.exports = ReactInstanceMap;
  4700. /***/ },
  4701. /* 48 */
  4702. /***/ function(module, exports, __webpack_require__) {
  4703. /**
  4704. * Copyright 2013-2015, Facebook, Inc.
  4705. * All rights reserved.
  4706. *
  4707. * This source code is licensed under the BSD-style license found in the
  4708. * LICENSE file in the root directory of this source tree. An additional grant
  4709. * of patent rights can be found in the PATENTS file in the same directory.
  4710. *
  4711. * @providesModule ReactMarkupChecksum
  4712. */
  4713. 'use strict';
  4714. var adler32 = __webpack_require__(49);
  4715. var TAG_END = /\/?>/;
  4716. var ReactMarkupChecksum = {
  4717. CHECKSUM_ATTR_NAME: 'data-react-checksum',
  4718. /**
  4719. * @param {string} markup Markup string
  4720. * @return {string} Markup string with checksum attribute attached
  4721. */
  4722. addChecksumToMarkup: function (markup) {
  4723. var checksum = adler32(markup);
  4724. // Add checksum (handle both parent tags and self-closing tags)
  4725. return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&');
  4726. },
  4727. /**
  4728. * @param {string} markup to use
  4729. * @param {DOMElement} element root React element
  4730. * @returns {boolean} whether or not the markup is the same
  4731. */
  4732. canReuseMarkup: function (markup, element) {
  4733. var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
  4734. existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
  4735. var markupChecksum = adler32(markup);
  4736. return markupChecksum === existingChecksum;
  4737. }
  4738. };
  4739. module.exports = ReactMarkupChecksum;
  4740. /***/ },
  4741. /* 49 */
  4742. /***/ function(module, exports) {
  4743. /**
  4744. * Copyright 2013-2015, Facebook, Inc.
  4745. * All rights reserved.
  4746. *
  4747. * This source code is licensed under the BSD-style license found in the
  4748. * LICENSE file in the root directory of this source tree. An additional grant
  4749. * of patent rights can be found in the PATENTS file in the same directory.
  4750. *
  4751. * @providesModule adler32
  4752. */
  4753. 'use strict';
  4754. var MOD = 65521;
  4755. // adler32 is not cryptographically strong, and is only used to sanity check that
  4756. // markup generated on the server matches the markup generated on the client.
  4757. // This implementation (a modified version of the SheetJS version) has been optimized
  4758. // for our use case, at the expense of conforming to the adler32 specification
  4759. // for non-ascii inputs.
  4760. function adler32(data) {
  4761. var a = 1;
  4762. var b = 0;
  4763. var i = 0;
  4764. var l = data.length;
  4765. var m = l & ~0x3;
  4766. while (i < m) {
  4767. for (; i < Math.min(i + 4096, m); i += 4) {
  4768. b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));
  4769. }
  4770. a %= MOD;
  4771. b %= MOD;
  4772. }
  4773. for (; i < l; i++) {
  4774. b += a += data.charCodeAt(i);
  4775. }
  4776. a %= MOD;
  4777. b %= MOD;
  4778. return a | b << 16;
  4779. }
  4780. module.exports = adler32;
  4781. /***/ },
  4782. /* 50 */
  4783. /***/ function(module, exports, __webpack_require__) {
  4784. /**
  4785. * Copyright 2013-2015, Facebook, Inc.
  4786. * All rights reserved.
  4787. *
  4788. * This source code is licensed under the BSD-style license found in the
  4789. * LICENSE file in the root directory of this source tree. An additional grant
  4790. * of patent rights can be found in the PATENTS file in the same directory.
  4791. *
  4792. * @providesModule ReactReconciler
  4793. */
  4794. 'use strict';
  4795. var ReactRef = __webpack_require__(51);
  4796. /**
  4797. * Helper to call ReactRef.attachRefs with this composite component, split out
  4798. * to avoid allocations in the transaction mount-ready queue.
  4799. */
  4800. function attachRefs() {
  4801. ReactRef.attachRefs(this, this._currentElement);
  4802. }
  4803. var ReactReconciler = {
  4804. /**
  4805. * Initializes the component, renders markup, and registers event listeners.
  4806. *
  4807. * @param {ReactComponent} internalInstance
  4808. * @param {string} rootID DOM ID of the root node.
  4809. * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
  4810. * @return {?string} Rendered markup to be inserted into the DOM.
  4811. * @final
  4812. * @internal
  4813. */
  4814. mountComponent: function (internalInstance, rootID, transaction, context) {
  4815. var markup = internalInstance.mountComponent(rootID, transaction, context);
  4816. if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {
  4817. transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
  4818. }
  4819. return markup;
  4820. },
  4821. /**
  4822. * Releases any resources allocated by `mountComponent`.
  4823. *
  4824. * @final
  4825. * @internal
  4826. */
  4827. unmountComponent: function (internalInstance) {
  4828. ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
  4829. internalInstance.unmountComponent();
  4830. },
  4831. /**
  4832. * Update a component using a new element.
  4833. *
  4834. * @param {ReactComponent} internalInstance
  4835. * @param {ReactElement} nextElement
  4836. * @param {ReactReconcileTransaction} transaction
  4837. * @param {object} context
  4838. * @internal
  4839. */
  4840. receiveComponent: function (internalInstance, nextElement, transaction, context) {
  4841. var prevElement = internalInstance._currentElement;
  4842. if (nextElement === prevElement && context === internalInstance._context) {
  4843. // Since elements are immutable after the owner is rendered,
  4844. // we can do a cheap identity compare here to determine if this is a
  4845. // superfluous reconcile. It's possible for state to be mutable but such
  4846. // change should trigger an update of the owner which would recreate
  4847. // the element. We explicitly check for the existence of an owner since
  4848. // it's possible for an element created outside a composite to be
  4849. // deeply mutated and reused.
  4850. // TODO: Bailing out early is just a perf optimization right?
  4851. // TODO: Removing the return statement should affect correctness?
  4852. return;
  4853. }
  4854. var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);
  4855. if (refsChanged) {
  4856. ReactRef.detachRefs(internalInstance, prevElement);
  4857. }
  4858. internalInstance.receiveComponent(nextElement, transaction, context);
  4859. if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {
  4860. transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
  4861. }
  4862. },
  4863. /**
  4864. * Flush any dirty changes in a component.
  4865. *
  4866. * @param {ReactComponent} internalInstance
  4867. * @param {ReactReconcileTransaction} transaction
  4868. * @internal
  4869. */
  4870. performUpdateIfNecessary: function (internalInstance, transaction) {
  4871. internalInstance.performUpdateIfNecessary(transaction);
  4872. }
  4873. };
  4874. module.exports = ReactReconciler;
  4875. /***/ },
  4876. /* 51 */
  4877. /***/ function(module, exports, __webpack_require__) {
  4878. /**
  4879. * Copyright 2013-2015, Facebook, Inc.
  4880. * All rights reserved.
  4881. *
  4882. * This source code is licensed under the BSD-style license found in the
  4883. * LICENSE file in the root directory of this source tree. An additional grant
  4884. * of patent rights can be found in the PATENTS file in the same directory.
  4885. *
  4886. * @providesModule ReactRef
  4887. */
  4888. 'use strict';
  4889. var ReactOwner = __webpack_require__(52);
  4890. var ReactRef = {};
  4891. function attachRef(ref, component, owner) {
  4892. if (typeof ref === 'function') {
  4893. ref(component.getPublicInstance());
  4894. } else {
  4895. // Legacy ref
  4896. ReactOwner.addComponentAsRefTo(component, ref, owner);
  4897. }
  4898. }
  4899. function detachRef(ref, component, owner) {
  4900. if (typeof ref === 'function') {
  4901. ref(null);
  4902. } else {
  4903. // Legacy ref
  4904. ReactOwner.removeComponentAsRefFrom(component, ref, owner);
  4905. }
  4906. }
  4907. ReactRef.attachRefs = function (instance, element) {
  4908. if (element === null || element === false) {
  4909. return;
  4910. }
  4911. var ref = element.ref;
  4912. if (ref != null) {
  4913. attachRef(ref, instance, element._owner);
  4914. }
  4915. };
  4916. ReactRef.shouldUpdateRefs = function (prevElement, nextElement) {
  4917. // If either the owner or a `ref` has changed, make sure the newest owner
  4918. // has stored a reference to `this`, and the previous owner (if different)
  4919. // has forgotten the reference to `this`. We use the element instead
  4920. // of the public this.props because the post processing cannot determine
  4921. // a ref. The ref conceptually lives on the element.
  4922. // TODO: Should this even be possible? The owner cannot change because
  4923. // it's forbidden by shouldUpdateReactComponent. The ref can change
  4924. // if you swap the keys of but not the refs. Reconsider where this check
  4925. // is made. It probably belongs where the key checking and
  4926. // instantiateReactComponent is done.
  4927. var prevEmpty = prevElement === null || prevElement === false;
  4928. var nextEmpty = nextElement === null || nextElement === false;
  4929. return(
  4930. // This has a few false positives w/r/t empty components.
  4931. prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref
  4932. );
  4933. };
  4934. ReactRef.detachRefs = function (instance, element) {
  4935. if (element === null || element === false) {
  4936. return;
  4937. }
  4938. var ref = element.ref;
  4939. if (ref != null) {
  4940. detachRef(ref, instance, element._owner);
  4941. }
  4942. };
  4943. module.exports = ReactRef;
  4944. /***/ },
  4945. /* 52 */
  4946. /***/ function(module, exports, __webpack_require__) {
  4947. /* WEBPACK VAR INJECTION */(function(process) {/**
  4948. * Copyright 2013-2015, Facebook, Inc.
  4949. * All rights reserved.
  4950. *
  4951. * This source code is licensed under the BSD-style license found in the
  4952. * LICENSE file in the root directory of this source tree. An additional grant
  4953. * of patent rights can be found in the PATENTS file in the same directory.
  4954. *
  4955. * @providesModule ReactOwner
  4956. */
  4957. 'use strict';
  4958. var invariant = __webpack_require__(13);
  4959. /**
  4960. * ReactOwners are capable of storing references to owned components.
  4961. *
  4962. * All components are capable of //being// referenced by owner components, but
  4963. * only ReactOwner components are capable of //referencing// owned components.
  4964. * The named reference is known as a "ref".
  4965. *
  4966. * Refs are available when mounted and updated during reconciliation.
  4967. *
  4968. * var MyComponent = React.createClass({
  4969. * render: function() {
  4970. * return (
  4971. * <div onClick={this.handleClick}>
  4972. * <CustomComponent ref="custom" />
  4973. * </div>
  4974. * );
  4975. * },
  4976. * handleClick: function() {
  4977. * this.refs.custom.handleClick();
  4978. * },
  4979. * componentDidMount: function() {
  4980. * this.refs.custom.initialize();
  4981. * }
  4982. * });
  4983. *
  4984. * Refs should rarely be used. When refs are used, they should only be done to
  4985. * control data that is not handled by React's data flow.
  4986. *
  4987. * @class ReactOwner
  4988. */
  4989. var ReactOwner = {
  4990. /**
  4991. * @param {?object} object
  4992. * @return {boolean} True if `object` is a valid owner.
  4993. * @final
  4994. */
  4995. isValidOwner: function (object) {
  4996. return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');
  4997. },
  4998. /**
  4999. * Adds a component by ref to an owner component.
  5000. *
  5001. * @param {ReactComponent} component Component to reference.
  5002. * @param {string} ref Name by which to refer to the component.
  5003. * @param {ReactOwner} owner Component on which to record the ref.
  5004. * @final
  5005. * @internal
  5006. */
  5007. addComponentAsRefTo: function (component, ref, owner) {
  5008. !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;
  5009. owner.attachRef(ref, component);
  5010. },
  5011. /**
  5012. * Removes a component by ref from an owner component.
  5013. *
  5014. * @param {ReactComponent} component Component to dereference.
  5015. * @param {string} ref Name of the ref to remove.
  5016. * @param {ReactOwner} owner Component on which the ref is recorded.
  5017. * @final
  5018. * @internal
  5019. */
  5020. removeComponentAsRefFrom: function (component, ref, owner) {
  5021. !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;
  5022. // Check that `component` is still the current ref because we do not want to
  5023. // detach the ref if another component stole it.
  5024. if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {
  5025. owner.detachRef(ref);
  5026. }
  5027. }
  5028. };
  5029. module.exports = ReactOwner;
  5030. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  5031. /***/ },
  5032. /* 53 */
  5033. /***/ function(module, exports, __webpack_require__) {
  5034. /* WEBPACK VAR INJECTION */(function(process) {/**
  5035. * Copyright 2015, Facebook, Inc.
  5036. * All rights reserved.
  5037. *
  5038. * This source code is licensed under the BSD-style license found in the
  5039. * LICENSE file in the root directory of this source tree. An additional grant
  5040. * of patent rights can be found in the PATENTS file in the same directory.
  5041. *
  5042. * @providesModule ReactUpdateQueue
  5043. */
  5044. 'use strict';
  5045. var ReactCurrentOwner = __webpack_require__(5);
  5046. var ReactElement = __webpack_require__(42);
  5047. var ReactInstanceMap = __webpack_require__(47);
  5048. var ReactUpdates = __webpack_require__(54);
  5049. var assign = __webpack_require__(39);
  5050. var invariant = __webpack_require__(13);
  5051. var warning = __webpack_require__(25);
  5052. function enqueueUpdate(internalInstance) {
  5053. ReactUpdates.enqueueUpdate(internalInstance);
  5054. }
  5055. function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
  5056. var internalInstance = ReactInstanceMap.get(publicInstance);
  5057. if (!internalInstance) {
  5058. if (process.env.NODE_ENV !== 'production') {
  5059. // Only warn when we have a callerName. Otherwise we should be silent.
  5060. // We're probably calling from enqueueCallback. We don't want to warn
  5061. // there because we already warned for the corresponding lifecycle method.
  5062. process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined;
  5063. }
  5064. return null;
  5065. }
  5066. if (process.env.NODE_ENV !== 'production') {
  5067. process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined;
  5068. }
  5069. return internalInstance;
  5070. }
  5071. /**
  5072. * ReactUpdateQueue allows for state updates to be scheduled into a later
  5073. * reconciliation step.
  5074. */
  5075. var ReactUpdateQueue = {
  5076. /**
  5077. * Checks whether or not this composite component is mounted.
  5078. * @param {ReactClass} publicInstance The instance we want to test.
  5079. * @return {boolean} True if mounted, false otherwise.
  5080. * @protected
  5081. * @final
  5082. */
  5083. isMounted: function (publicInstance) {
  5084. if (process.env.NODE_ENV !== 'production') {
  5085. var owner = ReactCurrentOwner.current;
  5086. if (owner !== null) {
  5087. process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;
  5088. owner._warnedAboutRefsInRender = true;
  5089. }
  5090. }
  5091. var internalInstance = ReactInstanceMap.get(publicInstance);
  5092. if (internalInstance) {
  5093. // During componentWillMount and render this will still be null but after
  5094. // that will always render to something. At least for now. So we can use
  5095. // this hack.
  5096. return !!internalInstance._renderedComponent;
  5097. } else {
  5098. return false;
  5099. }
  5100. },
  5101. /**
  5102. * Enqueue a callback that will be executed after all the pending updates
  5103. * have processed.
  5104. *
  5105. * @param {ReactClass} publicInstance The instance to use as `this` context.
  5106. * @param {?function} callback Called after state is updated.
  5107. * @internal
  5108. */
  5109. enqueueCallback: function (publicInstance, callback) {
  5110. !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined;
  5111. var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
  5112. // Previously we would throw an error if we didn't have an internal
  5113. // instance. Since we want to make it a no-op instead, we mirror the same
  5114. // behavior we have in other enqueue* methods.
  5115. // We also need to ignore callbacks in componentWillMount. See
  5116. // enqueueUpdates.
  5117. if (!internalInstance) {
  5118. return null;
  5119. }
  5120. if (internalInstance._pendingCallbacks) {
  5121. internalInstance._pendingCallbacks.push(callback);
  5122. } else {
  5123. internalInstance._pendingCallbacks = [callback];
  5124. }
  5125. // TODO: The callback here is ignored when setState is called from
  5126. // componentWillMount. Either fix it or disallow doing so completely in
  5127. // favor of getInitialState. Alternatively, we can disallow
  5128. // componentWillMount during server-side rendering.
  5129. enqueueUpdate(internalInstance);
  5130. },
  5131. enqueueCallbackInternal: function (internalInstance, callback) {
  5132. !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined;
  5133. if (internalInstance._pendingCallbacks) {
  5134. internalInstance._pendingCallbacks.push(callback);
  5135. } else {
  5136. internalInstance._pendingCallbacks = [callback];
  5137. }
  5138. enqueueUpdate(internalInstance);
  5139. },
  5140. /**
  5141. * Forces an update. This should only be invoked when it is known with
  5142. * certainty that we are **not** in a DOM transaction.
  5143. *
  5144. * You may want to call this when you know that some deeper aspect of the
  5145. * component's state has changed but `setState` was not called.
  5146. *
  5147. * This will not invoke `shouldComponentUpdate`, but it will invoke
  5148. * `componentWillUpdate` and `componentDidUpdate`.
  5149. *
  5150. * @param {ReactClass} publicInstance The instance that should rerender.
  5151. * @internal
  5152. */
  5153. enqueueForceUpdate: function (publicInstance) {
  5154. var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');
  5155. if (!internalInstance) {
  5156. return;
  5157. }
  5158. internalInstance._pendingForceUpdate = true;
  5159. enqueueUpdate(internalInstance);
  5160. },
  5161. /**
  5162. * Replaces all of the state. Always use this or `setState` to mutate state.
  5163. * You should treat `this.state` as immutable.
  5164. *
  5165. * There is no guarantee that `this.state` will be immediately updated, so
  5166. * accessing `this.state` after calling this method may return the old value.
  5167. *
  5168. * @param {ReactClass} publicInstance The instance that should rerender.
  5169. * @param {object} completeState Next state.
  5170. * @internal
  5171. */
  5172. enqueueReplaceState: function (publicInstance, completeState) {
  5173. var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');
  5174. if (!internalInstance) {
  5175. return;
  5176. }
  5177. internalInstance._pendingStateQueue = [completeState];
  5178. internalInstance._pendingReplaceState = true;
  5179. enqueueUpdate(internalInstance);
  5180. },
  5181. /**
  5182. * Sets a subset of the state. This only exists because _pendingState is
  5183. * internal. This provides a merging strategy that is not available to deep
  5184. * properties which is confusing. TODO: Expose pendingState or don't use it
  5185. * during the merge.
  5186. *
  5187. * @param {ReactClass} publicInstance The instance that should rerender.
  5188. * @param {object} partialState Next partial state to be merged with state.
  5189. * @internal
  5190. */
  5191. enqueueSetState: function (publicInstance, partialState) {
  5192. var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');
  5193. if (!internalInstance) {
  5194. return;
  5195. }
  5196. var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);
  5197. queue.push(partialState);
  5198. enqueueUpdate(internalInstance);
  5199. },
  5200. /**
  5201. * Sets a subset of the props.
  5202. *
  5203. * @param {ReactClass} publicInstance The instance that should rerender.
  5204. * @param {object} partialProps Subset of the next props.
  5205. * @internal
  5206. */
  5207. enqueueSetProps: function (publicInstance, partialProps) {
  5208. var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps');
  5209. if (!internalInstance) {
  5210. return;
  5211. }
  5212. ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps);
  5213. },
  5214. enqueueSetPropsInternal: function (internalInstance, partialProps) {
  5215. var topLevelWrapper = internalInstance._topLevelWrapper;
  5216. !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;
  5217. // Merge with the pending element if it exists, otherwise with existing
  5218. // element props.
  5219. var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;
  5220. var element = wrapElement.props;
  5221. var props = assign({}, element.props, partialProps);
  5222. topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));
  5223. enqueueUpdate(topLevelWrapper);
  5224. },
  5225. /**
  5226. * Replaces all of the props.
  5227. *
  5228. * @param {ReactClass} publicInstance The instance that should rerender.
  5229. * @param {object} props New props.
  5230. * @internal
  5231. */
  5232. enqueueReplaceProps: function (publicInstance, props) {
  5233. var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps');
  5234. if (!internalInstance) {
  5235. return;
  5236. }
  5237. ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props);
  5238. },
  5239. enqueueReplacePropsInternal: function (internalInstance, props) {
  5240. var topLevelWrapper = internalInstance._topLevelWrapper;
  5241. !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;
  5242. // Merge with the pending element if it exists, otherwise with existing
  5243. // element props.
  5244. var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;
  5245. var element = wrapElement.props;
  5246. topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));
  5247. enqueueUpdate(topLevelWrapper);
  5248. },
  5249. enqueueElementInternal: function (internalInstance, newElement) {
  5250. internalInstance._pendingElement = newElement;
  5251. enqueueUpdate(internalInstance);
  5252. }
  5253. };
  5254. module.exports = ReactUpdateQueue;
  5255. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  5256. /***/ },
  5257. /* 54 */
  5258. /***/ function(module, exports, __webpack_require__) {
  5259. /* WEBPACK VAR INJECTION */(function(process) {/**
  5260. * Copyright 2013-2015, Facebook, Inc.
  5261. * All rights reserved.
  5262. *
  5263. * This source code is licensed under the BSD-style license found in the
  5264. * LICENSE file in the root directory of this source tree. An additional grant
  5265. * of patent rights can be found in the PATENTS file in the same directory.
  5266. *
  5267. * @providesModule ReactUpdates
  5268. */
  5269. 'use strict';
  5270. var CallbackQueue = __webpack_require__(55);
  5271. var PooledClass = __webpack_require__(56);
  5272. var ReactPerf = __webpack_require__(18);
  5273. var ReactReconciler = __webpack_require__(50);
  5274. var Transaction = __webpack_require__(57);
  5275. var assign = __webpack_require__(39);
  5276. var invariant = __webpack_require__(13);
  5277. var dirtyComponents = [];
  5278. var asapCallbackQueue = CallbackQueue.getPooled();
  5279. var asapEnqueued = false;
  5280. var batchingStrategy = null;
  5281. function ensureInjected() {
  5282. !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined;
  5283. }
  5284. var NESTED_UPDATES = {
  5285. initialize: function () {
  5286. this.dirtyComponentsLength = dirtyComponents.length;
  5287. },
  5288. close: function () {
  5289. if (this.dirtyComponentsLength !== dirtyComponents.length) {
  5290. // Additional updates were enqueued by componentDidUpdate handlers or
  5291. // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run
  5292. // these new updates so that if A's componentDidUpdate calls setState on
  5293. // B, B will update before the callback A's updater provided when calling
  5294. // setState.
  5295. dirtyComponents.splice(0, this.dirtyComponentsLength);
  5296. flushBatchedUpdates();
  5297. } else {
  5298. dirtyComponents.length = 0;
  5299. }
  5300. }
  5301. };
  5302. var UPDATE_QUEUEING = {
  5303. initialize: function () {
  5304. this.callbackQueue.reset();
  5305. },
  5306. close: function () {
  5307. this.callbackQueue.notifyAll();
  5308. }
  5309. };
  5310. var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];
  5311. function ReactUpdatesFlushTransaction() {
  5312. this.reinitializeTransaction();
  5313. this.dirtyComponentsLength = null;
  5314. this.callbackQueue = CallbackQueue.getPooled();
  5315. this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false);
  5316. }
  5317. assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {
  5318. getTransactionWrappers: function () {
  5319. return TRANSACTION_WRAPPERS;
  5320. },
  5321. destructor: function () {
  5322. this.dirtyComponentsLength = null;
  5323. CallbackQueue.release(this.callbackQueue);
  5324. this.callbackQueue = null;
  5325. ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);
  5326. this.reconcileTransaction = null;
  5327. },
  5328. perform: function (method, scope, a) {
  5329. // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`
  5330. // with this transaction's wrappers around it.
  5331. return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);
  5332. }
  5333. });
  5334. PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);
  5335. function batchedUpdates(callback, a, b, c, d, e) {
  5336. ensureInjected();
  5337. batchingStrategy.batchedUpdates(callback, a, b, c, d, e);
  5338. }
  5339. /**
  5340. * Array comparator for ReactComponents by mount ordering.
  5341. *
  5342. * @param {ReactComponent} c1 first component you're comparing
  5343. * @param {ReactComponent} c2 second component you're comparing
  5344. * @return {number} Return value usable by Array.prototype.sort().
  5345. */
  5346. function mountOrderComparator(c1, c2) {
  5347. return c1._mountOrder - c2._mountOrder;
  5348. }
  5349. function runBatchedUpdates(transaction) {
  5350. var len = transaction.dirtyComponentsLength;
  5351. !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined;
  5352. // Since reconciling a component higher in the owner hierarchy usually (not
  5353. // always -- see shouldComponentUpdate()) will reconcile children, reconcile
  5354. // them before their children by sorting the array.
  5355. dirtyComponents.sort(mountOrderComparator);
  5356. for (var i = 0; i < len; i++) {
  5357. // If a component is unmounted before pending changes apply, it will still
  5358. // be here, but we assume that it has cleared its _pendingCallbacks and
  5359. // that performUpdateIfNecessary is a noop.
  5360. var component = dirtyComponents[i];
  5361. // If performUpdateIfNecessary happens to enqueue any new updates, we
  5362. // shouldn't execute the callbacks until the next render happens, so
  5363. // stash the callbacks first
  5364. var callbacks = component._pendingCallbacks;
  5365. component._pendingCallbacks = null;
  5366. ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);
  5367. if (callbacks) {
  5368. for (var j = 0; j < callbacks.length; j++) {
  5369. transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());
  5370. }
  5371. }
  5372. }
  5373. }
  5374. var flushBatchedUpdates = function () {
  5375. // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
  5376. // array and perform any updates enqueued by mount-ready handlers (i.e.,
  5377. // componentDidUpdate) but we need to check here too in order to catch
  5378. // updates enqueued by setState callbacks and asap calls.
  5379. while (dirtyComponents.length || asapEnqueued) {
  5380. if (dirtyComponents.length) {
  5381. var transaction = ReactUpdatesFlushTransaction.getPooled();
  5382. transaction.perform(runBatchedUpdates, null, transaction);
  5383. ReactUpdatesFlushTransaction.release(transaction);
  5384. }
  5385. if (asapEnqueued) {
  5386. asapEnqueued = false;
  5387. var queue = asapCallbackQueue;
  5388. asapCallbackQueue = CallbackQueue.getPooled();
  5389. queue.notifyAll();
  5390. CallbackQueue.release(queue);
  5391. }
  5392. }
  5393. };
  5394. flushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);
  5395. /**
  5396. * Mark a component as needing a rerender, adding an optional callback to a
  5397. * list of functions which will be executed once the rerender occurs.
  5398. */
  5399. function enqueueUpdate(component) {
  5400. ensureInjected();
  5401. // Various parts of our code (such as ReactCompositeComponent's
  5402. // _renderValidatedComponent) assume that calls to render aren't nested;
  5403. // verify that that's the case. (This is called by each top-level update
  5404. // function, like setProps, setState, forceUpdate, etc.; creation and
  5405. // destruction of top-level components is guarded in ReactMount.)
  5406. if (!batchingStrategy.isBatchingUpdates) {
  5407. batchingStrategy.batchedUpdates(enqueueUpdate, component);
  5408. return;
  5409. }
  5410. dirtyComponents.push(component);
  5411. }
  5412. /**
  5413. * Enqueue a callback to be run at the end of the current batching cycle. Throws
  5414. * if no updates are currently being performed.
  5415. */
  5416. function asap(callback, context) {
  5417. !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined;
  5418. asapCallbackQueue.enqueue(callback, context);
  5419. asapEnqueued = true;
  5420. }
  5421. var ReactUpdatesInjection = {
  5422. injectReconcileTransaction: function (ReconcileTransaction) {
  5423. !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined;
  5424. ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
  5425. },
  5426. injectBatchingStrategy: function (_batchingStrategy) {
  5427. !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined;
  5428. !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined;
  5429. !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined;
  5430. batchingStrategy = _batchingStrategy;
  5431. }
  5432. };
  5433. var ReactUpdates = {
  5434. /**
  5435. * React references `ReactReconcileTransaction` using this property in order
  5436. * to allow dependency injection.
  5437. *
  5438. * @internal
  5439. */
  5440. ReactReconcileTransaction: null,
  5441. batchedUpdates: batchedUpdates,
  5442. enqueueUpdate: enqueueUpdate,
  5443. flushBatchedUpdates: flushBatchedUpdates,
  5444. injection: ReactUpdatesInjection,
  5445. asap: asap
  5446. };
  5447. module.exports = ReactUpdates;
  5448. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  5449. /***/ },
  5450. /* 55 */
  5451. /***/ function(module, exports, __webpack_require__) {
  5452. /* WEBPACK VAR INJECTION */(function(process) {/**
  5453. * Copyright 2013-2015, Facebook, Inc.
  5454. * All rights reserved.
  5455. *
  5456. * This source code is licensed under the BSD-style license found in the
  5457. * LICENSE file in the root directory of this source tree. An additional grant
  5458. * of patent rights can be found in the PATENTS file in the same directory.
  5459. *
  5460. * @providesModule CallbackQueue
  5461. */
  5462. 'use strict';
  5463. var PooledClass = __webpack_require__(56);
  5464. var assign = __webpack_require__(39);
  5465. var invariant = __webpack_require__(13);
  5466. /**
  5467. * A specialized pseudo-event module to help keep track of components waiting to
  5468. * be notified when their DOM representations are available for use.
  5469. *
  5470. * This implements `PooledClass`, so you should never need to instantiate this.
  5471. * Instead, use `CallbackQueue.getPooled()`.
  5472. *
  5473. * @class ReactMountReady
  5474. * @implements PooledClass
  5475. * @internal
  5476. */
  5477. function CallbackQueue() {
  5478. this._callbacks = null;
  5479. this._contexts = null;
  5480. }
  5481. assign(CallbackQueue.prototype, {
  5482. /**
  5483. * Enqueues a callback to be invoked when `notifyAll` is invoked.
  5484. *
  5485. * @param {function} callback Invoked when `notifyAll` is invoked.
  5486. * @param {?object} context Context to call `callback` with.
  5487. * @internal
  5488. */
  5489. enqueue: function (callback, context) {
  5490. this._callbacks = this._callbacks || [];
  5491. this._contexts = this._contexts || [];
  5492. this._callbacks.push(callback);
  5493. this._contexts.push(context);
  5494. },
  5495. /**
  5496. * Invokes all enqueued callbacks and clears the queue. This is invoked after
  5497. * the DOM representation of a component has been created or updated.
  5498. *
  5499. * @internal
  5500. */
  5501. notifyAll: function () {
  5502. var callbacks = this._callbacks;
  5503. var contexts = this._contexts;
  5504. if (callbacks) {
  5505. !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined;
  5506. this._callbacks = null;
  5507. this._contexts = null;
  5508. for (var i = 0; i < callbacks.length; i++) {
  5509. callbacks[i].call(contexts[i]);
  5510. }
  5511. callbacks.length = 0;
  5512. contexts.length = 0;
  5513. }
  5514. },
  5515. /**
  5516. * Resets the internal queue.
  5517. *
  5518. * @internal
  5519. */
  5520. reset: function () {
  5521. this._callbacks = null;
  5522. this._contexts = null;
  5523. },
  5524. /**
  5525. * `PooledClass` looks for this.
  5526. */
  5527. destructor: function () {
  5528. this.reset();
  5529. }
  5530. });
  5531. PooledClass.addPoolingTo(CallbackQueue);
  5532. module.exports = CallbackQueue;
  5533. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  5534. /***/ },
  5535. /* 56 */
  5536. /***/ function(module, exports, __webpack_require__) {
  5537. /* WEBPACK VAR INJECTION */(function(process) {/**
  5538. * Copyright 2013-2015, Facebook, Inc.
  5539. * All rights reserved.
  5540. *
  5541. * This source code is licensed under the BSD-style license found in the
  5542. * LICENSE file in the root directory of this source tree. An additional grant
  5543. * of patent rights can be found in the PATENTS file in the same directory.
  5544. *
  5545. * @providesModule PooledClass
  5546. */
  5547. 'use strict';
  5548. var invariant = __webpack_require__(13);
  5549. /**
  5550. * Static poolers. Several custom versions for each potential number of
  5551. * arguments. A completely generic pooler is easy to implement, but would
  5552. * require accessing the `arguments` object. In each of these, `this` refers to
  5553. * the Class itself, not an instance. If any others are needed, simply add them
  5554. * here, or in their own files.
  5555. */
  5556. var oneArgumentPooler = function (copyFieldsFrom) {
  5557. var Klass = this;
  5558. if (Klass.instancePool.length) {
  5559. var instance = Klass.instancePool.pop();
  5560. Klass.call(instance, copyFieldsFrom);
  5561. return instance;
  5562. } else {
  5563. return new Klass(copyFieldsFrom);
  5564. }
  5565. };
  5566. var twoArgumentPooler = function (a1, a2) {
  5567. var Klass = this;
  5568. if (Klass.instancePool.length) {
  5569. var instance = Klass.instancePool.pop();
  5570. Klass.call(instance, a1, a2);
  5571. return instance;
  5572. } else {
  5573. return new Klass(a1, a2);
  5574. }
  5575. };
  5576. var threeArgumentPooler = function (a1, a2, a3) {
  5577. var Klass = this;
  5578. if (Klass.instancePool.length) {
  5579. var instance = Klass.instancePool.pop();
  5580. Klass.call(instance, a1, a2, a3);
  5581. return instance;
  5582. } else {
  5583. return new Klass(a1, a2, a3);
  5584. }
  5585. };
  5586. var fourArgumentPooler = function (a1, a2, a3, a4) {
  5587. var Klass = this;
  5588. if (Klass.instancePool.length) {
  5589. var instance = Klass.instancePool.pop();
  5590. Klass.call(instance, a1, a2, a3, a4);
  5591. return instance;
  5592. } else {
  5593. return new Klass(a1, a2, a3, a4);
  5594. }
  5595. };
  5596. var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
  5597. var Klass = this;
  5598. if (Klass.instancePool.length) {
  5599. var instance = Klass.instancePool.pop();
  5600. Klass.call(instance, a1, a2, a3, a4, a5);
  5601. return instance;
  5602. } else {
  5603. return new Klass(a1, a2, a3, a4, a5);
  5604. }
  5605. };
  5606. var standardReleaser = function (instance) {
  5607. var Klass = this;
  5608. !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined;
  5609. instance.destructor();
  5610. if (Klass.instancePool.length < Klass.poolSize) {
  5611. Klass.instancePool.push(instance);
  5612. }
  5613. };
  5614. var DEFAULT_POOL_SIZE = 10;
  5615. var DEFAULT_POOLER = oneArgumentPooler;
  5616. /**
  5617. * Augments `CopyConstructor` to be a poolable class, augmenting only the class
  5618. * itself (statically) not adding any prototypical fields. Any CopyConstructor
  5619. * you give this may have a `poolSize` property, and will look for a
  5620. * prototypical `destructor` on instances (optional).
  5621. *
  5622. * @param {Function} CopyConstructor Constructor that can be used to reset.
  5623. * @param {Function} pooler Customizable pooler.
  5624. */
  5625. var addPoolingTo = function (CopyConstructor, pooler) {
  5626. var NewKlass = CopyConstructor;
  5627. NewKlass.instancePool = [];
  5628. NewKlass.getPooled = pooler || DEFAULT_POOLER;
  5629. if (!NewKlass.poolSize) {
  5630. NewKlass.poolSize = DEFAULT_POOL_SIZE;
  5631. }
  5632. NewKlass.release = standardReleaser;
  5633. return NewKlass;
  5634. };
  5635. var PooledClass = {
  5636. addPoolingTo: addPoolingTo,
  5637. oneArgumentPooler: oneArgumentPooler,
  5638. twoArgumentPooler: twoArgumentPooler,
  5639. threeArgumentPooler: threeArgumentPooler,
  5640. fourArgumentPooler: fourArgumentPooler,
  5641. fiveArgumentPooler: fiveArgumentPooler
  5642. };
  5643. module.exports = PooledClass;
  5644. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  5645. /***/ },
  5646. /* 57 */
  5647. /***/ function(module, exports, __webpack_require__) {
  5648. /* WEBPACK VAR INJECTION */(function(process) {/**
  5649. * Copyright 2013-2015, Facebook, Inc.
  5650. * All rights reserved.
  5651. *
  5652. * This source code is licensed under the BSD-style license found in the
  5653. * LICENSE file in the root directory of this source tree. An additional grant
  5654. * of patent rights can be found in the PATENTS file in the same directory.
  5655. *
  5656. * @providesModule Transaction
  5657. */
  5658. 'use strict';
  5659. var invariant = __webpack_require__(13);
  5660. /**
  5661. * `Transaction` creates a black box that is able to wrap any method such that
  5662. * certain invariants are maintained before and after the method is invoked
  5663. * (Even if an exception is thrown while invoking the wrapped method). Whoever
  5664. * instantiates a transaction can provide enforcers of the invariants at
  5665. * creation time. The `Transaction` class itself will supply one additional
  5666. * automatic invariant for you - the invariant that any transaction instance
  5667. * should not be run while it is already being run. You would typically create a
  5668. * single instance of a `Transaction` for reuse multiple times, that potentially
  5669. * is used to wrap several different methods. Wrappers are extremely simple -
  5670. * they only require implementing two methods.
  5671. *
  5672. * <pre>
  5673. * wrappers (injected at creation time)
  5674. * + +
  5675. * | |
  5676. * +-----------------|--------|--------------+
  5677. * | v | |
  5678. * | +---------------+ | |
  5679. * | +--| wrapper1 |---|----+ |
  5680. * | | +---------------+ v | |
  5681. * | | +-------------+ | |
  5682. * | | +----| wrapper2 |--------+ |
  5683. * | | | +-------------+ | | |
  5684. * | | | | | |
  5685. * | v v v v | wrapper
  5686. * | +---+ +---+ +---------+ +---+ +---+ | invariants
  5687. * perform(anyMethod) | | | | | | | | | | | | maintained
  5688. * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
  5689. * | | | | | | | | | | | |
  5690. * | | | | | | | | | | | |
  5691. * | | | | | | | | | | | |
  5692. * | +---+ +---+ +---------+ +---+ +---+ |
  5693. * | initialize close |
  5694. * +-----------------------------------------+
  5695. * </pre>
  5696. *
  5697. * Use cases:
  5698. * - Preserving the input selection ranges before/after reconciliation.
  5699. * Restoring selection even in the event of an unexpected error.
  5700. * - Deactivating events while rearranging the DOM, preventing blurs/focuses,
  5701. * while guaranteeing that afterwards, the event system is reactivated.
  5702. * - Flushing a queue of collected DOM mutations to the main UI thread after a
  5703. * reconciliation takes place in a worker thread.
  5704. * - Invoking any collected `componentDidUpdate` callbacks after rendering new
  5705. * content.
  5706. * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue
  5707. * to preserve the `scrollTop` (an automatic scroll aware DOM).
  5708. * - (Future use case): Layout calculations before and after DOM updates.
  5709. *
  5710. * Transactional plugin API:
  5711. * - A module that has an `initialize` method that returns any precomputation.
  5712. * - and a `close` method that accepts the precomputation. `close` is invoked
  5713. * when the wrapped process is completed, or has failed.
  5714. *
  5715. * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules
  5716. * that implement `initialize` and `close`.
  5717. * @return {Transaction} Single transaction for reuse in thread.
  5718. *
  5719. * @class Transaction
  5720. */
  5721. var Mixin = {
  5722. /**
  5723. * Sets up this instance so that it is prepared for collecting metrics. Does
  5724. * so such that this setup method may be used on an instance that is already
  5725. * initialized, in a way that does not consume additional memory upon reuse.
  5726. * That can be useful if you decide to make your subclass of this mixin a
  5727. * "PooledClass".
  5728. */
  5729. reinitializeTransaction: function () {
  5730. this.transactionWrappers = this.getTransactionWrappers();
  5731. if (this.wrapperInitData) {
  5732. this.wrapperInitData.length = 0;
  5733. } else {
  5734. this.wrapperInitData = [];
  5735. }
  5736. this._isInTransaction = false;
  5737. },
  5738. _isInTransaction: false,
  5739. /**
  5740. * @abstract
  5741. * @return {Array<TransactionWrapper>} Array of transaction wrappers.
  5742. */
  5743. getTransactionWrappers: null,
  5744. isInTransaction: function () {
  5745. return !!this._isInTransaction;
  5746. },
  5747. /**
  5748. * Executes the function within a safety window. Use this for the top level
  5749. * methods that result in large amounts of computation/mutations that would
  5750. * need to be safety checked. The optional arguments helps prevent the need
  5751. * to bind in many cases.
  5752. *
  5753. * @param {function} method Member of scope to call.
  5754. * @param {Object} scope Scope to invoke from.
  5755. * @param {Object?=} a Argument to pass to the method.
  5756. * @param {Object?=} b Argument to pass to the method.
  5757. * @param {Object?=} c Argument to pass to the method.
  5758. * @param {Object?=} d Argument to pass to the method.
  5759. * @param {Object?=} e Argument to pass to the method.
  5760. * @param {Object?=} f Argument to pass to the method.
  5761. *
  5762. * @return {*} Return value from `method`.
  5763. */
  5764. perform: function (method, scope, a, b, c, d, e, f) {
  5765. !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined;
  5766. var errorThrown;
  5767. var ret;
  5768. try {
  5769. this._isInTransaction = true;
  5770. // Catching errors makes debugging more difficult, so we start with
  5771. // errorThrown set to true before setting it to false after calling
  5772. // close -- if it's still set to true in the finally block, it means
  5773. // one of these calls threw.
  5774. errorThrown = true;
  5775. this.initializeAll(0);
  5776. ret = method.call(scope, a, b, c, d, e, f);
  5777. errorThrown = false;
  5778. } finally {
  5779. try {
  5780. if (errorThrown) {
  5781. // If `method` throws, prefer to show that stack trace over any thrown
  5782. // by invoking `closeAll`.
  5783. try {
  5784. this.closeAll(0);
  5785. } catch (err) {}
  5786. } else {
  5787. // Since `method` didn't throw, we don't want to silence the exception
  5788. // here.
  5789. this.closeAll(0);
  5790. }
  5791. } finally {
  5792. this._isInTransaction = false;
  5793. }
  5794. }
  5795. return ret;
  5796. },
  5797. initializeAll: function (startIndex) {
  5798. var transactionWrappers = this.transactionWrappers;
  5799. for (var i = startIndex; i < transactionWrappers.length; i++) {
  5800. var wrapper = transactionWrappers[i];
  5801. try {
  5802. // Catching errors makes debugging more difficult, so we start with the
  5803. // OBSERVED_ERROR state before overwriting it with the real return value
  5804. // of initialize -- if it's still set to OBSERVED_ERROR in the finally
  5805. // block, it means wrapper.initialize threw.
  5806. this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;
  5807. this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;
  5808. } finally {
  5809. if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {
  5810. // The initializer for wrapper i threw an error; initialize the
  5811. // remaining wrappers but silence any exceptions from them to ensure
  5812. // that the first error is the one to bubble up.
  5813. try {
  5814. this.initializeAll(i + 1);
  5815. } catch (err) {}
  5816. }
  5817. }
  5818. }
  5819. },
  5820. /**
  5821. * Invokes each of `this.transactionWrappers.close[i]` functions, passing into
  5822. * them the respective return values of `this.transactionWrappers.init[i]`
  5823. * (`close`rs that correspond to initializers that failed will not be
  5824. * invoked).
  5825. */
  5826. closeAll: function (startIndex) {
  5827. !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined;
  5828. var transactionWrappers = this.transactionWrappers;
  5829. for (var i = startIndex; i < transactionWrappers.length; i++) {
  5830. var wrapper = transactionWrappers[i];
  5831. var initData = this.wrapperInitData[i];
  5832. var errorThrown;
  5833. try {
  5834. // Catching errors makes debugging more difficult, so we start with
  5835. // errorThrown set to true before setting it to false after calling
  5836. // close -- if it's still set to true in the finally block, it means
  5837. // wrapper.close threw.
  5838. errorThrown = true;
  5839. if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {
  5840. wrapper.close.call(this, initData);
  5841. }
  5842. errorThrown = false;
  5843. } finally {
  5844. if (errorThrown) {
  5845. // The closer for wrapper i threw an error; close the remaining
  5846. // wrappers but silence any exceptions from them to ensure that the
  5847. // first error is the one to bubble up.
  5848. try {
  5849. this.closeAll(i + 1);
  5850. } catch (e) {}
  5851. }
  5852. }
  5853. }
  5854. this.wrapperInitData.length = 0;
  5855. }
  5856. };
  5857. var Transaction = {
  5858. Mixin: Mixin,
  5859. /**
  5860. * Token to look for to determine if an error occurred.
  5861. */
  5862. OBSERVED_ERROR: {}
  5863. };
  5864. module.exports = Transaction;
  5865. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  5866. /***/ },
  5867. /* 58 */
  5868. /***/ function(module, exports, __webpack_require__) {
  5869. /* WEBPACK VAR INJECTION */(function(process) {/**
  5870. * Copyright 2013-2015, Facebook, Inc.
  5871. * All rights reserved.
  5872. *
  5873. * This source code is licensed under the BSD-style license found in the
  5874. * LICENSE file in the root directory of this source tree. An additional grant
  5875. * of patent rights can be found in the PATENTS file in the same directory.
  5876. *
  5877. * @providesModule emptyObject
  5878. */
  5879. 'use strict';
  5880. var emptyObject = {};
  5881. if (process.env.NODE_ENV !== 'production') {
  5882. Object.freeze(emptyObject);
  5883. }
  5884. module.exports = emptyObject;
  5885. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  5886. /***/ },
  5887. /* 59 */
  5888. /***/ function(module, exports, __webpack_require__) {
  5889. /**
  5890. * Copyright 2013-2015, Facebook, Inc.
  5891. * All rights reserved.
  5892. *
  5893. * This source code is licensed under the BSD-style license found in the
  5894. * LICENSE file in the root directory of this source tree. An additional grant
  5895. * of patent rights can be found in the PATENTS file in the same directory.
  5896. *
  5897. * @providesModule containsNode
  5898. * @typechecks
  5899. */
  5900. 'use strict';
  5901. var isTextNode = __webpack_require__(60);
  5902. /*eslint-disable no-bitwise */
  5903. /**
  5904. * Checks if a given DOM node contains or is another DOM node.
  5905. *
  5906. * @param {?DOMNode} outerNode Outer DOM node.
  5907. * @param {?DOMNode} innerNode Inner DOM node.
  5908. * @return {boolean} True if `outerNode` contains or is `innerNode`.
  5909. */
  5910. function containsNode(_x, _x2) {
  5911. var _again = true;
  5912. _function: while (_again) {
  5913. var outerNode = _x,
  5914. innerNode = _x2;
  5915. _again = false;
  5916. if (!outerNode || !innerNode) {
  5917. return false;
  5918. } else if (outerNode === innerNode) {
  5919. return true;
  5920. } else if (isTextNode(outerNode)) {
  5921. return false;
  5922. } else if (isTextNode(innerNode)) {
  5923. _x = outerNode;
  5924. _x2 = innerNode.parentNode;
  5925. _again = true;
  5926. continue _function;
  5927. } else if (outerNode.contains) {
  5928. return outerNode.contains(innerNode);
  5929. } else if (outerNode.compareDocumentPosition) {
  5930. return !!(outerNode.compareDocumentPosition(innerNode) & 16);
  5931. } else {
  5932. return false;
  5933. }
  5934. }
  5935. }
  5936. module.exports = containsNode;
  5937. /***/ },
  5938. /* 60 */
  5939. /***/ function(module, exports, __webpack_require__) {
  5940. /**
  5941. * Copyright 2013-2015, Facebook, Inc.
  5942. * All rights reserved.
  5943. *
  5944. * This source code is licensed under the BSD-style license found in the
  5945. * LICENSE file in the root directory of this source tree. An additional grant
  5946. * of patent rights can be found in the PATENTS file in the same directory.
  5947. *
  5948. * @providesModule isTextNode
  5949. * @typechecks
  5950. */
  5951. 'use strict';
  5952. var isNode = __webpack_require__(61);
  5953. /**
  5954. * @param {*} object The object to check.
  5955. * @return {boolean} Whether or not the object is a DOM text node.
  5956. */
  5957. function isTextNode(object) {
  5958. return isNode(object) && object.nodeType == 3;
  5959. }
  5960. module.exports = isTextNode;
  5961. /***/ },
  5962. /* 61 */
  5963. /***/ function(module, exports) {
  5964. /**
  5965. * Copyright 2013-2015, Facebook, Inc.
  5966. * All rights reserved.
  5967. *
  5968. * This source code is licensed under the BSD-style license found in the
  5969. * LICENSE file in the root directory of this source tree. An additional grant
  5970. * of patent rights can be found in the PATENTS file in the same directory.
  5971. *
  5972. * @providesModule isNode
  5973. * @typechecks
  5974. */
  5975. /**
  5976. * @param {*} object The object to check.
  5977. * @return {boolean} Whether or not the object is a DOM node.
  5978. */
  5979. 'use strict';
  5980. function isNode(object) {
  5981. return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
  5982. }
  5983. module.exports = isNode;
  5984. /***/ },
  5985. /* 62 */
  5986. /***/ function(module, exports, __webpack_require__) {
  5987. /* WEBPACK VAR INJECTION */(function(process) {/**
  5988. * Copyright 2013-2015, Facebook, Inc.
  5989. * All rights reserved.
  5990. *
  5991. * This source code is licensed under the BSD-style license found in the
  5992. * LICENSE file in the root directory of this source tree. An additional grant
  5993. * of patent rights can be found in the PATENTS file in the same directory.
  5994. *
  5995. * @providesModule instantiateReactComponent
  5996. * @typechecks static-only
  5997. */
  5998. 'use strict';
  5999. var ReactCompositeComponent = __webpack_require__(63);
  6000. var ReactEmptyComponent = __webpack_require__(68);
  6001. var ReactNativeComponent = __webpack_require__(69);
  6002. var assign = __webpack_require__(39);
  6003. var invariant = __webpack_require__(13);
  6004. var warning = __webpack_require__(25);
  6005. // To avoid a cyclic dependency, we create the final class in this module
  6006. var ReactCompositeComponentWrapper = function () {};
  6007. assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {
  6008. _instantiateReactComponent: instantiateReactComponent
  6009. });
  6010. function getDeclarationErrorAddendum(owner) {
  6011. if (owner) {
  6012. var name = owner.getName();
  6013. if (name) {
  6014. return ' Check the render method of `' + name + '`.';
  6015. }
  6016. }
  6017. return '';
  6018. }
  6019. /**
  6020. * Check if the type reference is a known internal type. I.e. not a user
  6021. * provided composite type.
  6022. *
  6023. * @param {function} type
  6024. * @return {boolean} Returns true if this is a valid internal type.
  6025. */
  6026. function isInternalComponentType(type) {
  6027. return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
  6028. }
  6029. /**
  6030. * Given a ReactNode, create an instance that will actually be mounted.
  6031. *
  6032. * @param {ReactNode} node
  6033. * @return {object} A new instance of the element's constructor.
  6034. * @protected
  6035. */
  6036. function instantiateReactComponent(node) {
  6037. var instance;
  6038. if (node === null || node === false) {
  6039. instance = new ReactEmptyComponent(instantiateReactComponent);
  6040. } else if (typeof node === 'object') {
  6041. var element = node;
  6042. !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined;
  6043. // Special case string values
  6044. if (typeof element.type === 'string') {
  6045. instance = ReactNativeComponent.createInternalComponent(element);
  6046. } else if (isInternalComponentType(element.type)) {
  6047. // This is temporarily available for custom components that are not string
  6048. // representations. I.e. ART. Once those are updated to use the string
  6049. // representation, we can drop this code path.
  6050. instance = new element.type(element);
  6051. } else {
  6052. instance = new ReactCompositeComponentWrapper();
  6053. }
  6054. } else if (typeof node === 'string' || typeof node === 'number') {
  6055. instance = ReactNativeComponent.createInstanceForText(node);
  6056. } else {
  6057. true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined;
  6058. }
  6059. if (process.env.NODE_ENV !== 'production') {
  6060. process.env.NODE_ENV !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined;
  6061. }
  6062. // Sets up the instance. This can probably just move into the constructor now.
  6063. instance.construct(node);
  6064. // These two fields are used by the DOM and ART diffing algorithms
  6065. // respectively. Instead of using expandos on components, we should be
  6066. // storing the state needed by the diffing algorithms elsewhere.
  6067. instance._mountIndex = 0;
  6068. instance._mountImage = null;
  6069. if (process.env.NODE_ENV !== 'production') {
  6070. instance._isOwnerNecessary = false;
  6071. instance._warnedAboutRefsInRender = false;
  6072. }
  6073. // Internal instances should fully constructed at this point, so they should
  6074. // not get any new fields added to them at this point.
  6075. if (process.env.NODE_ENV !== 'production') {
  6076. if (Object.preventExtensions) {
  6077. Object.preventExtensions(instance);
  6078. }
  6079. }
  6080. return instance;
  6081. }
  6082. module.exports = instantiateReactComponent;
  6083. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  6084. /***/ },
  6085. /* 63 */
  6086. /***/ function(module, exports, __webpack_require__) {
  6087. /* WEBPACK VAR INJECTION */(function(process) {/**
  6088. * Copyright 2013-2015, Facebook, Inc.
  6089. * All rights reserved.
  6090. *
  6091. * This source code is licensed under the BSD-style license found in the
  6092. * LICENSE file in the root directory of this source tree. An additional grant
  6093. * of patent rights can be found in the PATENTS file in the same directory.
  6094. *
  6095. * @providesModule ReactCompositeComponent
  6096. */
  6097. 'use strict';
  6098. var ReactComponentEnvironment = __webpack_require__(64);
  6099. var ReactCurrentOwner = __webpack_require__(5);
  6100. var ReactElement = __webpack_require__(42);
  6101. var ReactInstanceMap = __webpack_require__(47);
  6102. var ReactPerf = __webpack_require__(18);
  6103. var ReactPropTypeLocations = __webpack_require__(65);
  6104. var ReactPropTypeLocationNames = __webpack_require__(66);
  6105. var ReactReconciler = __webpack_require__(50);
  6106. var ReactUpdateQueue = __webpack_require__(53);
  6107. var assign = __webpack_require__(39);
  6108. var emptyObject = __webpack_require__(58);
  6109. var invariant = __webpack_require__(13);
  6110. var shouldUpdateReactComponent = __webpack_require__(67);
  6111. var warning = __webpack_require__(25);
  6112. function getDeclarationErrorAddendum(component) {
  6113. var owner = component._currentElement._owner || null;
  6114. if (owner) {
  6115. var name = owner.getName();
  6116. if (name) {
  6117. return ' Check the render method of `' + name + '`.';
  6118. }
  6119. }
  6120. return '';
  6121. }
  6122. function StatelessComponent(Component) {}
  6123. StatelessComponent.prototype.render = function () {
  6124. var Component = ReactInstanceMap.get(this)._currentElement.type;
  6125. return Component(this.props, this.context, this.updater);
  6126. };
  6127. /**
  6128. * ------------------ The Life-Cycle of a Composite Component ------------------
  6129. *
  6130. * - constructor: Initialization of state. The instance is now retained.
  6131. * - componentWillMount
  6132. * - render
  6133. * - [children's constructors]
  6134. * - [children's componentWillMount and render]
  6135. * - [children's componentDidMount]
  6136. * - componentDidMount
  6137. *
  6138. * Update Phases:
  6139. * - componentWillReceiveProps (only called if parent updated)
  6140. * - shouldComponentUpdate
  6141. * - componentWillUpdate
  6142. * - render
  6143. * - [children's constructors or receive props phases]
  6144. * - componentDidUpdate
  6145. *
  6146. * - componentWillUnmount
  6147. * - [children's componentWillUnmount]
  6148. * - [children destroyed]
  6149. * - (destroyed): The instance is now blank, released by React and ready for GC.
  6150. *
  6151. * -----------------------------------------------------------------------------
  6152. */
  6153. /**
  6154. * An incrementing ID assigned to each component when it is mounted. This is
  6155. * used to enforce the order in which `ReactUpdates` updates dirty components.
  6156. *
  6157. * @private
  6158. */
  6159. var nextMountID = 1;
  6160. /**
  6161. * @lends {ReactCompositeComponent.prototype}
  6162. */
  6163. var ReactCompositeComponentMixin = {
  6164. /**
  6165. * Base constructor for all composite component.
  6166. *
  6167. * @param {ReactElement} element
  6168. * @final
  6169. * @internal
  6170. */
  6171. construct: function (element) {
  6172. this._currentElement = element;
  6173. this._rootNodeID = null;
  6174. this._instance = null;
  6175. // See ReactUpdateQueue
  6176. this._pendingElement = null;
  6177. this._pendingStateQueue = null;
  6178. this._pendingReplaceState = false;
  6179. this._pendingForceUpdate = false;
  6180. this._renderedComponent = null;
  6181. this._context = null;
  6182. this._mountOrder = 0;
  6183. this._topLevelWrapper = null;
  6184. // See ReactUpdates and ReactUpdateQueue.
  6185. this._pendingCallbacks = null;
  6186. },
  6187. /**
  6188. * Initializes the component, renders markup, and registers event listeners.
  6189. *
  6190. * @param {string} rootID DOM ID of the root node.
  6191. * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
  6192. * @return {?string} Rendered markup to be inserted into the DOM.
  6193. * @final
  6194. * @internal
  6195. */
  6196. mountComponent: function (rootID, transaction, context) {
  6197. this._context = context;
  6198. this._mountOrder = nextMountID++;
  6199. this._rootNodeID = rootID;
  6200. var publicProps = this._processProps(this._currentElement.props);
  6201. var publicContext = this._processContext(context);
  6202. var Component = this._currentElement.type;
  6203. // Initialize the public class
  6204. var inst;
  6205. var renderedElement;
  6206. // This is a way to detect if Component is a stateless arrow function
  6207. // component, which is not newable. It might not be 100% reliable but is
  6208. // something we can do until we start detecting that Component extends
  6209. // React.Component. We already assume that typeof Component === 'function'.
  6210. var canInstantiate = ('prototype' in Component);
  6211. if (canInstantiate) {
  6212. if (process.env.NODE_ENV !== 'production') {
  6213. ReactCurrentOwner.current = this;
  6214. try {
  6215. inst = new Component(publicProps, publicContext, ReactUpdateQueue);
  6216. } finally {
  6217. ReactCurrentOwner.current = null;
  6218. }
  6219. } else {
  6220. inst = new Component(publicProps, publicContext, ReactUpdateQueue);
  6221. }
  6222. }
  6223. if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) {
  6224. renderedElement = inst;
  6225. inst = new StatelessComponent(Component);
  6226. }
  6227. if (process.env.NODE_ENV !== 'production') {
  6228. // This will throw later in _renderValidatedComponent, but add an early
  6229. // warning now to help debugging
  6230. if (inst.render == null) {
  6231. process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\'t a React component.', Component.displayName || Component.name || 'Component') : undefined;
  6232. } else {
  6233. // We support ES6 inheriting from React.Component, the module pattern,
  6234. // and stateless components, but not ES6 classes that don't extend
  6235. process.env.NODE_ENV !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined;
  6236. }
  6237. }
  6238. // These should be set up in the constructor, but as a convenience for
  6239. // simpler class abstractions, we set them up after the fact.
  6240. inst.props = publicProps;
  6241. inst.context = publicContext;
  6242. inst.refs = emptyObject;
  6243. inst.updater = ReactUpdateQueue;
  6244. this._instance = inst;
  6245. // Store a reference from the instance back to the internal representation
  6246. ReactInstanceMap.set(inst, this);
  6247. if (process.env.NODE_ENV !== 'production') {
  6248. // Since plain JS classes are defined without any special initialization
  6249. // logic, we can not catch common errors early. Therefore, we have to
  6250. // catch them here, at initialization time, instead.
  6251. process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined;
  6252. process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined;
  6253. process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined;
  6254. process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined;
  6255. process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined;
  6256. process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined;
  6257. process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined;
  6258. }
  6259. var initialState = inst.state;
  6260. if (initialState === undefined) {
  6261. inst.state = initialState = null;
  6262. }
  6263. !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;
  6264. this._pendingStateQueue = null;
  6265. this._pendingReplaceState = false;
  6266. this._pendingForceUpdate = false;
  6267. if (inst.componentWillMount) {
  6268. inst.componentWillMount();
  6269. // When mounting, calls to `setState` by `componentWillMount` will set
  6270. // `this._pendingStateQueue` without triggering a re-render.
  6271. if (this._pendingStateQueue) {
  6272. inst.state = this._processPendingState(inst.props, inst.context);
  6273. }
  6274. }
  6275. // If not a stateless component, we now render
  6276. if (renderedElement === undefined) {
  6277. renderedElement = this._renderValidatedComponent();
  6278. }
  6279. this._renderedComponent = this._instantiateReactComponent(renderedElement);
  6280. var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context));
  6281. if (inst.componentDidMount) {
  6282. transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
  6283. }
  6284. return markup;
  6285. },
  6286. /**
  6287. * Releases any resources allocated by `mountComponent`.
  6288. *
  6289. * @final
  6290. * @internal
  6291. */
  6292. unmountComponent: function () {
  6293. var inst = this._instance;
  6294. if (inst.componentWillUnmount) {
  6295. inst.componentWillUnmount();
  6296. }
  6297. ReactReconciler.unmountComponent(this._renderedComponent);
  6298. this._renderedComponent = null;
  6299. this._instance = null;
  6300. // Reset pending fields
  6301. // Even if this component is scheduled for another update in ReactUpdates,
  6302. // it would still be ignored because these fields are reset.
  6303. this._pendingStateQueue = null;
  6304. this._pendingReplaceState = false;
  6305. this._pendingForceUpdate = false;
  6306. this._pendingCallbacks = null;
  6307. this._pendingElement = null;
  6308. // These fields do not really need to be reset since this object is no
  6309. // longer accessible.
  6310. this._context = null;
  6311. this._rootNodeID = null;
  6312. this._topLevelWrapper = null;
  6313. // Delete the reference from the instance to this internal representation
  6314. // which allow the internals to be properly cleaned up even if the user
  6315. // leaks a reference to the public instance.
  6316. ReactInstanceMap.remove(inst);
  6317. // Some existing components rely on inst.props even after they've been
  6318. // destroyed (in event handlers).
  6319. // TODO: inst.props = null;
  6320. // TODO: inst.state = null;
  6321. // TODO: inst.context = null;
  6322. },
  6323. /**
  6324. * Filters the context object to only contain keys specified in
  6325. * `contextTypes`
  6326. *
  6327. * @param {object} context
  6328. * @return {?object}
  6329. * @private
  6330. */
  6331. _maskContext: function (context) {
  6332. var maskedContext = null;
  6333. var Component = this._currentElement.type;
  6334. var contextTypes = Component.contextTypes;
  6335. if (!contextTypes) {
  6336. return emptyObject;
  6337. }
  6338. maskedContext = {};
  6339. for (var contextName in contextTypes) {
  6340. maskedContext[contextName] = context[contextName];
  6341. }
  6342. return maskedContext;
  6343. },
  6344. /**
  6345. * Filters the context object to only contain keys specified in
  6346. * `contextTypes`, and asserts that they are valid.
  6347. *
  6348. * @param {object} context
  6349. * @return {?object}
  6350. * @private
  6351. */
  6352. _processContext: function (context) {
  6353. var maskedContext = this._maskContext(context);
  6354. if (process.env.NODE_ENV !== 'production') {
  6355. var Component = this._currentElement.type;
  6356. if (Component.contextTypes) {
  6357. this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
  6358. }
  6359. }
  6360. return maskedContext;
  6361. },
  6362. /**
  6363. * @param {object} currentContext
  6364. * @return {object}
  6365. * @private
  6366. */
  6367. _processChildContext: function (currentContext) {
  6368. var Component = this._currentElement.type;
  6369. var inst = this._instance;
  6370. var childContext = inst.getChildContext && inst.getChildContext();
  6371. if (childContext) {
  6372. !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;
  6373. if (process.env.NODE_ENV !== 'production') {
  6374. this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
  6375. }
  6376. for (var name in childContext) {
  6377. !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined;
  6378. }
  6379. return assign({}, currentContext, childContext);
  6380. }
  6381. return currentContext;
  6382. },
  6383. /**
  6384. * Processes props by setting default values for unspecified props and
  6385. * asserting that the props are valid. Does not mutate its argument; returns
  6386. * a new props object with defaults merged in.
  6387. *
  6388. * @param {object} newProps
  6389. * @return {object}
  6390. * @private
  6391. */
  6392. _processProps: function (newProps) {
  6393. if (process.env.NODE_ENV !== 'production') {
  6394. var Component = this._currentElement.type;
  6395. if (Component.propTypes) {
  6396. this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);
  6397. }
  6398. }
  6399. return newProps;
  6400. },
  6401. /**
  6402. * Assert that the props are valid
  6403. *
  6404. * @param {object} propTypes Map of prop name to a ReactPropType
  6405. * @param {object} props
  6406. * @param {string} location e.g. "prop", "context", "child context"
  6407. * @private
  6408. */
  6409. _checkPropTypes: function (propTypes, props, location) {
  6410. // TODO: Stop validating prop types here and only use the element
  6411. // validation.
  6412. var componentName = this.getName();
  6413. for (var propName in propTypes) {
  6414. if (propTypes.hasOwnProperty(propName)) {
  6415. var error;
  6416. try {
  6417. // This is intentionally an invariant that gets caught. It's the same
  6418. // behavior as without this statement except with a better message.
  6419. !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;
  6420. error = propTypes[propName](props, propName, componentName, location);
  6421. } catch (ex) {
  6422. error = ex;
  6423. }
  6424. if (error instanceof Error) {
  6425. // We may want to extend this logic for similar errors in
  6426. // top-level render calls, so I'm abstracting it away into
  6427. // a function to minimize refactoring in the future
  6428. var addendum = getDeclarationErrorAddendum(this);
  6429. if (location === ReactPropTypeLocations.prop) {
  6430. // Preface gives us something to blacklist in warning module
  6431. process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined;
  6432. } else {
  6433. process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined;
  6434. }
  6435. }
  6436. }
  6437. }
  6438. },
  6439. receiveComponent: function (nextElement, transaction, nextContext) {
  6440. var prevElement = this._currentElement;
  6441. var prevContext = this._context;
  6442. this._pendingElement = null;
  6443. this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);
  6444. },
  6445. /**
  6446. * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`
  6447. * is set, update the component.
  6448. *
  6449. * @param {ReactReconcileTransaction} transaction
  6450. * @internal
  6451. */
  6452. performUpdateIfNecessary: function (transaction) {
  6453. if (this._pendingElement != null) {
  6454. ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context);
  6455. }
  6456. if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
  6457. this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
  6458. }
  6459. },
  6460. /**
  6461. * Perform an update to a mounted component. The componentWillReceiveProps and
  6462. * shouldComponentUpdate methods are called, then (assuming the update isn't
  6463. * skipped) the remaining update lifecycle methods are called and the DOM
  6464. * representation is updated.
  6465. *
  6466. * By default, this implements React's rendering and reconciliation algorithm.
  6467. * Sophisticated clients may wish to override this.
  6468. *
  6469. * @param {ReactReconcileTransaction} transaction
  6470. * @param {ReactElement} prevParentElement
  6471. * @param {ReactElement} nextParentElement
  6472. * @internal
  6473. * @overridable
  6474. */
  6475. updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
  6476. var inst = this._instance;
  6477. var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext);
  6478. var nextProps;
  6479. // Distinguish between a props update versus a simple state update
  6480. if (prevParentElement === nextParentElement) {
  6481. // Skip checking prop types again -- we don't read inst.props to avoid
  6482. // warning for DOM component props in this upgrade
  6483. nextProps = nextParentElement.props;
  6484. } else {
  6485. nextProps = this._processProps(nextParentElement.props);
  6486. // An update here will schedule an update but immediately set
  6487. // _pendingStateQueue which will ensure that any state updates gets
  6488. // immediately reconciled instead of waiting for the next batch.
  6489. if (inst.componentWillReceiveProps) {
  6490. inst.componentWillReceiveProps(nextProps, nextContext);
  6491. }
  6492. }
  6493. var nextState = this._processPendingState(nextProps, nextContext);
  6494. var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);
  6495. if (process.env.NODE_ENV !== 'production') {
  6496. process.env.NODE_ENV !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined;
  6497. }
  6498. if (shouldUpdate) {
  6499. this._pendingForceUpdate = false;
  6500. // Will set `this.props`, `this.state` and `this.context`.
  6501. this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);
  6502. } else {
  6503. // If it's determined that a component should not update, we still want
  6504. // to set props and state but we shortcut the rest of the update.
  6505. this._currentElement = nextParentElement;
  6506. this._context = nextUnmaskedContext;
  6507. inst.props = nextProps;
  6508. inst.state = nextState;
  6509. inst.context = nextContext;
  6510. }
  6511. },
  6512. _processPendingState: function (props, context) {
  6513. var inst = this._instance;
  6514. var queue = this._pendingStateQueue;
  6515. var replace = this._pendingReplaceState;
  6516. this._pendingReplaceState = false;
  6517. this._pendingStateQueue = null;
  6518. if (!queue) {
  6519. return inst.state;
  6520. }
  6521. if (replace && queue.length === 1) {
  6522. return queue[0];
  6523. }
  6524. var nextState = assign({}, replace ? queue[0] : inst.state);
  6525. for (var i = replace ? 1 : 0; i < queue.length; i++) {
  6526. var partial = queue[i];
  6527. assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);
  6528. }
  6529. return nextState;
  6530. },
  6531. /**
  6532. * Merges new props and state, notifies delegate methods of update and
  6533. * performs update.
  6534. *
  6535. * @param {ReactElement} nextElement Next element
  6536. * @param {object} nextProps Next public object to set as properties.
  6537. * @param {?object} nextState Next object to set as state.
  6538. * @param {?object} nextContext Next public object to set as context.
  6539. * @param {ReactReconcileTransaction} transaction
  6540. * @param {?object} unmaskedContext
  6541. * @private
  6542. */
  6543. _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {
  6544. var inst = this._instance;
  6545. var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);
  6546. var prevProps;
  6547. var prevState;
  6548. var prevContext;
  6549. if (hasComponentDidUpdate) {
  6550. prevProps = inst.props;
  6551. prevState = inst.state;
  6552. prevContext = inst.context;
  6553. }
  6554. if (inst.componentWillUpdate) {
  6555. inst.componentWillUpdate(nextProps, nextState, nextContext);
  6556. }
  6557. this._currentElement = nextElement;
  6558. this._context = unmaskedContext;
  6559. inst.props = nextProps;
  6560. inst.state = nextState;
  6561. inst.context = nextContext;
  6562. this._updateRenderedComponent(transaction, unmaskedContext);
  6563. if (hasComponentDidUpdate) {
  6564. transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
  6565. }
  6566. },
  6567. /**
  6568. * Call the component's `render` method and update the DOM accordingly.
  6569. *
  6570. * @param {ReactReconcileTransaction} transaction
  6571. * @internal
  6572. */
  6573. _updateRenderedComponent: function (transaction, context) {
  6574. var prevComponentInstance = this._renderedComponent;
  6575. var prevRenderedElement = prevComponentInstance._currentElement;
  6576. var nextRenderedElement = this._renderValidatedComponent();
  6577. if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
  6578. ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));
  6579. } else {
  6580. // These two IDs are actually the same! But nothing should rely on that.
  6581. var thisID = this._rootNodeID;
  6582. var prevComponentID = prevComponentInstance._rootNodeID;
  6583. ReactReconciler.unmountComponent(prevComponentInstance);
  6584. this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);
  6585. var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context));
  6586. this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);
  6587. }
  6588. },
  6589. /**
  6590. * @protected
  6591. */
  6592. _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) {
  6593. ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup);
  6594. },
  6595. /**
  6596. * @protected
  6597. */
  6598. _renderValidatedComponentWithoutOwnerOrContext: function () {
  6599. var inst = this._instance;
  6600. var renderedComponent = inst.render();
  6601. if (process.env.NODE_ENV !== 'production') {
  6602. // We allow auto-mocks to proceed as if they're returning null.
  6603. if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) {
  6604. // This is probably bad practice. Consider warning here and
  6605. // deprecating this convenience.
  6606. renderedComponent = null;
  6607. }
  6608. }
  6609. return renderedComponent;
  6610. },
  6611. /**
  6612. * @private
  6613. */
  6614. _renderValidatedComponent: function () {
  6615. var renderedComponent;
  6616. ReactCurrentOwner.current = this;
  6617. try {
  6618. renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
  6619. } finally {
  6620. ReactCurrentOwner.current = null;
  6621. }
  6622. !(
  6623. // TODO: An `isValidNode` function would probably be more appropriate
  6624. renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;
  6625. return renderedComponent;
  6626. },
  6627. /**
  6628. * Lazily allocates the refs object and stores `component` as `ref`.
  6629. *
  6630. * @param {string} ref Reference name.
  6631. * @param {component} component Component to store as `ref`.
  6632. * @final
  6633. * @private
  6634. */
  6635. attachRef: function (ref, component) {
  6636. var inst = this.getPublicInstance();
  6637. !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined;
  6638. var publicComponentInstance = component.getPublicInstance();
  6639. if (process.env.NODE_ENV !== 'production') {
  6640. var componentName = component && component.getName ? component.getName() : 'a component';
  6641. process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref "%s" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined;
  6642. }
  6643. var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
  6644. refs[ref] = publicComponentInstance;
  6645. },
  6646. /**
  6647. * Detaches a reference name.
  6648. *
  6649. * @param {string} ref Name to dereference.
  6650. * @final
  6651. * @private
  6652. */
  6653. detachRef: function (ref) {
  6654. var refs = this.getPublicInstance().refs;
  6655. delete refs[ref];
  6656. },
  6657. /**
  6658. * Get a text description of the component that can be used to identify it
  6659. * in error messages.
  6660. * @return {string} The name or null.
  6661. * @internal
  6662. */
  6663. getName: function () {
  6664. var type = this._currentElement.type;
  6665. var constructor = this._instance && this._instance.constructor;
  6666. return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;
  6667. },
  6668. /**
  6669. * Get the publicly accessible representation of this component - i.e. what
  6670. * is exposed by refs and returned by render. Can be null for stateless
  6671. * components.
  6672. *
  6673. * @return {ReactComponent} the public component instance.
  6674. * @internal
  6675. */
  6676. getPublicInstance: function () {
  6677. var inst = this._instance;
  6678. if (inst instanceof StatelessComponent) {
  6679. return null;
  6680. }
  6681. return inst;
  6682. },
  6683. // Stub
  6684. _instantiateReactComponent: null
  6685. };
  6686. ReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {
  6687. mountComponent: 'mountComponent',
  6688. updateComponent: 'updateComponent',
  6689. _renderValidatedComponent: '_renderValidatedComponent'
  6690. });
  6691. var ReactCompositeComponent = {
  6692. Mixin: ReactCompositeComponentMixin
  6693. };
  6694. module.exports = ReactCompositeComponent;
  6695. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  6696. /***/ },
  6697. /* 64 */
  6698. /***/ function(module, exports, __webpack_require__) {
  6699. /* WEBPACK VAR INJECTION */(function(process) {/**
  6700. * Copyright 2014-2015, Facebook, Inc.
  6701. * All rights reserved.
  6702. *
  6703. * This source code is licensed under the BSD-style license found in the
  6704. * LICENSE file in the root directory of this source tree. An additional grant
  6705. * of patent rights can be found in the PATENTS file in the same directory.
  6706. *
  6707. * @providesModule ReactComponentEnvironment
  6708. */
  6709. 'use strict';
  6710. var invariant = __webpack_require__(13);
  6711. var injected = false;
  6712. var ReactComponentEnvironment = {
  6713. /**
  6714. * Optionally injectable environment dependent cleanup hook. (server vs.
  6715. * browser etc). Example: A browser system caches DOM nodes based on component
  6716. * ID and must remove that cache entry when this instance is unmounted.
  6717. */
  6718. unmountIDFromEnvironment: null,
  6719. /**
  6720. * Optionally injectable hook for swapping out mount images in the middle of
  6721. * the tree.
  6722. */
  6723. replaceNodeWithMarkupByID: null,
  6724. /**
  6725. * Optionally injectable hook for processing a queue of child updates. Will
  6726. * later move into MultiChildComponents.
  6727. */
  6728. processChildrenUpdates: null,
  6729. injection: {
  6730. injectEnvironment: function (environment) {
  6731. !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined;
  6732. ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;
  6733. ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;
  6734. ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
  6735. injected = true;
  6736. }
  6737. }
  6738. };
  6739. module.exports = ReactComponentEnvironment;
  6740. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  6741. /***/ },
  6742. /* 65 */
  6743. /***/ function(module, exports, __webpack_require__) {
  6744. /**
  6745. * Copyright 2013-2015, Facebook, Inc.
  6746. * All rights reserved.
  6747. *
  6748. * This source code is licensed under the BSD-style license found in the
  6749. * LICENSE file in the root directory of this source tree. An additional grant
  6750. * of patent rights can be found in the PATENTS file in the same directory.
  6751. *
  6752. * @providesModule ReactPropTypeLocations
  6753. */
  6754. 'use strict';
  6755. var keyMirror = __webpack_require__(17);
  6756. var ReactPropTypeLocations = keyMirror({
  6757. prop: null,
  6758. context: null,
  6759. childContext: null
  6760. });
  6761. module.exports = ReactPropTypeLocations;
  6762. /***/ },
  6763. /* 66 */
  6764. /***/ function(module, exports, __webpack_require__) {
  6765. /* WEBPACK VAR INJECTION */(function(process) {/**
  6766. * Copyright 2013-2015, Facebook, Inc.
  6767. * All rights reserved.
  6768. *
  6769. * This source code is licensed under the BSD-style license found in the
  6770. * LICENSE file in the root directory of this source tree. An additional grant
  6771. * of patent rights can be found in the PATENTS file in the same directory.
  6772. *
  6773. * @providesModule ReactPropTypeLocationNames
  6774. */
  6775. 'use strict';
  6776. var ReactPropTypeLocationNames = {};
  6777. if (process.env.NODE_ENV !== 'production') {
  6778. ReactPropTypeLocationNames = {
  6779. prop: 'prop',
  6780. context: 'context',
  6781. childContext: 'child context'
  6782. };
  6783. }
  6784. module.exports = ReactPropTypeLocationNames;
  6785. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  6786. /***/ },
  6787. /* 67 */
  6788. /***/ function(module, exports) {
  6789. /**
  6790. * Copyright 2013-2015, Facebook, Inc.
  6791. * All rights reserved.
  6792. *
  6793. * This source code is licensed under the BSD-style license found in the
  6794. * LICENSE file in the root directory of this source tree. An additional grant
  6795. * of patent rights can be found in the PATENTS file in the same directory.
  6796. *
  6797. * @providesModule shouldUpdateReactComponent
  6798. * @typechecks static-only
  6799. */
  6800. 'use strict';
  6801. /**
  6802. * Given a `prevElement` and `nextElement`, determines if the existing
  6803. * instance should be updated as opposed to being destroyed or replaced by a new
  6804. * instance. Both arguments are elements. This ensures that this logic can
  6805. * operate on stateless trees without any backing instance.
  6806. *
  6807. * @param {?object} prevElement
  6808. * @param {?object} nextElement
  6809. * @return {boolean} True if the existing instance should be updated.
  6810. * @protected
  6811. */
  6812. function shouldUpdateReactComponent(prevElement, nextElement) {
  6813. var prevEmpty = prevElement === null || prevElement === false;
  6814. var nextEmpty = nextElement === null || nextElement === false;
  6815. if (prevEmpty || nextEmpty) {
  6816. return prevEmpty === nextEmpty;
  6817. }
  6818. var prevType = typeof prevElement;
  6819. var nextType = typeof nextElement;
  6820. if (prevType === 'string' || prevType === 'number') {
  6821. return nextType === 'string' || nextType === 'number';
  6822. } else {
  6823. return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;
  6824. }
  6825. return false;
  6826. }
  6827. module.exports = shouldUpdateReactComponent;
  6828. /***/ },
  6829. /* 68 */
  6830. /***/ function(module, exports, __webpack_require__) {
  6831. /**
  6832. * Copyright 2014-2015, Facebook, Inc.
  6833. * All rights reserved.
  6834. *
  6835. * This source code is licensed under the BSD-style license found in the
  6836. * LICENSE file in the root directory of this source tree. An additional grant
  6837. * of patent rights can be found in the PATENTS file in the same directory.
  6838. *
  6839. * @providesModule ReactEmptyComponent
  6840. */
  6841. 'use strict';
  6842. var ReactElement = __webpack_require__(42);
  6843. var ReactEmptyComponentRegistry = __webpack_require__(44);
  6844. var ReactReconciler = __webpack_require__(50);
  6845. var assign = __webpack_require__(39);
  6846. var placeholderElement;
  6847. var ReactEmptyComponentInjection = {
  6848. injectEmptyComponent: function (component) {
  6849. placeholderElement = ReactElement.createElement(component);
  6850. }
  6851. };
  6852. function registerNullComponentID() {
  6853. ReactEmptyComponentRegistry.registerNullComponentID(this._rootNodeID);
  6854. }
  6855. var ReactEmptyComponent = function (instantiate) {
  6856. this._currentElement = null;
  6857. this._rootNodeID = null;
  6858. this._renderedComponent = instantiate(placeholderElement);
  6859. };
  6860. assign(ReactEmptyComponent.prototype, {
  6861. construct: function (element) {},
  6862. mountComponent: function (rootID, transaction, context) {
  6863. transaction.getReactMountReady().enqueue(registerNullComponentID, this);
  6864. this._rootNodeID = rootID;
  6865. return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context);
  6866. },
  6867. receiveComponent: function () {},
  6868. unmountComponent: function (rootID, transaction, context) {
  6869. ReactReconciler.unmountComponent(this._renderedComponent);
  6870. ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID);
  6871. this._rootNodeID = null;
  6872. this._renderedComponent = null;
  6873. }
  6874. });
  6875. ReactEmptyComponent.injection = ReactEmptyComponentInjection;
  6876. module.exports = ReactEmptyComponent;
  6877. /***/ },
  6878. /* 69 */
  6879. /***/ function(module, exports, __webpack_require__) {
  6880. /* WEBPACK VAR INJECTION */(function(process) {/**
  6881. * Copyright 2014-2015, Facebook, Inc.
  6882. * All rights reserved.
  6883. *
  6884. * This source code is licensed under the BSD-style license found in the
  6885. * LICENSE file in the root directory of this source tree. An additional grant
  6886. * of patent rights can be found in the PATENTS file in the same directory.
  6887. *
  6888. * @providesModule ReactNativeComponent
  6889. */
  6890. 'use strict';
  6891. var assign = __webpack_require__(39);
  6892. var invariant = __webpack_require__(13);
  6893. var autoGenerateWrapperClass = null;
  6894. var genericComponentClass = null;
  6895. // This registry keeps track of wrapper classes around native tags.
  6896. var tagToComponentClass = {};
  6897. var textComponentClass = null;
  6898. var ReactNativeComponentInjection = {
  6899. // This accepts a class that receives the tag string. This is a catch all
  6900. // that can render any kind of tag.
  6901. injectGenericComponentClass: function (componentClass) {
  6902. genericComponentClass = componentClass;
  6903. },
  6904. // This accepts a text component class that takes the text string to be
  6905. // rendered as props.
  6906. injectTextComponentClass: function (componentClass) {
  6907. textComponentClass = componentClass;
  6908. },
  6909. // This accepts a keyed object with classes as values. Each key represents a
  6910. // tag. That particular tag will use this class instead of the generic one.
  6911. injectComponentClasses: function (componentClasses) {
  6912. assign(tagToComponentClass, componentClasses);
  6913. }
  6914. };
  6915. /**
  6916. * Get a composite component wrapper class for a specific tag.
  6917. *
  6918. * @param {ReactElement} element The tag for which to get the class.
  6919. * @return {function} The React class constructor function.
  6920. */
  6921. function getComponentClassForElement(element) {
  6922. if (typeof element.type === 'function') {
  6923. return element.type;
  6924. }
  6925. var tag = element.type;
  6926. var componentClass = tagToComponentClass[tag];
  6927. if (componentClass == null) {
  6928. tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);
  6929. }
  6930. return componentClass;
  6931. }
  6932. /**
  6933. * Get a native internal component class for a specific tag.
  6934. *
  6935. * @param {ReactElement} element The element to create.
  6936. * @return {function} The internal class constructor function.
  6937. */
  6938. function createInternalComponent(element) {
  6939. !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined;
  6940. return new genericComponentClass(element.type, element.props);
  6941. }
  6942. /**
  6943. * @param {ReactText} text
  6944. * @return {ReactComponent}
  6945. */
  6946. function createInstanceForText(text) {
  6947. return new textComponentClass(text);
  6948. }
  6949. /**
  6950. * @param {ReactComponent} component
  6951. * @return {boolean}
  6952. */
  6953. function isTextComponent(component) {
  6954. return component instanceof textComponentClass;
  6955. }
  6956. var ReactNativeComponent = {
  6957. getComponentClassForElement: getComponentClassForElement,
  6958. createInternalComponent: createInternalComponent,
  6959. createInstanceForText: createInstanceForText,
  6960. isTextComponent: isTextComponent,
  6961. injection: ReactNativeComponentInjection
  6962. };
  6963. module.exports = ReactNativeComponent;
  6964. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  6965. /***/ },
  6966. /* 70 */
  6967. /***/ function(module, exports, __webpack_require__) {
  6968. /* WEBPACK VAR INJECTION */(function(process) {/**
  6969. * Copyright 2015, Facebook, Inc.
  6970. * All rights reserved.
  6971. *
  6972. * This source code is licensed under the BSD-style license found in the
  6973. * LICENSE file in the root directory of this source tree. An additional grant
  6974. * of patent rights can be found in the PATENTS file in the same directory.
  6975. *
  6976. * @providesModule validateDOMNesting
  6977. */
  6978. 'use strict';
  6979. var assign = __webpack_require__(39);
  6980. var emptyFunction = __webpack_require__(15);
  6981. var warning = __webpack_require__(25);
  6982. var validateDOMNesting = emptyFunction;
  6983. if (process.env.NODE_ENV !== 'production') {
  6984. // This validation code was written based on the HTML5 parsing spec:
  6985. // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
  6986. //
  6987. // Note: this does not catch all invalid nesting, nor does it try to (as it's
  6988. // not clear what practical benefit doing so provides); instead, we warn only
  6989. // for cases where the parser will give a parse tree differing from what React
  6990. // intended. For example, <b><div></div></b> is invalid but we don't warn
  6991. // because it still parses correctly; we do warn for other cases like nested
  6992. // <p> tags where the beginning of the second element implicitly closes the
  6993. // first, causing a confusing mess.
  6994. // https://html.spec.whatwg.org/multipage/syntax.html#special
  6995. var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];
  6996. // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
  6997. var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',
  6998. // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
  6999. // TODO: Distinguish by namespace here -- for <title>, including it here
  7000. // errs on the side of fewer warnings
  7001. 'foreignObject', 'desc', 'title'];
  7002. // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope
  7003. var buttonScopeTags = inScopeTags.concat(['button']);
  7004. // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags
  7005. var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
  7006. var emptyAncestorInfo = {
  7007. parentTag: null,
  7008. formTag: null,
  7009. aTagInScope: null,
  7010. buttonTagInScope: null,
  7011. nobrTagInScope: null,
  7012. pTagInButtonScope: null,
  7013. listItemTagAutoclosing: null,
  7014. dlItemTagAutoclosing: null
  7015. };
  7016. var updatedAncestorInfo = function (oldInfo, tag, instance) {
  7017. var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);
  7018. var info = { tag: tag, instance: instance };
  7019. if (inScopeTags.indexOf(tag) !== -1) {
  7020. ancestorInfo.aTagInScope = null;
  7021. ancestorInfo.buttonTagInScope = null;
  7022. ancestorInfo.nobrTagInScope = null;
  7023. }
  7024. if (buttonScopeTags.indexOf(tag) !== -1) {
  7025. ancestorInfo.pTagInButtonScope = null;
  7026. }
  7027. // See rules for 'li', 'dd', 'dt' start tags in
  7028. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
  7029. if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
  7030. ancestorInfo.listItemTagAutoclosing = null;
  7031. ancestorInfo.dlItemTagAutoclosing = null;
  7032. }
  7033. ancestorInfo.parentTag = info;
  7034. if (tag === 'form') {
  7035. ancestorInfo.formTag = info;
  7036. }
  7037. if (tag === 'a') {
  7038. ancestorInfo.aTagInScope = info;
  7039. }
  7040. if (tag === 'button') {
  7041. ancestorInfo.buttonTagInScope = info;
  7042. }
  7043. if (tag === 'nobr') {
  7044. ancestorInfo.nobrTagInScope = info;
  7045. }
  7046. if (tag === 'p') {
  7047. ancestorInfo.pTagInButtonScope = info;
  7048. }
  7049. if (tag === 'li') {
  7050. ancestorInfo.listItemTagAutoclosing = info;
  7051. }
  7052. if (tag === 'dd' || tag === 'dt') {
  7053. ancestorInfo.dlItemTagAutoclosing = info;
  7054. }
  7055. return ancestorInfo;
  7056. };
  7057. /**
  7058. * Returns whether
  7059. */
  7060. var isTagValidWithParent = function (tag, parentTag) {
  7061. // First, let's check if we're in an unusual parsing mode...
  7062. switch (parentTag) {
  7063. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
  7064. case 'select':
  7065. return tag === 'option' || tag === 'optgroup' || tag === '#text';
  7066. case 'optgroup':
  7067. return tag === 'option' || tag === '#text';
  7068. // Strictly speaking, seeing an <option> doesn't mean we're in a <select>
  7069. // but
  7070. case 'option':
  7071. return tag === '#text';
  7072. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
  7073. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
  7074. // No special behavior since these rules fall back to "in body" mode for
  7075. // all except special table nodes which cause bad parsing behavior anyway.
  7076. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr
  7077. case 'tr':
  7078. return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
  7079. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody
  7080. case 'tbody':
  7081. case 'thead':
  7082. case 'tfoot':
  7083. return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
  7084. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup
  7085. case 'colgroup':
  7086. return tag === 'col' || tag === 'template';
  7087. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable
  7088. case 'table':
  7089. return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
  7090. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead
  7091. case 'head':
  7092. return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
  7093. // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element
  7094. case 'html':
  7095. return tag === 'head' || tag === 'body';
  7096. }
  7097. // Probably in the "in body" parsing mode, so we outlaw only tag combos
  7098. // where the parsing rules cause implicit opens or closes to be added.
  7099. // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
  7100. switch (tag) {
  7101. case 'h1':
  7102. case 'h2':
  7103. case 'h3':
  7104. case 'h4':
  7105. case 'h5':
  7106. case 'h6':
  7107. return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';
  7108. case 'rp':
  7109. case 'rt':
  7110. return impliedEndTags.indexOf(parentTag) === -1;
  7111. case 'caption':
  7112. case 'col':
  7113. case 'colgroup':
  7114. case 'frame':
  7115. case 'head':
  7116. case 'tbody':
  7117. case 'td':
  7118. case 'tfoot':
  7119. case 'th':
  7120. case 'thead':
  7121. case 'tr':
  7122. // These tags are only valid with a few parents that have special child
  7123. // parsing rules -- if we're down here, then none of those matched and
  7124. // so we allow it only if we don't know what the parent is, as all other
  7125. // cases are invalid.
  7126. return parentTag == null;
  7127. }
  7128. return true;
  7129. };
  7130. /**
  7131. * Returns whether
  7132. */
  7133. var findInvalidAncestorForTag = function (tag, ancestorInfo) {
  7134. switch (tag) {
  7135. case 'address':
  7136. case 'article':
  7137. case 'aside':
  7138. case 'blockquote':
  7139. case 'center':
  7140. case 'details':
  7141. case 'dialog':
  7142. case 'dir':
  7143. case 'div':
  7144. case 'dl':
  7145. case 'fieldset':
  7146. case 'figcaption':
  7147. case 'figure':
  7148. case 'footer':
  7149. case 'header':
  7150. case 'hgroup':
  7151. case 'main':
  7152. case 'menu':
  7153. case 'nav':
  7154. case 'ol':
  7155. case 'p':
  7156. case 'section':
  7157. case 'summary':
  7158. case 'ul':
  7159. case 'pre':
  7160. case 'listing':
  7161. case 'table':
  7162. case 'hr':
  7163. case 'xmp':
  7164. case 'h1':
  7165. case 'h2':
  7166. case 'h3':
  7167. case 'h4':
  7168. case 'h5':
  7169. case 'h6':
  7170. return ancestorInfo.pTagInButtonScope;
  7171. case 'form':
  7172. return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
  7173. case 'li':
  7174. return ancestorInfo.listItemTagAutoclosing;
  7175. case 'dd':
  7176. case 'dt':
  7177. return ancestorInfo.dlItemTagAutoclosing;
  7178. case 'button':
  7179. return ancestorInfo.buttonTagInScope;
  7180. case 'a':
  7181. // Spec says something about storing a list of markers, but it sounds
  7182. // equivalent to this check.
  7183. return ancestorInfo.aTagInScope;
  7184. case 'nobr':
  7185. return ancestorInfo.nobrTagInScope;
  7186. }
  7187. return null;
  7188. };
  7189. /**
  7190. * Given a ReactCompositeComponent instance, return a list of its recursive
  7191. * owners, starting at the root and ending with the instance itself.
  7192. */
  7193. var findOwnerStack = function (instance) {
  7194. if (!instance) {
  7195. return [];
  7196. }
  7197. var stack = [];
  7198. /*eslint-disable space-after-keywords */
  7199. do {
  7200. /*eslint-enable space-after-keywords */
  7201. stack.push(instance);
  7202. } while (instance = instance._currentElement._owner);
  7203. stack.reverse();
  7204. return stack;
  7205. };
  7206. var didWarn = {};
  7207. validateDOMNesting = function (childTag, childInstance, ancestorInfo) {
  7208. ancestorInfo = ancestorInfo || emptyAncestorInfo;
  7209. var parentInfo = ancestorInfo.parentTag;
  7210. var parentTag = parentInfo && parentInfo.tag;
  7211. var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
  7212. var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
  7213. var problematic = invalidParent || invalidAncestor;
  7214. if (problematic) {
  7215. var ancestorTag = problematic.tag;
  7216. var ancestorInstance = problematic.instance;
  7217. var childOwner = childInstance && childInstance._currentElement._owner;
  7218. var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;
  7219. var childOwners = findOwnerStack(childOwner);
  7220. var ancestorOwners = findOwnerStack(ancestorOwner);
  7221. var minStackLen = Math.min(childOwners.length, ancestorOwners.length);
  7222. var i;
  7223. var deepestCommon = -1;
  7224. for (i = 0; i < minStackLen; i++) {
  7225. if (childOwners[i] === ancestorOwners[i]) {
  7226. deepestCommon = i;
  7227. } else {
  7228. break;
  7229. }
  7230. }
  7231. var UNKNOWN = '(unknown)';
  7232. var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {
  7233. return inst.getName() || UNKNOWN;
  7234. });
  7235. var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {
  7236. return inst.getName() || UNKNOWN;
  7237. });
  7238. var ownerInfo = [].concat(
  7239. // If the parent and child instances have a common owner ancestor, start
  7240. // with that -- otherwise we just start with the parent's owners.
  7241. deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,
  7242. // If we're warning about an invalid (non-parent) ancestry, add '...'
  7243. invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');
  7244. var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;
  7245. if (didWarn[warnKey]) {
  7246. return;
  7247. }
  7248. didWarn[warnKey] = true;
  7249. if (invalidParent) {
  7250. var info = '';
  7251. if (ancestorTag === 'table' && childTag === 'tr') {
  7252. info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';
  7253. }
  7254. process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined;
  7255. } else {
  7256. process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined;
  7257. }
  7258. }
  7259. };
  7260. validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2);
  7261. validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;
  7262. // For testing
  7263. validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {
  7264. ancestorInfo = ancestorInfo || emptyAncestorInfo;
  7265. var parentInfo = ancestorInfo.parentTag;
  7266. var parentTag = parentInfo && parentInfo.tag;
  7267. return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);
  7268. };
  7269. }
  7270. module.exports = validateDOMNesting;
  7271. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  7272. /***/ },
  7273. /* 71 */
  7274. /***/ function(module, exports, __webpack_require__) {
  7275. /* WEBPACK VAR INJECTION */(function(process) {/**
  7276. * Copyright 2013-2015, Facebook, Inc.
  7277. * All rights reserved.
  7278. *
  7279. * This source code is licensed under the BSD-style license found in the
  7280. * LICENSE file in the root directory of this source tree. An additional grant
  7281. * of patent rights can be found in the PATENTS file in the same directory.
  7282. *
  7283. * @providesModule ReactDefaultInjection
  7284. */
  7285. 'use strict';
  7286. var BeforeInputEventPlugin = __webpack_require__(72);
  7287. var ChangeEventPlugin = __webpack_require__(80);
  7288. var ClientReactRootIndex = __webpack_require__(83);
  7289. var DefaultEventPluginOrder = __webpack_require__(84);
  7290. var EnterLeaveEventPlugin = __webpack_require__(85);
  7291. var ExecutionEnvironment = __webpack_require__(9);
  7292. var HTMLDOMPropertyConfig = __webpack_require__(89);
  7293. var ReactBrowserComponentMixin = __webpack_require__(90);
  7294. var ReactComponentBrowserEnvironment = __webpack_require__(26);
  7295. var ReactDefaultBatchingStrategy = __webpack_require__(92);
  7296. var ReactDOMComponent = __webpack_require__(93);
  7297. var ReactDOMTextComponent = __webpack_require__(6);
  7298. var ReactEventListener = __webpack_require__(118);
  7299. var ReactInjection = __webpack_require__(121);
  7300. var ReactInstanceHandles = __webpack_require__(45);
  7301. var ReactMount = __webpack_require__(28);
  7302. var ReactReconcileTransaction = __webpack_require__(125);
  7303. var SelectEventPlugin = __webpack_require__(130);
  7304. var ServerReactRootIndex = __webpack_require__(131);
  7305. var SimpleEventPlugin = __webpack_require__(132);
  7306. var SVGDOMPropertyConfig = __webpack_require__(141);
  7307. var alreadyInjected = false;
  7308. function inject() {
  7309. if (alreadyInjected) {
  7310. // TODO: This is currently true because these injections are shared between
  7311. // the client and the server package. They should be built independently
  7312. // and not share any injection state. Then this problem will be solved.
  7313. return;
  7314. }
  7315. alreadyInjected = true;
  7316. ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
  7317. /**
  7318. * Inject modules for resolving DOM hierarchy and plugin ordering.
  7319. */
  7320. ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);
  7321. ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);
  7322. ReactInjection.EventPluginHub.injectMount(ReactMount);
  7323. /**
  7324. * Some important event plugins included by default (without having to require
  7325. * them).
  7326. */
  7327. ReactInjection.EventPluginHub.injectEventPluginsByName({
  7328. SimpleEventPlugin: SimpleEventPlugin,
  7329. EnterLeaveEventPlugin: EnterLeaveEventPlugin,
  7330. ChangeEventPlugin: ChangeEventPlugin,
  7331. SelectEventPlugin: SelectEventPlugin,
  7332. BeforeInputEventPlugin: BeforeInputEventPlugin
  7333. });
  7334. ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);
  7335. ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);
  7336. ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);
  7337. ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
  7338. ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
  7339. ReactInjection.EmptyComponent.injectEmptyComponent('noscript');
  7340. ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);
  7341. ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
  7342. ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);
  7343. ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
  7344. if (process.env.NODE_ENV !== 'production') {
  7345. var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
  7346. if (/[?&]react_perf\b/.test(url)) {
  7347. var ReactDefaultPerf = __webpack_require__(142);
  7348. ReactDefaultPerf.start();
  7349. }
  7350. }
  7351. }
  7352. module.exports = {
  7353. inject: inject
  7354. };
  7355. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  7356. /***/ },
  7357. /* 72 */
  7358. /***/ function(module, exports, __webpack_require__) {
  7359. /**
  7360. * Copyright 2013-2015 Facebook, Inc.
  7361. * All rights reserved.
  7362. *
  7363. * This source code is licensed under the BSD-style license found in the
  7364. * LICENSE file in the root directory of this source tree. An additional grant
  7365. * of patent rights can be found in the PATENTS file in the same directory.
  7366. *
  7367. * @providesModule BeforeInputEventPlugin
  7368. * @typechecks static-only
  7369. */
  7370. 'use strict';
  7371. var EventConstants = __webpack_require__(30);
  7372. var EventPropagators = __webpack_require__(73);
  7373. var ExecutionEnvironment = __webpack_require__(9);
  7374. var FallbackCompositionState = __webpack_require__(74);
  7375. var SyntheticCompositionEvent = __webpack_require__(76);
  7376. var SyntheticInputEvent = __webpack_require__(78);
  7377. var keyOf = __webpack_require__(79);
  7378. var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
  7379. var START_KEYCODE = 229;
  7380. var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;
  7381. var documentMode = null;
  7382. if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {
  7383. documentMode = document.documentMode;
  7384. }
  7385. // Webkit offers a very useful `textInput` event that can be used to
  7386. // directly represent `beforeInput`. The IE `textinput` event is not as
  7387. // useful, so we don't use it.
  7388. var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();
  7389. // In IE9+, we have access to composition events, but the data supplied
  7390. // by the native compositionend event may be incorrect. Japanese ideographic
  7391. // spaces, for instance (\u3000) are not recorded correctly.
  7392. var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
  7393. /**
  7394. * Opera <= 12 includes TextEvent in window, but does not fire
  7395. * text input events. Rely on keypress instead.
  7396. */
  7397. function isPresto() {
  7398. var opera = window.opera;
  7399. return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;
  7400. }
  7401. var SPACEBAR_CODE = 32;
  7402. var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);
  7403. var topLevelTypes = EventConstants.topLevelTypes;
  7404. // Events and their corresponding property names.
  7405. var eventTypes = {
  7406. beforeInput: {
  7407. phasedRegistrationNames: {
  7408. bubbled: keyOf({ onBeforeInput: null }),
  7409. captured: keyOf({ onBeforeInputCapture: null })
  7410. },
  7411. dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]
  7412. },
  7413. compositionEnd: {
  7414. phasedRegistrationNames: {
  7415. bubbled: keyOf({ onCompositionEnd: null }),
  7416. captured: keyOf({ onCompositionEndCapture: null })
  7417. },
  7418. dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
  7419. },
  7420. compositionStart: {
  7421. phasedRegistrationNames: {
  7422. bubbled: keyOf({ onCompositionStart: null }),
  7423. captured: keyOf({ onCompositionStartCapture: null })
  7424. },
  7425. dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
  7426. },
  7427. compositionUpdate: {
  7428. phasedRegistrationNames: {
  7429. bubbled: keyOf({ onCompositionUpdate: null }),
  7430. captured: keyOf({ onCompositionUpdateCapture: null })
  7431. },
  7432. dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
  7433. }
  7434. };
  7435. // Track whether we've ever handled a keypress on the space key.
  7436. var hasSpaceKeypress = false;
  7437. /**
  7438. * Return whether a native keypress event is assumed to be a command.
  7439. * This is required because Firefox fires `keypress` events for key commands
  7440. * (cut, copy, select-all, etc.) even though no character is inserted.
  7441. */
  7442. function isKeypressCommand(nativeEvent) {
  7443. return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&
  7444. // ctrlKey && altKey is equivalent to AltGr, and is not a command.
  7445. !(nativeEvent.ctrlKey && nativeEvent.altKey);
  7446. }
  7447. /**
  7448. * Translate native top level events into event types.
  7449. *
  7450. * @param {string} topLevelType
  7451. * @return {object}
  7452. */
  7453. function getCompositionEventType(topLevelType) {
  7454. switch (topLevelType) {
  7455. case topLevelTypes.topCompositionStart:
  7456. return eventTypes.compositionStart;
  7457. case topLevelTypes.topCompositionEnd:
  7458. return eventTypes.compositionEnd;
  7459. case topLevelTypes.topCompositionUpdate:
  7460. return eventTypes.compositionUpdate;
  7461. }
  7462. }
  7463. /**
  7464. * Does our fallback best-guess model think this event signifies that
  7465. * composition has begun?
  7466. *
  7467. * @param {string} topLevelType
  7468. * @param {object} nativeEvent
  7469. * @return {boolean}
  7470. */
  7471. function isFallbackCompositionStart(topLevelType, nativeEvent) {
  7472. return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;
  7473. }
  7474. /**
  7475. * Does our fallback mode think that this event is the end of composition?
  7476. *
  7477. * @param {string} topLevelType
  7478. * @param {object} nativeEvent
  7479. * @return {boolean}
  7480. */
  7481. function isFallbackCompositionEnd(topLevelType, nativeEvent) {
  7482. switch (topLevelType) {
  7483. case topLevelTypes.topKeyUp:
  7484. // Command keys insert or clear IME input.
  7485. return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
  7486. case topLevelTypes.topKeyDown:
  7487. // Expect IME keyCode on each keydown. If we get any other
  7488. // code we must have exited earlier.
  7489. return nativeEvent.keyCode !== START_KEYCODE;
  7490. case topLevelTypes.topKeyPress:
  7491. case topLevelTypes.topMouseDown:
  7492. case topLevelTypes.topBlur:
  7493. // Events are not possible without cancelling IME.
  7494. return true;
  7495. default:
  7496. return false;
  7497. }
  7498. }
  7499. /**
  7500. * Google Input Tools provides composition data via a CustomEvent,
  7501. * with the `data` property populated in the `detail` object. If this
  7502. * is available on the event object, use it. If not, this is a plain
  7503. * composition event and we have nothing special to extract.
  7504. *
  7505. * @param {object} nativeEvent
  7506. * @return {?string}
  7507. */
  7508. function getDataFromCustomEvent(nativeEvent) {
  7509. var detail = nativeEvent.detail;
  7510. if (typeof detail === 'object' && 'data' in detail) {
  7511. return detail.data;
  7512. }
  7513. return null;
  7514. }
  7515. // Track the current IME composition fallback object, if any.
  7516. var currentComposition = null;
  7517. /**
  7518. * @param {string} topLevelType Record from `EventConstants`.
  7519. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  7520. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  7521. * @param {object} nativeEvent Native browser event.
  7522. * @return {?object} A SyntheticCompositionEvent.
  7523. */
  7524. function extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  7525. var eventType;
  7526. var fallbackData;
  7527. if (canUseCompositionEvent) {
  7528. eventType = getCompositionEventType(topLevelType);
  7529. } else if (!currentComposition) {
  7530. if (isFallbackCompositionStart(topLevelType, nativeEvent)) {
  7531. eventType = eventTypes.compositionStart;
  7532. }
  7533. } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {
  7534. eventType = eventTypes.compositionEnd;
  7535. }
  7536. if (!eventType) {
  7537. return null;
  7538. }
  7539. if (useFallbackCompositionData) {
  7540. // The current composition is stored statically and must not be
  7541. // overwritten while composition continues.
  7542. if (!currentComposition && eventType === eventTypes.compositionStart) {
  7543. currentComposition = FallbackCompositionState.getPooled(topLevelTarget);
  7544. } else if (eventType === eventTypes.compositionEnd) {
  7545. if (currentComposition) {
  7546. fallbackData = currentComposition.getData();
  7547. }
  7548. }
  7549. }
  7550. var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget);
  7551. if (fallbackData) {
  7552. // Inject data generated from fallback path into the synthetic event.
  7553. // This matches the property of native CompositionEventInterface.
  7554. event.data = fallbackData;
  7555. } else {
  7556. var customData = getDataFromCustomEvent(nativeEvent);
  7557. if (customData !== null) {
  7558. event.data = customData;
  7559. }
  7560. }
  7561. EventPropagators.accumulateTwoPhaseDispatches(event);
  7562. return event;
  7563. }
  7564. /**
  7565. * @param {string} topLevelType Record from `EventConstants`.
  7566. * @param {object} nativeEvent Native browser event.
  7567. * @return {?string} The string corresponding to this `beforeInput` event.
  7568. */
  7569. function getNativeBeforeInputChars(topLevelType, nativeEvent) {
  7570. switch (topLevelType) {
  7571. case topLevelTypes.topCompositionEnd:
  7572. return getDataFromCustomEvent(nativeEvent);
  7573. case topLevelTypes.topKeyPress:
  7574. /**
  7575. * If native `textInput` events are available, our goal is to make
  7576. * use of them. However, there is a special case: the spacebar key.
  7577. * In Webkit, preventing default on a spacebar `textInput` event
  7578. * cancels character insertion, but it *also* causes the browser
  7579. * to fall back to its default spacebar behavior of scrolling the
  7580. * page.
  7581. *
  7582. * Tracking at:
  7583. * https://code.google.com/p/chromium/issues/detail?id=355103
  7584. *
  7585. * To avoid this issue, use the keypress event as if no `textInput`
  7586. * event is available.
  7587. */
  7588. var which = nativeEvent.which;
  7589. if (which !== SPACEBAR_CODE) {
  7590. return null;
  7591. }
  7592. hasSpaceKeypress = true;
  7593. return SPACEBAR_CHAR;
  7594. case topLevelTypes.topTextInput:
  7595. // Record the characters to be added to the DOM.
  7596. var chars = nativeEvent.data;
  7597. // If it's a spacebar character, assume that we have already handled
  7598. // it at the keypress level and bail immediately. Android Chrome
  7599. // doesn't give us keycodes, so we need to blacklist it.
  7600. if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
  7601. return null;
  7602. }
  7603. return chars;
  7604. default:
  7605. // For other native event types, do nothing.
  7606. return null;
  7607. }
  7608. }
  7609. /**
  7610. * For browsers that do not provide the `textInput` event, extract the
  7611. * appropriate string to use for SyntheticInputEvent.
  7612. *
  7613. * @param {string} topLevelType Record from `EventConstants`.
  7614. * @param {object} nativeEvent Native browser event.
  7615. * @return {?string} The fallback string for this `beforeInput` event.
  7616. */
  7617. function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
  7618. // If we are currently composing (IME) and using a fallback to do so,
  7619. // try to extract the composed characters from the fallback object.
  7620. if (currentComposition) {
  7621. if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {
  7622. var chars = currentComposition.getData();
  7623. FallbackCompositionState.release(currentComposition);
  7624. currentComposition = null;
  7625. return chars;
  7626. }
  7627. return null;
  7628. }
  7629. switch (topLevelType) {
  7630. case topLevelTypes.topPaste:
  7631. // If a paste event occurs after a keypress, throw out the input
  7632. // chars. Paste events should not lead to BeforeInput events.
  7633. return null;
  7634. case topLevelTypes.topKeyPress:
  7635. /**
  7636. * As of v27, Firefox may fire keypress events even when no character
  7637. * will be inserted. A few possibilities:
  7638. *
  7639. * - `which` is `0`. Arrow keys, Esc key, etc.
  7640. *
  7641. * - `which` is the pressed key code, but no char is available.
  7642. * Ex: 'AltGr + d` in Polish. There is no modified character for
  7643. * this key combination and no character is inserted into the
  7644. * document, but FF fires the keypress for char code `100` anyway.
  7645. * No `input` event will occur.
  7646. *
  7647. * - `which` is the pressed key code, but a command combination is
  7648. * being used. Ex: `Cmd+C`. No character is inserted, and no
  7649. * `input` event will occur.
  7650. */
  7651. if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {
  7652. return String.fromCharCode(nativeEvent.which);
  7653. }
  7654. return null;
  7655. case topLevelTypes.topCompositionEnd:
  7656. return useFallbackCompositionData ? null : nativeEvent.data;
  7657. default:
  7658. return null;
  7659. }
  7660. }
  7661. /**
  7662. * Extract a SyntheticInputEvent for `beforeInput`, based on either native
  7663. * `textInput` or fallback behavior.
  7664. *
  7665. * @param {string} topLevelType Record from `EventConstants`.
  7666. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  7667. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  7668. * @param {object} nativeEvent Native browser event.
  7669. * @return {?object} A SyntheticInputEvent.
  7670. */
  7671. function extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  7672. var chars;
  7673. if (canUseTextInputEvent) {
  7674. chars = getNativeBeforeInputChars(topLevelType, nativeEvent);
  7675. } else {
  7676. chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);
  7677. }
  7678. // If no characters are being inserted, no BeforeInput event should
  7679. // be fired.
  7680. if (!chars) {
  7681. return null;
  7682. }
  7683. var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget);
  7684. event.data = chars;
  7685. EventPropagators.accumulateTwoPhaseDispatches(event);
  7686. return event;
  7687. }
  7688. /**
  7689. * Create an `onBeforeInput` event to match
  7690. * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
  7691. *
  7692. * This event plugin is based on the native `textInput` event
  7693. * available in Chrome, Safari, Opera, and IE. This event fires after
  7694. * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
  7695. *
  7696. * `beforeInput` is spec'd but not implemented in any browsers, and
  7697. * the `input` event does not provide any useful information about what has
  7698. * actually been added, contrary to the spec. Thus, `textInput` is the best
  7699. * available event to identify the characters that have actually been inserted
  7700. * into the target node.
  7701. *
  7702. * This plugin is also responsible for emitting `composition` events, thus
  7703. * allowing us to share composition fallback code for both `beforeInput` and
  7704. * `composition` event types.
  7705. */
  7706. var BeforeInputEventPlugin = {
  7707. eventTypes: eventTypes,
  7708. /**
  7709. * @param {string} topLevelType Record from `EventConstants`.
  7710. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  7711. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  7712. * @param {object} nativeEvent Native browser event.
  7713. * @return {*} An accumulation of synthetic events.
  7714. * @see {EventPluginHub.extractEvents}
  7715. */
  7716. extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  7717. return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)];
  7718. }
  7719. };
  7720. module.exports = BeforeInputEventPlugin;
  7721. /***/ },
  7722. /* 73 */
  7723. /***/ function(module, exports, __webpack_require__) {
  7724. /* WEBPACK VAR INJECTION */(function(process) {/**
  7725. * Copyright 2013-2015, Facebook, Inc.
  7726. * All rights reserved.
  7727. *
  7728. * This source code is licensed under the BSD-style license found in the
  7729. * LICENSE file in the root directory of this source tree. An additional grant
  7730. * of patent rights can be found in the PATENTS file in the same directory.
  7731. *
  7732. * @providesModule EventPropagators
  7733. */
  7734. 'use strict';
  7735. var EventConstants = __webpack_require__(30);
  7736. var EventPluginHub = __webpack_require__(31);
  7737. var warning = __webpack_require__(25);
  7738. var accumulateInto = __webpack_require__(35);
  7739. var forEachAccumulated = __webpack_require__(36);
  7740. var PropagationPhases = EventConstants.PropagationPhases;
  7741. var getListener = EventPluginHub.getListener;
  7742. /**
  7743. * Some event types have a notion of different registration names for different
  7744. * "phases" of propagation. This finds listeners by a given phase.
  7745. */
  7746. function listenerAtPhase(id, event, propagationPhase) {
  7747. var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];
  7748. return getListener(id, registrationName);
  7749. }
  7750. /**
  7751. * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
  7752. * here, allows us to not have to bind or create functions for each event.
  7753. * Mutating the event's members allows us to not have to create a wrapping
  7754. * "dispatch" object that pairs the event with the listener.
  7755. */
  7756. function accumulateDirectionalDispatches(domID, upwards, event) {
  7757. if (process.env.NODE_ENV !== 'production') {
  7758. process.env.NODE_ENV !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined;
  7759. }
  7760. var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;
  7761. var listener = listenerAtPhase(domID, event, phase);
  7762. if (listener) {
  7763. event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
  7764. event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);
  7765. }
  7766. }
  7767. /**
  7768. * Collect dispatches (must be entirely collected before dispatching - see unit
  7769. * tests). Lazily allocate the array to conserve memory. We must loop through
  7770. * each event and perform the traversal for each one. We cannot perform a
  7771. * single traversal for the entire collection of events because each event may
  7772. * have a different target.
  7773. */
  7774. function accumulateTwoPhaseDispatchesSingle(event) {
  7775. if (event && event.dispatchConfig.phasedRegistrationNames) {
  7776. EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);
  7777. }
  7778. }
  7779. /**
  7780. * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.
  7781. */
  7782. function accumulateTwoPhaseDispatchesSingleSkipTarget(event) {
  7783. if (event && event.dispatchConfig.phasedRegistrationNames) {
  7784. EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event);
  7785. }
  7786. }
  7787. /**
  7788. * Accumulates without regard to direction, does not look for phased
  7789. * registration names. Same as `accumulateDirectDispatchesSingle` but without
  7790. * requiring that the `dispatchMarker` be the same as the dispatched ID.
  7791. */
  7792. function accumulateDispatches(id, ignoredDirection, event) {
  7793. if (event && event.dispatchConfig.registrationName) {
  7794. var registrationName = event.dispatchConfig.registrationName;
  7795. var listener = getListener(id, registrationName);
  7796. if (listener) {
  7797. event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
  7798. event._dispatchIDs = accumulateInto(event._dispatchIDs, id);
  7799. }
  7800. }
  7801. }
  7802. /**
  7803. * Accumulates dispatches on an `SyntheticEvent`, but only for the
  7804. * `dispatchMarker`.
  7805. * @param {SyntheticEvent} event
  7806. */
  7807. function accumulateDirectDispatchesSingle(event) {
  7808. if (event && event.dispatchConfig.registrationName) {
  7809. accumulateDispatches(event.dispatchMarker, null, event);
  7810. }
  7811. }
  7812. function accumulateTwoPhaseDispatches(events) {
  7813. forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
  7814. }
  7815. function accumulateTwoPhaseDispatchesSkipTarget(events) {
  7816. forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);
  7817. }
  7818. function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {
  7819. EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);
  7820. }
  7821. function accumulateDirectDispatches(events) {
  7822. forEachAccumulated(events, accumulateDirectDispatchesSingle);
  7823. }
  7824. /**
  7825. * A small set of propagation patterns, each of which will accept a small amount
  7826. * of information, and generate a set of "dispatch ready event objects" - which
  7827. * are sets of events that have already been annotated with a set of dispatched
  7828. * listener functions/ids. The API is designed this way to discourage these
  7829. * propagation strategies from actually executing the dispatches, since we
  7830. * always want to collect the entire set of dispatches before executing event a
  7831. * single one.
  7832. *
  7833. * @constructor EventPropagators
  7834. */
  7835. var EventPropagators = {
  7836. accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
  7837. accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,
  7838. accumulateDirectDispatches: accumulateDirectDispatches,
  7839. accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
  7840. };
  7841. module.exports = EventPropagators;
  7842. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  7843. /***/ },
  7844. /* 74 */
  7845. /***/ function(module, exports, __webpack_require__) {
  7846. /**
  7847. * Copyright 2013-2015, Facebook, Inc.
  7848. * All rights reserved.
  7849. *
  7850. * This source code is licensed under the BSD-style license found in the
  7851. * LICENSE file in the root directory of this source tree. An additional grant
  7852. * of patent rights can be found in the PATENTS file in the same directory.
  7853. *
  7854. * @providesModule FallbackCompositionState
  7855. * @typechecks static-only
  7856. */
  7857. 'use strict';
  7858. var PooledClass = __webpack_require__(56);
  7859. var assign = __webpack_require__(39);
  7860. var getTextContentAccessor = __webpack_require__(75);
  7861. /**
  7862. * This helper class stores information about text content of a target node,
  7863. * allowing comparison of content before and after a given event.
  7864. *
  7865. * Identify the node where selection currently begins, then observe
  7866. * both its text content and its current position in the DOM. Since the
  7867. * browser may natively replace the target node during composition, we can
  7868. * use its position to find its replacement.
  7869. *
  7870. * @param {DOMEventTarget} root
  7871. */
  7872. function FallbackCompositionState(root) {
  7873. this._root = root;
  7874. this._startText = this.getText();
  7875. this._fallbackText = null;
  7876. }
  7877. assign(FallbackCompositionState.prototype, {
  7878. destructor: function () {
  7879. this._root = null;
  7880. this._startText = null;
  7881. this._fallbackText = null;
  7882. },
  7883. /**
  7884. * Get current text of input.
  7885. *
  7886. * @return {string}
  7887. */
  7888. getText: function () {
  7889. if ('value' in this._root) {
  7890. return this._root.value;
  7891. }
  7892. return this._root[getTextContentAccessor()];
  7893. },
  7894. /**
  7895. * Determine the differing substring between the initially stored
  7896. * text content and the current content.
  7897. *
  7898. * @return {string}
  7899. */
  7900. getData: function () {
  7901. if (this._fallbackText) {
  7902. return this._fallbackText;
  7903. }
  7904. var start;
  7905. var startValue = this._startText;
  7906. var startLength = startValue.length;
  7907. var end;
  7908. var endValue = this.getText();
  7909. var endLength = endValue.length;
  7910. for (start = 0; start < startLength; start++) {
  7911. if (startValue[start] !== endValue[start]) {
  7912. break;
  7913. }
  7914. }
  7915. var minEnd = startLength - start;
  7916. for (end = 1; end <= minEnd; end++) {
  7917. if (startValue[startLength - end] !== endValue[endLength - end]) {
  7918. break;
  7919. }
  7920. }
  7921. var sliceTail = end > 1 ? 1 - end : undefined;
  7922. this._fallbackText = endValue.slice(start, sliceTail);
  7923. return this._fallbackText;
  7924. }
  7925. });
  7926. PooledClass.addPoolingTo(FallbackCompositionState);
  7927. module.exports = FallbackCompositionState;
  7928. /***/ },
  7929. /* 75 */
  7930. /***/ function(module, exports, __webpack_require__) {
  7931. /**
  7932. * Copyright 2013-2015, Facebook, Inc.
  7933. * All rights reserved.
  7934. *
  7935. * This source code is licensed under the BSD-style license found in the
  7936. * LICENSE file in the root directory of this source tree. An additional grant
  7937. * of patent rights can be found in the PATENTS file in the same directory.
  7938. *
  7939. * @providesModule getTextContentAccessor
  7940. */
  7941. 'use strict';
  7942. var ExecutionEnvironment = __webpack_require__(9);
  7943. var contentKey = null;
  7944. /**
  7945. * Gets the key used to access text content on a DOM node.
  7946. *
  7947. * @return {?string} Key used to access text content.
  7948. * @internal
  7949. */
  7950. function getTextContentAccessor() {
  7951. if (!contentKey && ExecutionEnvironment.canUseDOM) {
  7952. // Prefer textContent to innerText because many browsers support both but
  7953. // SVG <text> elements don't support innerText even when <div> does.
  7954. contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';
  7955. }
  7956. return contentKey;
  7957. }
  7958. module.exports = getTextContentAccessor;
  7959. /***/ },
  7960. /* 76 */
  7961. /***/ function(module, exports, __webpack_require__) {
  7962. /**
  7963. * Copyright 2013-2015, Facebook, Inc.
  7964. * All rights reserved.
  7965. *
  7966. * This source code is licensed under the BSD-style license found in the
  7967. * LICENSE file in the root directory of this source tree. An additional grant
  7968. * of patent rights can be found in the PATENTS file in the same directory.
  7969. *
  7970. * @providesModule SyntheticCompositionEvent
  7971. * @typechecks static-only
  7972. */
  7973. 'use strict';
  7974. var SyntheticEvent = __webpack_require__(77);
  7975. /**
  7976. * @interface Event
  7977. * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
  7978. */
  7979. var CompositionEventInterface = {
  7980. data: null
  7981. };
  7982. /**
  7983. * @param {object} dispatchConfig Configuration used to dispatch this event.
  7984. * @param {string} dispatchMarker Marker identifying the event target.
  7985. * @param {object} nativeEvent Native browser event.
  7986. * @extends {SyntheticUIEvent}
  7987. */
  7988. function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  7989. SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  7990. }
  7991. SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);
  7992. module.exports = SyntheticCompositionEvent;
  7993. /***/ },
  7994. /* 77 */
  7995. /***/ function(module, exports, __webpack_require__) {
  7996. /* WEBPACK VAR INJECTION */(function(process) {/**
  7997. * Copyright 2013-2015, Facebook, Inc.
  7998. * All rights reserved.
  7999. *
  8000. * This source code is licensed under the BSD-style license found in the
  8001. * LICENSE file in the root directory of this source tree. An additional grant
  8002. * of patent rights can be found in the PATENTS file in the same directory.
  8003. *
  8004. * @providesModule SyntheticEvent
  8005. * @typechecks static-only
  8006. */
  8007. 'use strict';
  8008. var PooledClass = __webpack_require__(56);
  8009. var assign = __webpack_require__(39);
  8010. var emptyFunction = __webpack_require__(15);
  8011. var warning = __webpack_require__(25);
  8012. /**
  8013. * @interface Event
  8014. * @see http://www.w3.org/TR/DOM-Level-3-Events/
  8015. */
  8016. var EventInterface = {
  8017. type: null,
  8018. target: null,
  8019. // currentTarget is set when dispatching; no use in copying it here
  8020. currentTarget: emptyFunction.thatReturnsNull,
  8021. eventPhase: null,
  8022. bubbles: null,
  8023. cancelable: null,
  8024. timeStamp: function (event) {
  8025. return event.timeStamp || Date.now();
  8026. },
  8027. defaultPrevented: null,
  8028. isTrusted: null
  8029. };
  8030. /**
  8031. * Synthetic events are dispatched by event plugins, typically in response to a
  8032. * top-level event delegation handler.
  8033. *
  8034. * These systems should generally use pooling to reduce the frequency of garbage
  8035. * collection. The system should check `isPersistent` to determine whether the
  8036. * event should be released into the pool after being dispatched. Users that
  8037. * need a persisted event should invoke `persist`.
  8038. *
  8039. * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
  8040. * normalizing browser quirks. Subclasses do not necessarily have to implement a
  8041. * DOM interface; custom application-specific events can also subclass this.
  8042. *
  8043. * @param {object} dispatchConfig Configuration used to dispatch this event.
  8044. * @param {string} dispatchMarker Marker identifying the event target.
  8045. * @param {object} nativeEvent Native browser event.
  8046. */
  8047. function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  8048. this.dispatchConfig = dispatchConfig;
  8049. this.dispatchMarker = dispatchMarker;
  8050. this.nativeEvent = nativeEvent;
  8051. var Interface = this.constructor.Interface;
  8052. for (var propName in Interface) {
  8053. if (!Interface.hasOwnProperty(propName)) {
  8054. continue;
  8055. }
  8056. var normalize = Interface[propName];
  8057. if (normalize) {
  8058. this[propName] = normalize(nativeEvent);
  8059. } else {
  8060. if (propName === 'target') {
  8061. this.target = nativeEventTarget;
  8062. } else {
  8063. this[propName] = nativeEvent[propName];
  8064. }
  8065. }
  8066. }
  8067. var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
  8068. if (defaultPrevented) {
  8069. this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
  8070. } else {
  8071. this.isDefaultPrevented = emptyFunction.thatReturnsFalse;
  8072. }
  8073. this.isPropagationStopped = emptyFunction.thatReturnsFalse;
  8074. }
  8075. assign(SyntheticEvent.prototype, {
  8076. preventDefault: function () {
  8077. this.defaultPrevented = true;
  8078. var event = this.nativeEvent;
  8079. if (process.env.NODE_ENV !== 'production') {
  8080. process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;
  8081. }
  8082. if (!event) {
  8083. return;
  8084. }
  8085. if (event.preventDefault) {
  8086. event.preventDefault();
  8087. } else {
  8088. event.returnValue = false;
  8089. }
  8090. this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
  8091. },
  8092. stopPropagation: function () {
  8093. var event = this.nativeEvent;
  8094. if (process.env.NODE_ENV !== 'production') {
  8095. process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;
  8096. }
  8097. if (!event) {
  8098. return;
  8099. }
  8100. if (event.stopPropagation) {
  8101. event.stopPropagation();
  8102. } else {
  8103. event.cancelBubble = true;
  8104. }
  8105. this.isPropagationStopped = emptyFunction.thatReturnsTrue;
  8106. },
  8107. /**
  8108. * We release all dispatched `SyntheticEvent`s after each event loop, adding
  8109. * them back into the pool. This allows a way to hold onto a reference that
  8110. * won't be added back into the pool.
  8111. */
  8112. persist: function () {
  8113. this.isPersistent = emptyFunction.thatReturnsTrue;
  8114. },
  8115. /**
  8116. * Checks if this event should be released back into the pool.
  8117. *
  8118. * @return {boolean} True if this should not be released, false otherwise.
  8119. */
  8120. isPersistent: emptyFunction.thatReturnsFalse,
  8121. /**
  8122. * `PooledClass` looks for `destructor` on each instance it releases.
  8123. */
  8124. destructor: function () {
  8125. var Interface = this.constructor.Interface;
  8126. for (var propName in Interface) {
  8127. this[propName] = null;
  8128. }
  8129. this.dispatchConfig = null;
  8130. this.dispatchMarker = null;
  8131. this.nativeEvent = null;
  8132. }
  8133. });
  8134. SyntheticEvent.Interface = EventInterface;
  8135. /**
  8136. * Helper to reduce boilerplate when creating subclasses.
  8137. *
  8138. * @param {function} Class
  8139. * @param {?object} Interface
  8140. */
  8141. SyntheticEvent.augmentClass = function (Class, Interface) {
  8142. var Super = this;
  8143. var prototype = Object.create(Super.prototype);
  8144. assign(prototype, Class.prototype);
  8145. Class.prototype = prototype;
  8146. Class.prototype.constructor = Class;
  8147. Class.Interface = assign({}, Super.Interface, Interface);
  8148. Class.augmentClass = Super.augmentClass;
  8149. PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);
  8150. };
  8151. PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);
  8152. module.exports = SyntheticEvent;
  8153. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  8154. /***/ },
  8155. /* 78 */
  8156. /***/ function(module, exports, __webpack_require__) {
  8157. /**
  8158. * Copyright 2013-2015, Facebook, Inc.
  8159. * All rights reserved.
  8160. *
  8161. * This source code is licensed under the BSD-style license found in the
  8162. * LICENSE file in the root directory of this source tree. An additional grant
  8163. * of patent rights can be found in the PATENTS file in the same directory.
  8164. *
  8165. * @providesModule SyntheticInputEvent
  8166. * @typechecks static-only
  8167. */
  8168. 'use strict';
  8169. var SyntheticEvent = __webpack_require__(77);
  8170. /**
  8171. * @interface Event
  8172. * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
  8173. * /#events-inputevents
  8174. */
  8175. var InputEventInterface = {
  8176. data: null
  8177. };
  8178. /**
  8179. * @param {object} dispatchConfig Configuration used to dispatch this event.
  8180. * @param {string} dispatchMarker Marker identifying the event target.
  8181. * @param {object} nativeEvent Native browser event.
  8182. * @extends {SyntheticUIEvent}
  8183. */
  8184. function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  8185. SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  8186. }
  8187. SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);
  8188. module.exports = SyntheticInputEvent;
  8189. /***/ },
  8190. /* 79 */
  8191. /***/ function(module, exports) {
  8192. /**
  8193. * Copyright 2013-2015, Facebook, Inc.
  8194. * All rights reserved.
  8195. *
  8196. * This source code is licensed under the BSD-style license found in the
  8197. * LICENSE file in the root directory of this source tree. An additional grant
  8198. * of patent rights can be found in the PATENTS file in the same directory.
  8199. *
  8200. * @providesModule keyOf
  8201. */
  8202. /**
  8203. * Allows extraction of a minified key. Let's the build system minify keys
  8204. * without losing the ability to dynamically use key strings as values
  8205. * themselves. Pass in an object with a single key/val pair and it will return
  8206. * you the string key of that single record. Suppose you want to grab the
  8207. * value for a key 'className' inside of an object. Key/val minification may
  8208. * have aliased that key to be 'xa12'. keyOf({className: null}) will return
  8209. * 'xa12' in that case. Resolve keys you want to use once at startup time, then
  8210. * reuse those resolutions.
  8211. */
  8212. "use strict";
  8213. var keyOf = function (oneKeyObj) {
  8214. var key;
  8215. for (key in oneKeyObj) {
  8216. if (!oneKeyObj.hasOwnProperty(key)) {
  8217. continue;
  8218. }
  8219. return key;
  8220. }
  8221. return null;
  8222. };
  8223. module.exports = keyOf;
  8224. /***/ },
  8225. /* 80 */
  8226. /***/ function(module, exports, __webpack_require__) {
  8227. /**
  8228. * Copyright 2013-2015, Facebook, Inc.
  8229. * All rights reserved.
  8230. *
  8231. * This source code is licensed under the BSD-style license found in the
  8232. * LICENSE file in the root directory of this source tree. An additional grant
  8233. * of patent rights can be found in the PATENTS file in the same directory.
  8234. *
  8235. * @providesModule ChangeEventPlugin
  8236. */
  8237. 'use strict';
  8238. var EventConstants = __webpack_require__(30);
  8239. var EventPluginHub = __webpack_require__(31);
  8240. var EventPropagators = __webpack_require__(73);
  8241. var ExecutionEnvironment = __webpack_require__(9);
  8242. var ReactUpdates = __webpack_require__(54);
  8243. var SyntheticEvent = __webpack_require__(77);
  8244. var getEventTarget = __webpack_require__(81);
  8245. var isEventSupported = __webpack_require__(40);
  8246. var isTextInputElement = __webpack_require__(82);
  8247. var keyOf = __webpack_require__(79);
  8248. var topLevelTypes = EventConstants.topLevelTypes;
  8249. var eventTypes = {
  8250. change: {
  8251. phasedRegistrationNames: {
  8252. bubbled: keyOf({ onChange: null }),
  8253. captured: keyOf({ onChangeCapture: null })
  8254. },
  8255. dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]
  8256. }
  8257. };
  8258. /**
  8259. * For IE shims
  8260. */
  8261. var activeElement = null;
  8262. var activeElementID = null;
  8263. var activeElementValue = null;
  8264. var activeElementValueProp = null;
  8265. /**
  8266. * SECTION: handle `change` event
  8267. */
  8268. function shouldUseChangeEvent(elem) {
  8269. var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
  8270. return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
  8271. }
  8272. var doesChangeEventBubble = false;
  8273. if (ExecutionEnvironment.canUseDOM) {
  8274. // See `handleChange` comment below
  8275. doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);
  8276. }
  8277. function manualDispatchChangeEvent(nativeEvent) {
  8278. var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent));
  8279. EventPropagators.accumulateTwoPhaseDispatches(event);
  8280. // If change and propertychange bubbled, we'd just bind to it like all the
  8281. // other events and have it go through ReactBrowserEventEmitter. Since it
  8282. // doesn't, we manually listen for the events and so we have to enqueue and
  8283. // process the abstract event manually.
  8284. //
  8285. // Batching is necessary here in order to ensure that all event handlers run
  8286. // before the next rerender (including event handlers attached to ancestor
  8287. // elements instead of directly on the input). Without this, controlled
  8288. // components don't work properly in conjunction with event bubbling because
  8289. // the component is rerendered and the value reverted before all the event
  8290. // handlers can run. See https://github.com/facebook/react/issues/708.
  8291. ReactUpdates.batchedUpdates(runEventInBatch, event);
  8292. }
  8293. function runEventInBatch(event) {
  8294. EventPluginHub.enqueueEvents(event);
  8295. EventPluginHub.processEventQueue(false);
  8296. }
  8297. function startWatchingForChangeEventIE8(target, targetID) {
  8298. activeElement = target;
  8299. activeElementID = targetID;
  8300. activeElement.attachEvent('onchange', manualDispatchChangeEvent);
  8301. }
  8302. function stopWatchingForChangeEventIE8() {
  8303. if (!activeElement) {
  8304. return;
  8305. }
  8306. activeElement.detachEvent('onchange', manualDispatchChangeEvent);
  8307. activeElement = null;
  8308. activeElementID = null;
  8309. }
  8310. function getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {
  8311. if (topLevelType === topLevelTypes.topChange) {
  8312. return topLevelTargetID;
  8313. }
  8314. }
  8315. function handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {
  8316. if (topLevelType === topLevelTypes.topFocus) {
  8317. // stopWatching() should be a noop here but we call it just in case we
  8318. // missed a blur event somehow.
  8319. stopWatchingForChangeEventIE8();
  8320. startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);
  8321. } else if (topLevelType === topLevelTypes.topBlur) {
  8322. stopWatchingForChangeEventIE8();
  8323. }
  8324. }
  8325. /**
  8326. * SECTION: handle `input` event
  8327. */
  8328. var isInputEventSupported = false;
  8329. if (ExecutionEnvironment.canUseDOM) {
  8330. // IE9 claims to support the input event but fails to trigger it when
  8331. // deleting text, so we ignore its input events
  8332. isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);
  8333. }
  8334. /**
  8335. * (For old IE.) Replacement getter/setter for the `value` property that gets
  8336. * set on the active element.
  8337. */
  8338. var newValueProp = {
  8339. get: function () {
  8340. return activeElementValueProp.get.call(this);
  8341. },
  8342. set: function (val) {
  8343. // Cast to a string so we can do equality checks.
  8344. activeElementValue = '' + val;
  8345. activeElementValueProp.set.call(this, val);
  8346. }
  8347. };
  8348. /**
  8349. * (For old IE.) Starts tracking propertychange events on the passed-in element
  8350. * and override the value property so that we can distinguish user events from
  8351. * value changes in JS.
  8352. */
  8353. function startWatchingForValueChange(target, targetID) {
  8354. activeElement = target;
  8355. activeElementID = targetID;
  8356. activeElementValue = target.value;
  8357. activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');
  8358. // Not guarded in a canDefineProperty check: IE8 supports defineProperty only
  8359. // on DOM elements
  8360. Object.defineProperty(activeElement, 'value', newValueProp);
  8361. activeElement.attachEvent('onpropertychange', handlePropertyChange);
  8362. }
  8363. /**
  8364. * (For old IE.) Removes the event listeners from the currently-tracked element,
  8365. * if any exists.
  8366. */
  8367. function stopWatchingForValueChange() {
  8368. if (!activeElement) {
  8369. return;
  8370. }
  8371. // delete restores the original property definition
  8372. delete activeElement.value;
  8373. activeElement.detachEvent('onpropertychange', handlePropertyChange);
  8374. activeElement = null;
  8375. activeElementID = null;
  8376. activeElementValue = null;
  8377. activeElementValueProp = null;
  8378. }
  8379. /**
  8380. * (For old IE.) Handles a propertychange event, sending a `change` event if
  8381. * the value of the active element has changed.
  8382. */
  8383. function handlePropertyChange(nativeEvent) {
  8384. if (nativeEvent.propertyName !== 'value') {
  8385. return;
  8386. }
  8387. var value = nativeEvent.srcElement.value;
  8388. if (value === activeElementValue) {
  8389. return;
  8390. }
  8391. activeElementValue = value;
  8392. manualDispatchChangeEvent(nativeEvent);
  8393. }
  8394. /**
  8395. * If a `change` event should be fired, returns the target's ID.
  8396. */
  8397. function getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {
  8398. if (topLevelType === topLevelTypes.topInput) {
  8399. // In modern browsers (i.e., not IE8 or IE9), the input event is exactly
  8400. // what we want so fall through here and trigger an abstract event
  8401. return topLevelTargetID;
  8402. }
  8403. }
  8404. // For IE8 and IE9.
  8405. function handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
  8406. if (topLevelType === topLevelTypes.topFocus) {
  8407. // In IE8, we can capture almost all .value changes by adding a
  8408. // propertychange handler and looking for events with propertyName
  8409. // equal to 'value'
  8410. // In IE9, propertychange fires for most input events but is buggy and
  8411. // doesn't fire when text is deleted, but conveniently, selectionchange
  8412. // appears to fire in all of the remaining cases so we catch those and
  8413. // forward the event if the value has changed
  8414. // In either case, we don't want to call the event handler if the value
  8415. // is changed from JS so we redefine a setter for `.value` that updates
  8416. // our activeElementValue variable, allowing us to ignore those changes
  8417. //
  8418. // stopWatching() should be a noop here but we call it just in case we
  8419. // missed a blur event somehow.
  8420. stopWatchingForValueChange();
  8421. startWatchingForValueChange(topLevelTarget, topLevelTargetID);
  8422. } else if (topLevelType === topLevelTypes.topBlur) {
  8423. stopWatchingForValueChange();
  8424. }
  8425. }
  8426. // For IE8 and IE9.
  8427. function getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
  8428. if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {
  8429. // On the selectionchange event, the target is just document which isn't
  8430. // helpful for us so just check activeElement instead.
  8431. //
  8432. // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
  8433. // propertychange on the first input event after setting `value` from a
  8434. // script and fires only keydown, keypress, keyup. Catching keyup usually
  8435. // gets it and catching keydown lets us fire an event for the first
  8436. // keystroke if user does a key repeat (it'll be a little delayed: right
  8437. // before the second keystroke). Other input methods (e.g., paste) seem to
  8438. // fire selectionchange normally.
  8439. if (activeElement && activeElement.value !== activeElementValue) {
  8440. activeElementValue = activeElement.value;
  8441. return activeElementID;
  8442. }
  8443. }
  8444. }
  8445. /**
  8446. * SECTION: handle `click` event
  8447. */
  8448. function shouldUseClickEvent(elem) {
  8449. // Use the `click` event to detect changes to checkbox and radio inputs.
  8450. // This approach works across all browsers, whereas `change` does not fire
  8451. // until `blur` in IE8.
  8452. return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
  8453. }
  8454. function getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {
  8455. if (topLevelType === topLevelTypes.topClick) {
  8456. return topLevelTargetID;
  8457. }
  8458. }
  8459. /**
  8460. * This plugin creates an `onChange` event that normalizes change events
  8461. * across form elements. This event fires at a time when it's possible to
  8462. * change the element's value without seeing a flicker.
  8463. *
  8464. * Supported elements are:
  8465. * - input (see `isTextInputElement`)
  8466. * - textarea
  8467. * - select
  8468. */
  8469. var ChangeEventPlugin = {
  8470. eventTypes: eventTypes,
  8471. /**
  8472. * @param {string} topLevelType Record from `EventConstants`.
  8473. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  8474. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  8475. * @param {object} nativeEvent Native browser event.
  8476. * @return {*} An accumulation of synthetic events.
  8477. * @see {EventPluginHub.extractEvents}
  8478. */
  8479. extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  8480. var getTargetIDFunc, handleEventFunc;
  8481. if (shouldUseChangeEvent(topLevelTarget)) {
  8482. if (doesChangeEventBubble) {
  8483. getTargetIDFunc = getTargetIDForChangeEvent;
  8484. } else {
  8485. handleEventFunc = handleEventsForChangeEventIE8;
  8486. }
  8487. } else if (isTextInputElement(topLevelTarget)) {
  8488. if (isInputEventSupported) {
  8489. getTargetIDFunc = getTargetIDForInputEvent;
  8490. } else {
  8491. getTargetIDFunc = getTargetIDForInputEventIE;
  8492. handleEventFunc = handleEventsForInputEventIE;
  8493. }
  8494. } else if (shouldUseClickEvent(topLevelTarget)) {
  8495. getTargetIDFunc = getTargetIDForClickEvent;
  8496. }
  8497. if (getTargetIDFunc) {
  8498. var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);
  8499. if (targetID) {
  8500. var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget);
  8501. event.type = 'change';
  8502. EventPropagators.accumulateTwoPhaseDispatches(event);
  8503. return event;
  8504. }
  8505. }
  8506. if (handleEventFunc) {
  8507. handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);
  8508. }
  8509. }
  8510. };
  8511. module.exports = ChangeEventPlugin;
  8512. /***/ },
  8513. /* 81 */
  8514. /***/ function(module, exports) {
  8515. /**
  8516. * Copyright 2013-2015, Facebook, Inc.
  8517. * All rights reserved.
  8518. *
  8519. * This source code is licensed under the BSD-style license found in the
  8520. * LICENSE file in the root directory of this source tree. An additional grant
  8521. * of patent rights can be found in the PATENTS file in the same directory.
  8522. *
  8523. * @providesModule getEventTarget
  8524. * @typechecks static-only
  8525. */
  8526. 'use strict';
  8527. /**
  8528. * Gets the target node from a native browser event by accounting for
  8529. * inconsistencies in browser DOM APIs.
  8530. *
  8531. * @param {object} nativeEvent Native browser event.
  8532. * @return {DOMEventTarget} Target node.
  8533. */
  8534. function getEventTarget(nativeEvent) {
  8535. var target = nativeEvent.target || nativeEvent.srcElement || window;
  8536. // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
  8537. // @see http://www.quirksmode.org/js/events_properties.html
  8538. return target.nodeType === 3 ? target.parentNode : target;
  8539. }
  8540. module.exports = getEventTarget;
  8541. /***/ },
  8542. /* 82 */
  8543. /***/ function(module, exports) {
  8544. /**
  8545. * Copyright 2013-2015, Facebook, Inc.
  8546. * All rights reserved.
  8547. *
  8548. * This source code is licensed under the BSD-style license found in the
  8549. * LICENSE file in the root directory of this source tree. An additional grant
  8550. * of patent rights can be found in the PATENTS file in the same directory.
  8551. *
  8552. * @providesModule isTextInputElement
  8553. */
  8554. 'use strict';
  8555. /**
  8556. * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
  8557. */
  8558. var supportedInputTypes = {
  8559. 'color': true,
  8560. 'date': true,
  8561. 'datetime': true,
  8562. 'datetime-local': true,
  8563. 'email': true,
  8564. 'month': true,
  8565. 'number': true,
  8566. 'password': true,
  8567. 'range': true,
  8568. 'search': true,
  8569. 'tel': true,
  8570. 'text': true,
  8571. 'time': true,
  8572. 'url': true,
  8573. 'week': true
  8574. };
  8575. function isTextInputElement(elem) {
  8576. var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
  8577. return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea');
  8578. }
  8579. module.exports = isTextInputElement;
  8580. /***/ },
  8581. /* 83 */
  8582. /***/ function(module, exports) {
  8583. /**
  8584. * Copyright 2013-2015, Facebook, Inc.
  8585. * All rights reserved.
  8586. *
  8587. * This source code is licensed under the BSD-style license found in the
  8588. * LICENSE file in the root directory of this source tree. An additional grant
  8589. * of patent rights can be found in the PATENTS file in the same directory.
  8590. *
  8591. * @providesModule ClientReactRootIndex
  8592. * @typechecks
  8593. */
  8594. 'use strict';
  8595. var nextReactRootIndex = 0;
  8596. var ClientReactRootIndex = {
  8597. createReactRootIndex: function () {
  8598. return nextReactRootIndex++;
  8599. }
  8600. };
  8601. module.exports = ClientReactRootIndex;
  8602. /***/ },
  8603. /* 84 */
  8604. /***/ function(module, exports, __webpack_require__) {
  8605. /**
  8606. * Copyright 2013-2015, Facebook, Inc.
  8607. * All rights reserved.
  8608. *
  8609. * This source code is licensed under the BSD-style license found in the
  8610. * LICENSE file in the root directory of this source tree. An additional grant
  8611. * of patent rights can be found in the PATENTS file in the same directory.
  8612. *
  8613. * @providesModule DefaultEventPluginOrder
  8614. */
  8615. 'use strict';
  8616. var keyOf = __webpack_require__(79);
  8617. /**
  8618. * Module that is injectable into `EventPluginHub`, that specifies a
  8619. * deterministic ordering of `EventPlugin`s. A convenient way to reason about
  8620. * plugins, without having to package every one of them. This is better than
  8621. * having plugins be ordered in the same order that they are injected because
  8622. * that ordering would be influenced by the packaging order.
  8623. * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that
  8624. * preventing default on events is convenient in `SimpleEventPlugin` handlers.
  8625. */
  8626. var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];
  8627. module.exports = DefaultEventPluginOrder;
  8628. /***/ },
  8629. /* 85 */
  8630. /***/ function(module, exports, __webpack_require__) {
  8631. /**
  8632. * Copyright 2013-2015, Facebook, Inc.
  8633. * All rights reserved.
  8634. *
  8635. * This source code is licensed under the BSD-style license found in the
  8636. * LICENSE file in the root directory of this source tree. An additional grant
  8637. * of patent rights can be found in the PATENTS file in the same directory.
  8638. *
  8639. * @providesModule EnterLeaveEventPlugin
  8640. * @typechecks static-only
  8641. */
  8642. 'use strict';
  8643. var EventConstants = __webpack_require__(30);
  8644. var EventPropagators = __webpack_require__(73);
  8645. var SyntheticMouseEvent = __webpack_require__(86);
  8646. var ReactMount = __webpack_require__(28);
  8647. var keyOf = __webpack_require__(79);
  8648. var topLevelTypes = EventConstants.topLevelTypes;
  8649. var getFirstReactDOM = ReactMount.getFirstReactDOM;
  8650. var eventTypes = {
  8651. mouseEnter: {
  8652. registrationName: keyOf({ onMouseEnter: null }),
  8653. dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
  8654. },
  8655. mouseLeave: {
  8656. registrationName: keyOf({ onMouseLeave: null }),
  8657. dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
  8658. }
  8659. };
  8660. var extractedEvents = [null, null];
  8661. var EnterLeaveEventPlugin = {
  8662. eventTypes: eventTypes,
  8663. /**
  8664. * For almost every interaction we care about, there will be both a top-level
  8665. * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
  8666. * we do not extract duplicate events. However, moving the mouse into the
  8667. * browser from outside will not fire a `mouseout` event. In this case, we use
  8668. * the `mouseover` top-level event.
  8669. *
  8670. * @param {string} topLevelType Record from `EventConstants`.
  8671. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  8672. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  8673. * @param {object} nativeEvent Native browser event.
  8674. * @return {*} An accumulation of synthetic events.
  8675. * @see {EventPluginHub.extractEvents}
  8676. */
  8677. extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  8678. if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {
  8679. return null;
  8680. }
  8681. if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {
  8682. // Must not be a mouse in or mouse out - ignoring.
  8683. return null;
  8684. }
  8685. var win;
  8686. if (topLevelTarget.window === topLevelTarget) {
  8687. // `topLevelTarget` is probably a window object.
  8688. win = topLevelTarget;
  8689. } else {
  8690. // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
  8691. var doc = topLevelTarget.ownerDocument;
  8692. if (doc) {
  8693. win = doc.defaultView || doc.parentWindow;
  8694. } else {
  8695. win = window;
  8696. }
  8697. }
  8698. var from;
  8699. var to;
  8700. var fromID = '';
  8701. var toID = '';
  8702. if (topLevelType === topLevelTypes.topMouseOut) {
  8703. from = topLevelTarget;
  8704. fromID = topLevelTargetID;
  8705. to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement);
  8706. if (to) {
  8707. toID = ReactMount.getID(to);
  8708. } else {
  8709. to = win;
  8710. }
  8711. to = to || win;
  8712. } else {
  8713. from = win;
  8714. to = topLevelTarget;
  8715. toID = topLevelTargetID;
  8716. }
  8717. if (from === to) {
  8718. // Nothing pertains to our managed components.
  8719. return null;
  8720. }
  8721. var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget);
  8722. leave.type = 'mouseleave';
  8723. leave.target = from;
  8724. leave.relatedTarget = to;
  8725. var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget);
  8726. enter.type = 'mouseenter';
  8727. enter.target = to;
  8728. enter.relatedTarget = from;
  8729. EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);
  8730. extractedEvents[0] = leave;
  8731. extractedEvents[1] = enter;
  8732. return extractedEvents;
  8733. }
  8734. };
  8735. module.exports = EnterLeaveEventPlugin;
  8736. /***/ },
  8737. /* 86 */
  8738. /***/ function(module, exports, __webpack_require__) {
  8739. /**
  8740. * Copyright 2013-2015, Facebook, Inc.
  8741. * All rights reserved.
  8742. *
  8743. * This source code is licensed under the BSD-style license found in the
  8744. * LICENSE file in the root directory of this source tree. An additional grant
  8745. * of patent rights can be found in the PATENTS file in the same directory.
  8746. *
  8747. * @providesModule SyntheticMouseEvent
  8748. * @typechecks static-only
  8749. */
  8750. 'use strict';
  8751. var SyntheticUIEvent = __webpack_require__(87);
  8752. var ViewportMetrics = __webpack_require__(38);
  8753. var getEventModifierState = __webpack_require__(88);
  8754. /**
  8755. * @interface MouseEvent
  8756. * @see http://www.w3.org/TR/DOM-Level-3-Events/
  8757. */
  8758. var MouseEventInterface = {
  8759. screenX: null,
  8760. screenY: null,
  8761. clientX: null,
  8762. clientY: null,
  8763. ctrlKey: null,
  8764. shiftKey: null,
  8765. altKey: null,
  8766. metaKey: null,
  8767. getModifierState: getEventModifierState,
  8768. button: function (event) {
  8769. // Webkit, Firefox, IE9+
  8770. // which: 1 2 3
  8771. // button: 0 1 2 (standard)
  8772. var button = event.button;
  8773. if ('which' in event) {
  8774. return button;
  8775. }
  8776. // IE<9
  8777. // which: undefined
  8778. // button: 0 0 0
  8779. // button: 1 4 2 (onmouseup)
  8780. return button === 2 ? 2 : button === 4 ? 1 : 0;
  8781. },
  8782. buttons: null,
  8783. relatedTarget: function (event) {
  8784. return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
  8785. },
  8786. // "Proprietary" Interface.
  8787. pageX: function (event) {
  8788. return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
  8789. },
  8790. pageY: function (event) {
  8791. return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
  8792. }
  8793. };
  8794. /**
  8795. * @param {object} dispatchConfig Configuration used to dispatch this event.
  8796. * @param {string} dispatchMarker Marker identifying the event target.
  8797. * @param {object} nativeEvent Native browser event.
  8798. * @extends {SyntheticUIEvent}
  8799. */
  8800. function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  8801. SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  8802. }
  8803. SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
  8804. module.exports = SyntheticMouseEvent;
  8805. /***/ },
  8806. /* 87 */
  8807. /***/ function(module, exports, __webpack_require__) {
  8808. /**
  8809. * Copyright 2013-2015, Facebook, Inc.
  8810. * All rights reserved.
  8811. *
  8812. * This source code is licensed under the BSD-style license found in the
  8813. * LICENSE file in the root directory of this source tree. An additional grant
  8814. * of patent rights can be found in the PATENTS file in the same directory.
  8815. *
  8816. * @providesModule SyntheticUIEvent
  8817. * @typechecks static-only
  8818. */
  8819. 'use strict';
  8820. var SyntheticEvent = __webpack_require__(77);
  8821. var getEventTarget = __webpack_require__(81);
  8822. /**
  8823. * @interface UIEvent
  8824. * @see http://www.w3.org/TR/DOM-Level-3-Events/
  8825. */
  8826. var UIEventInterface = {
  8827. view: function (event) {
  8828. if (event.view) {
  8829. return event.view;
  8830. }
  8831. var target = getEventTarget(event);
  8832. if (target != null && target.window === target) {
  8833. // target is a window object
  8834. return target;
  8835. }
  8836. var doc = target.ownerDocument;
  8837. // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
  8838. if (doc) {
  8839. return doc.defaultView || doc.parentWindow;
  8840. } else {
  8841. return window;
  8842. }
  8843. },
  8844. detail: function (event) {
  8845. return event.detail || 0;
  8846. }
  8847. };
  8848. /**
  8849. * @param {object} dispatchConfig Configuration used to dispatch this event.
  8850. * @param {string} dispatchMarker Marker identifying the event target.
  8851. * @param {object} nativeEvent Native browser event.
  8852. * @extends {SyntheticEvent}
  8853. */
  8854. function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  8855. SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  8856. }
  8857. SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
  8858. module.exports = SyntheticUIEvent;
  8859. /***/ },
  8860. /* 88 */
  8861. /***/ function(module, exports) {
  8862. /**
  8863. * Copyright 2013-2015, Facebook, Inc.
  8864. * All rights reserved.
  8865. *
  8866. * This source code is licensed under the BSD-style license found in the
  8867. * LICENSE file in the root directory of this source tree. An additional grant
  8868. * of patent rights can be found in the PATENTS file in the same directory.
  8869. *
  8870. * @providesModule getEventModifierState
  8871. * @typechecks static-only
  8872. */
  8873. 'use strict';
  8874. /**
  8875. * Translation from modifier key to the associated property in the event.
  8876. * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
  8877. */
  8878. var modifierKeyToProp = {
  8879. 'Alt': 'altKey',
  8880. 'Control': 'ctrlKey',
  8881. 'Meta': 'metaKey',
  8882. 'Shift': 'shiftKey'
  8883. };
  8884. // IE8 does not implement getModifierState so we simply map it to the only
  8885. // modifier keys exposed by the event itself, does not support Lock-keys.
  8886. // Currently, all major browsers except Chrome seems to support Lock-keys.
  8887. function modifierStateGetter(keyArg) {
  8888. var syntheticEvent = this;
  8889. var nativeEvent = syntheticEvent.nativeEvent;
  8890. if (nativeEvent.getModifierState) {
  8891. return nativeEvent.getModifierState(keyArg);
  8892. }
  8893. var keyProp = modifierKeyToProp[keyArg];
  8894. return keyProp ? !!nativeEvent[keyProp] : false;
  8895. }
  8896. function getEventModifierState(nativeEvent) {
  8897. return modifierStateGetter;
  8898. }
  8899. module.exports = getEventModifierState;
  8900. /***/ },
  8901. /* 89 */
  8902. /***/ function(module, exports, __webpack_require__) {
  8903. /**
  8904. * Copyright 2013-2015, Facebook, Inc.
  8905. * All rights reserved.
  8906. *
  8907. * This source code is licensed under the BSD-style license found in the
  8908. * LICENSE file in the root directory of this source tree. An additional grant
  8909. * of patent rights can be found in the PATENTS file in the same directory.
  8910. *
  8911. * @providesModule HTMLDOMPropertyConfig
  8912. */
  8913. 'use strict';
  8914. var DOMProperty = __webpack_require__(23);
  8915. var ExecutionEnvironment = __webpack_require__(9);
  8916. var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;
  8917. var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
  8918. var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
  8919. var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;
  8920. var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
  8921. var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
  8922. var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
  8923. var hasSVG;
  8924. if (ExecutionEnvironment.canUseDOM) {
  8925. var implementation = document.implementation;
  8926. hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');
  8927. }
  8928. var HTMLDOMPropertyConfig = {
  8929. isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),
  8930. Properties: {
  8931. /**
  8932. * Standard Properties
  8933. */
  8934. accept: null,
  8935. acceptCharset: null,
  8936. accessKey: null,
  8937. action: null,
  8938. allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
  8939. allowTransparency: MUST_USE_ATTRIBUTE,
  8940. alt: null,
  8941. async: HAS_BOOLEAN_VALUE,
  8942. autoComplete: null,
  8943. // autoFocus is polyfilled/normalized by AutoFocusUtils
  8944. // autoFocus: HAS_BOOLEAN_VALUE,
  8945. autoPlay: HAS_BOOLEAN_VALUE,
  8946. capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
  8947. cellPadding: null,
  8948. cellSpacing: null,
  8949. charSet: MUST_USE_ATTRIBUTE,
  8950. challenge: MUST_USE_ATTRIBUTE,
  8951. checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
  8952. classID: MUST_USE_ATTRIBUTE,
  8953. // To set className on SVG elements, it's necessary to use .setAttribute;
  8954. // this works on HTML elements too in all browsers except IE8. Conveniently,
  8955. // IE8 doesn't support SVG and so we can simply use the attribute in
  8956. // browsers that support SVG and the property in browsers that don't,
  8957. // regardless of whether the element is HTML or SVG.
  8958. className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,
  8959. cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
  8960. colSpan: null,
  8961. content: null,
  8962. contentEditable: null,
  8963. contextMenu: MUST_USE_ATTRIBUTE,
  8964. controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
  8965. coords: null,
  8966. crossOrigin: null,
  8967. data: null, // For `<object />` acts as `src`.
  8968. dateTime: MUST_USE_ATTRIBUTE,
  8969. 'default': HAS_BOOLEAN_VALUE,
  8970. defer: HAS_BOOLEAN_VALUE,
  8971. dir: null,
  8972. disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
  8973. download: HAS_OVERLOADED_BOOLEAN_VALUE,
  8974. draggable: null,
  8975. encType: null,
  8976. form: MUST_USE_ATTRIBUTE,
  8977. formAction: MUST_USE_ATTRIBUTE,
  8978. formEncType: MUST_USE_ATTRIBUTE,
  8979. formMethod: MUST_USE_ATTRIBUTE,
  8980. formNoValidate: HAS_BOOLEAN_VALUE,
  8981. formTarget: MUST_USE_ATTRIBUTE,
  8982. frameBorder: MUST_USE_ATTRIBUTE,
  8983. headers: null,
  8984. height: MUST_USE_ATTRIBUTE,
  8985. hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
  8986. high: null,
  8987. href: null,
  8988. hrefLang: null,
  8989. htmlFor: null,
  8990. httpEquiv: null,
  8991. icon: null,
  8992. id: MUST_USE_PROPERTY,
  8993. inputMode: MUST_USE_ATTRIBUTE,
  8994. integrity: null,
  8995. is: MUST_USE_ATTRIBUTE,
  8996. keyParams: MUST_USE_ATTRIBUTE,
  8997. keyType: MUST_USE_ATTRIBUTE,
  8998. kind: null,
  8999. label: null,
  9000. lang: null,
  9001. list: MUST_USE_ATTRIBUTE,
  9002. loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
  9003. low: null,
  9004. manifest: MUST_USE_ATTRIBUTE,
  9005. marginHeight: null,
  9006. marginWidth: null,
  9007. max: null,
  9008. maxLength: MUST_USE_ATTRIBUTE,
  9009. media: MUST_USE_ATTRIBUTE,
  9010. mediaGroup: null,
  9011. method: null,
  9012. min: null,
  9013. minLength: MUST_USE_ATTRIBUTE,
  9014. multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
  9015. muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
  9016. name: null,
  9017. nonce: MUST_USE_ATTRIBUTE,
  9018. noValidate: HAS_BOOLEAN_VALUE,
  9019. open: HAS_BOOLEAN_VALUE,
  9020. optimum: null,
  9021. pattern: null,
  9022. placeholder: null,
  9023. poster: null,
  9024. preload: null,
  9025. radioGroup: null,
  9026. readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
  9027. rel: null,
  9028. required: HAS_BOOLEAN_VALUE,
  9029. reversed: HAS_BOOLEAN_VALUE,
  9030. role: MUST_USE_ATTRIBUTE,
  9031. rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
  9032. rowSpan: null,
  9033. sandbox: null,
  9034. scope: null,
  9035. scoped: HAS_BOOLEAN_VALUE,
  9036. scrolling: null,
  9037. seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
  9038. selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
  9039. shape: null,
  9040. size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
  9041. sizes: MUST_USE_ATTRIBUTE,
  9042. span: HAS_POSITIVE_NUMERIC_VALUE,
  9043. spellCheck: null,
  9044. src: null,
  9045. srcDoc: MUST_USE_PROPERTY,
  9046. srcLang: null,
  9047. srcSet: MUST_USE_ATTRIBUTE,
  9048. start: HAS_NUMERIC_VALUE,
  9049. step: null,
  9050. style: null,
  9051. summary: null,
  9052. tabIndex: null,
  9053. target: null,
  9054. title: null,
  9055. type: null,
  9056. useMap: null,
  9057. value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
  9058. width: MUST_USE_ATTRIBUTE,
  9059. wmode: MUST_USE_ATTRIBUTE,
  9060. wrap: null,
  9061. /**
  9062. * RDFa Properties
  9063. */
  9064. about: MUST_USE_ATTRIBUTE,
  9065. datatype: MUST_USE_ATTRIBUTE,
  9066. inlist: MUST_USE_ATTRIBUTE,
  9067. prefix: MUST_USE_ATTRIBUTE,
  9068. // property is also supported for OpenGraph in meta tags.
  9069. property: MUST_USE_ATTRIBUTE,
  9070. resource: MUST_USE_ATTRIBUTE,
  9071. 'typeof': MUST_USE_ATTRIBUTE,
  9072. vocab: MUST_USE_ATTRIBUTE,
  9073. /**
  9074. * Non-standard Properties
  9075. */
  9076. // autoCapitalize and autoCorrect are supported in Mobile Safari for
  9077. // keyboard hints.
  9078. autoCapitalize: MUST_USE_ATTRIBUTE,
  9079. autoCorrect: MUST_USE_ATTRIBUTE,
  9080. // autoSave allows WebKit/Blink to persist values of input fields on page reloads
  9081. autoSave: null,
  9082. // color is for Safari mask-icon link
  9083. color: null,
  9084. // itemProp, itemScope, itemType are for
  9085. // Microdata support. See http://schema.org/docs/gs.html
  9086. itemProp: MUST_USE_ATTRIBUTE,
  9087. itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
  9088. itemType: MUST_USE_ATTRIBUTE,
  9089. // itemID and itemRef are for Microdata support as well but
  9090. // only specified in the the WHATWG spec document. See
  9091. // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
  9092. itemID: MUST_USE_ATTRIBUTE,
  9093. itemRef: MUST_USE_ATTRIBUTE,
  9094. // results show looking glass icon and recent searches on input
  9095. // search fields in WebKit/Blink
  9096. results: null,
  9097. // IE-only attribute that specifies security restrictions on an iframe
  9098. // as an alternative to the sandbox attribute on IE<10
  9099. security: MUST_USE_ATTRIBUTE,
  9100. // IE-only attribute that controls focus behavior
  9101. unselectable: MUST_USE_ATTRIBUTE
  9102. },
  9103. DOMAttributeNames: {
  9104. acceptCharset: 'accept-charset',
  9105. className: 'class',
  9106. htmlFor: 'for',
  9107. httpEquiv: 'http-equiv'
  9108. },
  9109. DOMPropertyNames: {
  9110. autoComplete: 'autocomplete',
  9111. autoFocus: 'autofocus',
  9112. autoPlay: 'autoplay',
  9113. autoSave: 'autosave',
  9114. // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.
  9115. // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding
  9116. encType: 'encoding',
  9117. hrefLang: 'hreflang',
  9118. radioGroup: 'radiogroup',
  9119. spellCheck: 'spellcheck',
  9120. srcDoc: 'srcdoc',
  9121. srcSet: 'srcset'
  9122. }
  9123. };
  9124. module.exports = HTMLDOMPropertyConfig;
  9125. /***/ },
  9126. /* 90 */
  9127. /***/ function(module, exports, __webpack_require__) {
  9128. /* WEBPACK VAR INJECTION */(function(process) {/**
  9129. * Copyright 2013-2015, Facebook, Inc.
  9130. * All rights reserved.
  9131. *
  9132. * This source code is licensed under the BSD-style license found in the
  9133. * LICENSE file in the root directory of this source tree. An additional grant
  9134. * of patent rights can be found in the PATENTS file in the same directory.
  9135. *
  9136. * @providesModule ReactBrowserComponentMixin
  9137. */
  9138. 'use strict';
  9139. var ReactInstanceMap = __webpack_require__(47);
  9140. var findDOMNode = __webpack_require__(91);
  9141. var warning = __webpack_require__(25);
  9142. var didWarnKey = '_getDOMNodeDidWarn';
  9143. var ReactBrowserComponentMixin = {
  9144. /**
  9145. * Returns the DOM node rendered by this component.
  9146. *
  9147. * @return {DOMElement} The root node of this component.
  9148. * @final
  9149. * @protected
  9150. */
  9151. getDOMNode: function () {
  9152. process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined;
  9153. this.constructor[didWarnKey] = true;
  9154. return findDOMNode(this);
  9155. }
  9156. };
  9157. module.exports = ReactBrowserComponentMixin;
  9158. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  9159. /***/ },
  9160. /* 91 */
  9161. /***/ function(module, exports, __webpack_require__) {
  9162. /* WEBPACK VAR INJECTION */(function(process) {/**
  9163. * Copyright 2013-2015, Facebook, Inc.
  9164. * All rights reserved.
  9165. *
  9166. * This source code is licensed under the BSD-style license found in the
  9167. * LICENSE file in the root directory of this source tree. An additional grant
  9168. * of patent rights can be found in the PATENTS file in the same directory.
  9169. *
  9170. * @providesModule findDOMNode
  9171. * @typechecks static-only
  9172. */
  9173. 'use strict';
  9174. var ReactCurrentOwner = __webpack_require__(5);
  9175. var ReactInstanceMap = __webpack_require__(47);
  9176. var ReactMount = __webpack_require__(28);
  9177. var invariant = __webpack_require__(13);
  9178. var warning = __webpack_require__(25);
  9179. /**
  9180. * Returns the DOM node rendered by this element.
  9181. *
  9182. * @param {ReactComponent|DOMElement} componentOrElement
  9183. * @return {?DOMElement} The root node of this element.
  9184. */
  9185. function findDOMNode(componentOrElement) {
  9186. if (process.env.NODE_ENV !== 'production') {
  9187. var owner = ReactCurrentOwner.current;
  9188. if (owner !== null) {
  9189. process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;
  9190. owner._warnedAboutRefsInRender = true;
  9191. }
  9192. }
  9193. if (componentOrElement == null) {
  9194. return null;
  9195. }
  9196. if (componentOrElement.nodeType === 1) {
  9197. return componentOrElement;
  9198. }
  9199. if (ReactInstanceMap.has(componentOrElement)) {
  9200. return ReactMount.getNodeFromInstance(componentOrElement);
  9201. }
  9202. !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined;
  9203. true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined;
  9204. }
  9205. module.exports = findDOMNode;
  9206. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  9207. /***/ },
  9208. /* 92 */
  9209. /***/ function(module, exports, __webpack_require__) {
  9210. /**
  9211. * Copyright 2013-2015, Facebook, Inc.
  9212. * All rights reserved.
  9213. *
  9214. * This source code is licensed under the BSD-style license found in the
  9215. * LICENSE file in the root directory of this source tree. An additional grant
  9216. * of patent rights can be found in the PATENTS file in the same directory.
  9217. *
  9218. * @providesModule ReactDefaultBatchingStrategy
  9219. */
  9220. 'use strict';
  9221. var ReactUpdates = __webpack_require__(54);
  9222. var Transaction = __webpack_require__(57);
  9223. var assign = __webpack_require__(39);
  9224. var emptyFunction = __webpack_require__(15);
  9225. var RESET_BATCHED_UPDATES = {
  9226. initialize: emptyFunction,
  9227. close: function () {
  9228. ReactDefaultBatchingStrategy.isBatchingUpdates = false;
  9229. }
  9230. };
  9231. var FLUSH_BATCHED_UPDATES = {
  9232. initialize: emptyFunction,
  9233. close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
  9234. };
  9235. var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];
  9236. function ReactDefaultBatchingStrategyTransaction() {
  9237. this.reinitializeTransaction();
  9238. }
  9239. assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {
  9240. getTransactionWrappers: function () {
  9241. return TRANSACTION_WRAPPERS;
  9242. }
  9243. });
  9244. var transaction = new ReactDefaultBatchingStrategyTransaction();
  9245. var ReactDefaultBatchingStrategy = {
  9246. isBatchingUpdates: false,
  9247. /**
  9248. * Call the provided function in a context within which calls to `setState`
  9249. * and friends are batched such that components aren't updated unnecessarily.
  9250. */
  9251. batchedUpdates: function (callback, a, b, c, d, e) {
  9252. var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
  9253. ReactDefaultBatchingStrategy.isBatchingUpdates = true;
  9254. // The code is written this way to avoid extra allocations
  9255. if (alreadyBatchingUpdates) {
  9256. callback(a, b, c, d, e);
  9257. } else {
  9258. transaction.perform(callback, null, a, b, c, d, e);
  9259. }
  9260. }
  9261. };
  9262. module.exports = ReactDefaultBatchingStrategy;
  9263. /***/ },
  9264. /* 93 */
  9265. /***/ function(module, exports, __webpack_require__) {
  9266. /* WEBPACK VAR INJECTION */(function(process) {/**
  9267. * Copyright 2013-2015, Facebook, Inc.
  9268. * All rights reserved.
  9269. *
  9270. * This source code is licensed under the BSD-style license found in the
  9271. * LICENSE file in the root directory of this source tree. An additional grant
  9272. * of patent rights can be found in the PATENTS file in the same directory.
  9273. *
  9274. * @providesModule ReactDOMComponent
  9275. * @typechecks static-only
  9276. */
  9277. /* global hasOwnProperty:true */
  9278. 'use strict';
  9279. var AutoFocusUtils = __webpack_require__(94);
  9280. var CSSPropertyOperations = __webpack_require__(96);
  9281. var DOMProperty = __webpack_require__(23);
  9282. var DOMPropertyOperations = __webpack_require__(22);
  9283. var EventConstants = __webpack_require__(30);
  9284. var ReactBrowserEventEmitter = __webpack_require__(29);
  9285. var ReactComponentBrowserEnvironment = __webpack_require__(26);
  9286. var ReactDOMButton = __webpack_require__(104);
  9287. var ReactDOMInput = __webpack_require__(105);
  9288. var ReactDOMOption = __webpack_require__(109);
  9289. var ReactDOMSelect = __webpack_require__(112);
  9290. var ReactDOMTextarea = __webpack_require__(113);
  9291. var ReactMount = __webpack_require__(28);
  9292. var ReactMultiChild = __webpack_require__(114);
  9293. var ReactPerf = __webpack_require__(18);
  9294. var ReactUpdateQueue = __webpack_require__(53);
  9295. var assign = __webpack_require__(39);
  9296. var canDefineProperty = __webpack_require__(43);
  9297. var escapeTextContentForBrowser = __webpack_require__(21);
  9298. var invariant = __webpack_require__(13);
  9299. var isEventSupported = __webpack_require__(40);
  9300. var keyOf = __webpack_require__(79);
  9301. var setInnerHTML = __webpack_require__(19);
  9302. var setTextContent = __webpack_require__(20);
  9303. var shallowEqual = __webpack_require__(117);
  9304. var validateDOMNesting = __webpack_require__(70);
  9305. var warning = __webpack_require__(25);
  9306. var deleteListener = ReactBrowserEventEmitter.deleteListener;
  9307. var listenTo = ReactBrowserEventEmitter.listenTo;
  9308. var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;
  9309. // For quickly matching children type, to test if can be treated as content.
  9310. var CONTENT_TYPES = { 'string': true, 'number': true };
  9311. var CHILDREN = keyOf({ children: null });
  9312. var STYLE = keyOf({ style: null });
  9313. var HTML = keyOf({ __html: null });
  9314. var ELEMENT_NODE_TYPE = 1;
  9315. function getDeclarationErrorAddendum(internalInstance) {
  9316. if (internalInstance) {
  9317. var owner = internalInstance._currentElement._owner || null;
  9318. if (owner) {
  9319. var name = owner.getName();
  9320. if (name) {
  9321. return ' This DOM node was rendered by `' + name + '`.';
  9322. }
  9323. }
  9324. }
  9325. return '';
  9326. }
  9327. var legacyPropsDescriptor;
  9328. if (process.env.NODE_ENV !== 'production') {
  9329. legacyPropsDescriptor = {
  9330. props: {
  9331. enumerable: false,
  9332. get: function () {
  9333. var component = this._reactInternalComponent;
  9334. process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined;
  9335. return component._currentElement.props;
  9336. }
  9337. }
  9338. };
  9339. }
  9340. function legacyGetDOMNode() {
  9341. if (process.env.NODE_ENV !== 'production') {
  9342. var component = this._reactInternalComponent;
  9343. process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined;
  9344. }
  9345. return this;
  9346. }
  9347. function legacyIsMounted() {
  9348. var component = this._reactInternalComponent;
  9349. if (process.env.NODE_ENV !== 'production') {
  9350. process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined;
  9351. }
  9352. return !!component;
  9353. }
  9354. function legacySetStateEtc() {
  9355. if (process.env.NODE_ENV !== 'production') {
  9356. var component = this._reactInternalComponent;
  9357. process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined;
  9358. }
  9359. }
  9360. function legacySetProps(partialProps, callback) {
  9361. var component = this._reactInternalComponent;
  9362. if (process.env.NODE_ENV !== 'production') {
  9363. process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;
  9364. }
  9365. if (!component) {
  9366. return;
  9367. }
  9368. ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps);
  9369. if (callback) {
  9370. ReactUpdateQueue.enqueueCallbackInternal(component, callback);
  9371. }
  9372. }
  9373. function legacyReplaceProps(partialProps, callback) {
  9374. var component = this._reactInternalComponent;
  9375. if (process.env.NODE_ENV !== 'production') {
  9376. process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;
  9377. }
  9378. if (!component) {
  9379. return;
  9380. }
  9381. ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps);
  9382. if (callback) {
  9383. ReactUpdateQueue.enqueueCallbackInternal(component, callback);
  9384. }
  9385. }
  9386. function friendlyStringify(obj) {
  9387. if (typeof obj === 'object') {
  9388. if (Array.isArray(obj)) {
  9389. return '[' + obj.map(friendlyStringify).join(', ') + ']';
  9390. } else {
  9391. var pairs = [];
  9392. for (var key in obj) {
  9393. if (Object.prototype.hasOwnProperty.call(obj, key)) {
  9394. var keyEscaped = /^[a-z$_][\w$_]*$/i.test(key) ? key : JSON.stringify(key);
  9395. pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));
  9396. }
  9397. }
  9398. return '{' + pairs.join(', ') + '}';
  9399. }
  9400. } else if (typeof obj === 'string') {
  9401. return JSON.stringify(obj);
  9402. } else if (typeof obj === 'function') {
  9403. return '[function object]';
  9404. }
  9405. // Differs from JSON.stringify in that undefined becauses undefined and that
  9406. // inf and nan don't become null
  9407. return String(obj);
  9408. }
  9409. var styleMutationWarning = {};
  9410. function checkAndWarnForMutatedStyle(style1, style2, component) {
  9411. if (style1 == null || style2 == null) {
  9412. return;
  9413. }
  9414. if (shallowEqual(style1, style2)) {
  9415. return;
  9416. }
  9417. var componentName = component._tag;
  9418. var owner = component._currentElement._owner;
  9419. var ownerName;
  9420. if (owner) {
  9421. ownerName = owner.getName();
  9422. }
  9423. var hash = ownerName + '|' + componentName;
  9424. if (styleMutationWarning.hasOwnProperty(hash)) {
  9425. return;
  9426. }
  9427. styleMutationWarning[hash] = true;
  9428. process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined;
  9429. }
  9430. /**
  9431. * @param {object} component
  9432. * @param {?object} props
  9433. */
  9434. function assertValidProps(component, props) {
  9435. if (!props) {
  9436. return;
  9437. }
  9438. // Note the use of `==` which checks for null or undefined.
  9439. if (process.env.NODE_ENV !== 'production') {
  9440. if (voidElementTags[component._tag]) {
  9441. process.env.NODE_ENV !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined;
  9442. }
  9443. }
  9444. if (props.dangerouslySetInnerHTML != null) {
  9445. !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined;
  9446. !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined;
  9447. }
  9448. if (process.env.NODE_ENV !== 'production') {
  9449. process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined;
  9450. process.env.NODE_ENV !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined;
  9451. }
  9452. !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined;
  9453. }
  9454. function enqueuePutListener(id, registrationName, listener, transaction) {
  9455. if (process.env.NODE_ENV !== 'production') {
  9456. // IE8 has no API for event capturing and the `onScroll` event doesn't
  9457. // bubble.
  9458. process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : undefined;
  9459. }
  9460. var container = ReactMount.findReactContainerForID(id);
  9461. if (container) {
  9462. var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;
  9463. listenTo(registrationName, doc);
  9464. }
  9465. transaction.getReactMountReady().enqueue(putListener, {
  9466. id: id,
  9467. registrationName: registrationName,
  9468. listener: listener
  9469. });
  9470. }
  9471. function putListener() {
  9472. var listenerToPut = this;
  9473. ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener);
  9474. }
  9475. // There are so many media events, it makes sense to just
  9476. // maintain a list rather than create a `trapBubbledEvent` for each
  9477. var mediaEvents = {
  9478. topAbort: 'abort',
  9479. topCanPlay: 'canplay',
  9480. topCanPlayThrough: 'canplaythrough',
  9481. topDurationChange: 'durationchange',
  9482. topEmptied: 'emptied',
  9483. topEncrypted: 'encrypted',
  9484. topEnded: 'ended',
  9485. topError: 'error',
  9486. topLoadedData: 'loadeddata',
  9487. topLoadedMetadata: 'loadedmetadata',
  9488. topLoadStart: 'loadstart',
  9489. topPause: 'pause',
  9490. topPlay: 'play',
  9491. topPlaying: 'playing',
  9492. topProgress: 'progress',
  9493. topRateChange: 'ratechange',
  9494. topSeeked: 'seeked',
  9495. topSeeking: 'seeking',
  9496. topStalled: 'stalled',
  9497. topSuspend: 'suspend',
  9498. topTimeUpdate: 'timeupdate',
  9499. topVolumeChange: 'volumechange',
  9500. topWaiting: 'waiting'
  9501. };
  9502. function trapBubbledEventsLocal() {
  9503. var inst = this;
  9504. // If a component renders to null or if another component fatals and causes
  9505. // the state of the tree to be corrupted, `node` here can be null.
  9506. !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined;
  9507. var node = ReactMount.getNode(inst._rootNodeID);
  9508. !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined;
  9509. switch (inst._tag) {
  9510. case 'iframe':
  9511. inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
  9512. break;
  9513. case 'video':
  9514. case 'audio':
  9515. inst._wrapperState.listeners = [];
  9516. // create listener for each media event
  9517. for (var event in mediaEvents) {
  9518. if (mediaEvents.hasOwnProperty(event)) {
  9519. inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));
  9520. }
  9521. }
  9522. break;
  9523. case 'img':
  9524. inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
  9525. break;
  9526. case 'form':
  9527. inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];
  9528. break;
  9529. }
  9530. }
  9531. function mountReadyInputWrapper() {
  9532. ReactDOMInput.mountReadyWrapper(this);
  9533. }
  9534. function postUpdateSelectWrapper() {
  9535. ReactDOMSelect.postUpdateWrapper(this);
  9536. }
  9537. // For HTML, certain tags should omit their close tag. We keep a whitelist for
  9538. // those special cased tags.
  9539. var omittedCloseTags = {
  9540. 'area': true,
  9541. 'base': true,
  9542. 'br': true,
  9543. 'col': true,
  9544. 'embed': true,
  9545. 'hr': true,
  9546. 'img': true,
  9547. 'input': true,
  9548. 'keygen': true,
  9549. 'link': true,
  9550. 'meta': true,
  9551. 'param': true,
  9552. 'source': true,
  9553. 'track': true,
  9554. 'wbr': true
  9555. };
  9556. // NOTE: menuitem's close tag should be omitted, but that causes problems.
  9557. var newlineEatingTags = {
  9558. 'listing': true,
  9559. 'pre': true,
  9560. 'textarea': true
  9561. };
  9562. // For HTML, certain tags cannot have children. This has the same purpose as
  9563. // `omittedCloseTags` except that `menuitem` should still have its closing tag.
  9564. var voidElementTags = assign({
  9565. 'menuitem': true
  9566. }, omittedCloseTags);
  9567. // We accept any tag to be rendered but since this gets injected into arbitrary
  9568. // HTML, we want to make sure that it's a safe tag.
  9569. // http://www.w3.org/TR/REC-xml/#NT-Name
  9570. var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
  9571. var validatedTagCache = {};
  9572. var hasOwnProperty = ({}).hasOwnProperty;
  9573. function validateDangerousTag(tag) {
  9574. if (!hasOwnProperty.call(validatedTagCache, tag)) {
  9575. !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined;
  9576. validatedTagCache[tag] = true;
  9577. }
  9578. }
  9579. function processChildContextDev(context, inst) {
  9580. // Pass down our tag name to child components for validation purposes
  9581. context = assign({}, context);
  9582. var info = context[validateDOMNesting.ancestorInfoContextKey];
  9583. context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst);
  9584. return context;
  9585. }
  9586. function isCustomComponent(tagName, props) {
  9587. return tagName.indexOf('-') >= 0 || props.is != null;
  9588. }
  9589. /**
  9590. * Creates a new React class that is idempotent and capable of containing other
  9591. * React components. It accepts event listeners and DOM properties that are
  9592. * valid according to `DOMProperty`.
  9593. *
  9594. * - Event listeners: `onClick`, `onMouseDown`, etc.
  9595. * - DOM properties: `className`, `name`, `title`, etc.
  9596. *
  9597. * The `style` property functions differently from the DOM API. It accepts an
  9598. * object mapping of style properties to values.
  9599. *
  9600. * @constructor ReactDOMComponent
  9601. * @extends ReactMultiChild
  9602. */
  9603. function ReactDOMComponent(tag) {
  9604. validateDangerousTag(tag);
  9605. this._tag = tag.toLowerCase();
  9606. this._renderedChildren = null;
  9607. this._previousStyle = null;
  9608. this._previousStyleCopy = null;
  9609. this._rootNodeID = null;
  9610. this._wrapperState = null;
  9611. this._topLevelWrapper = null;
  9612. this._nodeWithLegacyProperties = null;
  9613. if (process.env.NODE_ENV !== 'production') {
  9614. this._unprocessedContextDev = null;
  9615. this._processedContextDev = null;
  9616. }
  9617. }
  9618. ReactDOMComponent.displayName = 'ReactDOMComponent';
  9619. ReactDOMComponent.Mixin = {
  9620. construct: function (element) {
  9621. this._currentElement = element;
  9622. },
  9623. /**
  9624. * Generates root tag markup then recurses. This method has side effects and
  9625. * is not idempotent.
  9626. *
  9627. * @internal
  9628. * @param {string} rootID The root DOM ID for this node.
  9629. * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
  9630. * @param {object} context
  9631. * @return {string} The computed markup.
  9632. */
  9633. mountComponent: function (rootID, transaction, context) {
  9634. this._rootNodeID = rootID;
  9635. var props = this._currentElement.props;
  9636. switch (this._tag) {
  9637. case 'iframe':
  9638. case 'img':
  9639. case 'form':
  9640. case 'video':
  9641. case 'audio':
  9642. this._wrapperState = {
  9643. listeners: null
  9644. };
  9645. transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
  9646. break;
  9647. case 'button':
  9648. props = ReactDOMButton.getNativeProps(this, props, context);
  9649. break;
  9650. case 'input':
  9651. ReactDOMInput.mountWrapper(this, props, context);
  9652. props = ReactDOMInput.getNativeProps(this, props, context);
  9653. break;
  9654. case 'option':
  9655. ReactDOMOption.mountWrapper(this, props, context);
  9656. props = ReactDOMOption.getNativeProps(this, props, context);
  9657. break;
  9658. case 'select':
  9659. ReactDOMSelect.mountWrapper(this, props, context);
  9660. props = ReactDOMSelect.getNativeProps(this, props, context);
  9661. context = ReactDOMSelect.processChildContext(this, props, context);
  9662. break;
  9663. case 'textarea':
  9664. ReactDOMTextarea.mountWrapper(this, props, context);
  9665. props = ReactDOMTextarea.getNativeProps(this, props, context);
  9666. break;
  9667. }
  9668. assertValidProps(this, props);
  9669. if (process.env.NODE_ENV !== 'production') {
  9670. if (context[validateDOMNesting.ancestorInfoContextKey]) {
  9671. validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]);
  9672. }
  9673. }
  9674. if (process.env.NODE_ENV !== 'production') {
  9675. this._unprocessedContextDev = context;
  9676. this._processedContextDev = processChildContextDev(context, this);
  9677. context = this._processedContextDev;
  9678. }
  9679. var mountImage;
  9680. if (transaction.useCreateElement) {
  9681. var ownerDocument = context[ReactMount.ownerDocumentContextKey];
  9682. var el = ownerDocument.createElement(this._currentElement.type);
  9683. DOMPropertyOperations.setAttributeForID(el, this._rootNodeID);
  9684. // Populate node cache
  9685. ReactMount.getID(el);
  9686. this._updateDOMProperties({}, props, transaction, el);
  9687. this._createInitialChildren(transaction, props, context, el);
  9688. mountImage = el;
  9689. } else {
  9690. var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);
  9691. var tagContent = this._createContentMarkup(transaction, props, context);
  9692. if (!tagContent && omittedCloseTags[this._tag]) {
  9693. mountImage = tagOpen + '/>';
  9694. } else {
  9695. mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';
  9696. }
  9697. }
  9698. switch (this._tag) {
  9699. case 'input':
  9700. transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this);
  9701. // falls through
  9702. case 'button':
  9703. case 'select':
  9704. case 'textarea':
  9705. if (props.autoFocus) {
  9706. transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
  9707. }
  9708. break;
  9709. }
  9710. return mountImage;
  9711. },
  9712. /**
  9713. * Creates markup for the open tag and all attributes.
  9714. *
  9715. * This method has side effects because events get registered.
  9716. *
  9717. * Iterating over object properties is faster than iterating over arrays.
  9718. * @see http://jsperf.com/obj-vs-arr-iteration
  9719. *
  9720. * @private
  9721. * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
  9722. * @param {object} props
  9723. * @return {string} Markup of opening tag.
  9724. */
  9725. _createOpenTagMarkupAndPutListeners: function (transaction, props) {
  9726. var ret = '<' + this._currentElement.type;
  9727. for (var propKey in props) {
  9728. if (!props.hasOwnProperty(propKey)) {
  9729. continue;
  9730. }
  9731. var propValue = props[propKey];
  9732. if (propValue == null) {
  9733. continue;
  9734. }
  9735. if (registrationNameModules.hasOwnProperty(propKey)) {
  9736. if (propValue) {
  9737. enqueuePutListener(this._rootNodeID, propKey, propValue, transaction);
  9738. }
  9739. } else {
  9740. if (propKey === STYLE) {
  9741. if (propValue) {
  9742. if (process.env.NODE_ENV !== 'production') {
  9743. // See `_updateDOMProperties`. style block
  9744. this._previousStyle = propValue;
  9745. }
  9746. propValue = this._previousStyleCopy = assign({}, props.style);
  9747. }
  9748. propValue = CSSPropertyOperations.createMarkupForStyles(propValue);
  9749. }
  9750. var markup = null;
  9751. if (this._tag != null && isCustomComponent(this._tag, props)) {
  9752. if (propKey !== CHILDREN) {
  9753. markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
  9754. }
  9755. } else {
  9756. markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
  9757. }
  9758. if (markup) {
  9759. ret += ' ' + markup;
  9760. }
  9761. }
  9762. }
  9763. // For static pages, no need to put React ID and checksum. Saves lots of
  9764. // bytes.
  9765. if (transaction.renderToStaticMarkup) {
  9766. return ret;
  9767. }
  9768. var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);
  9769. return ret + ' ' + markupForID;
  9770. },
  9771. /**
  9772. * Creates markup for the content between the tags.
  9773. *
  9774. * @private
  9775. * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
  9776. * @param {object} props
  9777. * @param {object} context
  9778. * @return {string} Content markup.
  9779. */
  9780. _createContentMarkup: function (transaction, props, context) {
  9781. var ret = '';
  9782. // Intentional use of != to avoid catching zero/false.
  9783. var innerHTML = props.dangerouslySetInnerHTML;
  9784. if (innerHTML != null) {
  9785. if (innerHTML.__html != null) {
  9786. ret = innerHTML.__html;
  9787. }
  9788. } else {
  9789. var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
  9790. var childrenToUse = contentToUse != null ? null : props.children;
  9791. if (contentToUse != null) {
  9792. // TODO: Validate that text is allowed as a child of this node
  9793. ret = escapeTextContentForBrowser(contentToUse);
  9794. } else if (childrenToUse != null) {
  9795. var mountImages = this.mountChildren(childrenToUse, transaction, context);
  9796. ret = mountImages.join('');
  9797. }
  9798. }
  9799. if (newlineEatingTags[this._tag] && ret.charAt(0) === '\n') {
  9800. // text/html ignores the first character in these tags if it's a newline
  9801. // Prefer to break application/xml over text/html (for now) by adding
  9802. // a newline specifically to get eaten by the parser. (Alternately for
  9803. // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first
  9804. // \r is normalized out by HTMLTextAreaElement#value.)
  9805. // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>
  9806. // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>
  9807. // See: <http://www.w3.org/TR/html5/syntax.html#newlines>
  9808. // See: Parsing of "textarea" "listing" and "pre" elements
  9809. // from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>
  9810. return '\n' + ret;
  9811. } else {
  9812. return ret;
  9813. }
  9814. },
  9815. _createInitialChildren: function (transaction, props, context, el) {
  9816. // Intentional use of != to avoid catching zero/false.
  9817. var innerHTML = props.dangerouslySetInnerHTML;
  9818. if (innerHTML != null) {
  9819. if (innerHTML.__html != null) {
  9820. setInnerHTML(el, innerHTML.__html);
  9821. }
  9822. } else {
  9823. var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
  9824. var childrenToUse = contentToUse != null ? null : props.children;
  9825. if (contentToUse != null) {
  9826. // TODO: Validate that text is allowed as a child of this node
  9827. setTextContent(el, contentToUse);
  9828. } else if (childrenToUse != null) {
  9829. var mountImages = this.mountChildren(childrenToUse, transaction, context);
  9830. for (var i = 0; i < mountImages.length; i++) {
  9831. el.appendChild(mountImages[i]);
  9832. }
  9833. }
  9834. }
  9835. },
  9836. /**
  9837. * Receives a next element and updates the component.
  9838. *
  9839. * @internal
  9840. * @param {ReactElement} nextElement
  9841. * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
  9842. * @param {object} context
  9843. */
  9844. receiveComponent: function (nextElement, transaction, context) {
  9845. var prevElement = this._currentElement;
  9846. this._currentElement = nextElement;
  9847. this.updateComponent(transaction, prevElement, nextElement, context);
  9848. },
  9849. /**
  9850. * Updates a native DOM component after it has already been allocated and
  9851. * attached to the DOM. Reconciles the root DOM node, then recurses.
  9852. *
  9853. * @param {ReactReconcileTransaction} transaction
  9854. * @param {ReactElement} prevElement
  9855. * @param {ReactElement} nextElement
  9856. * @internal
  9857. * @overridable
  9858. */
  9859. updateComponent: function (transaction, prevElement, nextElement, context) {
  9860. var lastProps = prevElement.props;
  9861. var nextProps = this._currentElement.props;
  9862. switch (this._tag) {
  9863. case 'button':
  9864. lastProps = ReactDOMButton.getNativeProps(this, lastProps);
  9865. nextProps = ReactDOMButton.getNativeProps(this, nextProps);
  9866. break;
  9867. case 'input':
  9868. ReactDOMInput.updateWrapper(this);
  9869. lastProps = ReactDOMInput.getNativeProps(this, lastProps);
  9870. nextProps = ReactDOMInput.getNativeProps(this, nextProps);
  9871. break;
  9872. case 'option':
  9873. lastProps = ReactDOMOption.getNativeProps(this, lastProps);
  9874. nextProps = ReactDOMOption.getNativeProps(this, nextProps);
  9875. break;
  9876. case 'select':
  9877. lastProps = ReactDOMSelect.getNativeProps(this, lastProps);
  9878. nextProps = ReactDOMSelect.getNativeProps(this, nextProps);
  9879. break;
  9880. case 'textarea':
  9881. ReactDOMTextarea.updateWrapper(this);
  9882. lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);
  9883. nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);
  9884. break;
  9885. }
  9886. if (process.env.NODE_ENV !== 'production') {
  9887. // If the context is reference-equal to the old one, pass down the same
  9888. // processed object so the update bailout in ReactReconciler behaves
  9889. // correctly (and identically in dev and prod). See #5005.
  9890. if (this._unprocessedContextDev !== context) {
  9891. this._unprocessedContextDev = context;
  9892. this._processedContextDev = processChildContextDev(context, this);
  9893. }
  9894. context = this._processedContextDev;
  9895. }
  9896. assertValidProps(this, nextProps);
  9897. this._updateDOMProperties(lastProps, nextProps, transaction, null);
  9898. this._updateDOMChildren(lastProps, nextProps, transaction, context);
  9899. if (!canDefineProperty && this._nodeWithLegacyProperties) {
  9900. this._nodeWithLegacyProperties.props = nextProps;
  9901. }
  9902. if (this._tag === 'select') {
  9903. // <select> value update needs to occur after <option> children
  9904. // reconciliation
  9905. transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);
  9906. }
  9907. },
  9908. /**
  9909. * Reconciles the properties by detecting differences in property values and
  9910. * updating the DOM as necessary. This function is probably the single most
  9911. * critical path for performance optimization.
  9912. *
  9913. * TODO: Benchmark whether checking for changed values in memory actually
  9914. * improves performance (especially statically positioned elements).
  9915. * TODO: Benchmark the effects of putting this at the top since 99% of props
  9916. * do not change for a given reconciliation.
  9917. * TODO: Benchmark areas that can be improved with caching.
  9918. *
  9919. * @private
  9920. * @param {object} lastProps
  9921. * @param {object} nextProps
  9922. * @param {ReactReconcileTransaction} transaction
  9923. * @param {?DOMElement} node
  9924. */
  9925. _updateDOMProperties: function (lastProps, nextProps, transaction, node) {
  9926. var propKey;
  9927. var styleName;
  9928. var styleUpdates;
  9929. for (propKey in lastProps) {
  9930. if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) {
  9931. continue;
  9932. }
  9933. if (propKey === STYLE) {
  9934. var lastStyle = this._previousStyleCopy;
  9935. for (styleName in lastStyle) {
  9936. if (lastStyle.hasOwnProperty(styleName)) {
  9937. styleUpdates = styleUpdates || {};
  9938. styleUpdates[styleName] = '';
  9939. }
  9940. }
  9941. this._previousStyleCopy = null;
  9942. } else if (registrationNameModules.hasOwnProperty(propKey)) {
  9943. if (lastProps[propKey]) {
  9944. // Only call deleteListener if there was a listener previously or
  9945. // else willDeleteListener gets called when there wasn't actually a
  9946. // listener (e.g., onClick={null})
  9947. deleteListener(this._rootNodeID, propKey);
  9948. }
  9949. } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
  9950. if (!node) {
  9951. node = ReactMount.getNode(this._rootNodeID);
  9952. }
  9953. DOMPropertyOperations.deleteValueForProperty(node, propKey);
  9954. }
  9955. }
  9956. for (propKey in nextProps) {
  9957. var nextProp = nextProps[propKey];
  9958. var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey];
  9959. if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {
  9960. continue;
  9961. }
  9962. if (propKey === STYLE) {
  9963. if (nextProp) {
  9964. if (process.env.NODE_ENV !== 'production') {
  9965. checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);
  9966. this._previousStyle = nextProp;
  9967. }
  9968. nextProp = this._previousStyleCopy = assign({}, nextProp);
  9969. } else {
  9970. this._previousStyleCopy = null;
  9971. }
  9972. if (lastProp) {
  9973. // Unset styles on `lastProp` but not on `nextProp`.
  9974. for (styleName in lastProp) {
  9975. if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
  9976. styleUpdates = styleUpdates || {};
  9977. styleUpdates[styleName] = '';
  9978. }
  9979. }
  9980. // Update styles that changed since `lastProp`.
  9981. for (styleName in nextProp) {
  9982. if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
  9983. styleUpdates = styleUpdates || {};
  9984. styleUpdates[styleName] = nextProp[styleName];
  9985. }
  9986. }
  9987. } else {
  9988. // Relies on `updateStylesByID` not mutating `styleUpdates`.
  9989. styleUpdates = nextProp;
  9990. }
  9991. } else if (registrationNameModules.hasOwnProperty(propKey)) {
  9992. if (nextProp) {
  9993. enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction);
  9994. } else if (lastProp) {
  9995. deleteListener(this._rootNodeID, propKey);
  9996. }
  9997. } else if (isCustomComponent(this._tag, nextProps)) {
  9998. if (!node) {
  9999. node = ReactMount.getNode(this._rootNodeID);
  10000. }
  10001. if (propKey === CHILDREN) {
  10002. nextProp = null;
  10003. }
  10004. DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp);
  10005. } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
  10006. if (!node) {
  10007. node = ReactMount.getNode(this._rootNodeID);
  10008. }
  10009. // If we're updating to null or undefined, we should remove the property
  10010. // from the DOM node instead of inadvertantly setting to a string. This
  10011. // brings us in line with the same behavior we have on initial render.
  10012. if (nextProp != null) {
  10013. DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);
  10014. } else {
  10015. DOMPropertyOperations.deleteValueForProperty(node, propKey);
  10016. }
  10017. }
  10018. }
  10019. if (styleUpdates) {
  10020. if (!node) {
  10021. node = ReactMount.getNode(this._rootNodeID);
  10022. }
  10023. CSSPropertyOperations.setValueForStyles(node, styleUpdates);
  10024. }
  10025. },
  10026. /**
  10027. * Reconciles the children with the various properties that affect the
  10028. * children content.
  10029. *
  10030. * @param {object} lastProps
  10031. * @param {object} nextProps
  10032. * @param {ReactReconcileTransaction} transaction
  10033. * @param {object} context
  10034. */
  10035. _updateDOMChildren: function (lastProps, nextProps, transaction, context) {
  10036. var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;
  10037. var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;
  10038. var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;
  10039. var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;
  10040. // Note the use of `!=` which checks for null or undefined.
  10041. var lastChildren = lastContent != null ? null : lastProps.children;
  10042. var nextChildren = nextContent != null ? null : nextProps.children;
  10043. // If we're switching from children to content/html or vice versa, remove
  10044. // the old content
  10045. var lastHasContentOrHtml = lastContent != null || lastHtml != null;
  10046. var nextHasContentOrHtml = nextContent != null || nextHtml != null;
  10047. if (lastChildren != null && nextChildren == null) {
  10048. this.updateChildren(null, transaction, context);
  10049. } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
  10050. this.updateTextContent('');
  10051. }
  10052. if (nextContent != null) {
  10053. if (lastContent !== nextContent) {
  10054. this.updateTextContent('' + nextContent);
  10055. }
  10056. } else if (nextHtml != null) {
  10057. if (lastHtml !== nextHtml) {
  10058. this.updateMarkup('' + nextHtml);
  10059. }
  10060. } else if (nextChildren != null) {
  10061. this.updateChildren(nextChildren, transaction, context);
  10062. }
  10063. },
  10064. /**
  10065. * Destroys all event registrations for this instance. Does not remove from
  10066. * the DOM. That must be done by the parent.
  10067. *
  10068. * @internal
  10069. */
  10070. unmountComponent: function () {
  10071. switch (this._tag) {
  10072. case 'iframe':
  10073. case 'img':
  10074. case 'form':
  10075. case 'video':
  10076. case 'audio':
  10077. var listeners = this._wrapperState.listeners;
  10078. if (listeners) {
  10079. for (var i = 0; i < listeners.length; i++) {
  10080. listeners[i].remove();
  10081. }
  10082. }
  10083. break;
  10084. case 'input':
  10085. ReactDOMInput.unmountWrapper(this);
  10086. break;
  10087. case 'html':
  10088. case 'head':
  10089. case 'body':
  10090. /**
  10091. * Components like <html> <head> and <body> can't be removed or added
  10092. * easily in a cross-browser way, however it's valuable to be able to
  10093. * take advantage of React's reconciliation for styling and <title>
  10094. * management. So we just document it and throw in dangerous cases.
  10095. */
  10096. true ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined;
  10097. break;
  10098. }
  10099. this.unmountChildren();
  10100. ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);
  10101. ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
  10102. this._rootNodeID = null;
  10103. this._wrapperState = null;
  10104. if (this._nodeWithLegacyProperties) {
  10105. var node = this._nodeWithLegacyProperties;
  10106. node._reactInternalComponent = null;
  10107. this._nodeWithLegacyProperties = null;
  10108. }
  10109. },
  10110. getPublicInstance: function () {
  10111. if (!this._nodeWithLegacyProperties) {
  10112. var node = ReactMount.getNode(this._rootNodeID);
  10113. node._reactInternalComponent = this;
  10114. node.getDOMNode = legacyGetDOMNode;
  10115. node.isMounted = legacyIsMounted;
  10116. node.setState = legacySetStateEtc;
  10117. node.replaceState = legacySetStateEtc;
  10118. node.forceUpdate = legacySetStateEtc;
  10119. node.setProps = legacySetProps;
  10120. node.replaceProps = legacyReplaceProps;
  10121. if (process.env.NODE_ENV !== 'production') {
  10122. if (canDefineProperty) {
  10123. Object.defineProperties(node, legacyPropsDescriptor);
  10124. } else {
  10125. // updateComponent will update this property on subsequent renders
  10126. node.props = this._currentElement.props;
  10127. }
  10128. } else {
  10129. // updateComponent will update this property on subsequent renders
  10130. node.props = this._currentElement.props;
  10131. }
  10132. this._nodeWithLegacyProperties = node;
  10133. }
  10134. return this._nodeWithLegacyProperties;
  10135. }
  10136. };
  10137. ReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {
  10138. mountComponent: 'mountComponent',
  10139. updateComponent: 'updateComponent'
  10140. });
  10141. assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
  10142. module.exports = ReactDOMComponent;
  10143. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  10144. /***/ },
  10145. /* 94 */
  10146. /***/ function(module, exports, __webpack_require__) {
  10147. /**
  10148. * Copyright 2013-2015, Facebook, Inc.
  10149. * All rights reserved.
  10150. *
  10151. * This source code is licensed under the BSD-style license found in the
  10152. * LICENSE file in the root directory of this source tree. An additional grant
  10153. * of patent rights can be found in the PATENTS file in the same directory.
  10154. *
  10155. * @providesModule AutoFocusUtils
  10156. * @typechecks static-only
  10157. */
  10158. 'use strict';
  10159. var ReactMount = __webpack_require__(28);
  10160. var findDOMNode = __webpack_require__(91);
  10161. var focusNode = __webpack_require__(95);
  10162. var Mixin = {
  10163. componentDidMount: function () {
  10164. if (this.props.autoFocus) {
  10165. focusNode(findDOMNode(this));
  10166. }
  10167. }
  10168. };
  10169. var AutoFocusUtils = {
  10170. Mixin: Mixin,
  10171. focusDOMComponent: function () {
  10172. focusNode(ReactMount.getNode(this._rootNodeID));
  10173. }
  10174. };
  10175. module.exports = AutoFocusUtils;
  10176. /***/ },
  10177. /* 95 */
  10178. /***/ function(module, exports) {
  10179. /**
  10180. * Copyright 2013-2015, Facebook, Inc.
  10181. * All rights reserved.
  10182. *
  10183. * This source code is licensed under the BSD-style license found in the
  10184. * LICENSE file in the root directory of this source tree. An additional grant
  10185. * of patent rights can be found in the PATENTS file in the same directory.
  10186. *
  10187. * @providesModule focusNode
  10188. */
  10189. 'use strict';
  10190. /**
  10191. * @param {DOMElement} node input/textarea to focus
  10192. */
  10193. function focusNode(node) {
  10194. // IE8 can throw "Can't move focus to the control because it is invisible,
  10195. // not enabled, or of a type that does not accept the focus." for all kinds of
  10196. // reasons that are too expensive and fragile to test.
  10197. try {
  10198. node.focus();
  10199. } catch (e) {}
  10200. }
  10201. module.exports = focusNode;
  10202. /***/ },
  10203. /* 96 */
  10204. /***/ function(module, exports, __webpack_require__) {
  10205. /* WEBPACK VAR INJECTION */(function(process) {/**
  10206. * Copyright 2013-2015, Facebook, Inc.
  10207. * All rights reserved.
  10208. *
  10209. * This source code is licensed under the BSD-style license found in the
  10210. * LICENSE file in the root directory of this source tree. An additional grant
  10211. * of patent rights can be found in the PATENTS file in the same directory.
  10212. *
  10213. * @providesModule CSSPropertyOperations
  10214. * @typechecks static-only
  10215. */
  10216. 'use strict';
  10217. var CSSProperty = __webpack_require__(97);
  10218. var ExecutionEnvironment = __webpack_require__(9);
  10219. var ReactPerf = __webpack_require__(18);
  10220. var camelizeStyleName = __webpack_require__(98);
  10221. var dangerousStyleValue = __webpack_require__(100);
  10222. var hyphenateStyleName = __webpack_require__(101);
  10223. var memoizeStringOnly = __webpack_require__(103);
  10224. var warning = __webpack_require__(25);
  10225. var processStyleName = memoizeStringOnly(function (styleName) {
  10226. return hyphenateStyleName(styleName);
  10227. });
  10228. var hasShorthandPropertyBug = false;
  10229. var styleFloatAccessor = 'cssFloat';
  10230. if (ExecutionEnvironment.canUseDOM) {
  10231. var tempStyle = document.createElement('div').style;
  10232. try {
  10233. // IE8 throws "Invalid argument." if resetting shorthand style properties.
  10234. tempStyle.font = '';
  10235. } catch (e) {
  10236. hasShorthandPropertyBug = true;
  10237. }
  10238. // IE8 only supports accessing cssFloat (standard) as styleFloat
  10239. if (document.documentElement.style.cssFloat === undefined) {
  10240. styleFloatAccessor = 'styleFloat';
  10241. }
  10242. }
  10243. if (process.env.NODE_ENV !== 'production') {
  10244. // 'msTransform' is correct, but the other prefixes should be capitalized
  10245. var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
  10246. // style values shouldn't contain a semicolon
  10247. var badStyleValueWithSemicolonPattern = /;\s*$/;
  10248. var warnedStyleNames = {};
  10249. var warnedStyleValues = {};
  10250. var warnHyphenatedStyleName = function (name) {
  10251. if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
  10252. return;
  10253. }
  10254. warnedStyleNames[name] = true;
  10255. process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined;
  10256. };
  10257. var warnBadVendoredStyleName = function (name) {
  10258. if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
  10259. return;
  10260. }
  10261. warnedStyleNames[name] = true;
  10262. process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined;
  10263. };
  10264. var warnStyleValueWithSemicolon = function (name, value) {
  10265. if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
  10266. return;
  10267. }
  10268. warnedStyleValues[value] = true;
  10269. process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\'t contain a semicolon. ' + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined;
  10270. };
  10271. /**
  10272. * @param {string} name
  10273. * @param {*} value
  10274. */
  10275. var warnValidStyle = function (name, value) {
  10276. if (name.indexOf('-') > -1) {
  10277. warnHyphenatedStyleName(name);
  10278. } else if (badVendoredStyleNamePattern.test(name)) {
  10279. warnBadVendoredStyleName(name);
  10280. } else if (badStyleValueWithSemicolonPattern.test(value)) {
  10281. warnStyleValueWithSemicolon(name, value);
  10282. }
  10283. };
  10284. }
  10285. /**
  10286. * Operations for dealing with CSS properties.
  10287. */
  10288. var CSSPropertyOperations = {
  10289. /**
  10290. * Serializes a mapping of style properties for use as inline styles:
  10291. *
  10292. * > createMarkupForStyles({width: '200px', height: 0})
  10293. * "width:200px;height:0;"
  10294. *
  10295. * Undefined values are ignored so that declarative programming is easier.
  10296. * The result should be HTML-escaped before insertion into the DOM.
  10297. *
  10298. * @param {object} styles
  10299. * @return {?string}
  10300. */
  10301. createMarkupForStyles: function (styles) {
  10302. var serialized = '';
  10303. for (var styleName in styles) {
  10304. if (!styles.hasOwnProperty(styleName)) {
  10305. continue;
  10306. }
  10307. var styleValue = styles[styleName];
  10308. if (process.env.NODE_ENV !== 'production') {
  10309. warnValidStyle(styleName, styleValue);
  10310. }
  10311. if (styleValue != null) {
  10312. serialized += processStyleName(styleName) + ':';
  10313. serialized += dangerousStyleValue(styleName, styleValue) + ';';
  10314. }
  10315. }
  10316. return serialized || null;
  10317. },
  10318. /**
  10319. * Sets the value for multiple styles on a node. If a value is specified as
  10320. * '' (empty string), the corresponding style property will be unset.
  10321. *
  10322. * @param {DOMElement} node
  10323. * @param {object} styles
  10324. */
  10325. setValueForStyles: function (node, styles) {
  10326. var style = node.style;
  10327. for (var styleName in styles) {
  10328. if (!styles.hasOwnProperty(styleName)) {
  10329. continue;
  10330. }
  10331. if (process.env.NODE_ENV !== 'production') {
  10332. warnValidStyle(styleName, styles[styleName]);
  10333. }
  10334. var styleValue = dangerousStyleValue(styleName, styles[styleName]);
  10335. if (styleName === 'float') {
  10336. styleName = styleFloatAccessor;
  10337. }
  10338. if (styleValue) {
  10339. style[styleName] = styleValue;
  10340. } else {
  10341. var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];
  10342. if (expansion) {
  10343. // Shorthand property that IE8 won't like unsetting, so unset each
  10344. // component to placate it
  10345. for (var individualStyleName in expansion) {
  10346. style[individualStyleName] = '';
  10347. }
  10348. } else {
  10349. style[styleName] = '';
  10350. }
  10351. }
  10352. }
  10353. }
  10354. };
  10355. ReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {
  10356. setValueForStyles: 'setValueForStyles'
  10357. });
  10358. module.exports = CSSPropertyOperations;
  10359. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  10360. /***/ },
  10361. /* 97 */
  10362. /***/ function(module, exports) {
  10363. /**
  10364. * Copyright 2013-2015, Facebook, Inc.
  10365. * All rights reserved.
  10366. *
  10367. * This source code is licensed under the BSD-style license found in the
  10368. * LICENSE file in the root directory of this source tree. An additional grant
  10369. * of patent rights can be found in the PATENTS file in the same directory.
  10370. *
  10371. * @providesModule CSSProperty
  10372. */
  10373. 'use strict';
  10374. /**
  10375. * CSS properties which accept numbers but are not in units of "px".
  10376. */
  10377. var isUnitlessNumber = {
  10378. animationIterationCount: true,
  10379. boxFlex: true,
  10380. boxFlexGroup: true,
  10381. boxOrdinalGroup: true,
  10382. columnCount: true,
  10383. flex: true,
  10384. flexGrow: true,
  10385. flexPositive: true,
  10386. flexShrink: true,
  10387. flexNegative: true,
  10388. flexOrder: true,
  10389. fontWeight: true,
  10390. lineClamp: true,
  10391. lineHeight: true,
  10392. opacity: true,
  10393. order: true,
  10394. orphans: true,
  10395. tabSize: true,
  10396. widows: true,
  10397. zIndex: true,
  10398. zoom: true,
  10399. // SVG-related properties
  10400. fillOpacity: true,
  10401. stopOpacity: true,
  10402. strokeDashoffset: true,
  10403. strokeOpacity: true,
  10404. strokeWidth: true
  10405. };
  10406. /**
  10407. * @param {string} prefix vendor-specific prefix, eg: Webkit
  10408. * @param {string} key style name, eg: transitionDuration
  10409. * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
  10410. * WebkitTransitionDuration
  10411. */
  10412. function prefixKey(prefix, key) {
  10413. return prefix + key.charAt(0).toUpperCase() + key.substring(1);
  10414. }
  10415. /**
  10416. * Support style names that may come passed in prefixed by adding permutations
  10417. * of vendor prefixes.
  10418. */
  10419. var prefixes = ['Webkit', 'ms', 'Moz', 'O'];
  10420. // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
  10421. // infinite loop, because it iterates over the newly added props too.
  10422. Object.keys(isUnitlessNumber).forEach(function (prop) {
  10423. prefixes.forEach(function (prefix) {
  10424. isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
  10425. });
  10426. });
  10427. /**
  10428. * Most style properties can be unset by doing .style[prop] = '' but IE8
  10429. * doesn't like doing that with shorthand properties so for the properties that
  10430. * IE8 breaks on, which are listed here, we instead unset each of the
  10431. * individual properties. See http://bugs.jquery.com/ticket/12385.
  10432. * The 4-value 'clock' properties like margin, padding, border-width seem to
  10433. * behave without any problems. Curiously, list-style works too without any
  10434. * special prodding.
  10435. */
  10436. var shorthandPropertyExpansions = {
  10437. background: {
  10438. backgroundAttachment: true,
  10439. backgroundColor: true,
  10440. backgroundImage: true,
  10441. backgroundPositionX: true,
  10442. backgroundPositionY: true,
  10443. backgroundRepeat: true
  10444. },
  10445. backgroundPosition: {
  10446. backgroundPositionX: true,
  10447. backgroundPositionY: true
  10448. },
  10449. border: {
  10450. borderWidth: true,
  10451. borderStyle: true,
  10452. borderColor: true
  10453. },
  10454. borderBottom: {
  10455. borderBottomWidth: true,
  10456. borderBottomStyle: true,
  10457. borderBottomColor: true
  10458. },
  10459. borderLeft: {
  10460. borderLeftWidth: true,
  10461. borderLeftStyle: true,
  10462. borderLeftColor: true
  10463. },
  10464. borderRight: {
  10465. borderRightWidth: true,
  10466. borderRightStyle: true,
  10467. borderRightColor: true
  10468. },
  10469. borderTop: {
  10470. borderTopWidth: true,
  10471. borderTopStyle: true,
  10472. borderTopColor: true
  10473. },
  10474. font: {
  10475. fontStyle: true,
  10476. fontVariant: true,
  10477. fontWeight: true,
  10478. fontSize: true,
  10479. lineHeight: true,
  10480. fontFamily: true
  10481. },
  10482. outline: {
  10483. outlineWidth: true,
  10484. outlineStyle: true,
  10485. outlineColor: true
  10486. }
  10487. };
  10488. var CSSProperty = {
  10489. isUnitlessNumber: isUnitlessNumber,
  10490. shorthandPropertyExpansions: shorthandPropertyExpansions
  10491. };
  10492. module.exports = CSSProperty;
  10493. /***/ },
  10494. /* 98 */
  10495. /***/ function(module, exports, __webpack_require__) {
  10496. /**
  10497. * Copyright 2013-2015, Facebook, Inc.
  10498. * All rights reserved.
  10499. *
  10500. * This source code is licensed under the BSD-style license found in the
  10501. * LICENSE file in the root directory of this source tree. An additional grant
  10502. * of patent rights can be found in the PATENTS file in the same directory.
  10503. *
  10504. * @providesModule camelizeStyleName
  10505. * @typechecks
  10506. */
  10507. 'use strict';
  10508. var camelize = __webpack_require__(99);
  10509. var msPattern = /^-ms-/;
  10510. /**
  10511. * Camelcases a hyphenated CSS property name, for example:
  10512. *
  10513. * > camelizeStyleName('background-color')
  10514. * < "backgroundColor"
  10515. * > camelizeStyleName('-moz-transition')
  10516. * < "MozTransition"
  10517. * > camelizeStyleName('-ms-transition')
  10518. * < "msTransition"
  10519. *
  10520. * As Andi Smith suggests
  10521. * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
  10522. * is converted to lowercase `ms`.
  10523. *
  10524. * @param {string} string
  10525. * @return {string}
  10526. */
  10527. function camelizeStyleName(string) {
  10528. return camelize(string.replace(msPattern, 'ms-'));
  10529. }
  10530. module.exports = camelizeStyleName;
  10531. /***/ },
  10532. /* 99 */
  10533. /***/ function(module, exports) {
  10534. /**
  10535. * Copyright 2013-2015, Facebook, Inc.
  10536. * All rights reserved.
  10537. *
  10538. * This source code is licensed under the BSD-style license found in the
  10539. * LICENSE file in the root directory of this source tree. An additional grant
  10540. * of patent rights can be found in the PATENTS file in the same directory.
  10541. *
  10542. * @providesModule camelize
  10543. * @typechecks
  10544. */
  10545. "use strict";
  10546. var _hyphenPattern = /-(.)/g;
  10547. /**
  10548. * Camelcases a hyphenated string, for example:
  10549. *
  10550. * > camelize('background-color')
  10551. * < "backgroundColor"
  10552. *
  10553. * @param {string} string
  10554. * @return {string}
  10555. */
  10556. function camelize(string) {
  10557. return string.replace(_hyphenPattern, function (_, character) {
  10558. return character.toUpperCase();
  10559. });
  10560. }
  10561. module.exports = camelize;
  10562. /***/ },
  10563. /* 100 */
  10564. /***/ function(module, exports, __webpack_require__) {
  10565. /**
  10566. * Copyright 2013-2015, Facebook, Inc.
  10567. * All rights reserved.
  10568. *
  10569. * This source code is licensed under the BSD-style license found in the
  10570. * LICENSE file in the root directory of this source tree. An additional grant
  10571. * of patent rights can be found in the PATENTS file in the same directory.
  10572. *
  10573. * @providesModule dangerousStyleValue
  10574. * @typechecks static-only
  10575. */
  10576. 'use strict';
  10577. var CSSProperty = __webpack_require__(97);
  10578. var isUnitlessNumber = CSSProperty.isUnitlessNumber;
  10579. /**
  10580. * Convert a value into the proper css writable value. The style name `name`
  10581. * should be logical (no hyphens), as specified
  10582. * in `CSSProperty.isUnitlessNumber`.
  10583. *
  10584. * @param {string} name CSS property name such as `topMargin`.
  10585. * @param {*} value CSS property value such as `10px`.
  10586. * @return {string} Normalized style value with dimensions applied.
  10587. */
  10588. function dangerousStyleValue(name, value) {
  10589. // Note that we've removed escapeTextForBrowser() calls here since the
  10590. // whole string will be escaped when the attribute is injected into
  10591. // the markup. If you provide unsafe user data here they can inject
  10592. // arbitrary CSS which may be problematic (I couldn't repro this):
  10593. // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
  10594. // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
  10595. // This is not an XSS hole but instead a potential CSS injection issue
  10596. // which has lead to a greater discussion about how we're going to
  10597. // trust URLs moving forward. See #2115901
  10598. var isEmpty = value == null || typeof value === 'boolean' || value === '';
  10599. if (isEmpty) {
  10600. return '';
  10601. }
  10602. var isNonNumeric = isNaN(value);
  10603. if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {
  10604. return '' + value; // cast to string
  10605. }
  10606. if (typeof value === 'string') {
  10607. value = value.trim();
  10608. }
  10609. return value + 'px';
  10610. }
  10611. module.exports = dangerousStyleValue;
  10612. /***/ },
  10613. /* 101 */
  10614. /***/ function(module, exports, __webpack_require__) {
  10615. /**
  10616. * Copyright 2013-2015, Facebook, Inc.
  10617. * All rights reserved.
  10618. *
  10619. * This source code is licensed under the BSD-style license found in the
  10620. * LICENSE file in the root directory of this source tree. An additional grant
  10621. * of patent rights can be found in the PATENTS file in the same directory.
  10622. *
  10623. * @providesModule hyphenateStyleName
  10624. * @typechecks
  10625. */
  10626. 'use strict';
  10627. var hyphenate = __webpack_require__(102);
  10628. var msPattern = /^ms-/;
  10629. /**
  10630. * Hyphenates a camelcased CSS property name, for example:
  10631. *
  10632. * > hyphenateStyleName('backgroundColor')
  10633. * < "background-color"
  10634. * > hyphenateStyleName('MozTransition')
  10635. * < "-moz-transition"
  10636. * > hyphenateStyleName('msTransition')
  10637. * < "-ms-transition"
  10638. *
  10639. * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
  10640. * is converted to `-ms-`.
  10641. *
  10642. * @param {string} string
  10643. * @return {string}
  10644. */
  10645. function hyphenateStyleName(string) {
  10646. return hyphenate(string).replace(msPattern, '-ms-');
  10647. }
  10648. module.exports = hyphenateStyleName;
  10649. /***/ },
  10650. /* 102 */
  10651. /***/ function(module, exports) {
  10652. /**
  10653. * Copyright 2013-2015, Facebook, Inc.
  10654. * All rights reserved.
  10655. *
  10656. * This source code is licensed under the BSD-style license found in the
  10657. * LICENSE file in the root directory of this source tree. An additional grant
  10658. * of patent rights can be found in the PATENTS file in the same directory.
  10659. *
  10660. * @providesModule hyphenate
  10661. * @typechecks
  10662. */
  10663. 'use strict';
  10664. var _uppercasePattern = /([A-Z])/g;
  10665. /**
  10666. * Hyphenates a camelcased string, for example:
  10667. *
  10668. * > hyphenate('backgroundColor')
  10669. * < "background-color"
  10670. *
  10671. * For CSS style names, use `hyphenateStyleName` instead which works properly
  10672. * with all vendor prefixes, including `ms`.
  10673. *
  10674. * @param {string} string
  10675. * @return {string}
  10676. */
  10677. function hyphenate(string) {
  10678. return string.replace(_uppercasePattern, '-$1').toLowerCase();
  10679. }
  10680. module.exports = hyphenate;
  10681. /***/ },
  10682. /* 103 */
  10683. /***/ function(module, exports) {
  10684. /**
  10685. * Copyright 2013-2015, Facebook, Inc.
  10686. * All rights reserved.
  10687. *
  10688. * This source code is licensed under the BSD-style license found in the
  10689. * LICENSE file in the root directory of this source tree. An additional grant
  10690. * of patent rights can be found in the PATENTS file in the same directory.
  10691. *
  10692. * @providesModule memoizeStringOnly
  10693. * @typechecks static-only
  10694. */
  10695. 'use strict';
  10696. /**
  10697. * Memoizes the return value of a function that accepts one string argument.
  10698. *
  10699. * @param {function} callback
  10700. * @return {function}
  10701. */
  10702. function memoizeStringOnly(callback) {
  10703. var cache = {};
  10704. return function (string) {
  10705. if (!cache.hasOwnProperty(string)) {
  10706. cache[string] = callback.call(this, string);
  10707. }
  10708. return cache[string];
  10709. };
  10710. }
  10711. module.exports = memoizeStringOnly;
  10712. /***/ },
  10713. /* 104 */
  10714. /***/ function(module, exports) {
  10715. /**
  10716. * Copyright 2013-2015, Facebook, Inc.
  10717. * All rights reserved.
  10718. *
  10719. * This source code is licensed under the BSD-style license found in the
  10720. * LICENSE file in the root directory of this source tree. An additional grant
  10721. * of patent rights can be found in the PATENTS file in the same directory.
  10722. *
  10723. * @providesModule ReactDOMButton
  10724. */
  10725. 'use strict';
  10726. var mouseListenerNames = {
  10727. onClick: true,
  10728. onDoubleClick: true,
  10729. onMouseDown: true,
  10730. onMouseMove: true,
  10731. onMouseUp: true,
  10732. onClickCapture: true,
  10733. onDoubleClickCapture: true,
  10734. onMouseDownCapture: true,
  10735. onMouseMoveCapture: true,
  10736. onMouseUpCapture: true
  10737. };
  10738. /**
  10739. * Implements a <button> native component that does not receive mouse events
  10740. * when `disabled` is set.
  10741. */
  10742. var ReactDOMButton = {
  10743. getNativeProps: function (inst, props, context) {
  10744. if (!props.disabled) {
  10745. return props;
  10746. }
  10747. // Copy the props, except the mouse listeners
  10748. var nativeProps = {};
  10749. for (var key in props) {
  10750. if (props.hasOwnProperty(key) && !mouseListenerNames[key]) {
  10751. nativeProps[key] = props[key];
  10752. }
  10753. }
  10754. return nativeProps;
  10755. }
  10756. };
  10757. module.exports = ReactDOMButton;
  10758. /***/ },
  10759. /* 105 */
  10760. /***/ function(module, exports, __webpack_require__) {
  10761. /* WEBPACK VAR INJECTION */(function(process) {/**
  10762. * Copyright 2013-2015, Facebook, Inc.
  10763. * All rights reserved.
  10764. *
  10765. * This source code is licensed under the BSD-style license found in the
  10766. * LICENSE file in the root directory of this source tree. An additional grant
  10767. * of patent rights can be found in the PATENTS file in the same directory.
  10768. *
  10769. * @providesModule ReactDOMInput
  10770. */
  10771. 'use strict';
  10772. var ReactDOMIDOperations = __webpack_require__(27);
  10773. var LinkedValueUtils = __webpack_require__(106);
  10774. var ReactMount = __webpack_require__(28);
  10775. var ReactUpdates = __webpack_require__(54);
  10776. var assign = __webpack_require__(39);
  10777. var invariant = __webpack_require__(13);
  10778. var instancesByReactID = {};
  10779. function forceUpdateIfMounted() {
  10780. if (this._rootNodeID) {
  10781. // DOM component is still mounted; update
  10782. ReactDOMInput.updateWrapper(this);
  10783. }
  10784. }
  10785. /**
  10786. * Implements an <input> native component that allows setting these optional
  10787. * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
  10788. *
  10789. * If `checked` or `value` are not supplied (or null/undefined), user actions
  10790. * that affect the checked state or value will trigger updates to the element.
  10791. *
  10792. * If they are supplied (and not null/undefined), the rendered element will not
  10793. * trigger updates to the element. Instead, the props must change in order for
  10794. * the rendered element to be updated.
  10795. *
  10796. * The rendered element will be initialized as unchecked (or `defaultChecked`)
  10797. * with an empty value (or `defaultValue`).
  10798. *
  10799. * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
  10800. */
  10801. var ReactDOMInput = {
  10802. getNativeProps: function (inst, props, context) {
  10803. var value = LinkedValueUtils.getValue(props);
  10804. var checked = LinkedValueUtils.getChecked(props);
  10805. var nativeProps = assign({}, props, {
  10806. defaultChecked: undefined,
  10807. defaultValue: undefined,
  10808. value: value != null ? value : inst._wrapperState.initialValue,
  10809. checked: checked != null ? checked : inst._wrapperState.initialChecked,
  10810. onChange: inst._wrapperState.onChange
  10811. });
  10812. return nativeProps;
  10813. },
  10814. mountWrapper: function (inst, props) {
  10815. if (process.env.NODE_ENV !== 'production') {
  10816. LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);
  10817. }
  10818. var defaultValue = props.defaultValue;
  10819. inst._wrapperState = {
  10820. initialChecked: props.defaultChecked || false,
  10821. initialValue: defaultValue != null ? defaultValue : null,
  10822. onChange: _handleChange.bind(inst)
  10823. };
  10824. },
  10825. mountReadyWrapper: function (inst) {
  10826. // Can't be in mountWrapper or else server rendering leaks.
  10827. instancesByReactID[inst._rootNodeID] = inst;
  10828. },
  10829. unmountWrapper: function (inst) {
  10830. delete instancesByReactID[inst._rootNodeID];
  10831. },
  10832. updateWrapper: function (inst) {
  10833. var props = inst._currentElement.props;
  10834. // TODO: Shouldn't this be getChecked(props)?
  10835. var checked = props.checked;
  10836. if (checked != null) {
  10837. ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false);
  10838. }
  10839. var value = LinkedValueUtils.getValue(props);
  10840. if (value != null) {
  10841. // Cast `value` to a string to ensure the value is set correctly. While
  10842. // browsers typically do this as necessary, jsdom doesn't.
  10843. ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);
  10844. }
  10845. }
  10846. };
  10847. function _handleChange(event) {
  10848. var props = this._currentElement.props;
  10849. var returnValue = LinkedValueUtils.executeOnChange(props, event);
  10850. // Here we use asap to wait until all updates have propagated, which
  10851. // is important when using controlled components within layers:
  10852. // https://github.com/facebook/react/issues/1698
  10853. ReactUpdates.asap(forceUpdateIfMounted, this);
  10854. var name = props.name;
  10855. if (props.type === 'radio' && name != null) {
  10856. var rootNode = ReactMount.getNode(this._rootNodeID);
  10857. var queryRoot = rootNode;
  10858. while (queryRoot.parentNode) {
  10859. queryRoot = queryRoot.parentNode;
  10860. }
  10861. // If `rootNode.form` was non-null, then we could try `form.elements`,
  10862. // but that sometimes behaves strangely in IE8. We could also try using
  10863. // `form.getElementsByName`, but that will only return direct children
  10864. // and won't include inputs that use the HTML5 `form=` attribute. Since
  10865. // the input might not even be in a form, let's just use the global
  10866. // `querySelectorAll` to ensure we don't miss anything.
  10867. var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');
  10868. for (var i = 0; i < group.length; i++) {
  10869. var otherNode = group[i];
  10870. if (otherNode === rootNode || otherNode.form !== rootNode.form) {
  10871. continue;
  10872. }
  10873. // This will throw if radio buttons rendered by different copies of React
  10874. // and the same name are rendered into the same form (same as #1939).
  10875. // That's probably okay; we don't support it just as we don't support
  10876. // mixing React with non-React.
  10877. var otherID = ReactMount.getID(otherNode);
  10878. !otherID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined;
  10879. var otherInstance = instancesByReactID[otherID];
  10880. !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined;
  10881. // If this is a controlled radio button group, forcing the input that
  10882. // was previously checked to update will cause it to be come re-checked
  10883. // as appropriate.
  10884. ReactUpdates.asap(forceUpdateIfMounted, otherInstance);
  10885. }
  10886. }
  10887. return returnValue;
  10888. }
  10889. module.exports = ReactDOMInput;
  10890. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  10891. /***/ },
  10892. /* 106 */
  10893. /***/ function(module, exports, __webpack_require__) {
  10894. /* WEBPACK VAR INJECTION */(function(process) {/**
  10895. * Copyright 2013-2015, Facebook, Inc.
  10896. * All rights reserved.
  10897. *
  10898. * This source code is licensed under the BSD-style license found in the
  10899. * LICENSE file in the root directory of this source tree. An additional grant
  10900. * of patent rights can be found in the PATENTS file in the same directory.
  10901. *
  10902. * @providesModule LinkedValueUtils
  10903. * @typechecks static-only
  10904. */
  10905. 'use strict';
  10906. var ReactPropTypes = __webpack_require__(107);
  10907. var ReactPropTypeLocations = __webpack_require__(65);
  10908. var invariant = __webpack_require__(13);
  10909. var warning = __webpack_require__(25);
  10910. var hasReadOnlyValue = {
  10911. 'button': true,
  10912. 'checkbox': true,
  10913. 'image': true,
  10914. 'hidden': true,
  10915. 'radio': true,
  10916. 'reset': true,
  10917. 'submit': true
  10918. };
  10919. function _assertSingleLink(inputProps) {
  10920. !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.') : invariant(false) : undefined;
  10921. }
  10922. function _assertValueLink(inputProps) {
  10923. _assertSingleLink(inputProps);
  10924. !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.') : invariant(false) : undefined;
  10925. }
  10926. function _assertCheckedLink(inputProps) {
  10927. _assertSingleLink(inputProps);
  10928. !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink') : invariant(false) : undefined;
  10929. }
  10930. var propTypes = {
  10931. value: function (props, propName, componentName) {
  10932. if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {
  10933. return null;
  10934. }
  10935. return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
  10936. },
  10937. checked: function (props, propName, componentName) {
  10938. if (!props[propName] || props.onChange || props.readOnly || props.disabled) {
  10939. return null;
  10940. }
  10941. return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
  10942. },
  10943. onChange: ReactPropTypes.func
  10944. };
  10945. var loggedTypeFailures = {};
  10946. function getDeclarationErrorAddendum(owner) {
  10947. if (owner) {
  10948. var name = owner.getName();
  10949. if (name) {
  10950. return ' Check the render method of `' + name + '`.';
  10951. }
  10952. }
  10953. return '';
  10954. }
  10955. /**
  10956. * Provide a linked `value` attribute for controlled forms. You should not use
  10957. * this outside of the ReactDOM controlled form components.
  10958. */
  10959. var LinkedValueUtils = {
  10960. checkPropTypes: function (tagName, props, owner) {
  10961. for (var propName in propTypes) {
  10962. if (propTypes.hasOwnProperty(propName)) {
  10963. var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop);
  10964. }
  10965. if (error instanceof Error && !(error.message in loggedTypeFailures)) {
  10966. // Only monitor this failure once because there tends to be a lot of the
  10967. // same error.
  10968. loggedTypeFailures[error.message] = true;
  10969. var addendum = getDeclarationErrorAddendum(owner);
  10970. process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined;
  10971. }
  10972. }
  10973. },
  10974. /**
  10975. * @param {object} inputProps Props for form component
  10976. * @return {*} current value of the input either from value prop or link.
  10977. */
  10978. getValue: function (inputProps) {
  10979. if (inputProps.valueLink) {
  10980. _assertValueLink(inputProps);
  10981. return inputProps.valueLink.value;
  10982. }
  10983. return inputProps.value;
  10984. },
  10985. /**
  10986. * @param {object} inputProps Props for form component
  10987. * @return {*} current checked status of the input either from checked prop
  10988. * or link.
  10989. */
  10990. getChecked: function (inputProps) {
  10991. if (inputProps.checkedLink) {
  10992. _assertCheckedLink(inputProps);
  10993. return inputProps.checkedLink.value;
  10994. }
  10995. return inputProps.checked;
  10996. },
  10997. /**
  10998. * @param {object} inputProps Props for form component
  10999. * @param {SyntheticEvent} event change event to handle
  11000. */
  11001. executeOnChange: function (inputProps, event) {
  11002. if (inputProps.valueLink) {
  11003. _assertValueLink(inputProps);
  11004. return inputProps.valueLink.requestChange(event.target.value);
  11005. } else if (inputProps.checkedLink) {
  11006. _assertCheckedLink(inputProps);
  11007. return inputProps.checkedLink.requestChange(event.target.checked);
  11008. } else if (inputProps.onChange) {
  11009. return inputProps.onChange.call(undefined, event);
  11010. }
  11011. }
  11012. };
  11013. module.exports = LinkedValueUtils;
  11014. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  11015. /***/ },
  11016. /* 107 */
  11017. /***/ function(module, exports, __webpack_require__) {
  11018. /**
  11019. * Copyright 2013-2015, Facebook, Inc.
  11020. * All rights reserved.
  11021. *
  11022. * This source code is licensed under the BSD-style license found in the
  11023. * LICENSE file in the root directory of this source tree. An additional grant
  11024. * of patent rights can be found in the PATENTS file in the same directory.
  11025. *
  11026. * @providesModule ReactPropTypes
  11027. */
  11028. 'use strict';
  11029. var ReactElement = __webpack_require__(42);
  11030. var ReactPropTypeLocationNames = __webpack_require__(66);
  11031. var emptyFunction = __webpack_require__(15);
  11032. var getIteratorFn = __webpack_require__(108);
  11033. /**
  11034. * Collection of methods that allow declaration and validation of props that are
  11035. * supplied to React components. Example usage:
  11036. *
  11037. * var Props = require('ReactPropTypes');
  11038. * var MyArticle = React.createClass({
  11039. * propTypes: {
  11040. * // An optional string prop named "description".
  11041. * description: Props.string,
  11042. *
  11043. * // A required enum prop named "category".
  11044. * category: Props.oneOf(['News','Photos']).isRequired,
  11045. *
  11046. * // A prop named "dialog" that requires an instance of Dialog.
  11047. * dialog: Props.instanceOf(Dialog).isRequired
  11048. * },
  11049. * render: function() { ... }
  11050. * });
  11051. *
  11052. * A more formal specification of how these methods are used:
  11053. *
  11054. * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
  11055. * decl := ReactPropTypes.{type}(.isRequired)?
  11056. *
  11057. * Each and every declaration produces a function with the same signature. This
  11058. * allows the creation of custom validation functions. For example:
  11059. *
  11060. * var MyLink = React.createClass({
  11061. * propTypes: {
  11062. * // An optional string or URI prop named "href".
  11063. * href: function(props, propName, componentName) {
  11064. * var propValue = props[propName];
  11065. * if (propValue != null && typeof propValue !== 'string' &&
  11066. * !(propValue instanceof URI)) {
  11067. * return new Error(
  11068. * 'Expected a string or an URI for ' + propName + ' in ' +
  11069. * componentName
  11070. * );
  11071. * }
  11072. * }
  11073. * },
  11074. * render: function() {...}
  11075. * });
  11076. *
  11077. * @internal
  11078. */
  11079. var ANONYMOUS = '<<anonymous>>';
  11080. var ReactPropTypes = {
  11081. array: createPrimitiveTypeChecker('array'),
  11082. bool: createPrimitiveTypeChecker('boolean'),
  11083. func: createPrimitiveTypeChecker('function'),
  11084. number: createPrimitiveTypeChecker('number'),
  11085. object: createPrimitiveTypeChecker('object'),
  11086. string: createPrimitiveTypeChecker('string'),
  11087. any: createAnyTypeChecker(),
  11088. arrayOf: createArrayOfTypeChecker,
  11089. element: createElementTypeChecker(),
  11090. instanceOf: createInstanceTypeChecker,
  11091. node: createNodeChecker(),
  11092. objectOf: createObjectOfTypeChecker,
  11093. oneOf: createEnumTypeChecker,
  11094. oneOfType: createUnionTypeChecker,
  11095. shape: createShapeTypeChecker
  11096. };
  11097. function createChainableTypeChecker(validate) {
  11098. function checkType(isRequired, props, propName, componentName, location, propFullName) {
  11099. componentName = componentName || ANONYMOUS;
  11100. propFullName = propFullName || propName;
  11101. if (props[propName] == null) {
  11102. var locationName = ReactPropTypeLocationNames[location];
  11103. if (isRequired) {
  11104. return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
  11105. }
  11106. return null;
  11107. } else {
  11108. return validate(props, propName, componentName, location, propFullName);
  11109. }
  11110. }
  11111. var chainedCheckType = checkType.bind(null, false);
  11112. chainedCheckType.isRequired = checkType.bind(null, true);
  11113. return chainedCheckType;
  11114. }
  11115. function createPrimitiveTypeChecker(expectedType) {
  11116. function validate(props, propName, componentName, location, propFullName) {
  11117. var propValue = props[propName];
  11118. var propType = getPropType(propValue);
  11119. if (propType !== expectedType) {
  11120. var locationName = ReactPropTypeLocationNames[location];
  11121. // `propValue` being instance of, say, date/regexp, pass the 'object'
  11122. // check, but we can offer a more precise error message here rather than
  11123. // 'of type `object`'.
  11124. var preciseType = getPreciseType(propValue);
  11125. return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
  11126. }
  11127. return null;
  11128. }
  11129. return createChainableTypeChecker(validate);
  11130. }
  11131. function createAnyTypeChecker() {
  11132. return createChainableTypeChecker(emptyFunction.thatReturns(null));
  11133. }
  11134. function createArrayOfTypeChecker(typeChecker) {
  11135. function validate(props, propName, componentName, location, propFullName) {
  11136. var propValue = props[propName];
  11137. if (!Array.isArray(propValue)) {
  11138. var locationName = ReactPropTypeLocationNames[location];
  11139. var propType = getPropType(propValue);
  11140. return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
  11141. }
  11142. for (var i = 0; i < propValue.length; i++) {
  11143. var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']');
  11144. if (error instanceof Error) {
  11145. return error;
  11146. }
  11147. }
  11148. return null;
  11149. }
  11150. return createChainableTypeChecker(validate);
  11151. }
  11152. function createElementTypeChecker() {
  11153. function validate(props, propName, componentName, location, propFullName) {
  11154. if (!ReactElement.isValidElement(props[propName])) {
  11155. var locationName = ReactPropTypeLocationNames[location];
  11156. return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.'));
  11157. }
  11158. return null;
  11159. }
  11160. return createChainableTypeChecker(validate);
  11161. }
  11162. function createInstanceTypeChecker(expectedClass) {
  11163. function validate(props, propName, componentName, location, propFullName) {
  11164. if (!(props[propName] instanceof expectedClass)) {
  11165. var locationName = ReactPropTypeLocationNames[location];
  11166. var expectedClassName = expectedClass.name || ANONYMOUS;
  11167. var actualClassName = getClassName(props[propName]);
  11168. return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
  11169. }
  11170. return null;
  11171. }
  11172. return createChainableTypeChecker(validate);
  11173. }
  11174. function createEnumTypeChecker(expectedValues) {
  11175. if (!Array.isArray(expectedValues)) {
  11176. return createChainableTypeChecker(function () {
  11177. return new Error('Invalid argument supplied to oneOf, expected an instance of array.');
  11178. });
  11179. }
  11180. function validate(props, propName, componentName, location, propFullName) {
  11181. var propValue = props[propName];
  11182. for (var i = 0; i < expectedValues.length; i++) {
  11183. if (propValue === expectedValues[i]) {
  11184. return null;
  11185. }
  11186. }
  11187. var locationName = ReactPropTypeLocationNames[location];
  11188. var valuesString = JSON.stringify(expectedValues);
  11189. return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
  11190. }
  11191. return createChainableTypeChecker(validate);
  11192. }
  11193. function createObjectOfTypeChecker(typeChecker) {
  11194. function validate(props, propName, componentName, location, propFullName) {
  11195. var propValue = props[propName];
  11196. var propType = getPropType(propValue);
  11197. if (propType !== 'object') {
  11198. var locationName = ReactPropTypeLocationNames[location];
  11199. return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
  11200. }
  11201. for (var key in propValue) {
  11202. if (propValue.hasOwnProperty(key)) {
  11203. var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key);
  11204. if (error instanceof Error) {
  11205. return error;
  11206. }
  11207. }
  11208. }
  11209. return null;
  11210. }
  11211. return createChainableTypeChecker(validate);
  11212. }
  11213. function createUnionTypeChecker(arrayOfTypeCheckers) {
  11214. if (!Array.isArray(arrayOfTypeCheckers)) {
  11215. return createChainableTypeChecker(function () {
  11216. return new Error('Invalid argument supplied to oneOfType, expected an instance of array.');
  11217. });
  11218. }
  11219. function validate(props, propName, componentName, location, propFullName) {
  11220. for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
  11221. var checker = arrayOfTypeCheckers[i];
  11222. if (checker(props, propName, componentName, location, propFullName) == null) {
  11223. return null;
  11224. }
  11225. }
  11226. var locationName = ReactPropTypeLocationNames[location];
  11227. return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
  11228. }
  11229. return createChainableTypeChecker(validate);
  11230. }
  11231. function createNodeChecker() {
  11232. function validate(props, propName, componentName, location, propFullName) {
  11233. if (!isNode(props[propName])) {
  11234. var locationName = ReactPropTypeLocationNames[location];
  11235. return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
  11236. }
  11237. return null;
  11238. }
  11239. return createChainableTypeChecker(validate);
  11240. }
  11241. function createShapeTypeChecker(shapeTypes) {
  11242. function validate(props, propName, componentName, location, propFullName) {
  11243. var propValue = props[propName];
  11244. var propType = getPropType(propValue);
  11245. if (propType !== 'object') {
  11246. var locationName = ReactPropTypeLocationNames[location];
  11247. return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
  11248. }
  11249. for (var key in shapeTypes) {
  11250. var checker = shapeTypes[key];
  11251. if (!checker) {
  11252. continue;
  11253. }
  11254. var error = checker(propValue, key, componentName, location, propFullName + '.' + key);
  11255. if (error) {
  11256. return error;
  11257. }
  11258. }
  11259. return null;
  11260. }
  11261. return createChainableTypeChecker(validate);
  11262. }
  11263. function isNode(propValue) {
  11264. switch (typeof propValue) {
  11265. case 'number':
  11266. case 'string':
  11267. case 'undefined':
  11268. return true;
  11269. case 'boolean':
  11270. return !propValue;
  11271. case 'object':
  11272. if (Array.isArray(propValue)) {
  11273. return propValue.every(isNode);
  11274. }
  11275. if (propValue === null || ReactElement.isValidElement(propValue)) {
  11276. return true;
  11277. }
  11278. var iteratorFn = getIteratorFn(propValue);
  11279. if (iteratorFn) {
  11280. var iterator = iteratorFn.call(propValue);
  11281. var step;
  11282. if (iteratorFn !== propValue.entries) {
  11283. while (!(step = iterator.next()).done) {
  11284. if (!isNode(step.value)) {
  11285. return false;
  11286. }
  11287. }
  11288. } else {
  11289. // Iterator will provide entry [k,v] tuples rather than values.
  11290. while (!(step = iterator.next()).done) {
  11291. var entry = step.value;
  11292. if (entry) {
  11293. if (!isNode(entry[1])) {
  11294. return false;
  11295. }
  11296. }
  11297. }
  11298. }
  11299. } else {
  11300. return false;
  11301. }
  11302. return true;
  11303. default:
  11304. return false;
  11305. }
  11306. }
  11307. // Equivalent of `typeof` but with special handling for array and regexp.
  11308. function getPropType(propValue) {
  11309. var propType = typeof propValue;
  11310. if (Array.isArray(propValue)) {
  11311. return 'array';
  11312. }
  11313. if (propValue instanceof RegExp) {
  11314. // Old webkits (at least until Android 4.0) return 'function' rather than
  11315. // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
  11316. // passes PropTypes.object.
  11317. return 'object';
  11318. }
  11319. return propType;
  11320. }
  11321. // This handles more types than `getPropType`. Only used for error messages.
  11322. // See `createPrimitiveTypeChecker`.
  11323. function getPreciseType(propValue) {
  11324. var propType = getPropType(propValue);
  11325. if (propType === 'object') {
  11326. if (propValue instanceof Date) {
  11327. return 'date';
  11328. } else if (propValue instanceof RegExp) {
  11329. return 'regexp';
  11330. }
  11331. }
  11332. return propType;
  11333. }
  11334. // Returns class name of the object, if any.
  11335. function getClassName(propValue) {
  11336. if (!propValue.constructor || !propValue.constructor.name) {
  11337. return '<<anonymous>>';
  11338. }
  11339. return propValue.constructor.name;
  11340. }
  11341. module.exports = ReactPropTypes;
  11342. /***/ },
  11343. /* 108 */
  11344. /***/ function(module, exports) {
  11345. /**
  11346. * Copyright 2013-2015, Facebook, Inc.
  11347. * All rights reserved.
  11348. *
  11349. * This source code is licensed under the BSD-style license found in the
  11350. * LICENSE file in the root directory of this source tree. An additional grant
  11351. * of patent rights can be found in the PATENTS file in the same directory.
  11352. *
  11353. * @providesModule getIteratorFn
  11354. * @typechecks static-only
  11355. */
  11356. 'use strict';
  11357. /* global Symbol */
  11358. var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
  11359. var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
  11360. /**
  11361. * Returns the iterator method function contained on the iterable object.
  11362. *
  11363. * Be sure to invoke the function with the iterable as context:
  11364. *
  11365. * var iteratorFn = getIteratorFn(myIterable);
  11366. * if (iteratorFn) {
  11367. * var iterator = iteratorFn.call(myIterable);
  11368. * ...
  11369. * }
  11370. *
  11371. * @param {?object} maybeIterable
  11372. * @return {?function}
  11373. */
  11374. function getIteratorFn(maybeIterable) {
  11375. var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
  11376. if (typeof iteratorFn === 'function') {
  11377. return iteratorFn;
  11378. }
  11379. }
  11380. module.exports = getIteratorFn;
  11381. /***/ },
  11382. /* 109 */
  11383. /***/ function(module, exports, __webpack_require__) {
  11384. /* WEBPACK VAR INJECTION */(function(process) {/**
  11385. * Copyright 2013-2015, Facebook, Inc.
  11386. * All rights reserved.
  11387. *
  11388. * This source code is licensed under the BSD-style license found in the
  11389. * LICENSE file in the root directory of this source tree. An additional grant
  11390. * of patent rights can be found in the PATENTS file in the same directory.
  11391. *
  11392. * @providesModule ReactDOMOption
  11393. */
  11394. 'use strict';
  11395. var ReactChildren = __webpack_require__(110);
  11396. var ReactDOMSelect = __webpack_require__(112);
  11397. var assign = __webpack_require__(39);
  11398. var warning = __webpack_require__(25);
  11399. var valueContextKey = ReactDOMSelect.valueContextKey;
  11400. /**
  11401. * Implements an <option> native component that warns when `selected` is set.
  11402. */
  11403. var ReactDOMOption = {
  11404. mountWrapper: function (inst, props, context) {
  11405. // TODO (yungsters): Remove support for `selected` in <option>.
  11406. if (process.env.NODE_ENV !== 'production') {
  11407. process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined;
  11408. }
  11409. // Look up whether this option is 'selected' via context
  11410. var selectValue = context[valueContextKey];
  11411. // If context key is null (e.g., no specified value or after initial mount)
  11412. // or missing (e.g., for <datalist>), we don't change props.selected
  11413. var selected = null;
  11414. if (selectValue != null) {
  11415. selected = false;
  11416. if (Array.isArray(selectValue)) {
  11417. // multiple
  11418. for (var i = 0; i < selectValue.length; i++) {
  11419. if ('' + selectValue[i] === '' + props.value) {
  11420. selected = true;
  11421. break;
  11422. }
  11423. }
  11424. } else {
  11425. selected = '' + selectValue === '' + props.value;
  11426. }
  11427. }
  11428. inst._wrapperState = { selected: selected };
  11429. },
  11430. getNativeProps: function (inst, props, context) {
  11431. var nativeProps = assign({ selected: undefined, children: undefined }, props);
  11432. // Read state only from initial mount because <select> updates value
  11433. // manually; we need the initial state only for server rendering
  11434. if (inst._wrapperState.selected != null) {
  11435. nativeProps.selected = inst._wrapperState.selected;
  11436. }
  11437. var content = '';
  11438. // Flatten children and warn if they aren't strings or numbers;
  11439. // invalid types are ignored.
  11440. ReactChildren.forEach(props.children, function (child) {
  11441. if (child == null) {
  11442. return;
  11443. }
  11444. if (typeof child === 'string' || typeof child === 'number') {
  11445. content += child;
  11446. } else {
  11447. process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined;
  11448. }
  11449. });
  11450. if (content) {
  11451. nativeProps.children = content;
  11452. }
  11453. return nativeProps;
  11454. }
  11455. };
  11456. module.exports = ReactDOMOption;
  11457. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  11458. /***/ },
  11459. /* 110 */
  11460. /***/ function(module, exports, __webpack_require__) {
  11461. /**
  11462. * Copyright 2013-2015, Facebook, Inc.
  11463. * All rights reserved.
  11464. *
  11465. * This source code is licensed under the BSD-style license found in the
  11466. * LICENSE file in the root directory of this source tree. An additional grant
  11467. * of patent rights can be found in the PATENTS file in the same directory.
  11468. *
  11469. * @providesModule ReactChildren
  11470. */
  11471. 'use strict';
  11472. var PooledClass = __webpack_require__(56);
  11473. var ReactElement = __webpack_require__(42);
  11474. var emptyFunction = __webpack_require__(15);
  11475. var traverseAllChildren = __webpack_require__(111);
  11476. var twoArgumentPooler = PooledClass.twoArgumentPooler;
  11477. var fourArgumentPooler = PooledClass.fourArgumentPooler;
  11478. var userProvidedKeyEscapeRegex = /\/(?!\/)/g;
  11479. function escapeUserProvidedKey(text) {
  11480. return ('' + text).replace(userProvidedKeyEscapeRegex, '//');
  11481. }
  11482. /**
  11483. * PooledClass representing the bookkeeping associated with performing a child
  11484. * traversal. Allows avoiding binding callbacks.
  11485. *
  11486. * @constructor ForEachBookKeeping
  11487. * @param {!function} forEachFunction Function to perform traversal with.
  11488. * @param {?*} forEachContext Context to perform context with.
  11489. */
  11490. function ForEachBookKeeping(forEachFunction, forEachContext) {
  11491. this.func = forEachFunction;
  11492. this.context = forEachContext;
  11493. this.count = 0;
  11494. }
  11495. ForEachBookKeeping.prototype.destructor = function () {
  11496. this.func = null;
  11497. this.context = null;
  11498. this.count = 0;
  11499. };
  11500. PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);
  11501. function forEachSingleChild(bookKeeping, child, name) {
  11502. var func = bookKeeping.func;
  11503. var context = bookKeeping.context;
  11504. func.call(context, child, bookKeeping.count++);
  11505. }
  11506. /**
  11507. * Iterates through children that are typically specified as `props.children`.
  11508. *
  11509. * The provided forEachFunc(child, index) will be called for each
  11510. * leaf child.
  11511. *
  11512. * @param {?*} children Children tree container.
  11513. * @param {function(*, int)} forEachFunc
  11514. * @param {*} forEachContext Context for forEachContext.
  11515. */
  11516. function forEachChildren(children, forEachFunc, forEachContext) {
  11517. if (children == null) {
  11518. return children;
  11519. }
  11520. var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);
  11521. traverseAllChildren(children, forEachSingleChild, traverseContext);
  11522. ForEachBookKeeping.release(traverseContext);
  11523. }
  11524. /**
  11525. * PooledClass representing the bookkeeping associated with performing a child
  11526. * mapping. Allows avoiding binding callbacks.
  11527. *
  11528. * @constructor MapBookKeeping
  11529. * @param {!*} mapResult Object containing the ordered map of results.
  11530. * @param {!function} mapFunction Function to perform mapping with.
  11531. * @param {?*} mapContext Context to perform mapping with.
  11532. */
  11533. function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {
  11534. this.result = mapResult;
  11535. this.keyPrefix = keyPrefix;
  11536. this.func = mapFunction;
  11537. this.context = mapContext;
  11538. this.count = 0;
  11539. }
  11540. MapBookKeeping.prototype.destructor = function () {
  11541. this.result = null;
  11542. this.keyPrefix = null;
  11543. this.func = null;
  11544. this.context = null;
  11545. this.count = 0;
  11546. };
  11547. PooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);
  11548. function mapSingleChildIntoContext(bookKeeping, child, childKey) {
  11549. var result = bookKeeping.result;
  11550. var keyPrefix = bookKeeping.keyPrefix;
  11551. var func = bookKeeping.func;
  11552. var context = bookKeeping.context;
  11553. var mappedChild = func.call(context, child, bookKeeping.count++);
  11554. if (Array.isArray(mappedChild)) {
  11555. mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);
  11556. } else if (mappedChild != null) {
  11557. if (ReactElement.isValidElement(mappedChild)) {
  11558. mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,
  11559. // Keep both the (mapped) and old keys if they differ, just as
  11560. // traverseAllChildren used to do for objects as children
  11561. keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey);
  11562. }
  11563. result.push(mappedChild);
  11564. }
  11565. }
  11566. function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
  11567. var escapedPrefix = '';
  11568. if (prefix != null) {
  11569. escapedPrefix = escapeUserProvidedKey(prefix) + '/';
  11570. }
  11571. var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);
  11572. traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
  11573. MapBookKeeping.release(traverseContext);
  11574. }
  11575. /**
  11576. * Maps children that are typically specified as `props.children`.
  11577. *
  11578. * The provided mapFunction(child, key, index) will be called for each
  11579. * leaf child.
  11580. *
  11581. * @param {?*} children Children tree container.
  11582. * @param {function(*, int)} func The map function.
  11583. * @param {*} context Context for mapFunction.
  11584. * @return {object} Object containing the ordered map of results.
  11585. */
  11586. function mapChildren(children, func, context) {
  11587. if (children == null) {
  11588. return children;
  11589. }
  11590. var result = [];
  11591. mapIntoWithKeyPrefixInternal(children, result, null, func, context);
  11592. return result;
  11593. }
  11594. function forEachSingleChildDummy(traverseContext, child, name) {
  11595. return null;
  11596. }
  11597. /**
  11598. * Count the number of children that are typically specified as
  11599. * `props.children`.
  11600. *
  11601. * @param {?*} children Children tree container.
  11602. * @return {number} The number of children.
  11603. */
  11604. function countChildren(children, context) {
  11605. return traverseAllChildren(children, forEachSingleChildDummy, null);
  11606. }
  11607. /**
  11608. * Flatten a children object (typically specified as `props.children`) and
  11609. * return an array with appropriately re-keyed children.
  11610. */
  11611. function toArray(children) {
  11612. var result = [];
  11613. mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);
  11614. return result;
  11615. }
  11616. var ReactChildren = {
  11617. forEach: forEachChildren,
  11618. map: mapChildren,
  11619. mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,
  11620. count: countChildren,
  11621. toArray: toArray
  11622. };
  11623. module.exports = ReactChildren;
  11624. /***/ },
  11625. /* 111 */
  11626. /***/ function(module, exports, __webpack_require__) {
  11627. /* WEBPACK VAR INJECTION */(function(process) {/**
  11628. * Copyright 2013-2015, Facebook, Inc.
  11629. * All rights reserved.
  11630. *
  11631. * This source code is licensed under the BSD-style license found in the
  11632. * LICENSE file in the root directory of this source tree. An additional grant
  11633. * of patent rights can be found in the PATENTS file in the same directory.
  11634. *
  11635. * @providesModule traverseAllChildren
  11636. */
  11637. 'use strict';
  11638. var ReactCurrentOwner = __webpack_require__(5);
  11639. var ReactElement = __webpack_require__(42);
  11640. var ReactInstanceHandles = __webpack_require__(45);
  11641. var getIteratorFn = __webpack_require__(108);
  11642. var invariant = __webpack_require__(13);
  11643. var warning = __webpack_require__(25);
  11644. var SEPARATOR = ReactInstanceHandles.SEPARATOR;
  11645. var SUBSEPARATOR = ':';
  11646. /**
  11647. * TODO: Test that a single child and an array with one item have the same key
  11648. * pattern.
  11649. */
  11650. var userProvidedKeyEscaperLookup = {
  11651. '=': '=0',
  11652. '.': '=1',
  11653. ':': '=2'
  11654. };
  11655. var userProvidedKeyEscapeRegex = /[=.:]/g;
  11656. var didWarnAboutMaps = false;
  11657. function userProvidedKeyEscaper(match) {
  11658. return userProvidedKeyEscaperLookup[match];
  11659. }
  11660. /**
  11661. * Generate a key string that identifies a component within a set.
  11662. *
  11663. * @param {*} component A component that could contain a manual key.
  11664. * @param {number} index Index that is used if a manual key is not provided.
  11665. * @return {string}
  11666. */
  11667. function getComponentKey(component, index) {
  11668. if (component && component.key != null) {
  11669. // Explicit key
  11670. return wrapUserProvidedKey(component.key);
  11671. }
  11672. // Implicit key determined by the index in the set
  11673. return index.toString(36);
  11674. }
  11675. /**
  11676. * Escape a component key so that it is safe to use in a reactid.
  11677. *
  11678. * @param {*} text Component key to be escaped.
  11679. * @return {string} An escaped string.
  11680. */
  11681. function escapeUserProvidedKey(text) {
  11682. return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);
  11683. }
  11684. /**
  11685. * Wrap a `key` value explicitly provided by the user to distinguish it from
  11686. * implicitly-generated keys generated by a component's index in its parent.
  11687. *
  11688. * @param {string} key Value of a user-provided `key` attribute
  11689. * @return {string}
  11690. */
  11691. function wrapUserProvidedKey(key) {
  11692. return '$' + escapeUserProvidedKey(key);
  11693. }
  11694. /**
  11695. * @param {?*} children Children tree container.
  11696. * @param {!string} nameSoFar Name of the key path so far.
  11697. * @param {!function} callback Callback to invoke with each child found.
  11698. * @param {?*} traverseContext Used to pass information throughout the traversal
  11699. * process.
  11700. * @return {!number} The number of children in this subtree.
  11701. */
  11702. function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
  11703. var type = typeof children;
  11704. if (type === 'undefined' || type === 'boolean') {
  11705. // All of the above are perceived as null.
  11706. children = null;
  11707. }
  11708. if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {
  11709. callback(traverseContext, children,
  11710. // If it's the only child, treat the name as if it was wrapped in an array
  11711. // so that it's consistent if the number of children grows.
  11712. nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
  11713. return 1;
  11714. }
  11715. var child;
  11716. var nextName;
  11717. var subtreeCount = 0; // Count of children found in the current subtree.
  11718. var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
  11719. if (Array.isArray(children)) {
  11720. for (var i = 0; i < children.length; i++) {
  11721. child = children[i];
  11722. nextName = nextNamePrefix + getComponentKey(child, i);
  11723. subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
  11724. }
  11725. } else {
  11726. var iteratorFn = getIteratorFn(children);
  11727. if (iteratorFn) {
  11728. var iterator = iteratorFn.call(children);
  11729. var step;
  11730. if (iteratorFn !== children.entries) {
  11731. var ii = 0;
  11732. while (!(step = iterator.next()).done) {
  11733. child = step.value;
  11734. nextName = nextNamePrefix + getComponentKey(child, ii++);
  11735. subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
  11736. }
  11737. } else {
  11738. if (process.env.NODE_ENV !== 'production') {
  11739. process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined;
  11740. didWarnAboutMaps = true;
  11741. }
  11742. // Iterator will provide entry [k,v] tuples rather than values.
  11743. while (!(step = iterator.next()).done) {
  11744. var entry = step.value;
  11745. if (entry) {
  11746. child = entry[1];
  11747. nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);
  11748. subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
  11749. }
  11750. }
  11751. }
  11752. } else if (type === 'object') {
  11753. var addendum = '';
  11754. if (process.env.NODE_ENV !== 'production') {
  11755. addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';
  11756. if (children._isReactElement) {
  11757. addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';
  11758. }
  11759. if (ReactCurrentOwner.current) {
  11760. var name = ReactCurrentOwner.current.getName();
  11761. if (name) {
  11762. addendum += ' Check the render method of `' + name + '`.';
  11763. }
  11764. }
  11765. }
  11766. var childrenString = String(children);
  11767. true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined;
  11768. }
  11769. }
  11770. return subtreeCount;
  11771. }
  11772. /**
  11773. * Traverses children that are typically specified as `props.children`, but
  11774. * might also be specified through attributes:
  11775. *
  11776. * - `traverseAllChildren(this.props.children, ...)`
  11777. * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
  11778. *
  11779. * The `traverseContext` is an optional argument that is passed through the
  11780. * entire traversal. It can be used to store accumulations or anything else that
  11781. * the callback might find relevant.
  11782. *
  11783. * @param {?*} children Children tree object.
  11784. * @param {!function} callback To invoke upon traversing each child.
  11785. * @param {?*} traverseContext Context for traversal.
  11786. * @return {!number} The number of children in this subtree.
  11787. */
  11788. function traverseAllChildren(children, callback, traverseContext) {
  11789. if (children == null) {
  11790. return 0;
  11791. }
  11792. return traverseAllChildrenImpl(children, '', callback, traverseContext);
  11793. }
  11794. module.exports = traverseAllChildren;
  11795. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  11796. /***/ },
  11797. /* 112 */
  11798. /***/ function(module, exports, __webpack_require__) {
  11799. /* WEBPACK VAR INJECTION */(function(process) {/**
  11800. * Copyright 2013-2015, Facebook, Inc.
  11801. * All rights reserved.
  11802. *
  11803. * This source code is licensed under the BSD-style license found in the
  11804. * LICENSE file in the root directory of this source tree. An additional grant
  11805. * of patent rights can be found in the PATENTS file in the same directory.
  11806. *
  11807. * @providesModule ReactDOMSelect
  11808. */
  11809. 'use strict';
  11810. var LinkedValueUtils = __webpack_require__(106);
  11811. var ReactMount = __webpack_require__(28);
  11812. var ReactUpdates = __webpack_require__(54);
  11813. var assign = __webpack_require__(39);
  11814. var warning = __webpack_require__(25);
  11815. var valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);
  11816. function updateOptionsIfPendingUpdateAndMounted() {
  11817. if (this._rootNodeID && this._wrapperState.pendingUpdate) {
  11818. this._wrapperState.pendingUpdate = false;
  11819. var props = this._currentElement.props;
  11820. var value = LinkedValueUtils.getValue(props);
  11821. if (value != null) {
  11822. updateOptions(this, Boolean(props.multiple), value);
  11823. }
  11824. }
  11825. }
  11826. function getDeclarationErrorAddendum(owner) {
  11827. if (owner) {
  11828. var name = owner.getName();
  11829. if (name) {
  11830. return ' Check the render method of `' + name + '`.';
  11831. }
  11832. }
  11833. return '';
  11834. }
  11835. var valuePropNames = ['value', 'defaultValue'];
  11836. /**
  11837. * Validation function for `value` and `defaultValue`.
  11838. * @private
  11839. */
  11840. function checkSelectPropTypes(inst, props) {
  11841. var owner = inst._currentElement._owner;
  11842. LinkedValueUtils.checkPropTypes('select', props, owner);
  11843. for (var i = 0; i < valuePropNames.length; i++) {
  11844. var propName = valuePropNames[i];
  11845. if (props[propName] == null) {
  11846. continue;
  11847. }
  11848. if (props.multiple) {
  11849. process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;
  11850. } else {
  11851. process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;
  11852. }
  11853. }
  11854. }
  11855. /**
  11856. * @param {ReactDOMComponent} inst
  11857. * @param {boolean} multiple
  11858. * @param {*} propValue A stringable (with `multiple`, a list of stringables).
  11859. * @private
  11860. */
  11861. function updateOptions(inst, multiple, propValue) {
  11862. var selectedValue, i;
  11863. var options = ReactMount.getNode(inst._rootNodeID).options;
  11864. if (multiple) {
  11865. selectedValue = {};
  11866. for (i = 0; i < propValue.length; i++) {
  11867. selectedValue['' + propValue[i]] = true;
  11868. }
  11869. for (i = 0; i < options.length; i++) {
  11870. var selected = selectedValue.hasOwnProperty(options[i].value);
  11871. if (options[i].selected !== selected) {
  11872. options[i].selected = selected;
  11873. }
  11874. }
  11875. } else {
  11876. // Do not set `select.value` as exact behavior isn't consistent across all
  11877. // browsers for all cases.
  11878. selectedValue = '' + propValue;
  11879. for (i = 0; i < options.length; i++) {
  11880. if (options[i].value === selectedValue) {
  11881. options[i].selected = true;
  11882. return;
  11883. }
  11884. }
  11885. if (options.length) {
  11886. options[0].selected = true;
  11887. }
  11888. }
  11889. }
  11890. /**
  11891. * Implements a <select> native component that allows optionally setting the
  11892. * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
  11893. * stringable. If `multiple` is true, the prop must be an array of stringables.
  11894. *
  11895. * If `value` is not supplied (or null/undefined), user actions that change the
  11896. * selected option will trigger updates to the rendered options.
  11897. *
  11898. * If it is supplied (and not null/undefined), the rendered options will not
  11899. * update in response to user actions. Instead, the `value` prop must change in
  11900. * order for the rendered options to update.
  11901. *
  11902. * If `defaultValue` is provided, any options with the supplied values will be
  11903. * selected.
  11904. */
  11905. var ReactDOMSelect = {
  11906. valueContextKey: valueContextKey,
  11907. getNativeProps: function (inst, props, context) {
  11908. return assign({}, props, {
  11909. onChange: inst._wrapperState.onChange,
  11910. value: undefined
  11911. });
  11912. },
  11913. mountWrapper: function (inst, props) {
  11914. if (process.env.NODE_ENV !== 'production') {
  11915. checkSelectPropTypes(inst, props);
  11916. }
  11917. var value = LinkedValueUtils.getValue(props);
  11918. inst._wrapperState = {
  11919. pendingUpdate: false,
  11920. initialValue: value != null ? value : props.defaultValue,
  11921. onChange: _handleChange.bind(inst),
  11922. wasMultiple: Boolean(props.multiple)
  11923. };
  11924. },
  11925. processChildContext: function (inst, props, context) {
  11926. // Pass down initial value so initial generated markup has correct
  11927. // `selected` attributes
  11928. var childContext = assign({}, context);
  11929. childContext[valueContextKey] = inst._wrapperState.initialValue;
  11930. return childContext;
  11931. },
  11932. postUpdateWrapper: function (inst) {
  11933. var props = inst._currentElement.props;
  11934. // After the initial mount, we control selected-ness manually so don't pass
  11935. // the context value down
  11936. inst._wrapperState.initialValue = undefined;
  11937. var wasMultiple = inst._wrapperState.wasMultiple;
  11938. inst._wrapperState.wasMultiple = Boolean(props.multiple);
  11939. var value = LinkedValueUtils.getValue(props);
  11940. if (value != null) {
  11941. inst._wrapperState.pendingUpdate = false;
  11942. updateOptions(inst, Boolean(props.multiple), value);
  11943. } else if (wasMultiple !== Boolean(props.multiple)) {
  11944. // For simplicity, reapply `defaultValue` if `multiple` is toggled.
  11945. if (props.defaultValue != null) {
  11946. updateOptions(inst, Boolean(props.multiple), props.defaultValue);
  11947. } else {
  11948. // Revert the select back to its default unselected state.
  11949. updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');
  11950. }
  11951. }
  11952. }
  11953. };
  11954. function _handleChange(event) {
  11955. var props = this._currentElement.props;
  11956. var returnValue = LinkedValueUtils.executeOnChange(props, event);
  11957. this._wrapperState.pendingUpdate = true;
  11958. ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);
  11959. return returnValue;
  11960. }
  11961. module.exports = ReactDOMSelect;
  11962. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  11963. /***/ },
  11964. /* 113 */
  11965. /***/ function(module, exports, __webpack_require__) {
  11966. /* WEBPACK VAR INJECTION */(function(process) {/**
  11967. * Copyright 2013-2015, Facebook, Inc.
  11968. * All rights reserved.
  11969. *
  11970. * This source code is licensed under the BSD-style license found in the
  11971. * LICENSE file in the root directory of this source tree. An additional grant
  11972. * of patent rights can be found in the PATENTS file in the same directory.
  11973. *
  11974. * @providesModule ReactDOMTextarea
  11975. */
  11976. 'use strict';
  11977. var LinkedValueUtils = __webpack_require__(106);
  11978. var ReactDOMIDOperations = __webpack_require__(27);
  11979. var ReactUpdates = __webpack_require__(54);
  11980. var assign = __webpack_require__(39);
  11981. var invariant = __webpack_require__(13);
  11982. var warning = __webpack_require__(25);
  11983. function forceUpdateIfMounted() {
  11984. if (this._rootNodeID) {
  11985. // DOM component is still mounted; update
  11986. ReactDOMTextarea.updateWrapper(this);
  11987. }
  11988. }
  11989. /**
  11990. * Implements a <textarea> native component that allows setting `value`, and
  11991. * `defaultValue`. This differs from the traditional DOM API because value is
  11992. * usually set as PCDATA children.
  11993. *
  11994. * If `value` is not supplied (or null/undefined), user actions that affect the
  11995. * value will trigger updates to the element.
  11996. *
  11997. * If `value` is supplied (and not null/undefined), the rendered element will
  11998. * not trigger updates to the element. Instead, the `value` prop must change in
  11999. * order for the rendered element to be updated.
  12000. *
  12001. * The rendered element will be initialized with an empty value, the prop
  12002. * `defaultValue` if specified, or the children content (deprecated).
  12003. */
  12004. var ReactDOMTextarea = {
  12005. getNativeProps: function (inst, props, context) {
  12006. !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;
  12007. // Always set children to the same thing. In IE9, the selection range will
  12008. // get reset if `textContent` is mutated.
  12009. var nativeProps = assign({}, props, {
  12010. defaultValue: undefined,
  12011. value: undefined,
  12012. children: inst._wrapperState.initialValue,
  12013. onChange: inst._wrapperState.onChange
  12014. });
  12015. return nativeProps;
  12016. },
  12017. mountWrapper: function (inst, props) {
  12018. if (process.env.NODE_ENV !== 'production') {
  12019. LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);
  12020. }
  12021. var defaultValue = props.defaultValue;
  12022. // TODO (yungsters): Remove support for children content in <textarea>.
  12023. var children = props.children;
  12024. if (children != null) {
  12025. if (process.env.NODE_ENV !== 'production') {
  12026. process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;
  12027. }
  12028. !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;
  12029. if (Array.isArray(children)) {
  12030. !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;
  12031. children = children[0];
  12032. }
  12033. defaultValue = '' + children;
  12034. }
  12035. if (defaultValue == null) {
  12036. defaultValue = '';
  12037. }
  12038. var value = LinkedValueUtils.getValue(props);
  12039. inst._wrapperState = {
  12040. // We save the initial value so that `ReactDOMComponent` doesn't update
  12041. // `textContent` (unnecessary since we update value).
  12042. // The initial value can be a boolean or object so that's why it's
  12043. // forced to be a string.
  12044. initialValue: '' + (value != null ? value : defaultValue),
  12045. onChange: _handleChange.bind(inst)
  12046. };
  12047. },
  12048. updateWrapper: function (inst) {
  12049. var props = inst._currentElement.props;
  12050. var value = LinkedValueUtils.getValue(props);
  12051. if (value != null) {
  12052. // Cast `value` to a string to ensure the value is set correctly. While
  12053. // browsers typically do this as necessary, jsdom doesn't.
  12054. ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);
  12055. }
  12056. }
  12057. };
  12058. function _handleChange(event) {
  12059. var props = this._currentElement.props;
  12060. var returnValue = LinkedValueUtils.executeOnChange(props, event);
  12061. ReactUpdates.asap(forceUpdateIfMounted, this);
  12062. return returnValue;
  12063. }
  12064. module.exports = ReactDOMTextarea;
  12065. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  12066. /***/ },
  12067. /* 114 */
  12068. /***/ function(module, exports, __webpack_require__) {
  12069. /* WEBPACK VAR INJECTION */(function(process) {/**
  12070. * Copyright 2013-2015, Facebook, Inc.
  12071. * All rights reserved.
  12072. *
  12073. * This source code is licensed under the BSD-style license found in the
  12074. * LICENSE file in the root directory of this source tree. An additional grant
  12075. * of patent rights can be found in the PATENTS file in the same directory.
  12076. *
  12077. * @providesModule ReactMultiChild
  12078. * @typechecks static-only
  12079. */
  12080. 'use strict';
  12081. var ReactComponentEnvironment = __webpack_require__(64);
  12082. var ReactMultiChildUpdateTypes = __webpack_require__(16);
  12083. var ReactCurrentOwner = __webpack_require__(5);
  12084. var ReactReconciler = __webpack_require__(50);
  12085. var ReactChildReconciler = __webpack_require__(115);
  12086. var flattenChildren = __webpack_require__(116);
  12087. /**
  12088. * Updating children of a component may trigger recursive updates. The depth is
  12089. * used to batch recursive updates to render markup more efficiently.
  12090. *
  12091. * @type {number}
  12092. * @private
  12093. */
  12094. var updateDepth = 0;
  12095. /**
  12096. * Queue of update configuration objects.
  12097. *
  12098. * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.
  12099. *
  12100. * @type {array<object>}
  12101. * @private
  12102. */
  12103. var updateQueue = [];
  12104. /**
  12105. * Queue of markup to be rendered.
  12106. *
  12107. * @type {array<string>}
  12108. * @private
  12109. */
  12110. var markupQueue = [];
  12111. /**
  12112. * Enqueues markup to be rendered and inserted at a supplied index.
  12113. *
  12114. * @param {string} parentID ID of the parent component.
  12115. * @param {string} markup Markup that renders into an element.
  12116. * @param {number} toIndex Destination index.
  12117. * @private
  12118. */
  12119. function enqueueInsertMarkup(parentID, markup, toIndex) {
  12120. // NOTE: Null values reduce hidden classes.
  12121. updateQueue.push({
  12122. parentID: parentID,
  12123. parentNode: null,
  12124. type: ReactMultiChildUpdateTypes.INSERT_MARKUP,
  12125. markupIndex: markupQueue.push(markup) - 1,
  12126. content: null,
  12127. fromIndex: null,
  12128. toIndex: toIndex
  12129. });
  12130. }
  12131. /**
  12132. * Enqueues moving an existing element to another index.
  12133. *
  12134. * @param {string} parentID ID of the parent component.
  12135. * @param {number} fromIndex Source index of the existing element.
  12136. * @param {number} toIndex Destination index of the element.
  12137. * @private
  12138. */
  12139. function enqueueMove(parentID, fromIndex, toIndex) {
  12140. // NOTE: Null values reduce hidden classes.
  12141. updateQueue.push({
  12142. parentID: parentID,
  12143. parentNode: null,
  12144. type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
  12145. markupIndex: null,
  12146. content: null,
  12147. fromIndex: fromIndex,
  12148. toIndex: toIndex
  12149. });
  12150. }
  12151. /**
  12152. * Enqueues removing an element at an index.
  12153. *
  12154. * @param {string} parentID ID of the parent component.
  12155. * @param {number} fromIndex Index of the element to remove.
  12156. * @private
  12157. */
  12158. function enqueueRemove(parentID, fromIndex) {
  12159. // NOTE: Null values reduce hidden classes.
  12160. updateQueue.push({
  12161. parentID: parentID,
  12162. parentNode: null,
  12163. type: ReactMultiChildUpdateTypes.REMOVE_NODE,
  12164. markupIndex: null,
  12165. content: null,
  12166. fromIndex: fromIndex,
  12167. toIndex: null
  12168. });
  12169. }
  12170. /**
  12171. * Enqueues setting the markup of a node.
  12172. *
  12173. * @param {string} parentID ID of the parent component.
  12174. * @param {string} markup Markup that renders into an element.
  12175. * @private
  12176. */
  12177. function enqueueSetMarkup(parentID, markup) {
  12178. // NOTE: Null values reduce hidden classes.
  12179. updateQueue.push({
  12180. parentID: parentID,
  12181. parentNode: null,
  12182. type: ReactMultiChildUpdateTypes.SET_MARKUP,
  12183. markupIndex: null,
  12184. content: markup,
  12185. fromIndex: null,
  12186. toIndex: null
  12187. });
  12188. }
  12189. /**
  12190. * Enqueues setting the text content.
  12191. *
  12192. * @param {string} parentID ID of the parent component.
  12193. * @param {string} textContent Text content to set.
  12194. * @private
  12195. */
  12196. function enqueueTextContent(parentID, textContent) {
  12197. // NOTE: Null values reduce hidden classes.
  12198. updateQueue.push({
  12199. parentID: parentID,
  12200. parentNode: null,
  12201. type: ReactMultiChildUpdateTypes.TEXT_CONTENT,
  12202. markupIndex: null,
  12203. content: textContent,
  12204. fromIndex: null,
  12205. toIndex: null
  12206. });
  12207. }
  12208. /**
  12209. * Processes any enqueued updates.
  12210. *
  12211. * @private
  12212. */
  12213. function processQueue() {
  12214. if (updateQueue.length) {
  12215. ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue);
  12216. clearQueue();
  12217. }
  12218. }
  12219. /**
  12220. * Clears any enqueued updates.
  12221. *
  12222. * @private
  12223. */
  12224. function clearQueue() {
  12225. updateQueue.length = 0;
  12226. markupQueue.length = 0;
  12227. }
  12228. /**
  12229. * ReactMultiChild are capable of reconciling multiple children.
  12230. *
  12231. * @class ReactMultiChild
  12232. * @internal
  12233. */
  12234. var ReactMultiChild = {
  12235. /**
  12236. * Provides common functionality for components that must reconcile multiple
  12237. * children. This is used by `ReactDOMComponent` to mount, update, and
  12238. * unmount child components.
  12239. *
  12240. * @lends {ReactMultiChild.prototype}
  12241. */
  12242. Mixin: {
  12243. _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {
  12244. if (process.env.NODE_ENV !== 'production') {
  12245. if (this._currentElement) {
  12246. try {
  12247. ReactCurrentOwner.current = this._currentElement._owner;
  12248. return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
  12249. } finally {
  12250. ReactCurrentOwner.current = null;
  12251. }
  12252. }
  12253. }
  12254. return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
  12255. },
  12256. _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) {
  12257. var nextChildren;
  12258. if (process.env.NODE_ENV !== 'production') {
  12259. if (this._currentElement) {
  12260. try {
  12261. ReactCurrentOwner.current = this._currentElement._owner;
  12262. nextChildren = flattenChildren(nextNestedChildrenElements);
  12263. } finally {
  12264. ReactCurrentOwner.current = null;
  12265. }
  12266. return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);
  12267. }
  12268. }
  12269. nextChildren = flattenChildren(nextNestedChildrenElements);
  12270. return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);
  12271. },
  12272. /**
  12273. * Generates a "mount image" for each of the supplied children. In the case
  12274. * of `ReactDOMComponent`, a mount image is a string of markup.
  12275. *
  12276. * @param {?object} nestedChildren Nested child maps.
  12277. * @return {array} An array of mounted representations.
  12278. * @internal
  12279. */
  12280. mountChildren: function (nestedChildren, transaction, context) {
  12281. var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);
  12282. this._renderedChildren = children;
  12283. var mountImages = [];
  12284. var index = 0;
  12285. for (var name in children) {
  12286. if (children.hasOwnProperty(name)) {
  12287. var child = children[name];
  12288. // Inlined for performance, see `ReactInstanceHandles.createReactID`.
  12289. var rootID = this._rootNodeID + name;
  12290. var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);
  12291. child._mountIndex = index++;
  12292. mountImages.push(mountImage);
  12293. }
  12294. }
  12295. return mountImages;
  12296. },
  12297. /**
  12298. * Replaces any rendered children with a text content string.
  12299. *
  12300. * @param {string} nextContent String of content.
  12301. * @internal
  12302. */
  12303. updateTextContent: function (nextContent) {
  12304. updateDepth++;
  12305. var errorThrown = true;
  12306. try {
  12307. var prevChildren = this._renderedChildren;
  12308. // Remove any rendered children.
  12309. ReactChildReconciler.unmountChildren(prevChildren);
  12310. // TODO: The setTextContent operation should be enough
  12311. for (var name in prevChildren) {
  12312. if (prevChildren.hasOwnProperty(name)) {
  12313. this._unmountChild(prevChildren[name]);
  12314. }
  12315. }
  12316. // Set new text content.
  12317. this.setTextContent(nextContent);
  12318. errorThrown = false;
  12319. } finally {
  12320. updateDepth--;
  12321. if (!updateDepth) {
  12322. if (errorThrown) {
  12323. clearQueue();
  12324. } else {
  12325. processQueue();
  12326. }
  12327. }
  12328. }
  12329. },
  12330. /**
  12331. * Replaces any rendered children with a markup string.
  12332. *
  12333. * @param {string} nextMarkup String of markup.
  12334. * @internal
  12335. */
  12336. updateMarkup: function (nextMarkup) {
  12337. updateDepth++;
  12338. var errorThrown = true;
  12339. try {
  12340. var prevChildren = this._renderedChildren;
  12341. // Remove any rendered children.
  12342. ReactChildReconciler.unmountChildren(prevChildren);
  12343. for (var name in prevChildren) {
  12344. if (prevChildren.hasOwnProperty(name)) {
  12345. this._unmountChildByName(prevChildren[name], name);
  12346. }
  12347. }
  12348. this.setMarkup(nextMarkup);
  12349. errorThrown = false;
  12350. } finally {
  12351. updateDepth--;
  12352. if (!updateDepth) {
  12353. if (errorThrown) {
  12354. clearQueue();
  12355. } else {
  12356. processQueue();
  12357. }
  12358. }
  12359. }
  12360. },
  12361. /**
  12362. * Updates the rendered children with new children.
  12363. *
  12364. * @param {?object} nextNestedChildrenElements Nested child element maps.
  12365. * @param {ReactReconcileTransaction} transaction
  12366. * @internal
  12367. */
  12368. updateChildren: function (nextNestedChildrenElements, transaction, context) {
  12369. updateDepth++;
  12370. var errorThrown = true;
  12371. try {
  12372. this._updateChildren(nextNestedChildrenElements, transaction, context);
  12373. errorThrown = false;
  12374. } finally {
  12375. updateDepth--;
  12376. if (!updateDepth) {
  12377. if (errorThrown) {
  12378. clearQueue();
  12379. } else {
  12380. processQueue();
  12381. }
  12382. }
  12383. }
  12384. },
  12385. /**
  12386. * Improve performance by isolating this hot code path from the try/catch
  12387. * block in `updateChildren`.
  12388. *
  12389. * @param {?object} nextNestedChildrenElements Nested child element maps.
  12390. * @param {ReactReconcileTransaction} transaction
  12391. * @final
  12392. * @protected
  12393. */
  12394. _updateChildren: function (nextNestedChildrenElements, transaction, context) {
  12395. var prevChildren = this._renderedChildren;
  12396. var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context);
  12397. this._renderedChildren = nextChildren;
  12398. if (!nextChildren && !prevChildren) {
  12399. return;
  12400. }
  12401. var name;
  12402. // `nextIndex` will increment for each child in `nextChildren`, but
  12403. // `lastIndex` will be the last index visited in `prevChildren`.
  12404. var lastIndex = 0;
  12405. var nextIndex = 0;
  12406. for (name in nextChildren) {
  12407. if (!nextChildren.hasOwnProperty(name)) {
  12408. continue;
  12409. }
  12410. var prevChild = prevChildren && prevChildren[name];
  12411. var nextChild = nextChildren[name];
  12412. if (prevChild === nextChild) {
  12413. this.moveChild(prevChild, nextIndex, lastIndex);
  12414. lastIndex = Math.max(prevChild._mountIndex, lastIndex);
  12415. prevChild._mountIndex = nextIndex;
  12416. } else {
  12417. if (prevChild) {
  12418. // Update `lastIndex` before `_mountIndex` gets unset by unmounting.
  12419. lastIndex = Math.max(prevChild._mountIndex, lastIndex);
  12420. this._unmountChild(prevChild);
  12421. }
  12422. // The child must be instantiated before it's mounted.
  12423. this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context);
  12424. }
  12425. nextIndex++;
  12426. }
  12427. // Remove children that are no longer present.
  12428. for (name in prevChildren) {
  12429. if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
  12430. this._unmountChild(prevChildren[name]);
  12431. }
  12432. }
  12433. },
  12434. /**
  12435. * Unmounts all rendered children. This should be used to clean up children
  12436. * when this component is unmounted.
  12437. *
  12438. * @internal
  12439. */
  12440. unmountChildren: function () {
  12441. var renderedChildren = this._renderedChildren;
  12442. ReactChildReconciler.unmountChildren(renderedChildren);
  12443. this._renderedChildren = null;
  12444. },
  12445. /**
  12446. * Moves a child component to the supplied index.
  12447. *
  12448. * @param {ReactComponent} child Component to move.
  12449. * @param {number} toIndex Destination index of the element.
  12450. * @param {number} lastIndex Last index visited of the siblings of `child`.
  12451. * @protected
  12452. */
  12453. moveChild: function (child, toIndex, lastIndex) {
  12454. // If the index of `child` is less than `lastIndex`, then it needs to
  12455. // be moved. Otherwise, we do not need to move it because a child will be
  12456. // inserted or moved before `child`.
  12457. if (child._mountIndex < lastIndex) {
  12458. enqueueMove(this._rootNodeID, child._mountIndex, toIndex);
  12459. }
  12460. },
  12461. /**
  12462. * Creates a child component.
  12463. *
  12464. * @param {ReactComponent} child Component to create.
  12465. * @param {string} mountImage Markup to insert.
  12466. * @protected
  12467. */
  12468. createChild: function (child, mountImage) {
  12469. enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex);
  12470. },
  12471. /**
  12472. * Removes a child component.
  12473. *
  12474. * @param {ReactComponent} child Child to remove.
  12475. * @protected
  12476. */
  12477. removeChild: function (child) {
  12478. enqueueRemove(this._rootNodeID, child._mountIndex);
  12479. },
  12480. /**
  12481. * Sets this text content string.
  12482. *
  12483. * @param {string} textContent Text content to set.
  12484. * @protected
  12485. */
  12486. setTextContent: function (textContent) {
  12487. enqueueTextContent(this._rootNodeID, textContent);
  12488. },
  12489. /**
  12490. * Sets this markup string.
  12491. *
  12492. * @param {string} markup Markup to set.
  12493. * @protected
  12494. */
  12495. setMarkup: function (markup) {
  12496. enqueueSetMarkup(this._rootNodeID, markup);
  12497. },
  12498. /**
  12499. * Mounts a child with the supplied name.
  12500. *
  12501. * NOTE: This is part of `updateChildren` and is here for readability.
  12502. *
  12503. * @param {ReactComponent} child Component to mount.
  12504. * @param {string} name Name of the child.
  12505. * @param {number} index Index at which to insert the child.
  12506. * @param {ReactReconcileTransaction} transaction
  12507. * @private
  12508. */
  12509. _mountChildByNameAtIndex: function (child, name, index, transaction, context) {
  12510. // Inlined for performance, see `ReactInstanceHandles.createReactID`.
  12511. var rootID = this._rootNodeID + name;
  12512. var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);
  12513. child._mountIndex = index;
  12514. this.createChild(child, mountImage);
  12515. },
  12516. /**
  12517. * Unmounts a rendered child.
  12518. *
  12519. * NOTE: This is part of `updateChildren` and is here for readability.
  12520. *
  12521. * @param {ReactComponent} child Component to unmount.
  12522. * @private
  12523. */
  12524. _unmountChild: function (child) {
  12525. this.removeChild(child);
  12526. child._mountIndex = null;
  12527. }
  12528. }
  12529. };
  12530. module.exports = ReactMultiChild;
  12531. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  12532. /***/ },
  12533. /* 115 */
  12534. /***/ function(module, exports, __webpack_require__) {
  12535. /* WEBPACK VAR INJECTION */(function(process) {/**
  12536. * Copyright 2014-2015, Facebook, Inc.
  12537. * All rights reserved.
  12538. *
  12539. * This source code is licensed under the BSD-style license found in the
  12540. * LICENSE file in the root directory of this source tree. An additional grant
  12541. * of patent rights can be found in the PATENTS file in the same directory.
  12542. *
  12543. * @providesModule ReactChildReconciler
  12544. * @typechecks static-only
  12545. */
  12546. 'use strict';
  12547. var ReactReconciler = __webpack_require__(50);
  12548. var instantiateReactComponent = __webpack_require__(62);
  12549. var shouldUpdateReactComponent = __webpack_require__(67);
  12550. var traverseAllChildren = __webpack_require__(111);
  12551. var warning = __webpack_require__(25);
  12552. function instantiateChild(childInstances, child, name) {
  12553. // We found a component instance.
  12554. var keyUnique = childInstances[name] === undefined;
  12555. if (process.env.NODE_ENV !== 'production') {
  12556. process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;
  12557. }
  12558. if (child != null && keyUnique) {
  12559. childInstances[name] = instantiateReactComponent(child, null);
  12560. }
  12561. }
  12562. /**
  12563. * ReactChildReconciler provides helpers for initializing or updating a set of
  12564. * children. Its output is suitable for passing it onto ReactMultiChild which
  12565. * does diffed reordering and insertion.
  12566. */
  12567. var ReactChildReconciler = {
  12568. /**
  12569. * Generates a "mount image" for each of the supplied children. In the case
  12570. * of `ReactDOMComponent`, a mount image is a string of markup.
  12571. *
  12572. * @param {?object} nestedChildNodes Nested child maps.
  12573. * @return {?object} A set of child instances.
  12574. * @internal
  12575. */
  12576. instantiateChildren: function (nestedChildNodes, transaction, context) {
  12577. if (nestedChildNodes == null) {
  12578. return null;
  12579. }
  12580. var childInstances = {};
  12581. traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
  12582. return childInstances;
  12583. },
  12584. /**
  12585. * Updates the rendered children and returns a new set of children.
  12586. *
  12587. * @param {?object} prevChildren Previously initialized set of children.
  12588. * @param {?object} nextChildren Flat child element maps.
  12589. * @param {ReactReconcileTransaction} transaction
  12590. * @param {object} context
  12591. * @return {?object} A new set of child instances.
  12592. * @internal
  12593. */
  12594. updateChildren: function (prevChildren, nextChildren, transaction, context) {
  12595. // We currently don't have a way to track moves here but if we use iterators
  12596. // instead of for..in we can zip the iterators and check if an item has
  12597. // moved.
  12598. // TODO: If nothing has changed, return the prevChildren object so that we
  12599. // can quickly bailout if nothing has changed.
  12600. if (!nextChildren && !prevChildren) {
  12601. return null;
  12602. }
  12603. var name;
  12604. for (name in nextChildren) {
  12605. if (!nextChildren.hasOwnProperty(name)) {
  12606. continue;
  12607. }
  12608. var prevChild = prevChildren && prevChildren[name];
  12609. var prevElement = prevChild && prevChild._currentElement;
  12610. var nextElement = nextChildren[name];
  12611. if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {
  12612. ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);
  12613. nextChildren[name] = prevChild;
  12614. } else {
  12615. if (prevChild) {
  12616. ReactReconciler.unmountComponent(prevChild, name);
  12617. }
  12618. // The child must be instantiated before it's mounted.
  12619. var nextChildInstance = instantiateReactComponent(nextElement, null);
  12620. nextChildren[name] = nextChildInstance;
  12621. }
  12622. }
  12623. // Unmount children that are no longer present.
  12624. for (name in prevChildren) {
  12625. if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
  12626. ReactReconciler.unmountComponent(prevChildren[name]);
  12627. }
  12628. }
  12629. return nextChildren;
  12630. },
  12631. /**
  12632. * Unmounts all rendered children. This should be used to clean up children
  12633. * when this component is unmounted.
  12634. *
  12635. * @param {?object} renderedChildren Previously initialized set of children.
  12636. * @internal
  12637. */
  12638. unmountChildren: function (renderedChildren) {
  12639. for (var name in renderedChildren) {
  12640. if (renderedChildren.hasOwnProperty(name)) {
  12641. var renderedChild = renderedChildren[name];
  12642. ReactReconciler.unmountComponent(renderedChild);
  12643. }
  12644. }
  12645. }
  12646. };
  12647. module.exports = ReactChildReconciler;
  12648. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  12649. /***/ },
  12650. /* 116 */
  12651. /***/ function(module, exports, __webpack_require__) {
  12652. /* WEBPACK VAR INJECTION */(function(process) {/**
  12653. * Copyright 2013-2015, Facebook, Inc.
  12654. * All rights reserved.
  12655. *
  12656. * This source code is licensed under the BSD-style license found in the
  12657. * LICENSE file in the root directory of this source tree. An additional grant
  12658. * of patent rights can be found in the PATENTS file in the same directory.
  12659. *
  12660. * @providesModule flattenChildren
  12661. */
  12662. 'use strict';
  12663. var traverseAllChildren = __webpack_require__(111);
  12664. var warning = __webpack_require__(25);
  12665. /**
  12666. * @param {function} traverseContext Context passed through traversal.
  12667. * @param {?ReactComponent} child React child component.
  12668. * @param {!string} name String name of key path to child.
  12669. */
  12670. function flattenSingleChildIntoContext(traverseContext, child, name) {
  12671. // We found a component instance.
  12672. var result = traverseContext;
  12673. var keyUnique = result[name] === undefined;
  12674. if (process.env.NODE_ENV !== 'production') {
  12675. process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;
  12676. }
  12677. if (keyUnique && child != null) {
  12678. result[name] = child;
  12679. }
  12680. }
  12681. /**
  12682. * Flattens children that are typically specified as `props.children`. Any null
  12683. * children will not be included in the resulting object.
  12684. * @return {!object} flattened children keyed by name.
  12685. */
  12686. function flattenChildren(children) {
  12687. if (children == null) {
  12688. return children;
  12689. }
  12690. var result = {};
  12691. traverseAllChildren(children, flattenSingleChildIntoContext, result);
  12692. return result;
  12693. }
  12694. module.exports = flattenChildren;
  12695. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  12696. /***/ },
  12697. /* 117 */
  12698. /***/ function(module, exports) {
  12699. /**
  12700. * Copyright 2013-2015, Facebook, Inc.
  12701. * All rights reserved.
  12702. *
  12703. * This source code is licensed under the BSD-style license found in the
  12704. * LICENSE file in the root directory of this source tree. An additional grant
  12705. * of patent rights can be found in the PATENTS file in the same directory.
  12706. *
  12707. * @providesModule shallowEqual
  12708. * @typechecks
  12709. *
  12710. */
  12711. 'use strict';
  12712. var hasOwnProperty = Object.prototype.hasOwnProperty;
  12713. /**
  12714. * Performs equality by iterating through keys on an object and returning false
  12715. * when any key has values which are not strictly equal between the arguments.
  12716. * Returns true when the values of all keys are strictly equal.
  12717. */
  12718. function shallowEqual(objA, objB) {
  12719. if (objA === objB) {
  12720. return true;
  12721. }
  12722. if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
  12723. return false;
  12724. }
  12725. var keysA = Object.keys(objA);
  12726. var keysB = Object.keys(objB);
  12727. if (keysA.length !== keysB.length) {
  12728. return false;
  12729. }
  12730. // Test for A's keys different from B.
  12731. var bHasOwnProperty = hasOwnProperty.bind(objB);
  12732. for (var i = 0; i < keysA.length; i++) {
  12733. if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {
  12734. return false;
  12735. }
  12736. }
  12737. return true;
  12738. }
  12739. module.exports = shallowEqual;
  12740. /***/ },
  12741. /* 118 */
  12742. /***/ function(module, exports, __webpack_require__) {
  12743. /**
  12744. * Copyright 2013-2015, Facebook, Inc.
  12745. * All rights reserved.
  12746. *
  12747. * This source code is licensed under the BSD-style license found in the
  12748. * LICENSE file in the root directory of this source tree. An additional grant
  12749. * of patent rights can be found in the PATENTS file in the same directory.
  12750. *
  12751. * @providesModule ReactEventListener
  12752. * @typechecks static-only
  12753. */
  12754. 'use strict';
  12755. var EventListener = __webpack_require__(119);
  12756. var ExecutionEnvironment = __webpack_require__(9);
  12757. var PooledClass = __webpack_require__(56);
  12758. var ReactInstanceHandles = __webpack_require__(45);
  12759. var ReactMount = __webpack_require__(28);
  12760. var ReactUpdates = __webpack_require__(54);
  12761. var assign = __webpack_require__(39);
  12762. var getEventTarget = __webpack_require__(81);
  12763. var getUnboundedScrollPosition = __webpack_require__(120);
  12764. var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
  12765. /**
  12766. * Finds the parent React component of `node`.
  12767. *
  12768. * @param {*} node
  12769. * @return {?DOMEventTarget} Parent container, or `null` if the specified node
  12770. * is not nested.
  12771. */
  12772. function findParent(node) {
  12773. // TODO: It may be a good idea to cache this to prevent unnecessary DOM
  12774. // traversal, but caching is difficult to do correctly without using a
  12775. // mutation observer to listen for all DOM changes.
  12776. var nodeID = ReactMount.getID(node);
  12777. var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);
  12778. var container = ReactMount.findReactContainerForID(rootID);
  12779. var parent = ReactMount.getFirstReactDOM(container);
  12780. return parent;
  12781. }
  12782. // Used to store ancestor hierarchy in top level callback
  12783. function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
  12784. this.topLevelType = topLevelType;
  12785. this.nativeEvent = nativeEvent;
  12786. this.ancestors = [];
  12787. }
  12788. assign(TopLevelCallbackBookKeeping.prototype, {
  12789. destructor: function () {
  12790. this.topLevelType = null;
  12791. this.nativeEvent = null;
  12792. this.ancestors.length = 0;
  12793. }
  12794. });
  12795. PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);
  12796. function handleTopLevelImpl(bookKeeping) {
  12797. // TODO: Re-enable event.path handling
  12798. //
  12799. // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) {
  12800. // // New browsers have a path attribute on native events
  12801. // handleTopLevelWithPath(bookKeeping);
  12802. // } else {
  12803. // // Legacy browsers don't have a path attribute on native events
  12804. // handleTopLevelWithoutPath(bookKeeping);
  12805. // }
  12806. void handleTopLevelWithPath; // temporarily unused
  12807. handleTopLevelWithoutPath(bookKeeping);
  12808. }
  12809. // Legacy browsers don't have a path attribute on native events
  12810. function handleTopLevelWithoutPath(bookKeeping) {
  12811. var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window;
  12812. // Loop through the hierarchy, in case there's any nested components.
  12813. // It's important that we build the array of ancestors before calling any
  12814. // event handlers, because event handlers can modify the DOM, leading to
  12815. // inconsistencies with ReactMount's node cache. See #1105.
  12816. var ancestor = topLevelTarget;
  12817. while (ancestor) {
  12818. bookKeeping.ancestors.push(ancestor);
  12819. ancestor = findParent(ancestor);
  12820. }
  12821. for (var i = 0; i < bookKeeping.ancestors.length; i++) {
  12822. topLevelTarget = bookKeeping.ancestors[i];
  12823. var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';
  12824. ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));
  12825. }
  12826. }
  12827. // New browsers have a path attribute on native events
  12828. function handleTopLevelWithPath(bookKeeping) {
  12829. var path = bookKeeping.nativeEvent.path;
  12830. var currentNativeTarget = path[0];
  12831. var eventsFired = 0;
  12832. for (var i = 0; i < path.length; i++) {
  12833. var currentPathElement = path[i];
  12834. if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) {
  12835. currentNativeTarget = path[i + 1];
  12836. }
  12837. // TODO: slow
  12838. var reactParent = ReactMount.getFirstReactDOM(currentPathElement);
  12839. if (reactParent === currentPathElement) {
  12840. var currentPathElementID = ReactMount.getID(currentPathElement);
  12841. var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID);
  12842. bookKeeping.ancestors.push(currentPathElement);
  12843. var topLevelTargetID = ReactMount.getID(currentPathElement) || '';
  12844. eventsFired++;
  12845. ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget);
  12846. // Jump to the root of this React render tree
  12847. while (currentPathElementID !== newRootID) {
  12848. i++;
  12849. currentPathElement = path[i];
  12850. currentPathElementID = ReactMount.getID(currentPathElement);
  12851. }
  12852. }
  12853. }
  12854. if (eventsFired === 0) {
  12855. ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));
  12856. }
  12857. }
  12858. function scrollValueMonitor(cb) {
  12859. var scrollPosition = getUnboundedScrollPosition(window);
  12860. cb(scrollPosition);
  12861. }
  12862. var ReactEventListener = {
  12863. _enabled: true,
  12864. _handleTopLevel: null,
  12865. WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,
  12866. setHandleTopLevel: function (handleTopLevel) {
  12867. ReactEventListener._handleTopLevel = handleTopLevel;
  12868. },
  12869. setEnabled: function (enabled) {
  12870. ReactEventListener._enabled = !!enabled;
  12871. },
  12872. isEnabled: function () {
  12873. return ReactEventListener._enabled;
  12874. },
  12875. /**
  12876. * Traps top-level events by using event bubbling.
  12877. *
  12878. * @param {string} topLevelType Record from `EventConstants`.
  12879. * @param {string} handlerBaseName Event name (e.g. "click").
  12880. * @param {object} handle Element on which to attach listener.
  12881. * @return {?object} An object with a remove function which will forcefully
  12882. * remove the listener.
  12883. * @internal
  12884. */
  12885. trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
  12886. var element = handle;
  12887. if (!element) {
  12888. return null;
  12889. }
  12890. return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
  12891. },
  12892. /**
  12893. * Traps a top-level event by using event capturing.
  12894. *
  12895. * @param {string} topLevelType Record from `EventConstants`.
  12896. * @param {string} handlerBaseName Event name (e.g. "click").
  12897. * @param {object} handle Element on which to attach listener.
  12898. * @return {?object} An object with a remove function which will forcefully
  12899. * remove the listener.
  12900. * @internal
  12901. */
  12902. trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
  12903. var element = handle;
  12904. if (!element) {
  12905. return null;
  12906. }
  12907. return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
  12908. },
  12909. monitorScrollValue: function (refresh) {
  12910. var callback = scrollValueMonitor.bind(null, refresh);
  12911. EventListener.listen(window, 'scroll', callback);
  12912. },
  12913. dispatchEvent: function (topLevelType, nativeEvent) {
  12914. if (!ReactEventListener._enabled) {
  12915. return;
  12916. }
  12917. var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);
  12918. try {
  12919. // Event queue being processed in the same cycle allows
  12920. // `preventDefault`.
  12921. ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);
  12922. } finally {
  12923. TopLevelCallbackBookKeeping.release(bookKeeping);
  12924. }
  12925. }
  12926. };
  12927. module.exports = ReactEventListener;
  12928. /***/ },
  12929. /* 119 */
  12930. /***/ function(module, exports, __webpack_require__) {
  12931. /* WEBPACK VAR INJECTION */(function(process) {/**
  12932. * Copyright 2013-2015, Facebook, Inc.
  12933. *
  12934. * Licensed under the Apache License, Version 2.0 (the "License");
  12935. * you may not use this file except in compliance with the License.
  12936. * You may obtain a copy of the License at
  12937. *
  12938. * http://www.apache.org/licenses/LICENSE-2.0
  12939. *
  12940. * Unless required by applicable law or agreed to in writing, software
  12941. * distributed under the License is distributed on an "AS IS" BASIS,
  12942. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12943. * See the License for the specific language governing permissions and
  12944. * limitations under the License.
  12945. *
  12946. * @providesModule EventListener
  12947. * @typechecks
  12948. */
  12949. 'use strict';
  12950. var emptyFunction = __webpack_require__(15);
  12951. /**
  12952. * Upstream version of event listener. Does not take into account specific
  12953. * nature of platform.
  12954. */
  12955. var EventListener = {
  12956. /**
  12957. * Listen to DOM events during the bubble phase.
  12958. *
  12959. * @param {DOMEventTarget} target DOM element to register listener on.
  12960. * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
  12961. * @param {function} callback Callback function.
  12962. * @return {object} Object with a `remove` method.
  12963. */
  12964. listen: function (target, eventType, callback) {
  12965. if (target.addEventListener) {
  12966. target.addEventListener(eventType, callback, false);
  12967. return {
  12968. remove: function () {
  12969. target.removeEventListener(eventType, callback, false);
  12970. }
  12971. };
  12972. } else if (target.attachEvent) {
  12973. target.attachEvent('on' + eventType, callback);
  12974. return {
  12975. remove: function () {
  12976. target.detachEvent('on' + eventType, callback);
  12977. }
  12978. };
  12979. }
  12980. },
  12981. /**
  12982. * Listen to DOM events during the capture phase.
  12983. *
  12984. * @param {DOMEventTarget} target DOM element to register listener on.
  12985. * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
  12986. * @param {function} callback Callback function.
  12987. * @return {object} Object with a `remove` method.
  12988. */
  12989. capture: function (target, eventType, callback) {
  12990. if (target.addEventListener) {
  12991. target.addEventListener(eventType, callback, true);
  12992. return {
  12993. remove: function () {
  12994. target.removeEventListener(eventType, callback, true);
  12995. }
  12996. };
  12997. } else {
  12998. if (process.env.NODE_ENV !== 'production') {
  12999. console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');
  13000. }
  13001. return {
  13002. remove: emptyFunction
  13003. };
  13004. }
  13005. },
  13006. registerDefault: function () {}
  13007. };
  13008. module.exports = EventListener;
  13009. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  13010. /***/ },
  13011. /* 120 */
  13012. /***/ function(module, exports) {
  13013. /**
  13014. * Copyright 2013-2015, Facebook, Inc.
  13015. * All rights reserved.
  13016. *
  13017. * This source code is licensed under the BSD-style license found in the
  13018. * LICENSE file in the root directory of this source tree. An additional grant
  13019. * of patent rights can be found in the PATENTS file in the same directory.
  13020. *
  13021. * @providesModule getUnboundedScrollPosition
  13022. * @typechecks
  13023. */
  13024. 'use strict';
  13025. /**
  13026. * Gets the scroll position of the supplied element or window.
  13027. *
  13028. * The return values are unbounded, unlike `getScrollPosition`. This means they
  13029. * may be negative or exceed the element boundaries (which is possible using
  13030. * inertial scrolling).
  13031. *
  13032. * @param {DOMWindow|DOMElement} scrollable
  13033. * @return {object} Map with `x` and `y` keys.
  13034. */
  13035. function getUnboundedScrollPosition(scrollable) {
  13036. if (scrollable === window) {
  13037. return {
  13038. x: window.pageXOffset || document.documentElement.scrollLeft,
  13039. y: window.pageYOffset || document.documentElement.scrollTop
  13040. };
  13041. }
  13042. return {
  13043. x: scrollable.scrollLeft,
  13044. y: scrollable.scrollTop
  13045. };
  13046. }
  13047. module.exports = getUnboundedScrollPosition;
  13048. /***/ },
  13049. /* 121 */
  13050. /***/ function(module, exports, __webpack_require__) {
  13051. /**
  13052. * Copyright 2013-2015, Facebook, Inc.
  13053. * All rights reserved.
  13054. *
  13055. * This source code is licensed under the BSD-style license found in the
  13056. * LICENSE file in the root directory of this source tree. An additional grant
  13057. * of patent rights can be found in the PATENTS file in the same directory.
  13058. *
  13059. * @providesModule ReactInjection
  13060. */
  13061. 'use strict';
  13062. var DOMProperty = __webpack_require__(23);
  13063. var EventPluginHub = __webpack_require__(31);
  13064. var ReactComponentEnvironment = __webpack_require__(64);
  13065. var ReactClass = __webpack_require__(122);
  13066. var ReactEmptyComponent = __webpack_require__(68);
  13067. var ReactBrowserEventEmitter = __webpack_require__(29);
  13068. var ReactNativeComponent = __webpack_require__(69);
  13069. var ReactPerf = __webpack_require__(18);
  13070. var ReactRootIndex = __webpack_require__(46);
  13071. var ReactUpdates = __webpack_require__(54);
  13072. var ReactInjection = {
  13073. Component: ReactComponentEnvironment.injection,
  13074. Class: ReactClass.injection,
  13075. DOMProperty: DOMProperty.injection,
  13076. EmptyComponent: ReactEmptyComponent.injection,
  13077. EventPluginHub: EventPluginHub.injection,
  13078. EventEmitter: ReactBrowserEventEmitter.injection,
  13079. NativeComponent: ReactNativeComponent.injection,
  13080. Perf: ReactPerf.injection,
  13081. RootIndex: ReactRootIndex.injection,
  13082. Updates: ReactUpdates.injection
  13083. };
  13084. module.exports = ReactInjection;
  13085. /***/ },
  13086. /* 122 */
  13087. /***/ function(module, exports, __webpack_require__) {
  13088. /* WEBPACK VAR INJECTION */(function(process) {/**
  13089. * Copyright 2013-2015, Facebook, Inc.
  13090. * All rights reserved.
  13091. *
  13092. * This source code is licensed under the BSD-style license found in the
  13093. * LICENSE file in the root directory of this source tree. An additional grant
  13094. * of patent rights can be found in the PATENTS file in the same directory.
  13095. *
  13096. * @providesModule ReactClass
  13097. */
  13098. 'use strict';
  13099. var ReactComponent = __webpack_require__(123);
  13100. var ReactElement = __webpack_require__(42);
  13101. var ReactPropTypeLocations = __webpack_require__(65);
  13102. var ReactPropTypeLocationNames = __webpack_require__(66);
  13103. var ReactNoopUpdateQueue = __webpack_require__(124);
  13104. var assign = __webpack_require__(39);
  13105. var emptyObject = __webpack_require__(58);
  13106. var invariant = __webpack_require__(13);
  13107. var keyMirror = __webpack_require__(17);
  13108. var keyOf = __webpack_require__(79);
  13109. var warning = __webpack_require__(25);
  13110. var MIXINS_KEY = keyOf({ mixins: null });
  13111. /**
  13112. * Policies that describe methods in `ReactClassInterface`.
  13113. */
  13114. var SpecPolicy = keyMirror({
  13115. /**
  13116. * These methods may be defined only once by the class specification or mixin.
  13117. */
  13118. DEFINE_ONCE: null,
  13119. /**
  13120. * These methods may be defined by both the class specification and mixins.
  13121. * Subsequent definitions will be chained. These methods must return void.
  13122. */
  13123. DEFINE_MANY: null,
  13124. /**
  13125. * These methods are overriding the base class.
  13126. */
  13127. OVERRIDE_BASE: null,
  13128. /**
  13129. * These methods are similar to DEFINE_MANY, except we assume they return
  13130. * objects. We try to merge the keys of the return values of all the mixed in
  13131. * functions. If there is a key conflict we throw.
  13132. */
  13133. DEFINE_MANY_MERGED: null
  13134. });
  13135. var injectedMixins = [];
  13136. var warnedSetProps = false;
  13137. function warnSetProps() {
  13138. if (!warnedSetProps) {
  13139. warnedSetProps = true;
  13140. process.env.NODE_ENV !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined;
  13141. }
  13142. }
  13143. /**
  13144. * Composite components are higher-level components that compose other composite
  13145. * or native components.
  13146. *
  13147. * To create a new type of `ReactClass`, pass a specification of
  13148. * your new class to `React.createClass`. The only requirement of your class
  13149. * specification is that you implement a `render` method.
  13150. *
  13151. * var MyComponent = React.createClass({
  13152. * render: function() {
  13153. * return <div>Hello World</div>;
  13154. * }
  13155. * });
  13156. *
  13157. * The class specification supports a specific protocol of methods that have
  13158. * special meaning (e.g. `render`). See `ReactClassInterface` for
  13159. * more the comprehensive protocol. Any other properties and methods in the
  13160. * class specification will be available on the prototype.
  13161. *
  13162. * @interface ReactClassInterface
  13163. * @internal
  13164. */
  13165. var ReactClassInterface = {
  13166. /**
  13167. * An array of Mixin objects to include when defining your component.
  13168. *
  13169. * @type {array}
  13170. * @optional
  13171. */
  13172. mixins: SpecPolicy.DEFINE_MANY,
  13173. /**
  13174. * An object containing properties and methods that should be defined on
  13175. * the component's constructor instead of its prototype (static methods).
  13176. *
  13177. * @type {object}
  13178. * @optional
  13179. */
  13180. statics: SpecPolicy.DEFINE_MANY,
  13181. /**
  13182. * Definition of prop types for this component.
  13183. *
  13184. * @type {object}
  13185. * @optional
  13186. */
  13187. propTypes: SpecPolicy.DEFINE_MANY,
  13188. /**
  13189. * Definition of context types for this component.
  13190. *
  13191. * @type {object}
  13192. * @optional
  13193. */
  13194. contextTypes: SpecPolicy.DEFINE_MANY,
  13195. /**
  13196. * Definition of context types this component sets for its children.
  13197. *
  13198. * @type {object}
  13199. * @optional
  13200. */
  13201. childContextTypes: SpecPolicy.DEFINE_MANY,
  13202. // ==== Definition methods ====
  13203. /**
  13204. * Invoked when the component is mounted. Values in the mapping will be set on
  13205. * `this.props` if that prop is not specified (i.e. using an `in` check).
  13206. *
  13207. * This method is invoked before `getInitialState` and therefore cannot rely
  13208. * on `this.state` or use `this.setState`.
  13209. *
  13210. * @return {object}
  13211. * @optional
  13212. */
  13213. getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,
  13214. /**
  13215. * Invoked once before the component is mounted. The return value will be used
  13216. * as the initial value of `this.state`.
  13217. *
  13218. * getInitialState: function() {
  13219. * return {
  13220. * isOn: false,
  13221. * fooBaz: new BazFoo()
  13222. * }
  13223. * }
  13224. *
  13225. * @return {object}
  13226. * @optional
  13227. */
  13228. getInitialState: SpecPolicy.DEFINE_MANY_MERGED,
  13229. /**
  13230. * @return {object}
  13231. * @optional
  13232. */
  13233. getChildContext: SpecPolicy.DEFINE_MANY_MERGED,
  13234. /**
  13235. * Uses props from `this.props` and state from `this.state` to render the
  13236. * structure of the component.
  13237. *
  13238. * No guarantees are made about when or how often this method is invoked, so
  13239. * it must not have side effects.
  13240. *
  13241. * render: function() {
  13242. * var name = this.props.name;
  13243. * return <div>Hello, {name}!</div>;
  13244. * }
  13245. *
  13246. * @return {ReactComponent}
  13247. * @nosideeffects
  13248. * @required
  13249. */
  13250. render: SpecPolicy.DEFINE_ONCE,
  13251. // ==== Delegate methods ====
  13252. /**
  13253. * Invoked when the component is initially created and about to be mounted.
  13254. * This may have side effects, but any external subscriptions or data created
  13255. * by this method must be cleaned up in `componentWillUnmount`.
  13256. *
  13257. * @optional
  13258. */
  13259. componentWillMount: SpecPolicy.DEFINE_MANY,
  13260. /**
  13261. * Invoked when the component has been mounted and has a DOM representation.
  13262. * However, there is no guarantee that the DOM node is in the document.
  13263. *
  13264. * Use this as an opportunity to operate on the DOM when the component has
  13265. * been mounted (initialized and rendered) for the first time.
  13266. *
  13267. * @param {DOMElement} rootNode DOM element representing the component.
  13268. * @optional
  13269. */
  13270. componentDidMount: SpecPolicy.DEFINE_MANY,
  13271. /**
  13272. * Invoked before the component receives new props.
  13273. *
  13274. * Use this as an opportunity to react to a prop transition by updating the
  13275. * state using `this.setState`. Current props are accessed via `this.props`.
  13276. *
  13277. * componentWillReceiveProps: function(nextProps, nextContext) {
  13278. * this.setState({
  13279. * likesIncreasing: nextProps.likeCount > this.props.likeCount
  13280. * });
  13281. * }
  13282. *
  13283. * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
  13284. * transition may cause a state change, but the opposite is not true. If you
  13285. * need it, you are probably looking for `componentWillUpdate`.
  13286. *
  13287. * @param {object} nextProps
  13288. * @optional
  13289. */
  13290. componentWillReceiveProps: SpecPolicy.DEFINE_MANY,
  13291. /**
  13292. * Invoked while deciding if the component should be updated as a result of
  13293. * receiving new props, state and/or context.
  13294. *
  13295. * Use this as an opportunity to `return false` when you're certain that the
  13296. * transition to the new props/state/context will not require a component
  13297. * update.
  13298. *
  13299. * shouldComponentUpdate: function(nextProps, nextState, nextContext) {
  13300. * return !equal(nextProps, this.props) ||
  13301. * !equal(nextState, this.state) ||
  13302. * !equal(nextContext, this.context);
  13303. * }
  13304. *
  13305. * @param {object} nextProps
  13306. * @param {?object} nextState
  13307. * @param {?object} nextContext
  13308. * @return {boolean} True if the component should update.
  13309. * @optional
  13310. */
  13311. shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,
  13312. /**
  13313. * Invoked when the component is about to update due to a transition from
  13314. * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
  13315. * and `nextContext`.
  13316. *
  13317. * Use this as an opportunity to perform preparation before an update occurs.
  13318. *
  13319. * NOTE: You **cannot** use `this.setState()` in this method.
  13320. *
  13321. * @param {object} nextProps
  13322. * @param {?object} nextState
  13323. * @param {?object} nextContext
  13324. * @param {ReactReconcileTransaction} transaction
  13325. * @optional
  13326. */
  13327. componentWillUpdate: SpecPolicy.DEFINE_MANY,
  13328. /**
  13329. * Invoked when the component's DOM representation has been updated.
  13330. *
  13331. * Use this as an opportunity to operate on the DOM when the component has
  13332. * been updated.
  13333. *
  13334. * @param {object} prevProps
  13335. * @param {?object} prevState
  13336. * @param {?object} prevContext
  13337. * @param {DOMElement} rootNode DOM element representing the component.
  13338. * @optional
  13339. */
  13340. componentDidUpdate: SpecPolicy.DEFINE_MANY,
  13341. /**
  13342. * Invoked when the component is about to be removed from its parent and have
  13343. * its DOM representation destroyed.
  13344. *
  13345. * Use this as an opportunity to deallocate any external resources.
  13346. *
  13347. * NOTE: There is no `componentDidUnmount` since your component will have been
  13348. * destroyed by that point.
  13349. *
  13350. * @optional
  13351. */
  13352. componentWillUnmount: SpecPolicy.DEFINE_MANY,
  13353. // ==== Advanced methods ====
  13354. /**
  13355. * Updates the component's currently mounted DOM representation.
  13356. *
  13357. * By default, this implements React's rendering and reconciliation algorithm.
  13358. * Sophisticated clients may wish to override this.
  13359. *
  13360. * @param {ReactReconcileTransaction} transaction
  13361. * @internal
  13362. * @overridable
  13363. */
  13364. updateComponent: SpecPolicy.OVERRIDE_BASE
  13365. };
  13366. /**
  13367. * Mapping from class specification keys to special processing functions.
  13368. *
  13369. * Although these are declared like instance properties in the specification
  13370. * when defining classes using `React.createClass`, they are actually static
  13371. * and are accessible on the constructor instead of the prototype. Despite
  13372. * being static, they must be defined outside of the "statics" key under
  13373. * which all other static methods are defined.
  13374. */
  13375. var RESERVED_SPEC_KEYS = {
  13376. displayName: function (Constructor, displayName) {
  13377. Constructor.displayName = displayName;
  13378. },
  13379. mixins: function (Constructor, mixins) {
  13380. if (mixins) {
  13381. for (var i = 0; i < mixins.length; i++) {
  13382. mixSpecIntoComponent(Constructor, mixins[i]);
  13383. }
  13384. }
  13385. },
  13386. childContextTypes: function (Constructor, childContextTypes) {
  13387. if (process.env.NODE_ENV !== 'production') {
  13388. validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);
  13389. }
  13390. Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes);
  13391. },
  13392. contextTypes: function (Constructor, contextTypes) {
  13393. if (process.env.NODE_ENV !== 'production') {
  13394. validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);
  13395. }
  13396. Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes);
  13397. },
  13398. /**
  13399. * Special case getDefaultProps which should move into statics but requires
  13400. * automatic merging.
  13401. */
  13402. getDefaultProps: function (Constructor, getDefaultProps) {
  13403. if (Constructor.getDefaultProps) {
  13404. Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);
  13405. } else {
  13406. Constructor.getDefaultProps = getDefaultProps;
  13407. }
  13408. },
  13409. propTypes: function (Constructor, propTypes) {
  13410. if (process.env.NODE_ENV !== 'production') {
  13411. validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);
  13412. }
  13413. Constructor.propTypes = assign({}, Constructor.propTypes, propTypes);
  13414. },
  13415. statics: function (Constructor, statics) {
  13416. mixStaticSpecIntoComponent(Constructor, statics);
  13417. },
  13418. autobind: function () {} };
  13419. // noop
  13420. function validateTypeDef(Constructor, typeDef, location) {
  13421. for (var propName in typeDef) {
  13422. if (typeDef.hasOwnProperty(propName)) {
  13423. // use a warning instead of an invariant so components
  13424. // don't show up in prod but not in __DEV__
  13425. process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined;
  13426. }
  13427. }
  13428. }
  13429. function validateMethodOverride(proto, name) {
  13430. var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;
  13431. // Disallow overriding of base class methods unless explicitly allowed.
  13432. if (ReactClassMixin.hasOwnProperty(name)) {
  13433. !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined;
  13434. }
  13435. // Disallow defining methods more than once unless explicitly allowed.
  13436. if (proto.hasOwnProperty(name)) {
  13437. !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined;
  13438. }
  13439. }
  13440. /**
  13441. * Mixin helper which handles policy validation and reserved
  13442. * specification keys when building React classses.
  13443. */
  13444. function mixSpecIntoComponent(Constructor, spec) {
  13445. if (!spec) {
  13446. return;
  13447. }
  13448. !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;
  13449. !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;
  13450. var proto = Constructor.prototype;
  13451. // By handling mixins before any other properties, we ensure the same
  13452. // chaining order is applied to methods with DEFINE_MANY policy, whether
  13453. // mixins are listed before or after these methods in the spec.
  13454. if (spec.hasOwnProperty(MIXINS_KEY)) {
  13455. RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
  13456. }
  13457. for (var name in spec) {
  13458. if (!spec.hasOwnProperty(name)) {
  13459. continue;
  13460. }
  13461. if (name === MIXINS_KEY) {
  13462. // We have already handled mixins in a special case above.
  13463. continue;
  13464. }
  13465. var property = spec[name];
  13466. validateMethodOverride(proto, name);
  13467. if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
  13468. RESERVED_SPEC_KEYS[name](Constructor, property);
  13469. } else {
  13470. // Setup methods on prototype:
  13471. // The following member methods should not be automatically bound:
  13472. // 1. Expected ReactClass methods (in the "interface").
  13473. // 2. Overridden methods (that were mixed in).
  13474. var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
  13475. var isAlreadyDefined = proto.hasOwnProperty(name);
  13476. var isFunction = typeof property === 'function';
  13477. var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;
  13478. if (shouldAutoBind) {
  13479. if (!proto.__reactAutoBindMap) {
  13480. proto.__reactAutoBindMap = {};
  13481. }
  13482. proto.__reactAutoBindMap[name] = property;
  13483. proto[name] = property;
  13484. } else {
  13485. if (isAlreadyDefined) {
  13486. var specPolicy = ReactClassInterface[name];
  13487. // These cases should already be caught by validateMethodOverride.
  13488. !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined;
  13489. // For methods which are defined more than once, call the existing
  13490. // methods before calling the new property, merging if appropriate.
  13491. if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {
  13492. proto[name] = createMergedResultFunction(proto[name], property);
  13493. } else if (specPolicy === SpecPolicy.DEFINE_MANY) {
  13494. proto[name] = createChainedFunction(proto[name], property);
  13495. }
  13496. } else {
  13497. proto[name] = property;
  13498. if (process.env.NODE_ENV !== 'production') {
  13499. // Add verbose displayName to the function, which helps when looking
  13500. // at profiling tools.
  13501. if (typeof property === 'function' && spec.displayName) {
  13502. proto[name].displayName = spec.displayName + '_' + name;
  13503. }
  13504. }
  13505. }
  13506. }
  13507. }
  13508. }
  13509. }
  13510. function mixStaticSpecIntoComponent(Constructor, statics) {
  13511. if (!statics) {
  13512. return;
  13513. }
  13514. for (var name in statics) {
  13515. var property = statics[name];
  13516. if (!statics.hasOwnProperty(name)) {
  13517. continue;
  13518. }
  13519. var isReserved = (name in RESERVED_SPEC_KEYS);
  13520. !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined;
  13521. var isInherited = (name in Constructor);
  13522. !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined;
  13523. Constructor[name] = property;
  13524. }
  13525. }
  13526. /**
  13527. * Merge two objects, but throw if both contain the same key.
  13528. *
  13529. * @param {object} one The first object, which is mutated.
  13530. * @param {object} two The second object
  13531. * @return {object} one after it has been mutated to contain everything in two.
  13532. */
  13533. function mergeIntoWithNoDuplicateKeys(one, two) {
  13534. !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined;
  13535. for (var key in two) {
  13536. if (two.hasOwnProperty(key)) {
  13537. !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined;
  13538. one[key] = two[key];
  13539. }
  13540. }
  13541. return one;
  13542. }
  13543. /**
  13544. * Creates a function that invokes two functions and merges their return values.
  13545. *
  13546. * @param {function} one Function to invoke first.
  13547. * @param {function} two Function to invoke second.
  13548. * @return {function} Function that invokes the two argument functions.
  13549. * @private
  13550. */
  13551. function createMergedResultFunction(one, two) {
  13552. return function mergedResult() {
  13553. var a = one.apply(this, arguments);
  13554. var b = two.apply(this, arguments);
  13555. if (a == null) {
  13556. return b;
  13557. } else if (b == null) {
  13558. return a;
  13559. }
  13560. var c = {};
  13561. mergeIntoWithNoDuplicateKeys(c, a);
  13562. mergeIntoWithNoDuplicateKeys(c, b);
  13563. return c;
  13564. };
  13565. }
  13566. /**
  13567. * Creates a function that invokes two functions and ignores their return vales.
  13568. *
  13569. * @param {function} one Function to invoke first.
  13570. * @param {function} two Function to invoke second.
  13571. * @return {function} Function that invokes the two argument functions.
  13572. * @private
  13573. */
  13574. function createChainedFunction(one, two) {
  13575. return function chainedFunction() {
  13576. one.apply(this, arguments);
  13577. two.apply(this, arguments);
  13578. };
  13579. }
  13580. /**
  13581. * Binds a method to the component.
  13582. *
  13583. * @param {object} component Component whose method is going to be bound.
  13584. * @param {function} method Method to be bound.
  13585. * @return {function} The bound method.
  13586. */
  13587. function bindAutoBindMethod(component, method) {
  13588. var boundMethod = method.bind(component);
  13589. if (process.env.NODE_ENV !== 'production') {
  13590. boundMethod.__reactBoundContext = component;
  13591. boundMethod.__reactBoundMethod = method;
  13592. boundMethod.__reactBoundArguments = null;
  13593. var componentName = component.constructor.displayName;
  13594. var _bind = boundMethod.bind;
  13595. /* eslint-disable block-scoped-var, no-undef */
  13596. boundMethod.bind = function (newThis) {
  13597. for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  13598. args[_key - 1] = arguments[_key];
  13599. }
  13600. // User is trying to bind() an autobound method; we effectively will
  13601. // ignore the value of "this" that the user is trying to use, so
  13602. // let's warn.
  13603. if (newThis !== component && newThis !== null) {
  13604. process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined;
  13605. } else if (!args.length) {
  13606. process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined;
  13607. return boundMethod;
  13608. }
  13609. var reboundMethod = _bind.apply(boundMethod, arguments);
  13610. reboundMethod.__reactBoundContext = component;
  13611. reboundMethod.__reactBoundMethod = method;
  13612. reboundMethod.__reactBoundArguments = args;
  13613. return reboundMethod;
  13614. /* eslint-enable */
  13615. };
  13616. }
  13617. return boundMethod;
  13618. }
  13619. /**
  13620. * Binds all auto-bound methods in a component.
  13621. *
  13622. * @param {object} component Component whose method is going to be bound.
  13623. */
  13624. function bindAutoBindMethods(component) {
  13625. for (var autoBindKey in component.__reactAutoBindMap) {
  13626. if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {
  13627. var method = component.__reactAutoBindMap[autoBindKey];
  13628. component[autoBindKey] = bindAutoBindMethod(component, method);
  13629. }
  13630. }
  13631. }
  13632. /**
  13633. * Add more to the ReactClass base class. These are all legacy features and
  13634. * therefore not already part of the modern ReactComponent.
  13635. */
  13636. var ReactClassMixin = {
  13637. /**
  13638. * TODO: This will be deprecated because state should always keep a consistent
  13639. * type signature and the only use case for this, is to avoid that.
  13640. */
  13641. replaceState: function (newState, callback) {
  13642. this.updater.enqueueReplaceState(this, newState);
  13643. if (callback) {
  13644. this.updater.enqueueCallback(this, callback);
  13645. }
  13646. },
  13647. /**
  13648. * Checks whether or not this composite component is mounted.
  13649. * @return {boolean} True if mounted, false otherwise.
  13650. * @protected
  13651. * @final
  13652. */
  13653. isMounted: function () {
  13654. return this.updater.isMounted(this);
  13655. },
  13656. /**
  13657. * Sets a subset of the props.
  13658. *
  13659. * @param {object} partialProps Subset of the next props.
  13660. * @param {?function} callback Called after props are updated.
  13661. * @final
  13662. * @public
  13663. * @deprecated
  13664. */
  13665. setProps: function (partialProps, callback) {
  13666. if (process.env.NODE_ENV !== 'production') {
  13667. warnSetProps();
  13668. }
  13669. this.updater.enqueueSetProps(this, partialProps);
  13670. if (callback) {
  13671. this.updater.enqueueCallback(this, callback);
  13672. }
  13673. },
  13674. /**
  13675. * Replace all the props.
  13676. *
  13677. * @param {object} newProps Subset of the next props.
  13678. * @param {?function} callback Called after props are updated.
  13679. * @final
  13680. * @public
  13681. * @deprecated
  13682. */
  13683. replaceProps: function (newProps, callback) {
  13684. if (process.env.NODE_ENV !== 'production') {
  13685. warnSetProps();
  13686. }
  13687. this.updater.enqueueReplaceProps(this, newProps);
  13688. if (callback) {
  13689. this.updater.enqueueCallback(this, callback);
  13690. }
  13691. }
  13692. };
  13693. var ReactClassComponent = function () {};
  13694. assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);
  13695. /**
  13696. * Module for creating composite components.
  13697. *
  13698. * @class ReactClass
  13699. */
  13700. var ReactClass = {
  13701. /**
  13702. * Creates a composite component class given a class specification.
  13703. *
  13704. * @param {object} spec Class specification (which must define `render`).
  13705. * @return {function} Component constructor function.
  13706. * @public
  13707. */
  13708. createClass: function (spec) {
  13709. var Constructor = function (props, context, updater) {
  13710. // This constructor is overridden by mocks. The argument is used
  13711. // by mocks to assert on what gets mounted.
  13712. if (process.env.NODE_ENV !== 'production') {
  13713. process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined;
  13714. }
  13715. // Wire up auto-binding
  13716. if (this.__reactAutoBindMap) {
  13717. bindAutoBindMethods(this);
  13718. }
  13719. this.props = props;
  13720. this.context = context;
  13721. this.refs = emptyObject;
  13722. this.updater = updater || ReactNoopUpdateQueue;
  13723. this.state = null;
  13724. // ReactClasses doesn't have constructors. Instead, they use the
  13725. // getInitialState and componentWillMount methods for initialization.
  13726. var initialState = this.getInitialState ? this.getInitialState() : null;
  13727. if (process.env.NODE_ENV !== 'production') {
  13728. // We allow auto-mocks to proceed as if they're returning null.
  13729. if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) {
  13730. // This is probably bad practice. Consider warning here and
  13731. // deprecating this convenience.
  13732. initialState = null;
  13733. }
  13734. }
  13735. !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined;
  13736. this.state = initialState;
  13737. };
  13738. Constructor.prototype = new ReactClassComponent();
  13739. Constructor.prototype.constructor = Constructor;
  13740. injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
  13741. mixSpecIntoComponent(Constructor, spec);
  13742. // Initialize the defaultProps property after all mixins have been merged.
  13743. if (Constructor.getDefaultProps) {
  13744. Constructor.defaultProps = Constructor.getDefaultProps();
  13745. }
  13746. if (process.env.NODE_ENV !== 'production') {
  13747. // This is a tag to indicate that the use of these method names is ok,
  13748. // since it's used with createClass. If it's not, then it's likely a
  13749. // mistake so we'll warn you to use the static property, property
  13750. // initializer or constructor respectively.
  13751. if (Constructor.getDefaultProps) {
  13752. Constructor.getDefaultProps.isReactClassApproved = {};
  13753. }
  13754. if (Constructor.prototype.getInitialState) {
  13755. Constructor.prototype.getInitialState.isReactClassApproved = {};
  13756. }
  13757. }
  13758. !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined;
  13759. if (process.env.NODE_ENV !== 'production') {
  13760. process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined;
  13761. process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined;
  13762. }
  13763. // Reduce time spent doing lookups by setting these on the prototype.
  13764. for (var methodName in ReactClassInterface) {
  13765. if (!Constructor.prototype[methodName]) {
  13766. Constructor.prototype[methodName] = null;
  13767. }
  13768. }
  13769. return Constructor;
  13770. },
  13771. injection: {
  13772. injectMixin: function (mixin) {
  13773. injectedMixins.push(mixin);
  13774. }
  13775. }
  13776. };
  13777. module.exports = ReactClass;
  13778. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  13779. /***/ },
  13780. /* 123 */
  13781. /***/ function(module, exports, __webpack_require__) {
  13782. /* WEBPACK VAR INJECTION */(function(process) {/**
  13783. * Copyright 2013-2015, Facebook, Inc.
  13784. * All rights reserved.
  13785. *
  13786. * This source code is licensed under the BSD-style license found in the
  13787. * LICENSE file in the root directory of this source tree. An additional grant
  13788. * of patent rights can be found in the PATENTS file in the same directory.
  13789. *
  13790. * @providesModule ReactComponent
  13791. */
  13792. 'use strict';
  13793. var ReactNoopUpdateQueue = __webpack_require__(124);
  13794. var canDefineProperty = __webpack_require__(43);
  13795. var emptyObject = __webpack_require__(58);
  13796. var invariant = __webpack_require__(13);
  13797. var warning = __webpack_require__(25);
  13798. /**
  13799. * Base class helpers for the updating state of a component.
  13800. */
  13801. function ReactComponent(props, context, updater) {
  13802. this.props = props;
  13803. this.context = context;
  13804. this.refs = emptyObject;
  13805. // We initialize the default updater but the real one gets injected by the
  13806. // renderer.
  13807. this.updater = updater || ReactNoopUpdateQueue;
  13808. }
  13809. ReactComponent.prototype.isReactComponent = {};
  13810. /**
  13811. * Sets a subset of the state. Always use this to mutate
  13812. * state. You should treat `this.state` as immutable.
  13813. *
  13814. * There is no guarantee that `this.state` will be immediately updated, so
  13815. * accessing `this.state` after calling this method may return the old value.
  13816. *
  13817. * There is no guarantee that calls to `setState` will run synchronously,
  13818. * as they may eventually be batched together. You can provide an optional
  13819. * callback that will be executed when the call to setState is actually
  13820. * completed.
  13821. *
  13822. * When a function is provided to setState, it will be called at some point in
  13823. * the future (not synchronously). It will be called with the up to date
  13824. * component arguments (state, props, context). These values can be different
  13825. * from this.* because your function may be called after receiveProps but before
  13826. * shouldComponentUpdate, and this new state, props, and context will not yet be
  13827. * assigned to this.
  13828. *
  13829. * @param {object|function} partialState Next partial state or function to
  13830. * produce next partial state to be merged with current state.
  13831. * @param {?function} callback Called after state is updated.
  13832. * @final
  13833. * @protected
  13834. */
  13835. ReactComponent.prototype.setState = function (partialState, callback) {
  13836. !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined;
  13837. if (process.env.NODE_ENV !== 'production') {
  13838. process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined;
  13839. }
  13840. this.updater.enqueueSetState(this, partialState);
  13841. if (callback) {
  13842. this.updater.enqueueCallback(this, callback);
  13843. }
  13844. };
  13845. /**
  13846. * Forces an update. This should only be invoked when it is known with
  13847. * certainty that we are **not** in a DOM transaction.
  13848. *
  13849. * You may want to call this when you know that some deeper aspect of the
  13850. * component's state has changed but `setState` was not called.
  13851. *
  13852. * This will not invoke `shouldComponentUpdate`, but it will invoke
  13853. * `componentWillUpdate` and `componentDidUpdate`.
  13854. *
  13855. * @param {?function} callback Called after update is complete.
  13856. * @final
  13857. * @protected
  13858. */
  13859. ReactComponent.prototype.forceUpdate = function (callback) {
  13860. this.updater.enqueueForceUpdate(this);
  13861. if (callback) {
  13862. this.updater.enqueueCallback(this, callback);
  13863. }
  13864. };
  13865. /**
  13866. * Deprecated APIs. These APIs used to exist on classic React classes but since
  13867. * we would like to deprecate them, we're not going to move them over to this
  13868. * modern base class. Instead, we define a getter that warns if it's accessed.
  13869. */
  13870. if (process.env.NODE_ENV !== 'production') {
  13871. var deprecatedAPIs = {
  13872. getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'],
  13873. isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
  13874. replaceProps: ['replaceProps', 'Instead, call render again at the top level.'],
  13875. replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],
  13876. setProps: ['setProps', 'Instead, call render again at the top level.']
  13877. };
  13878. var defineDeprecationWarning = function (methodName, info) {
  13879. if (canDefineProperty) {
  13880. Object.defineProperty(ReactComponent.prototype, methodName, {
  13881. get: function () {
  13882. process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined;
  13883. return undefined;
  13884. }
  13885. });
  13886. }
  13887. };
  13888. for (var fnName in deprecatedAPIs) {
  13889. if (deprecatedAPIs.hasOwnProperty(fnName)) {
  13890. defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
  13891. }
  13892. }
  13893. }
  13894. module.exports = ReactComponent;
  13895. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  13896. /***/ },
  13897. /* 124 */
  13898. /***/ function(module, exports, __webpack_require__) {
  13899. /* WEBPACK VAR INJECTION */(function(process) {/**
  13900. * Copyright 2015, Facebook, Inc.
  13901. * All rights reserved.
  13902. *
  13903. * This source code is licensed under the BSD-style license found in the
  13904. * LICENSE file in the root directory of this source tree. An additional grant
  13905. * of patent rights can be found in the PATENTS file in the same directory.
  13906. *
  13907. * @providesModule ReactNoopUpdateQueue
  13908. */
  13909. 'use strict';
  13910. var warning = __webpack_require__(25);
  13911. function warnTDZ(publicInstance, callerName) {
  13912. if (process.env.NODE_ENV !== 'production') {
  13913. process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined;
  13914. }
  13915. }
  13916. /**
  13917. * This is the abstract API for an update queue.
  13918. */
  13919. var ReactNoopUpdateQueue = {
  13920. /**
  13921. * Checks whether or not this composite component is mounted.
  13922. * @param {ReactClass} publicInstance The instance we want to test.
  13923. * @return {boolean} True if mounted, false otherwise.
  13924. * @protected
  13925. * @final
  13926. */
  13927. isMounted: function (publicInstance) {
  13928. return false;
  13929. },
  13930. /**
  13931. * Enqueue a callback that will be executed after all the pending updates
  13932. * have processed.
  13933. *
  13934. * @param {ReactClass} publicInstance The instance to use as `this` context.
  13935. * @param {?function} callback Called after state is updated.
  13936. * @internal
  13937. */
  13938. enqueueCallback: function (publicInstance, callback) {},
  13939. /**
  13940. * Forces an update. This should only be invoked when it is known with
  13941. * certainty that we are **not** in a DOM transaction.
  13942. *
  13943. * You may want to call this when you know that some deeper aspect of the
  13944. * component's state has changed but `setState` was not called.
  13945. *
  13946. * This will not invoke `shouldComponentUpdate`, but it will invoke
  13947. * `componentWillUpdate` and `componentDidUpdate`.
  13948. *
  13949. * @param {ReactClass} publicInstance The instance that should rerender.
  13950. * @internal
  13951. */
  13952. enqueueForceUpdate: function (publicInstance) {
  13953. warnTDZ(publicInstance, 'forceUpdate');
  13954. },
  13955. /**
  13956. * Replaces all of the state. Always use this or `setState` to mutate state.
  13957. * You should treat `this.state` as immutable.
  13958. *
  13959. * There is no guarantee that `this.state` will be immediately updated, so
  13960. * accessing `this.state` after calling this method may return the old value.
  13961. *
  13962. * @param {ReactClass} publicInstance The instance that should rerender.
  13963. * @param {object} completeState Next state.
  13964. * @internal
  13965. */
  13966. enqueueReplaceState: function (publicInstance, completeState) {
  13967. warnTDZ(publicInstance, 'replaceState');
  13968. },
  13969. /**
  13970. * Sets a subset of the state. This only exists because _pendingState is
  13971. * internal. This provides a merging strategy that is not available to deep
  13972. * properties which is confusing. TODO: Expose pendingState or don't use it
  13973. * during the merge.
  13974. *
  13975. * @param {ReactClass} publicInstance The instance that should rerender.
  13976. * @param {object} partialState Next partial state to be merged with state.
  13977. * @internal
  13978. */
  13979. enqueueSetState: function (publicInstance, partialState) {
  13980. warnTDZ(publicInstance, 'setState');
  13981. },
  13982. /**
  13983. * Sets a subset of the props.
  13984. *
  13985. * @param {ReactClass} publicInstance The instance that should rerender.
  13986. * @param {object} partialProps Subset of the next props.
  13987. * @internal
  13988. */
  13989. enqueueSetProps: function (publicInstance, partialProps) {
  13990. warnTDZ(publicInstance, 'setProps');
  13991. },
  13992. /**
  13993. * Replaces all of the props.
  13994. *
  13995. * @param {ReactClass} publicInstance The instance that should rerender.
  13996. * @param {object} props New props.
  13997. * @internal
  13998. */
  13999. enqueueReplaceProps: function (publicInstance, props) {
  14000. warnTDZ(publicInstance, 'replaceProps');
  14001. }
  14002. };
  14003. module.exports = ReactNoopUpdateQueue;
  14004. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  14005. /***/ },
  14006. /* 125 */
  14007. /***/ function(module, exports, __webpack_require__) {
  14008. /**
  14009. * Copyright 2013-2015, Facebook, Inc.
  14010. * All rights reserved.
  14011. *
  14012. * This source code is licensed under the BSD-style license found in the
  14013. * LICENSE file in the root directory of this source tree. An additional grant
  14014. * of patent rights can be found in the PATENTS file in the same directory.
  14015. *
  14016. * @providesModule ReactReconcileTransaction
  14017. * @typechecks static-only
  14018. */
  14019. 'use strict';
  14020. var CallbackQueue = __webpack_require__(55);
  14021. var PooledClass = __webpack_require__(56);
  14022. var ReactBrowserEventEmitter = __webpack_require__(29);
  14023. var ReactDOMFeatureFlags = __webpack_require__(41);
  14024. var ReactInputSelection = __webpack_require__(126);
  14025. var Transaction = __webpack_require__(57);
  14026. var assign = __webpack_require__(39);
  14027. /**
  14028. * Ensures that, when possible, the selection range (currently selected text
  14029. * input) is not disturbed by performing the transaction.
  14030. */
  14031. var SELECTION_RESTORATION = {
  14032. /**
  14033. * @return {Selection} Selection information.
  14034. */
  14035. initialize: ReactInputSelection.getSelectionInformation,
  14036. /**
  14037. * @param {Selection} sel Selection information returned from `initialize`.
  14038. */
  14039. close: ReactInputSelection.restoreSelection
  14040. };
  14041. /**
  14042. * Suppresses events (blur/focus) that could be inadvertently dispatched due to
  14043. * high level DOM manipulations (like temporarily removing a text input from the
  14044. * DOM).
  14045. */
  14046. var EVENT_SUPPRESSION = {
  14047. /**
  14048. * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before
  14049. * the reconciliation.
  14050. */
  14051. initialize: function () {
  14052. var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();
  14053. ReactBrowserEventEmitter.setEnabled(false);
  14054. return currentlyEnabled;
  14055. },
  14056. /**
  14057. * @param {boolean} previouslyEnabled Enabled status of
  14058. * `ReactBrowserEventEmitter` before the reconciliation occurred. `close`
  14059. * restores the previous value.
  14060. */
  14061. close: function (previouslyEnabled) {
  14062. ReactBrowserEventEmitter.setEnabled(previouslyEnabled);
  14063. }
  14064. };
  14065. /**
  14066. * Provides a queue for collecting `componentDidMount` and
  14067. * `componentDidUpdate` callbacks during the the transaction.
  14068. */
  14069. var ON_DOM_READY_QUEUEING = {
  14070. /**
  14071. * Initializes the internal `onDOMReady` queue.
  14072. */
  14073. initialize: function () {
  14074. this.reactMountReady.reset();
  14075. },
  14076. /**
  14077. * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
  14078. */
  14079. close: function () {
  14080. this.reactMountReady.notifyAll();
  14081. }
  14082. };
  14083. /**
  14084. * Executed within the scope of the `Transaction` instance. Consider these as
  14085. * being member methods, but with an implied ordering while being isolated from
  14086. * each other.
  14087. */
  14088. var TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];
  14089. /**
  14090. * Currently:
  14091. * - The order that these are listed in the transaction is critical:
  14092. * - Suppresses events.
  14093. * - Restores selection range.
  14094. *
  14095. * Future:
  14096. * - Restore document/overflow scroll positions that were unintentionally
  14097. * modified via DOM insertions above the top viewport boundary.
  14098. * - Implement/integrate with customized constraint based layout system and keep
  14099. * track of which dimensions must be remeasured.
  14100. *
  14101. * @class ReactReconcileTransaction
  14102. */
  14103. function ReactReconcileTransaction(forceHTML) {
  14104. this.reinitializeTransaction();
  14105. // Only server-side rendering really needs this option (see
  14106. // `ReactServerRendering`), but server-side uses
  14107. // `ReactServerRenderingTransaction` instead. This option is here so that it's
  14108. // accessible and defaults to false when `ReactDOMComponent` and
  14109. // `ReactTextComponent` checks it in `mountComponent`.`
  14110. this.renderToStaticMarkup = false;
  14111. this.reactMountReady = CallbackQueue.getPooled(null);
  14112. this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement;
  14113. }
  14114. var Mixin = {
  14115. /**
  14116. * @see Transaction
  14117. * @abstract
  14118. * @final
  14119. * @return {array<object>} List of operation wrap procedures.
  14120. * TODO: convert to array<TransactionWrapper>
  14121. */
  14122. getTransactionWrappers: function () {
  14123. return TRANSACTION_WRAPPERS;
  14124. },
  14125. /**
  14126. * @return {object} The queue to collect `onDOMReady` callbacks with.
  14127. */
  14128. getReactMountReady: function () {
  14129. return this.reactMountReady;
  14130. },
  14131. /**
  14132. * `PooledClass` looks for this, and will invoke this before allowing this
  14133. * instance to be reused.
  14134. */
  14135. destructor: function () {
  14136. CallbackQueue.release(this.reactMountReady);
  14137. this.reactMountReady = null;
  14138. }
  14139. };
  14140. assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
  14141. PooledClass.addPoolingTo(ReactReconcileTransaction);
  14142. module.exports = ReactReconcileTransaction;
  14143. /***/ },
  14144. /* 126 */
  14145. /***/ function(module, exports, __webpack_require__) {
  14146. /**
  14147. * Copyright 2013-2015, Facebook, Inc.
  14148. * All rights reserved.
  14149. *
  14150. * This source code is licensed under the BSD-style license found in the
  14151. * LICENSE file in the root directory of this source tree. An additional grant
  14152. * of patent rights can be found in the PATENTS file in the same directory.
  14153. *
  14154. * @providesModule ReactInputSelection
  14155. */
  14156. 'use strict';
  14157. var ReactDOMSelection = __webpack_require__(127);
  14158. var containsNode = __webpack_require__(59);
  14159. var focusNode = __webpack_require__(95);
  14160. var getActiveElement = __webpack_require__(129);
  14161. function isInDocument(node) {
  14162. return containsNode(document.documentElement, node);
  14163. }
  14164. /**
  14165. * @ReactInputSelection: React input selection module. Based on Selection.js,
  14166. * but modified to be suitable for react and has a couple of bug fixes (doesn't
  14167. * assume buttons have range selections allowed).
  14168. * Input selection module for React.
  14169. */
  14170. var ReactInputSelection = {
  14171. hasSelectionCapabilities: function (elem) {
  14172. var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
  14173. return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');
  14174. },
  14175. getSelectionInformation: function () {
  14176. var focusedElem = getActiveElement();
  14177. return {
  14178. focusedElem: focusedElem,
  14179. selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null
  14180. };
  14181. },
  14182. /**
  14183. * @restoreSelection: If any selection information was potentially lost,
  14184. * restore it. This is useful when performing operations that could remove dom
  14185. * nodes and place them back in, resulting in focus being lost.
  14186. */
  14187. restoreSelection: function (priorSelectionInformation) {
  14188. var curFocusedElem = getActiveElement();
  14189. var priorFocusedElem = priorSelectionInformation.focusedElem;
  14190. var priorSelectionRange = priorSelectionInformation.selectionRange;
  14191. if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
  14192. if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {
  14193. ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);
  14194. }
  14195. focusNode(priorFocusedElem);
  14196. }
  14197. },
  14198. /**
  14199. * @getSelection: Gets the selection bounds of a focused textarea, input or
  14200. * contentEditable node.
  14201. * -@input: Look up selection bounds of this input
  14202. * -@return {start: selectionStart, end: selectionEnd}
  14203. */
  14204. getSelection: function (input) {
  14205. var selection;
  14206. if ('selectionStart' in input) {
  14207. // Modern browser with input or textarea.
  14208. selection = {
  14209. start: input.selectionStart,
  14210. end: input.selectionEnd
  14211. };
  14212. } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {
  14213. // IE8 input.
  14214. var range = document.selection.createRange();
  14215. // There can only be one selection per document in IE, so it must
  14216. // be in our element.
  14217. if (range.parentElement() === input) {
  14218. selection = {
  14219. start: -range.moveStart('character', -input.value.length),
  14220. end: -range.moveEnd('character', -input.value.length)
  14221. };
  14222. }
  14223. } else {
  14224. // Content editable or old IE textarea.
  14225. selection = ReactDOMSelection.getOffsets(input);
  14226. }
  14227. return selection || { start: 0, end: 0 };
  14228. },
  14229. /**
  14230. * @setSelection: Sets the selection bounds of a textarea or input and focuses
  14231. * the input.
  14232. * -@input Set selection bounds of this input or textarea
  14233. * -@offsets Object of same form that is returned from get*
  14234. */
  14235. setSelection: function (input, offsets) {
  14236. var start = offsets.start;
  14237. var end = offsets.end;
  14238. if (typeof end === 'undefined') {
  14239. end = start;
  14240. }
  14241. if ('selectionStart' in input) {
  14242. input.selectionStart = start;
  14243. input.selectionEnd = Math.min(end, input.value.length);
  14244. } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {
  14245. var range = input.createTextRange();
  14246. range.collapse(true);
  14247. range.moveStart('character', start);
  14248. range.moveEnd('character', end - start);
  14249. range.select();
  14250. } else {
  14251. ReactDOMSelection.setOffsets(input, offsets);
  14252. }
  14253. }
  14254. };
  14255. module.exports = ReactInputSelection;
  14256. /***/ },
  14257. /* 127 */
  14258. /***/ function(module, exports, __webpack_require__) {
  14259. /**
  14260. * Copyright 2013-2015, Facebook, Inc.
  14261. * All rights reserved.
  14262. *
  14263. * This source code is licensed under the BSD-style license found in the
  14264. * LICENSE file in the root directory of this source tree. An additional grant
  14265. * of patent rights can be found in the PATENTS file in the same directory.
  14266. *
  14267. * @providesModule ReactDOMSelection
  14268. */
  14269. 'use strict';
  14270. var ExecutionEnvironment = __webpack_require__(9);
  14271. var getNodeForCharacterOffset = __webpack_require__(128);
  14272. var getTextContentAccessor = __webpack_require__(75);
  14273. /**
  14274. * While `isCollapsed` is available on the Selection object and `collapsed`
  14275. * is available on the Range object, IE11 sometimes gets them wrong.
  14276. * If the anchor/focus nodes and offsets are the same, the range is collapsed.
  14277. */
  14278. function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
  14279. return anchorNode === focusNode && anchorOffset === focusOffset;
  14280. }
  14281. /**
  14282. * Get the appropriate anchor and focus node/offset pairs for IE.
  14283. *
  14284. * The catch here is that IE's selection API doesn't provide information
  14285. * about whether the selection is forward or backward, so we have to
  14286. * behave as though it's always forward.
  14287. *
  14288. * IE text differs from modern selection in that it behaves as though
  14289. * block elements end with a new line. This means character offsets will
  14290. * differ between the two APIs.
  14291. *
  14292. * @param {DOMElement} node
  14293. * @return {object}
  14294. */
  14295. function getIEOffsets(node) {
  14296. var selection = document.selection;
  14297. var selectedRange = selection.createRange();
  14298. var selectedLength = selectedRange.text.length;
  14299. // Duplicate selection so we can move range without breaking user selection.
  14300. var fromStart = selectedRange.duplicate();
  14301. fromStart.moveToElementText(node);
  14302. fromStart.setEndPoint('EndToStart', selectedRange);
  14303. var startOffset = fromStart.text.length;
  14304. var endOffset = startOffset + selectedLength;
  14305. return {
  14306. start: startOffset,
  14307. end: endOffset
  14308. };
  14309. }
  14310. /**
  14311. * @param {DOMElement} node
  14312. * @return {?object}
  14313. */
  14314. function getModernOffsets(node) {
  14315. var selection = window.getSelection && window.getSelection();
  14316. if (!selection || selection.rangeCount === 0) {
  14317. return null;
  14318. }
  14319. var anchorNode = selection.anchorNode;
  14320. var anchorOffset = selection.anchorOffset;
  14321. var focusNode = selection.focusNode;
  14322. var focusOffset = selection.focusOffset;
  14323. var currentRange = selection.getRangeAt(0);
  14324. // In Firefox, range.startContainer and range.endContainer can be "anonymous
  14325. // divs", e.g. the up/down buttons on an <input type="number">. Anonymous
  14326. // divs do not seem to expose properties, triggering a "Permission denied
  14327. // error" if any of its properties are accessed. The only seemingly possible
  14328. // way to avoid erroring is to access a property that typically works for
  14329. // non-anonymous divs and catch any error that may otherwise arise. See
  14330. // https://bugzilla.mozilla.org/show_bug.cgi?id=208427
  14331. try {
  14332. /* eslint-disable no-unused-expressions */
  14333. currentRange.startContainer.nodeType;
  14334. currentRange.endContainer.nodeType;
  14335. /* eslint-enable no-unused-expressions */
  14336. } catch (e) {
  14337. return null;
  14338. }
  14339. // If the node and offset values are the same, the selection is collapsed.
  14340. // `Selection.isCollapsed` is available natively, but IE sometimes gets
  14341. // this value wrong.
  14342. var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);
  14343. var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;
  14344. var tempRange = currentRange.cloneRange();
  14345. tempRange.selectNodeContents(node);
  14346. tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);
  14347. var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);
  14348. var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;
  14349. var end = start + rangeLength;
  14350. // Detect whether the selection is backward.
  14351. var detectionRange = document.createRange();
  14352. detectionRange.setStart(anchorNode, anchorOffset);
  14353. detectionRange.setEnd(focusNode, focusOffset);
  14354. var isBackward = detectionRange.collapsed;
  14355. return {
  14356. start: isBackward ? end : start,
  14357. end: isBackward ? start : end
  14358. };
  14359. }
  14360. /**
  14361. * @param {DOMElement|DOMTextNode} node
  14362. * @param {object} offsets
  14363. */
  14364. function setIEOffsets(node, offsets) {
  14365. var range = document.selection.createRange().duplicate();
  14366. var start, end;
  14367. if (typeof offsets.end === 'undefined') {
  14368. start = offsets.start;
  14369. end = start;
  14370. } else if (offsets.start > offsets.end) {
  14371. start = offsets.end;
  14372. end = offsets.start;
  14373. } else {
  14374. start = offsets.start;
  14375. end = offsets.end;
  14376. }
  14377. range.moveToElementText(node);
  14378. range.moveStart('character', start);
  14379. range.setEndPoint('EndToStart', range);
  14380. range.moveEnd('character', end - start);
  14381. range.select();
  14382. }
  14383. /**
  14384. * In modern non-IE browsers, we can support both forward and backward
  14385. * selections.
  14386. *
  14387. * Note: IE10+ supports the Selection object, but it does not support
  14388. * the `extend` method, which means that even in modern IE, it's not possible
  14389. * to programatically create a backward selection. Thus, for all IE
  14390. * versions, we use the old IE API to create our selections.
  14391. *
  14392. * @param {DOMElement|DOMTextNode} node
  14393. * @param {object} offsets
  14394. */
  14395. function setModernOffsets(node, offsets) {
  14396. if (!window.getSelection) {
  14397. return;
  14398. }
  14399. var selection = window.getSelection();
  14400. var length = node[getTextContentAccessor()].length;
  14401. var start = Math.min(offsets.start, length);
  14402. var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length);
  14403. // IE 11 uses modern selection, but doesn't support the extend method.
  14404. // Flip backward selections, so we can set with a single range.
  14405. if (!selection.extend && start > end) {
  14406. var temp = end;
  14407. end = start;
  14408. start = temp;
  14409. }
  14410. var startMarker = getNodeForCharacterOffset(node, start);
  14411. var endMarker = getNodeForCharacterOffset(node, end);
  14412. if (startMarker && endMarker) {
  14413. var range = document.createRange();
  14414. range.setStart(startMarker.node, startMarker.offset);
  14415. selection.removeAllRanges();
  14416. if (start > end) {
  14417. selection.addRange(range);
  14418. selection.extend(endMarker.node, endMarker.offset);
  14419. } else {
  14420. range.setEnd(endMarker.node, endMarker.offset);
  14421. selection.addRange(range);
  14422. }
  14423. }
  14424. }
  14425. var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);
  14426. var ReactDOMSelection = {
  14427. /**
  14428. * @param {DOMElement} node
  14429. */
  14430. getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,
  14431. /**
  14432. * @param {DOMElement|DOMTextNode} node
  14433. * @param {object} offsets
  14434. */
  14435. setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets
  14436. };
  14437. module.exports = ReactDOMSelection;
  14438. /***/ },
  14439. /* 128 */
  14440. /***/ function(module, exports) {
  14441. /**
  14442. * Copyright 2013-2015, Facebook, Inc.
  14443. * All rights reserved.
  14444. *
  14445. * This source code is licensed under the BSD-style license found in the
  14446. * LICENSE file in the root directory of this source tree. An additional grant
  14447. * of patent rights can be found in the PATENTS file in the same directory.
  14448. *
  14449. * @providesModule getNodeForCharacterOffset
  14450. */
  14451. 'use strict';
  14452. /**
  14453. * Given any node return the first leaf node without children.
  14454. *
  14455. * @param {DOMElement|DOMTextNode} node
  14456. * @return {DOMElement|DOMTextNode}
  14457. */
  14458. function getLeafNode(node) {
  14459. while (node && node.firstChild) {
  14460. node = node.firstChild;
  14461. }
  14462. return node;
  14463. }
  14464. /**
  14465. * Get the next sibling within a container. This will walk up the
  14466. * DOM if a node's siblings have been exhausted.
  14467. *
  14468. * @param {DOMElement|DOMTextNode} node
  14469. * @return {?DOMElement|DOMTextNode}
  14470. */
  14471. function getSiblingNode(node) {
  14472. while (node) {
  14473. if (node.nextSibling) {
  14474. return node.nextSibling;
  14475. }
  14476. node = node.parentNode;
  14477. }
  14478. }
  14479. /**
  14480. * Get object describing the nodes which contain characters at offset.
  14481. *
  14482. * @param {DOMElement|DOMTextNode} root
  14483. * @param {number} offset
  14484. * @return {?object}
  14485. */
  14486. function getNodeForCharacterOffset(root, offset) {
  14487. var node = getLeafNode(root);
  14488. var nodeStart = 0;
  14489. var nodeEnd = 0;
  14490. while (node) {
  14491. if (node.nodeType === 3) {
  14492. nodeEnd = nodeStart + node.textContent.length;
  14493. if (nodeStart <= offset && nodeEnd >= offset) {
  14494. return {
  14495. node: node,
  14496. offset: offset - nodeStart
  14497. };
  14498. }
  14499. nodeStart = nodeEnd;
  14500. }
  14501. node = getLeafNode(getSiblingNode(node));
  14502. }
  14503. }
  14504. module.exports = getNodeForCharacterOffset;
  14505. /***/ },
  14506. /* 129 */
  14507. /***/ function(module, exports) {
  14508. /**
  14509. * Copyright 2013-2015, Facebook, Inc.
  14510. * All rights reserved.
  14511. *
  14512. * This source code is licensed under the BSD-style license found in the
  14513. * LICENSE file in the root directory of this source tree. An additional grant
  14514. * of patent rights can be found in the PATENTS file in the same directory.
  14515. *
  14516. * @providesModule getActiveElement
  14517. * @typechecks
  14518. */
  14519. /* eslint-disable fb-www/typeof-undefined */
  14520. /**
  14521. * Same as document.activeElement but wraps in a try-catch block. In IE it is
  14522. * not safe to call document.activeElement if there is nothing focused.
  14523. *
  14524. * The activeElement will be null only if the document or document body is not
  14525. * yet defined.
  14526. */
  14527. 'use strict';
  14528. function getActiveElement() /*?DOMElement*/{
  14529. if (typeof document === 'undefined') {
  14530. return null;
  14531. }
  14532. try {
  14533. return document.activeElement || document.body;
  14534. } catch (e) {
  14535. return document.body;
  14536. }
  14537. }
  14538. module.exports = getActiveElement;
  14539. /***/ },
  14540. /* 130 */
  14541. /***/ function(module, exports, __webpack_require__) {
  14542. /**
  14543. * Copyright 2013-2015, Facebook, Inc.
  14544. * All rights reserved.
  14545. *
  14546. * This source code is licensed under the BSD-style license found in the
  14547. * LICENSE file in the root directory of this source tree. An additional grant
  14548. * of patent rights can be found in the PATENTS file in the same directory.
  14549. *
  14550. * @providesModule SelectEventPlugin
  14551. */
  14552. 'use strict';
  14553. var EventConstants = __webpack_require__(30);
  14554. var EventPropagators = __webpack_require__(73);
  14555. var ExecutionEnvironment = __webpack_require__(9);
  14556. var ReactInputSelection = __webpack_require__(126);
  14557. var SyntheticEvent = __webpack_require__(77);
  14558. var getActiveElement = __webpack_require__(129);
  14559. var isTextInputElement = __webpack_require__(82);
  14560. var keyOf = __webpack_require__(79);
  14561. var shallowEqual = __webpack_require__(117);
  14562. var topLevelTypes = EventConstants.topLevelTypes;
  14563. var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;
  14564. var eventTypes = {
  14565. select: {
  14566. phasedRegistrationNames: {
  14567. bubbled: keyOf({ onSelect: null }),
  14568. captured: keyOf({ onSelectCapture: null })
  14569. },
  14570. dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]
  14571. }
  14572. };
  14573. var activeElement = null;
  14574. var activeElementID = null;
  14575. var lastSelection = null;
  14576. var mouseDown = false;
  14577. // Track whether a listener exists for this plugin. If none exist, we do
  14578. // not extract events.
  14579. var hasListener = false;
  14580. var ON_SELECT_KEY = keyOf({ onSelect: null });
  14581. /**
  14582. * Get an object which is a unique representation of the current selection.
  14583. *
  14584. * The return value will not be consistent across nodes or browsers, but
  14585. * two identical selections on the same node will return identical objects.
  14586. *
  14587. * @param {DOMElement} node
  14588. * @return {object}
  14589. */
  14590. function getSelection(node) {
  14591. if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {
  14592. return {
  14593. start: node.selectionStart,
  14594. end: node.selectionEnd
  14595. };
  14596. } else if (window.getSelection) {
  14597. var selection = window.getSelection();
  14598. return {
  14599. anchorNode: selection.anchorNode,
  14600. anchorOffset: selection.anchorOffset,
  14601. focusNode: selection.focusNode,
  14602. focusOffset: selection.focusOffset
  14603. };
  14604. } else if (document.selection) {
  14605. var range = document.selection.createRange();
  14606. return {
  14607. parentElement: range.parentElement(),
  14608. text: range.text,
  14609. top: range.boundingTop,
  14610. left: range.boundingLeft
  14611. };
  14612. }
  14613. }
  14614. /**
  14615. * Poll selection to see whether it's changed.
  14616. *
  14617. * @param {object} nativeEvent
  14618. * @return {?SyntheticEvent}
  14619. */
  14620. function constructSelectEvent(nativeEvent, nativeEventTarget) {
  14621. // Ensure we have the right element, and that the user is not dragging a
  14622. // selection (this matches native `select` event behavior). In HTML5, select
  14623. // fires only on input and textarea thus if there's no focused element we
  14624. // won't dispatch.
  14625. if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {
  14626. return null;
  14627. }
  14628. // Only fire when selection has actually changed.
  14629. var currentSelection = getSelection(activeElement);
  14630. if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
  14631. lastSelection = currentSelection;
  14632. var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget);
  14633. syntheticEvent.type = 'select';
  14634. syntheticEvent.target = activeElement;
  14635. EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);
  14636. return syntheticEvent;
  14637. }
  14638. return null;
  14639. }
  14640. /**
  14641. * This plugin creates an `onSelect` event that normalizes select events
  14642. * across form elements.
  14643. *
  14644. * Supported elements are:
  14645. * - input (see `isTextInputElement`)
  14646. * - textarea
  14647. * - contentEditable
  14648. *
  14649. * This differs from native browser implementations in the following ways:
  14650. * - Fires on contentEditable fields as well as inputs.
  14651. * - Fires for collapsed selection.
  14652. * - Fires after user input.
  14653. */
  14654. var SelectEventPlugin = {
  14655. eventTypes: eventTypes,
  14656. /**
  14657. * @param {string} topLevelType Record from `EventConstants`.
  14658. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  14659. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  14660. * @param {object} nativeEvent Native browser event.
  14661. * @return {*} An accumulation of synthetic events.
  14662. * @see {EventPluginHub.extractEvents}
  14663. */
  14664. extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  14665. if (!hasListener) {
  14666. return null;
  14667. }
  14668. switch (topLevelType) {
  14669. // Track the input node that has focus.
  14670. case topLevelTypes.topFocus:
  14671. if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') {
  14672. activeElement = topLevelTarget;
  14673. activeElementID = topLevelTargetID;
  14674. lastSelection = null;
  14675. }
  14676. break;
  14677. case topLevelTypes.topBlur:
  14678. activeElement = null;
  14679. activeElementID = null;
  14680. lastSelection = null;
  14681. break;
  14682. // Don't fire the event while the user is dragging. This matches the
  14683. // semantics of the native select event.
  14684. case topLevelTypes.topMouseDown:
  14685. mouseDown = true;
  14686. break;
  14687. case topLevelTypes.topContextMenu:
  14688. case topLevelTypes.topMouseUp:
  14689. mouseDown = false;
  14690. return constructSelectEvent(nativeEvent, nativeEventTarget);
  14691. // Chrome and IE fire non-standard event when selection is changed (and
  14692. // sometimes when it hasn't). IE's event fires out of order with respect
  14693. // to key and input events on deletion, so we discard it.
  14694. //
  14695. // Firefox doesn't support selectionchange, so check selection status
  14696. // after each key entry. The selection changes after keydown and before
  14697. // keyup, but we check on keydown as well in the case of holding down a
  14698. // key, when multiple keydown events are fired but only one keyup is.
  14699. // This is also our approach for IE handling, for the reason above.
  14700. case topLevelTypes.topSelectionChange:
  14701. if (skipSelectionChangeEvent) {
  14702. break;
  14703. }
  14704. // falls through
  14705. case topLevelTypes.topKeyDown:
  14706. case topLevelTypes.topKeyUp:
  14707. return constructSelectEvent(nativeEvent, nativeEventTarget);
  14708. }
  14709. return null;
  14710. },
  14711. didPutListener: function (id, registrationName, listener) {
  14712. if (registrationName === ON_SELECT_KEY) {
  14713. hasListener = true;
  14714. }
  14715. }
  14716. };
  14717. module.exports = SelectEventPlugin;
  14718. /***/ },
  14719. /* 131 */
  14720. /***/ function(module, exports) {
  14721. /**
  14722. * Copyright 2013-2015, Facebook, Inc.
  14723. * All rights reserved.
  14724. *
  14725. * This source code is licensed under the BSD-style license found in the
  14726. * LICENSE file in the root directory of this source tree. An additional grant
  14727. * of patent rights can be found in the PATENTS file in the same directory.
  14728. *
  14729. * @providesModule ServerReactRootIndex
  14730. * @typechecks
  14731. */
  14732. 'use strict';
  14733. /**
  14734. * Size of the reactRoot ID space. We generate random numbers for React root
  14735. * IDs and if there's a collision the events and DOM update system will
  14736. * get confused. In the future we need a way to generate GUIDs but for
  14737. * now this will work on a smaller scale.
  14738. */
  14739. var GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);
  14740. var ServerReactRootIndex = {
  14741. createReactRootIndex: function () {
  14742. return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);
  14743. }
  14744. };
  14745. module.exports = ServerReactRootIndex;
  14746. /***/ },
  14747. /* 132 */
  14748. /***/ function(module, exports, __webpack_require__) {
  14749. /* WEBPACK VAR INJECTION */(function(process) {/**
  14750. * Copyright 2013-2015, Facebook, Inc.
  14751. * All rights reserved.
  14752. *
  14753. * This source code is licensed under the BSD-style license found in the
  14754. * LICENSE file in the root directory of this source tree. An additional grant
  14755. * of patent rights can be found in the PATENTS file in the same directory.
  14756. *
  14757. * @providesModule SimpleEventPlugin
  14758. */
  14759. 'use strict';
  14760. var EventConstants = __webpack_require__(30);
  14761. var EventListener = __webpack_require__(119);
  14762. var EventPropagators = __webpack_require__(73);
  14763. var ReactMount = __webpack_require__(28);
  14764. var SyntheticClipboardEvent = __webpack_require__(133);
  14765. var SyntheticEvent = __webpack_require__(77);
  14766. var SyntheticFocusEvent = __webpack_require__(134);
  14767. var SyntheticKeyboardEvent = __webpack_require__(135);
  14768. var SyntheticMouseEvent = __webpack_require__(86);
  14769. var SyntheticDragEvent = __webpack_require__(138);
  14770. var SyntheticTouchEvent = __webpack_require__(139);
  14771. var SyntheticUIEvent = __webpack_require__(87);
  14772. var SyntheticWheelEvent = __webpack_require__(140);
  14773. var emptyFunction = __webpack_require__(15);
  14774. var getEventCharCode = __webpack_require__(136);
  14775. var invariant = __webpack_require__(13);
  14776. var keyOf = __webpack_require__(79);
  14777. var topLevelTypes = EventConstants.topLevelTypes;
  14778. var eventTypes = {
  14779. abort: {
  14780. phasedRegistrationNames: {
  14781. bubbled: keyOf({ onAbort: true }),
  14782. captured: keyOf({ onAbortCapture: true })
  14783. }
  14784. },
  14785. blur: {
  14786. phasedRegistrationNames: {
  14787. bubbled: keyOf({ onBlur: true }),
  14788. captured: keyOf({ onBlurCapture: true })
  14789. }
  14790. },
  14791. canPlay: {
  14792. phasedRegistrationNames: {
  14793. bubbled: keyOf({ onCanPlay: true }),
  14794. captured: keyOf({ onCanPlayCapture: true })
  14795. }
  14796. },
  14797. canPlayThrough: {
  14798. phasedRegistrationNames: {
  14799. bubbled: keyOf({ onCanPlayThrough: true }),
  14800. captured: keyOf({ onCanPlayThroughCapture: true })
  14801. }
  14802. },
  14803. click: {
  14804. phasedRegistrationNames: {
  14805. bubbled: keyOf({ onClick: true }),
  14806. captured: keyOf({ onClickCapture: true })
  14807. }
  14808. },
  14809. contextMenu: {
  14810. phasedRegistrationNames: {
  14811. bubbled: keyOf({ onContextMenu: true }),
  14812. captured: keyOf({ onContextMenuCapture: true })
  14813. }
  14814. },
  14815. copy: {
  14816. phasedRegistrationNames: {
  14817. bubbled: keyOf({ onCopy: true }),
  14818. captured: keyOf({ onCopyCapture: true })
  14819. }
  14820. },
  14821. cut: {
  14822. phasedRegistrationNames: {
  14823. bubbled: keyOf({ onCut: true }),
  14824. captured: keyOf({ onCutCapture: true })
  14825. }
  14826. },
  14827. doubleClick: {
  14828. phasedRegistrationNames: {
  14829. bubbled: keyOf({ onDoubleClick: true }),
  14830. captured: keyOf({ onDoubleClickCapture: true })
  14831. }
  14832. },
  14833. drag: {
  14834. phasedRegistrationNames: {
  14835. bubbled: keyOf({ onDrag: true }),
  14836. captured: keyOf({ onDragCapture: true })
  14837. }
  14838. },
  14839. dragEnd: {
  14840. phasedRegistrationNames: {
  14841. bubbled: keyOf({ onDragEnd: true }),
  14842. captured: keyOf({ onDragEndCapture: true })
  14843. }
  14844. },
  14845. dragEnter: {
  14846. phasedRegistrationNames: {
  14847. bubbled: keyOf({ onDragEnter: true }),
  14848. captured: keyOf({ onDragEnterCapture: true })
  14849. }
  14850. },
  14851. dragExit: {
  14852. phasedRegistrationNames: {
  14853. bubbled: keyOf({ onDragExit: true }),
  14854. captured: keyOf({ onDragExitCapture: true })
  14855. }
  14856. },
  14857. dragLeave: {
  14858. phasedRegistrationNames: {
  14859. bubbled: keyOf({ onDragLeave: true }),
  14860. captured: keyOf({ onDragLeaveCapture: true })
  14861. }
  14862. },
  14863. dragOver: {
  14864. phasedRegistrationNames: {
  14865. bubbled: keyOf({ onDragOver: true }),
  14866. captured: keyOf({ onDragOverCapture: true })
  14867. }
  14868. },
  14869. dragStart: {
  14870. phasedRegistrationNames: {
  14871. bubbled: keyOf({ onDragStart: true }),
  14872. captured: keyOf({ onDragStartCapture: true })
  14873. }
  14874. },
  14875. drop: {
  14876. phasedRegistrationNames: {
  14877. bubbled: keyOf({ onDrop: true }),
  14878. captured: keyOf({ onDropCapture: true })
  14879. }
  14880. },
  14881. durationChange: {
  14882. phasedRegistrationNames: {
  14883. bubbled: keyOf({ onDurationChange: true }),
  14884. captured: keyOf({ onDurationChangeCapture: true })
  14885. }
  14886. },
  14887. emptied: {
  14888. phasedRegistrationNames: {
  14889. bubbled: keyOf({ onEmptied: true }),
  14890. captured: keyOf({ onEmptiedCapture: true })
  14891. }
  14892. },
  14893. encrypted: {
  14894. phasedRegistrationNames: {
  14895. bubbled: keyOf({ onEncrypted: true }),
  14896. captured: keyOf({ onEncryptedCapture: true })
  14897. }
  14898. },
  14899. ended: {
  14900. phasedRegistrationNames: {
  14901. bubbled: keyOf({ onEnded: true }),
  14902. captured: keyOf({ onEndedCapture: true })
  14903. }
  14904. },
  14905. error: {
  14906. phasedRegistrationNames: {
  14907. bubbled: keyOf({ onError: true }),
  14908. captured: keyOf({ onErrorCapture: true })
  14909. }
  14910. },
  14911. focus: {
  14912. phasedRegistrationNames: {
  14913. bubbled: keyOf({ onFocus: true }),
  14914. captured: keyOf({ onFocusCapture: true })
  14915. }
  14916. },
  14917. input: {
  14918. phasedRegistrationNames: {
  14919. bubbled: keyOf({ onInput: true }),
  14920. captured: keyOf({ onInputCapture: true })
  14921. }
  14922. },
  14923. keyDown: {
  14924. phasedRegistrationNames: {
  14925. bubbled: keyOf({ onKeyDown: true }),
  14926. captured: keyOf({ onKeyDownCapture: true })
  14927. }
  14928. },
  14929. keyPress: {
  14930. phasedRegistrationNames: {
  14931. bubbled: keyOf({ onKeyPress: true }),
  14932. captured: keyOf({ onKeyPressCapture: true })
  14933. }
  14934. },
  14935. keyUp: {
  14936. phasedRegistrationNames: {
  14937. bubbled: keyOf({ onKeyUp: true }),
  14938. captured: keyOf({ onKeyUpCapture: true })
  14939. }
  14940. },
  14941. load: {
  14942. phasedRegistrationNames: {
  14943. bubbled: keyOf({ onLoad: true }),
  14944. captured: keyOf({ onLoadCapture: true })
  14945. }
  14946. },
  14947. loadedData: {
  14948. phasedRegistrationNames: {
  14949. bubbled: keyOf({ onLoadedData: true }),
  14950. captured: keyOf({ onLoadedDataCapture: true })
  14951. }
  14952. },
  14953. loadedMetadata: {
  14954. phasedRegistrationNames: {
  14955. bubbled: keyOf({ onLoadedMetadata: true }),
  14956. captured: keyOf({ onLoadedMetadataCapture: true })
  14957. }
  14958. },
  14959. loadStart: {
  14960. phasedRegistrationNames: {
  14961. bubbled: keyOf({ onLoadStart: true }),
  14962. captured: keyOf({ onLoadStartCapture: true })
  14963. }
  14964. },
  14965. // Note: We do not allow listening to mouseOver events. Instead, use the
  14966. // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.
  14967. mouseDown: {
  14968. phasedRegistrationNames: {
  14969. bubbled: keyOf({ onMouseDown: true }),
  14970. captured: keyOf({ onMouseDownCapture: true })
  14971. }
  14972. },
  14973. mouseMove: {
  14974. phasedRegistrationNames: {
  14975. bubbled: keyOf({ onMouseMove: true }),
  14976. captured: keyOf({ onMouseMoveCapture: true })
  14977. }
  14978. },
  14979. mouseOut: {
  14980. phasedRegistrationNames: {
  14981. bubbled: keyOf({ onMouseOut: true }),
  14982. captured: keyOf({ onMouseOutCapture: true })
  14983. }
  14984. },
  14985. mouseOver: {
  14986. phasedRegistrationNames: {
  14987. bubbled: keyOf({ onMouseOver: true }),
  14988. captured: keyOf({ onMouseOverCapture: true })
  14989. }
  14990. },
  14991. mouseUp: {
  14992. phasedRegistrationNames: {
  14993. bubbled: keyOf({ onMouseUp: true }),
  14994. captured: keyOf({ onMouseUpCapture: true })
  14995. }
  14996. },
  14997. paste: {
  14998. phasedRegistrationNames: {
  14999. bubbled: keyOf({ onPaste: true }),
  15000. captured: keyOf({ onPasteCapture: true })
  15001. }
  15002. },
  15003. pause: {
  15004. phasedRegistrationNames: {
  15005. bubbled: keyOf({ onPause: true }),
  15006. captured: keyOf({ onPauseCapture: true })
  15007. }
  15008. },
  15009. play: {
  15010. phasedRegistrationNames: {
  15011. bubbled: keyOf({ onPlay: true }),
  15012. captured: keyOf({ onPlayCapture: true })
  15013. }
  15014. },
  15015. playing: {
  15016. phasedRegistrationNames: {
  15017. bubbled: keyOf({ onPlaying: true }),
  15018. captured: keyOf({ onPlayingCapture: true })
  15019. }
  15020. },
  15021. progress: {
  15022. phasedRegistrationNames: {
  15023. bubbled: keyOf({ onProgress: true }),
  15024. captured: keyOf({ onProgressCapture: true })
  15025. }
  15026. },
  15027. rateChange: {
  15028. phasedRegistrationNames: {
  15029. bubbled: keyOf({ onRateChange: true }),
  15030. captured: keyOf({ onRateChangeCapture: true })
  15031. }
  15032. },
  15033. reset: {
  15034. phasedRegistrationNames: {
  15035. bubbled: keyOf({ onReset: true }),
  15036. captured: keyOf({ onResetCapture: true })
  15037. }
  15038. },
  15039. scroll: {
  15040. phasedRegistrationNames: {
  15041. bubbled: keyOf({ onScroll: true }),
  15042. captured: keyOf({ onScrollCapture: true })
  15043. }
  15044. },
  15045. seeked: {
  15046. phasedRegistrationNames: {
  15047. bubbled: keyOf({ onSeeked: true }),
  15048. captured: keyOf({ onSeekedCapture: true })
  15049. }
  15050. },
  15051. seeking: {
  15052. phasedRegistrationNames: {
  15053. bubbled: keyOf({ onSeeking: true }),
  15054. captured: keyOf({ onSeekingCapture: true })
  15055. }
  15056. },
  15057. stalled: {
  15058. phasedRegistrationNames: {
  15059. bubbled: keyOf({ onStalled: true }),
  15060. captured: keyOf({ onStalledCapture: true })
  15061. }
  15062. },
  15063. submit: {
  15064. phasedRegistrationNames: {
  15065. bubbled: keyOf({ onSubmit: true }),
  15066. captured: keyOf({ onSubmitCapture: true })
  15067. }
  15068. },
  15069. suspend: {
  15070. phasedRegistrationNames: {
  15071. bubbled: keyOf({ onSuspend: true }),
  15072. captured: keyOf({ onSuspendCapture: true })
  15073. }
  15074. },
  15075. timeUpdate: {
  15076. phasedRegistrationNames: {
  15077. bubbled: keyOf({ onTimeUpdate: true }),
  15078. captured: keyOf({ onTimeUpdateCapture: true })
  15079. }
  15080. },
  15081. touchCancel: {
  15082. phasedRegistrationNames: {
  15083. bubbled: keyOf({ onTouchCancel: true }),
  15084. captured: keyOf({ onTouchCancelCapture: true })
  15085. }
  15086. },
  15087. touchEnd: {
  15088. phasedRegistrationNames: {
  15089. bubbled: keyOf({ onTouchEnd: true }),
  15090. captured: keyOf({ onTouchEndCapture: true })
  15091. }
  15092. },
  15093. touchMove: {
  15094. phasedRegistrationNames: {
  15095. bubbled: keyOf({ onTouchMove: true }),
  15096. captured: keyOf({ onTouchMoveCapture: true })
  15097. }
  15098. },
  15099. touchStart: {
  15100. phasedRegistrationNames: {
  15101. bubbled: keyOf({ onTouchStart: true }),
  15102. captured: keyOf({ onTouchStartCapture: true })
  15103. }
  15104. },
  15105. volumeChange: {
  15106. phasedRegistrationNames: {
  15107. bubbled: keyOf({ onVolumeChange: true }),
  15108. captured: keyOf({ onVolumeChangeCapture: true })
  15109. }
  15110. },
  15111. waiting: {
  15112. phasedRegistrationNames: {
  15113. bubbled: keyOf({ onWaiting: true }),
  15114. captured: keyOf({ onWaitingCapture: true })
  15115. }
  15116. },
  15117. wheel: {
  15118. phasedRegistrationNames: {
  15119. bubbled: keyOf({ onWheel: true }),
  15120. captured: keyOf({ onWheelCapture: true })
  15121. }
  15122. }
  15123. };
  15124. var topLevelEventsToDispatchConfig = {
  15125. topAbort: eventTypes.abort,
  15126. topBlur: eventTypes.blur,
  15127. topCanPlay: eventTypes.canPlay,
  15128. topCanPlayThrough: eventTypes.canPlayThrough,
  15129. topClick: eventTypes.click,
  15130. topContextMenu: eventTypes.contextMenu,
  15131. topCopy: eventTypes.copy,
  15132. topCut: eventTypes.cut,
  15133. topDoubleClick: eventTypes.doubleClick,
  15134. topDrag: eventTypes.drag,
  15135. topDragEnd: eventTypes.dragEnd,
  15136. topDragEnter: eventTypes.dragEnter,
  15137. topDragExit: eventTypes.dragExit,
  15138. topDragLeave: eventTypes.dragLeave,
  15139. topDragOver: eventTypes.dragOver,
  15140. topDragStart: eventTypes.dragStart,
  15141. topDrop: eventTypes.drop,
  15142. topDurationChange: eventTypes.durationChange,
  15143. topEmptied: eventTypes.emptied,
  15144. topEncrypted: eventTypes.encrypted,
  15145. topEnded: eventTypes.ended,
  15146. topError: eventTypes.error,
  15147. topFocus: eventTypes.focus,
  15148. topInput: eventTypes.input,
  15149. topKeyDown: eventTypes.keyDown,
  15150. topKeyPress: eventTypes.keyPress,
  15151. topKeyUp: eventTypes.keyUp,
  15152. topLoad: eventTypes.load,
  15153. topLoadedData: eventTypes.loadedData,
  15154. topLoadedMetadata: eventTypes.loadedMetadata,
  15155. topLoadStart: eventTypes.loadStart,
  15156. topMouseDown: eventTypes.mouseDown,
  15157. topMouseMove: eventTypes.mouseMove,
  15158. topMouseOut: eventTypes.mouseOut,
  15159. topMouseOver: eventTypes.mouseOver,
  15160. topMouseUp: eventTypes.mouseUp,
  15161. topPaste: eventTypes.paste,
  15162. topPause: eventTypes.pause,
  15163. topPlay: eventTypes.play,
  15164. topPlaying: eventTypes.playing,
  15165. topProgress: eventTypes.progress,
  15166. topRateChange: eventTypes.rateChange,
  15167. topReset: eventTypes.reset,
  15168. topScroll: eventTypes.scroll,
  15169. topSeeked: eventTypes.seeked,
  15170. topSeeking: eventTypes.seeking,
  15171. topStalled: eventTypes.stalled,
  15172. topSubmit: eventTypes.submit,
  15173. topSuspend: eventTypes.suspend,
  15174. topTimeUpdate: eventTypes.timeUpdate,
  15175. topTouchCancel: eventTypes.touchCancel,
  15176. topTouchEnd: eventTypes.touchEnd,
  15177. topTouchMove: eventTypes.touchMove,
  15178. topTouchStart: eventTypes.touchStart,
  15179. topVolumeChange: eventTypes.volumeChange,
  15180. topWaiting: eventTypes.waiting,
  15181. topWheel: eventTypes.wheel
  15182. };
  15183. for (var type in topLevelEventsToDispatchConfig) {
  15184. topLevelEventsToDispatchConfig[type].dependencies = [type];
  15185. }
  15186. var ON_CLICK_KEY = keyOf({ onClick: null });
  15187. var onClickListeners = {};
  15188. var SimpleEventPlugin = {
  15189. eventTypes: eventTypes,
  15190. /**
  15191. * @param {string} topLevelType Record from `EventConstants`.
  15192. * @param {DOMEventTarget} topLevelTarget The listening component root node.
  15193. * @param {string} topLevelTargetID ID of `topLevelTarget`.
  15194. * @param {object} nativeEvent Native browser event.
  15195. * @return {*} An accumulation of synthetic events.
  15196. * @see {EventPluginHub.extractEvents}
  15197. */
  15198. extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
  15199. var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];
  15200. if (!dispatchConfig) {
  15201. return null;
  15202. }
  15203. var EventConstructor;
  15204. switch (topLevelType) {
  15205. case topLevelTypes.topAbort:
  15206. case topLevelTypes.topCanPlay:
  15207. case topLevelTypes.topCanPlayThrough:
  15208. case topLevelTypes.topDurationChange:
  15209. case topLevelTypes.topEmptied:
  15210. case topLevelTypes.topEncrypted:
  15211. case topLevelTypes.topEnded:
  15212. case topLevelTypes.topError:
  15213. case topLevelTypes.topInput:
  15214. case topLevelTypes.topLoad:
  15215. case topLevelTypes.topLoadedData:
  15216. case topLevelTypes.topLoadedMetadata:
  15217. case topLevelTypes.topLoadStart:
  15218. case topLevelTypes.topPause:
  15219. case topLevelTypes.topPlay:
  15220. case topLevelTypes.topPlaying:
  15221. case topLevelTypes.topProgress:
  15222. case topLevelTypes.topRateChange:
  15223. case topLevelTypes.topReset:
  15224. case topLevelTypes.topSeeked:
  15225. case topLevelTypes.topSeeking:
  15226. case topLevelTypes.topStalled:
  15227. case topLevelTypes.topSubmit:
  15228. case topLevelTypes.topSuspend:
  15229. case topLevelTypes.topTimeUpdate:
  15230. case topLevelTypes.topVolumeChange:
  15231. case topLevelTypes.topWaiting:
  15232. // HTML Events
  15233. // @see http://www.w3.org/TR/html5/index.html#events-0
  15234. EventConstructor = SyntheticEvent;
  15235. break;
  15236. case topLevelTypes.topKeyPress:
  15237. // FireFox creates a keypress event for function keys too. This removes
  15238. // the unwanted keypress events. Enter is however both printable and
  15239. // non-printable. One would expect Tab to be as well (but it isn't).
  15240. if (getEventCharCode(nativeEvent) === 0) {
  15241. return null;
  15242. }
  15243. /* falls through */
  15244. case topLevelTypes.topKeyDown:
  15245. case topLevelTypes.topKeyUp:
  15246. EventConstructor = SyntheticKeyboardEvent;
  15247. break;
  15248. case topLevelTypes.topBlur:
  15249. case topLevelTypes.topFocus:
  15250. EventConstructor = SyntheticFocusEvent;
  15251. break;
  15252. case topLevelTypes.topClick:
  15253. // Firefox creates a click event on right mouse clicks. This removes the
  15254. // unwanted click events.
  15255. if (nativeEvent.button === 2) {
  15256. return null;
  15257. }
  15258. /* falls through */
  15259. case topLevelTypes.topContextMenu:
  15260. case topLevelTypes.topDoubleClick:
  15261. case topLevelTypes.topMouseDown:
  15262. case topLevelTypes.topMouseMove:
  15263. case topLevelTypes.topMouseOut:
  15264. case topLevelTypes.topMouseOver:
  15265. case topLevelTypes.topMouseUp:
  15266. EventConstructor = SyntheticMouseEvent;
  15267. break;
  15268. case topLevelTypes.topDrag:
  15269. case topLevelTypes.topDragEnd:
  15270. case topLevelTypes.topDragEnter:
  15271. case topLevelTypes.topDragExit:
  15272. case topLevelTypes.topDragLeave:
  15273. case topLevelTypes.topDragOver:
  15274. case topLevelTypes.topDragStart:
  15275. case topLevelTypes.topDrop:
  15276. EventConstructor = SyntheticDragEvent;
  15277. break;
  15278. case topLevelTypes.topTouchCancel:
  15279. case topLevelTypes.topTouchEnd:
  15280. case topLevelTypes.topTouchMove:
  15281. case topLevelTypes.topTouchStart:
  15282. EventConstructor = SyntheticTouchEvent;
  15283. break;
  15284. case topLevelTypes.topScroll:
  15285. EventConstructor = SyntheticUIEvent;
  15286. break;
  15287. case topLevelTypes.topWheel:
  15288. EventConstructor = SyntheticWheelEvent;
  15289. break;
  15290. case topLevelTypes.topCopy:
  15291. case topLevelTypes.topCut:
  15292. case topLevelTypes.topPaste:
  15293. EventConstructor = SyntheticClipboardEvent;
  15294. break;
  15295. }
  15296. !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined;
  15297. var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget);
  15298. EventPropagators.accumulateTwoPhaseDispatches(event);
  15299. return event;
  15300. },
  15301. didPutListener: function (id, registrationName, listener) {
  15302. // Mobile Safari does not fire properly bubble click events on
  15303. // non-interactive elements, which means delegated click listeners do not
  15304. // fire. The workaround for this bug involves attaching an empty click
  15305. // listener on the target node.
  15306. if (registrationName === ON_CLICK_KEY) {
  15307. var node = ReactMount.getNode(id);
  15308. if (!onClickListeners[id]) {
  15309. onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction);
  15310. }
  15311. }
  15312. },
  15313. willDeleteListener: function (id, registrationName) {
  15314. if (registrationName === ON_CLICK_KEY) {
  15315. onClickListeners[id].remove();
  15316. delete onClickListeners[id];
  15317. }
  15318. }
  15319. };
  15320. module.exports = SimpleEventPlugin;
  15321. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  15322. /***/ },
  15323. /* 133 */
  15324. /***/ function(module, exports, __webpack_require__) {
  15325. /**
  15326. * Copyright 2013-2015, Facebook, Inc.
  15327. * All rights reserved.
  15328. *
  15329. * This source code is licensed under the BSD-style license found in the
  15330. * LICENSE file in the root directory of this source tree. An additional grant
  15331. * of patent rights can be found in the PATENTS file in the same directory.
  15332. *
  15333. * @providesModule SyntheticClipboardEvent
  15334. * @typechecks static-only
  15335. */
  15336. 'use strict';
  15337. var SyntheticEvent = __webpack_require__(77);
  15338. /**
  15339. * @interface Event
  15340. * @see http://www.w3.org/TR/clipboard-apis/
  15341. */
  15342. var ClipboardEventInterface = {
  15343. clipboardData: function (event) {
  15344. return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
  15345. }
  15346. };
  15347. /**
  15348. * @param {object} dispatchConfig Configuration used to dispatch this event.
  15349. * @param {string} dispatchMarker Marker identifying the event target.
  15350. * @param {object} nativeEvent Native browser event.
  15351. * @extends {SyntheticUIEvent}
  15352. */
  15353. function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  15354. SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  15355. }
  15356. SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
  15357. module.exports = SyntheticClipboardEvent;
  15358. /***/ },
  15359. /* 134 */
  15360. /***/ function(module, exports, __webpack_require__) {
  15361. /**
  15362. * Copyright 2013-2015, Facebook, Inc.
  15363. * All rights reserved.
  15364. *
  15365. * This source code is licensed under the BSD-style license found in the
  15366. * LICENSE file in the root directory of this source tree. An additional grant
  15367. * of patent rights can be found in the PATENTS file in the same directory.
  15368. *
  15369. * @providesModule SyntheticFocusEvent
  15370. * @typechecks static-only
  15371. */
  15372. 'use strict';
  15373. var SyntheticUIEvent = __webpack_require__(87);
  15374. /**
  15375. * @interface FocusEvent
  15376. * @see http://www.w3.org/TR/DOM-Level-3-Events/
  15377. */
  15378. var FocusEventInterface = {
  15379. relatedTarget: null
  15380. };
  15381. /**
  15382. * @param {object} dispatchConfig Configuration used to dispatch this event.
  15383. * @param {string} dispatchMarker Marker identifying the event target.
  15384. * @param {object} nativeEvent Native browser event.
  15385. * @extends {SyntheticUIEvent}
  15386. */
  15387. function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  15388. SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  15389. }
  15390. SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
  15391. module.exports = SyntheticFocusEvent;
  15392. /***/ },
  15393. /* 135 */
  15394. /***/ function(module, exports, __webpack_require__) {
  15395. /**
  15396. * Copyright 2013-2015, Facebook, Inc.
  15397. * All rights reserved.
  15398. *
  15399. * This source code is licensed under the BSD-style license found in the
  15400. * LICENSE file in the root directory of this source tree. An additional grant
  15401. * of patent rights can be found in the PATENTS file in the same directory.
  15402. *
  15403. * @providesModule SyntheticKeyboardEvent
  15404. * @typechecks static-only
  15405. */
  15406. 'use strict';
  15407. var SyntheticUIEvent = __webpack_require__(87);
  15408. var getEventCharCode = __webpack_require__(136);
  15409. var getEventKey = __webpack_require__(137);
  15410. var getEventModifierState = __webpack_require__(88);
  15411. /**
  15412. * @interface KeyboardEvent
  15413. * @see http://www.w3.org/TR/DOM-Level-3-Events/
  15414. */
  15415. var KeyboardEventInterface = {
  15416. key: getEventKey,
  15417. location: null,
  15418. ctrlKey: null,
  15419. shiftKey: null,
  15420. altKey: null,
  15421. metaKey: null,
  15422. repeat: null,
  15423. locale: null,
  15424. getModifierState: getEventModifierState,
  15425. // Legacy Interface
  15426. charCode: function (event) {
  15427. // `charCode` is the result of a KeyPress event and represents the value of
  15428. // the actual printable character.
  15429. // KeyPress is deprecated, but its replacement is not yet final and not
  15430. // implemented in any major browser. Only KeyPress has charCode.
  15431. if (event.type === 'keypress') {
  15432. return getEventCharCode(event);
  15433. }
  15434. return 0;
  15435. },
  15436. keyCode: function (event) {
  15437. // `keyCode` is the result of a KeyDown/Up event and represents the value of
  15438. // physical keyboard key.
  15439. // The actual meaning of the value depends on the users' keyboard layout
  15440. // which cannot be detected. Assuming that it is a US keyboard layout
  15441. // provides a surprisingly accurate mapping for US and European users.
  15442. // Due to this, it is left to the user to implement at this time.
  15443. if (event.type === 'keydown' || event.type === 'keyup') {
  15444. return event.keyCode;
  15445. }
  15446. return 0;
  15447. },
  15448. which: function (event) {
  15449. // `which` is an alias for either `keyCode` or `charCode` depending on the
  15450. // type of the event.
  15451. if (event.type === 'keypress') {
  15452. return getEventCharCode(event);
  15453. }
  15454. if (event.type === 'keydown' || event.type === 'keyup') {
  15455. return event.keyCode;
  15456. }
  15457. return 0;
  15458. }
  15459. };
  15460. /**
  15461. * @param {object} dispatchConfig Configuration used to dispatch this event.
  15462. * @param {string} dispatchMarker Marker identifying the event target.
  15463. * @param {object} nativeEvent Native browser event.
  15464. * @extends {SyntheticUIEvent}
  15465. */
  15466. function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  15467. SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  15468. }
  15469. SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
  15470. module.exports = SyntheticKeyboardEvent;
  15471. /***/ },
  15472. /* 136 */
  15473. /***/ function(module, exports) {
  15474. /**
  15475. * Copyright 2013-2015, Facebook, Inc.
  15476. * All rights reserved.
  15477. *
  15478. * This source code is licensed under the BSD-style license found in the
  15479. * LICENSE file in the root directory of this source tree. An additional grant
  15480. * of patent rights can be found in the PATENTS file in the same directory.
  15481. *
  15482. * @providesModule getEventCharCode
  15483. * @typechecks static-only
  15484. */
  15485. 'use strict';
  15486. /**
  15487. * `charCode` represents the actual "character code" and is safe to use with
  15488. * `String.fromCharCode`. As such, only keys that correspond to printable
  15489. * characters produce a valid `charCode`, the only exception to this is Enter.
  15490. * The Tab-key is considered non-printable and does not have a `charCode`,
  15491. * presumably because it does not produce a tab-character in browsers.
  15492. *
  15493. * @param {object} nativeEvent Native browser event.
  15494. * @return {number} Normalized `charCode` property.
  15495. */
  15496. function getEventCharCode(nativeEvent) {
  15497. var charCode;
  15498. var keyCode = nativeEvent.keyCode;
  15499. if ('charCode' in nativeEvent) {
  15500. charCode = nativeEvent.charCode;
  15501. // FF does not set `charCode` for the Enter-key, check against `keyCode`.
  15502. if (charCode === 0 && keyCode === 13) {
  15503. charCode = 13;
  15504. }
  15505. } else {
  15506. // IE8 does not implement `charCode`, but `keyCode` has the correct value.
  15507. charCode = keyCode;
  15508. }
  15509. // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
  15510. // Must not discard the (non-)printable Enter-key.
  15511. if (charCode >= 32 || charCode === 13) {
  15512. return charCode;
  15513. }
  15514. return 0;
  15515. }
  15516. module.exports = getEventCharCode;
  15517. /***/ },
  15518. /* 137 */
  15519. /***/ function(module, exports, __webpack_require__) {
  15520. /**
  15521. * Copyright 2013-2015, Facebook, Inc.
  15522. * All rights reserved.
  15523. *
  15524. * This source code is licensed under the BSD-style license found in the
  15525. * LICENSE file in the root directory of this source tree. An additional grant
  15526. * of patent rights can be found in the PATENTS file in the same directory.
  15527. *
  15528. * @providesModule getEventKey
  15529. * @typechecks static-only
  15530. */
  15531. 'use strict';
  15532. var getEventCharCode = __webpack_require__(136);
  15533. /**
  15534. * Normalization of deprecated HTML5 `key` values
  15535. * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
  15536. */
  15537. var normalizeKey = {
  15538. 'Esc': 'Escape',
  15539. 'Spacebar': ' ',
  15540. 'Left': 'ArrowLeft',
  15541. 'Up': 'ArrowUp',
  15542. 'Right': 'ArrowRight',
  15543. 'Down': 'ArrowDown',
  15544. 'Del': 'Delete',
  15545. 'Win': 'OS',
  15546. 'Menu': 'ContextMenu',
  15547. 'Apps': 'ContextMenu',
  15548. 'Scroll': 'ScrollLock',
  15549. 'MozPrintableKey': 'Unidentified'
  15550. };
  15551. /**
  15552. * Translation from legacy `keyCode` to HTML5 `key`
  15553. * Only special keys supported, all others depend on keyboard layout or browser
  15554. * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
  15555. */
  15556. var translateToKey = {
  15557. 8: 'Backspace',
  15558. 9: 'Tab',
  15559. 12: 'Clear',
  15560. 13: 'Enter',
  15561. 16: 'Shift',
  15562. 17: 'Control',
  15563. 18: 'Alt',
  15564. 19: 'Pause',
  15565. 20: 'CapsLock',
  15566. 27: 'Escape',
  15567. 32: ' ',
  15568. 33: 'PageUp',
  15569. 34: 'PageDown',
  15570. 35: 'End',
  15571. 36: 'Home',
  15572. 37: 'ArrowLeft',
  15573. 38: 'ArrowUp',
  15574. 39: 'ArrowRight',
  15575. 40: 'ArrowDown',
  15576. 45: 'Insert',
  15577. 46: 'Delete',
  15578. 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',
  15579. 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',
  15580. 144: 'NumLock',
  15581. 145: 'ScrollLock',
  15582. 224: 'Meta'
  15583. };
  15584. /**
  15585. * @param {object} nativeEvent Native browser event.
  15586. * @return {string} Normalized `key` property.
  15587. */
  15588. function getEventKey(nativeEvent) {
  15589. if (nativeEvent.key) {
  15590. // Normalize inconsistent values reported by browsers due to
  15591. // implementations of a working draft specification.
  15592. // FireFox implements `key` but returns `MozPrintableKey` for all
  15593. // printable characters (normalized to `Unidentified`), ignore it.
  15594. var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
  15595. if (key !== 'Unidentified') {
  15596. return key;
  15597. }
  15598. }
  15599. // Browser does not implement `key`, polyfill as much of it as we can.
  15600. if (nativeEvent.type === 'keypress') {
  15601. var charCode = getEventCharCode(nativeEvent);
  15602. // The enter-key is technically both printable and non-printable and can
  15603. // thus be captured by `keypress`, no other non-printable key should.
  15604. return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
  15605. }
  15606. if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
  15607. // While user keyboard layout determines the actual meaning of each
  15608. // `keyCode` value, almost all function keys have a universal value.
  15609. return translateToKey[nativeEvent.keyCode] || 'Unidentified';
  15610. }
  15611. return '';
  15612. }
  15613. module.exports = getEventKey;
  15614. /***/ },
  15615. /* 138 */
  15616. /***/ function(module, exports, __webpack_require__) {
  15617. /**
  15618. * Copyright 2013-2015, Facebook, Inc.
  15619. * All rights reserved.
  15620. *
  15621. * This source code is licensed under the BSD-style license found in the
  15622. * LICENSE file in the root directory of this source tree. An additional grant
  15623. * of patent rights can be found in the PATENTS file in the same directory.
  15624. *
  15625. * @providesModule SyntheticDragEvent
  15626. * @typechecks static-only
  15627. */
  15628. 'use strict';
  15629. var SyntheticMouseEvent = __webpack_require__(86);
  15630. /**
  15631. * @interface DragEvent
  15632. * @see http://www.w3.org/TR/DOM-Level-3-Events/
  15633. */
  15634. var DragEventInterface = {
  15635. dataTransfer: null
  15636. };
  15637. /**
  15638. * @param {object} dispatchConfig Configuration used to dispatch this event.
  15639. * @param {string} dispatchMarker Marker identifying the event target.
  15640. * @param {object} nativeEvent Native browser event.
  15641. * @extends {SyntheticUIEvent}
  15642. */
  15643. function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  15644. SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  15645. }
  15646. SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
  15647. module.exports = SyntheticDragEvent;
  15648. /***/ },
  15649. /* 139 */
  15650. /***/ function(module, exports, __webpack_require__) {
  15651. /**
  15652. * Copyright 2013-2015, Facebook, Inc.
  15653. * All rights reserved.
  15654. *
  15655. * This source code is licensed under the BSD-style license found in the
  15656. * LICENSE file in the root directory of this source tree. An additional grant
  15657. * of patent rights can be found in the PATENTS file in the same directory.
  15658. *
  15659. * @providesModule SyntheticTouchEvent
  15660. * @typechecks static-only
  15661. */
  15662. 'use strict';
  15663. var SyntheticUIEvent = __webpack_require__(87);
  15664. var getEventModifierState = __webpack_require__(88);
  15665. /**
  15666. * @interface TouchEvent
  15667. * @see http://www.w3.org/TR/touch-events/
  15668. */
  15669. var TouchEventInterface = {
  15670. touches: null,
  15671. targetTouches: null,
  15672. changedTouches: null,
  15673. altKey: null,
  15674. metaKey: null,
  15675. ctrlKey: null,
  15676. shiftKey: null,
  15677. getModifierState: getEventModifierState
  15678. };
  15679. /**
  15680. * @param {object} dispatchConfig Configuration used to dispatch this event.
  15681. * @param {string} dispatchMarker Marker identifying the event target.
  15682. * @param {object} nativeEvent Native browser event.
  15683. * @extends {SyntheticUIEvent}
  15684. */
  15685. function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  15686. SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  15687. }
  15688. SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
  15689. module.exports = SyntheticTouchEvent;
  15690. /***/ },
  15691. /* 140 */
  15692. /***/ function(module, exports, __webpack_require__) {
  15693. /**
  15694. * Copyright 2013-2015, Facebook, Inc.
  15695. * All rights reserved.
  15696. *
  15697. * This source code is licensed under the BSD-style license found in the
  15698. * LICENSE file in the root directory of this source tree. An additional grant
  15699. * of patent rights can be found in the PATENTS file in the same directory.
  15700. *
  15701. * @providesModule SyntheticWheelEvent
  15702. * @typechecks static-only
  15703. */
  15704. 'use strict';
  15705. var SyntheticMouseEvent = __webpack_require__(86);
  15706. /**
  15707. * @interface WheelEvent
  15708. * @see http://www.w3.org/TR/DOM-Level-3-Events/
  15709. */
  15710. var WheelEventInterface = {
  15711. deltaX: function (event) {
  15712. return 'deltaX' in event ? event.deltaX :
  15713. // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
  15714. 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
  15715. },
  15716. deltaY: function (event) {
  15717. return 'deltaY' in event ? event.deltaY :
  15718. // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
  15719. 'wheelDeltaY' in event ? -event.wheelDeltaY :
  15720. // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
  15721. 'wheelDelta' in event ? -event.wheelDelta : 0;
  15722. },
  15723. deltaZ: null,
  15724. // Browsers without "deltaMode" is reporting in raw wheel delta where one
  15725. // notch on the scroll is always +/- 120, roughly equivalent to pixels.
  15726. // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
  15727. // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
  15728. deltaMode: null
  15729. };
  15730. /**
  15731. * @param {object} dispatchConfig Configuration used to dispatch this event.
  15732. * @param {string} dispatchMarker Marker identifying the event target.
  15733. * @param {object} nativeEvent Native browser event.
  15734. * @extends {SyntheticMouseEvent}
  15735. */
  15736. function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
  15737. SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
  15738. }
  15739. SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
  15740. module.exports = SyntheticWheelEvent;
  15741. /***/ },
  15742. /* 141 */
  15743. /***/ function(module, exports, __webpack_require__) {
  15744. /**
  15745. * Copyright 2013-2015, Facebook, Inc.
  15746. * All rights reserved.
  15747. *
  15748. * This source code is licensed under the BSD-style license found in the
  15749. * LICENSE file in the root directory of this source tree. An additional grant
  15750. * of patent rights can be found in the PATENTS file in the same directory.
  15751. *
  15752. * @providesModule SVGDOMPropertyConfig
  15753. */
  15754. 'use strict';
  15755. var DOMProperty = __webpack_require__(23);
  15756. var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;
  15757. var NS = {
  15758. xlink: 'http://www.w3.org/1999/xlink',
  15759. xml: 'http://www.w3.org/XML/1998/namespace'
  15760. };
  15761. var SVGDOMPropertyConfig = {
  15762. Properties: {
  15763. clipPath: MUST_USE_ATTRIBUTE,
  15764. cx: MUST_USE_ATTRIBUTE,
  15765. cy: MUST_USE_ATTRIBUTE,
  15766. d: MUST_USE_ATTRIBUTE,
  15767. dx: MUST_USE_ATTRIBUTE,
  15768. dy: MUST_USE_ATTRIBUTE,
  15769. fill: MUST_USE_ATTRIBUTE,
  15770. fillOpacity: MUST_USE_ATTRIBUTE,
  15771. fontFamily: MUST_USE_ATTRIBUTE,
  15772. fontSize: MUST_USE_ATTRIBUTE,
  15773. fx: MUST_USE_ATTRIBUTE,
  15774. fy: MUST_USE_ATTRIBUTE,
  15775. gradientTransform: MUST_USE_ATTRIBUTE,
  15776. gradientUnits: MUST_USE_ATTRIBUTE,
  15777. markerEnd: MUST_USE_ATTRIBUTE,
  15778. markerMid: MUST_USE_ATTRIBUTE,
  15779. markerStart: MUST_USE_ATTRIBUTE,
  15780. offset: MUST_USE_ATTRIBUTE,
  15781. opacity: MUST_USE_ATTRIBUTE,
  15782. patternContentUnits: MUST_USE_ATTRIBUTE,
  15783. patternUnits: MUST_USE_ATTRIBUTE,
  15784. points: MUST_USE_ATTRIBUTE,
  15785. preserveAspectRatio: MUST_USE_ATTRIBUTE,
  15786. r: MUST_USE_ATTRIBUTE,
  15787. rx: MUST_USE_ATTRIBUTE,
  15788. ry: MUST_USE_ATTRIBUTE,
  15789. spreadMethod: MUST_USE_ATTRIBUTE,
  15790. stopColor: MUST_USE_ATTRIBUTE,
  15791. stopOpacity: MUST_USE_ATTRIBUTE,
  15792. stroke: MUST_USE_ATTRIBUTE,
  15793. strokeDasharray: MUST_USE_ATTRIBUTE,
  15794. strokeLinecap: MUST_USE_ATTRIBUTE,
  15795. strokeOpacity: MUST_USE_ATTRIBUTE,
  15796. strokeWidth: MUST_USE_ATTRIBUTE,
  15797. textAnchor: MUST_USE_ATTRIBUTE,
  15798. transform: MUST_USE_ATTRIBUTE,
  15799. version: MUST_USE_ATTRIBUTE,
  15800. viewBox: MUST_USE_ATTRIBUTE,
  15801. x1: MUST_USE_ATTRIBUTE,
  15802. x2: MUST_USE_ATTRIBUTE,
  15803. x: MUST_USE_ATTRIBUTE,
  15804. xlinkActuate: MUST_USE_ATTRIBUTE,
  15805. xlinkArcrole: MUST_USE_ATTRIBUTE,
  15806. xlinkHref: MUST_USE_ATTRIBUTE,
  15807. xlinkRole: MUST_USE_ATTRIBUTE,
  15808. xlinkShow: MUST_USE_ATTRIBUTE,
  15809. xlinkTitle: MUST_USE_ATTRIBUTE,
  15810. xlinkType: MUST_USE_ATTRIBUTE,
  15811. xmlBase: MUST_USE_ATTRIBUTE,
  15812. xmlLang: MUST_USE_ATTRIBUTE,
  15813. xmlSpace: MUST_USE_ATTRIBUTE,
  15814. y1: MUST_USE_ATTRIBUTE,
  15815. y2: MUST_USE_ATTRIBUTE,
  15816. y: MUST_USE_ATTRIBUTE
  15817. },
  15818. DOMAttributeNamespaces: {
  15819. xlinkActuate: NS.xlink,
  15820. xlinkArcrole: NS.xlink,
  15821. xlinkHref: NS.xlink,
  15822. xlinkRole: NS.xlink,
  15823. xlinkShow: NS.xlink,
  15824. xlinkTitle: NS.xlink,
  15825. xlinkType: NS.xlink,
  15826. xmlBase: NS.xml,
  15827. xmlLang: NS.xml,
  15828. xmlSpace: NS.xml
  15829. },
  15830. DOMAttributeNames: {
  15831. clipPath: 'clip-path',
  15832. fillOpacity: 'fill-opacity',
  15833. fontFamily: 'font-family',
  15834. fontSize: 'font-size',
  15835. gradientTransform: 'gradientTransform',
  15836. gradientUnits: 'gradientUnits',
  15837. markerEnd: 'marker-end',
  15838. markerMid: 'marker-mid',
  15839. markerStart: 'marker-start',
  15840. patternContentUnits: 'patternContentUnits',
  15841. patternUnits: 'patternUnits',
  15842. preserveAspectRatio: 'preserveAspectRatio',
  15843. spreadMethod: 'spreadMethod',
  15844. stopColor: 'stop-color',
  15845. stopOpacity: 'stop-opacity',
  15846. strokeDasharray: 'stroke-dasharray',
  15847. strokeLinecap: 'stroke-linecap',
  15848. strokeOpacity: 'stroke-opacity',
  15849. strokeWidth: 'stroke-width',
  15850. textAnchor: 'text-anchor',
  15851. viewBox: 'viewBox',
  15852. xlinkActuate: 'xlink:actuate',
  15853. xlinkArcrole: 'xlink:arcrole',
  15854. xlinkHref: 'xlink:href',
  15855. xlinkRole: 'xlink:role',
  15856. xlinkShow: 'xlink:show',
  15857. xlinkTitle: 'xlink:title',
  15858. xlinkType: 'xlink:type',
  15859. xmlBase: 'xml:base',
  15860. xmlLang: 'xml:lang',
  15861. xmlSpace: 'xml:space'
  15862. }
  15863. };
  15864. module.exports = SVGDOMPropertyConfig;
  15865. /***/ },
  15866. /* 142 */
  15867. /***/ function(module, exports, __webpack_require__) {
  15868. /**
  15869. * Copyright 2013-2015, Facebook, Inc.
  15870. * All rights reserved.
  15871. *
  15872. * This source code is licensed under the BSD-style license found in the
  15873. * LICENSE file in the root directory of this source tree. An additional grant
  15874. * of patent rights can be found in the PATENTS file in the same directory.
  15875. *
  15876. * @providesModule ReactDefaultPerf
  15877. * @typechecks static-only
  15878. */
  15879. 'use strict';
  15880. var DOMProperty = __webpack_require__(23);
  15881. var ReactDefaultPerfAnalysis = __webpack_require__(143);
  15882. var ReactMount = __webpack_require__(28);
  15883. var ReactPerf = __webpack_require__(18);
  15884. var performanceNow = __webpack_require__(144);
  15885. function roundFloat(val) {
  15886. return Math.floor(val * 100) / 100;
  15887. }
  15888. function addValue(obj, key, val) {
  15889. obj[key] = (obj[key] || 0) + val;
  15890. }
  15891. var ReactDefaultPerf = {
  15892. _allMeasurements: [], // last item in the list is the current one
  15893. _mountStack: [0],
  15894. _injected: false,
  15895. start: function () {
  15896. if (!ReactDefaultPerf._injected) {
  15897. ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);
  15898. }
  15899. ReactDefaultPerf._allMeasurements.length = 0;
  15900. ReactPerf.enableMeasure = true;
  15901. },
  15902. stop: function () {
  15903. ReactPerf.enableMeasure = false;
  15904. },
  15905. getLastMeasurements: function () {
  15906. return ReactDefaultPerf._allMeasurements;
  15907. },
  15908. printExclusive: function (measurements) {
  15909. measurements = measurements || ReactDefaultPerf._allMeasurements;
  15910. var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);
  15911. console.table(summary.map(function (item) {
  15912. return {
  15913. 'Component class name': item.componentName,
  15914. 'Total inclusive time (ms)': roundFloat(item.inclusive),
  15915. 'Exclusive mount time (ms)': roundFloat(item.exclusive),
  15916. 'Exclusive render time (ms)': roundFloat(item.render),
  15917. 'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),
  15918. 'Render time per instance (ms)': roundFloat(item.render / item.count),
  15919. 'Instances': item.count
  15920. };
  15921. }));
  15922. // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct
  15923. // number.
  15924. },
  15925. printInclusive: function (measurements) {
  15926. measurements = measurements || ReactDefaultPerf._allMeasurements;
  15927. var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);
  15928. console.table(summary.map(function (item) {
  15929. return {
  15930. 'Owner > component': item.componentName,
  15931. 'Inclusive time (ms)': roundFloat(item.time),
  15932. 'Instances': item.count
  15933. };
  15934. }));
  15935. console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
  15936. },
  15937. getMeasurementsSummaryMap: function (measurements) {
  15938. var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);
  15939. return summary.map(function (item) {
  15940. return {
  15941. 'Owner > component': item.componentName,
  15942. 'Wasted time (ms)': item.time,
  15943. 'Instances': item.count
  15944. };
  15945. });
  15946. },
  15947. printWasted: function (measurements) {
  15948. measurements = measurements || ReactDefaultPerf._allMeasurements;
  15949. console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));
  15950. console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
  15951. },
  15952. printDOM: function (measurements) {
  15953. measurements = measurements || ReactDefaultPerf._allMeasurements;
  15954. var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);
  15955. console.table(summary.map(function (item) {
  15956. var result = {};
  15957. result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
  15958. result.type = item.type;
  15959. result.args = JSON.stringify(item.args);
  15960. return result;
  15961. }));
  15962. console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
  15963. },
  15964. _recordWrite: function (id, fnName, totalTime, args) {
  15965. // TODO: totalTime isn't that useful since it doesn't count paints/reflows
  15966. var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;
  15967. writes[id] = writes[id] || [];
  15968. writes[id].push({
  15969. type: fnName,
  15970. time: totalTime,
  15971. args: args
  15972. });
  15973. },
  15974. measure: function (moduleName, fnName, func) {
  15975. return function () {
  15976. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  15977. args[_key] = arguments[_key];
  15978. }
  15979. var totalTime;
  15980. var rv;
  15981. var start;
  15982. if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {
  15983. // A "measurement" is a set of metrics recorded for each flush. We want
  15984. // to group the metrics for a given flush together so we can look at the
  15985. // components that rendered and the DOM operations that actually
  15986. // happened to determine the amount of "wasted work" performed.
  15987. ReactDefaultPerf._allMeasurements.push({
  15988. exclusive: {},
  15989. inclusive: {},
  15990. render: {},
  15991. counts: {},
  15992. writes: {},
  15993. displayNames: {},
  15994. totalTime: 0,
  15995. created: {}
  15996. });
  15997. start = performanceNow();
  15998. rv = func.apply(this, args);
  15999. ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;
  16000. return rv;
  16001. } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') {
  16002. start = performanceNow();
  16003. rv = func.apply(this, args);
  16004. totalTime = performanceNow() - start;
  16005. if (fnName === '_mountImageIntoNode') {
  16006. var mountID = ReactMount.getID(args[1]);
  16007. ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);
  16008. } else if (fnName === 'dangerouslyProcessChildrenUpdates') {
  16009. // special format
  16010. args[0].forEach(function (update) {
  16011. var writeArgs = {};
  16012. if (update.fromIndex !== null) {
  16013. writeArgs.fromIndex = update.fromIndex;
  16014. }
  16015. if (update.toIndex !== null) {
  16016. writeArgs.toIndex = update.toIndex;
  16017. }
  16018. if (update.textContent !== null) {
  16019. writeArgs.textContent = update.textContent;
  16020. }
  16021. if (update.markupIndex !== null) {
  16022. writeArgs.markup = args[1][update.markupIndex];
  16023. }
  16024. ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);
  16025. });
  16026. } else {
  16027. // basic format
  16028. var id = args[0];
  16029. if (typeof id === 'object') {
  16030. id = ReactMount.getID(args[0]);
  16031. }
  16032. ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));
  16033. }
  16034. return rv;
  16035. } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?
  16036. fnName === '_renderValidatedComponent')) {
  16037. if (this._currentElement.type === ReactMount.TopLevelWrapper) {
  16038. return func.apply(this, args);
  16039. }
  16040. var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID;
  16041. var isRender = fnName === '_renderValidatedComponent';
  16042. var isMount = fnName === 'mountComponent';
  16043. var mountStack = ReactDefaultPerf._mountStack;
  16044. var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];
  16045. if (isRender) {
  16046. addValue(entry.counts, rootNodeID, 1);
  16047. } else if (isMount) {
  16048. entry.created[rootNodeID] = true;
  16049. mountStack.push(0);
  16050. }
  16051. start = performanceNow();
  16052. rv = func.apply(this, args);
  16053. totalTime = performanceNow() - start;
  16054. if (isRender) {
  16055. addValue(entry.render, rootNodeID, totalTime);
  16056. } else if (isMount) {
  16057. var subMountTime = mountStack.pop();
  16058. mountStack[mountStack.length - 1] += totalTime;
  16059. addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);
  16060. addValue(entry.inclusive, rootNodeID, totalTime);
  16061. } else {
  16062. addValue(entry.inclusive, rootNodeID, totalTime);
  16063. }
  16064. entry.displayNames[rootNodeID] = {
  16065. current: this.getName(),
  16066. owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'
  16067. };
  16068. return rv;
  16069. } else {
  16070. return func.apply(this, args);
  16071. }
  16072. };
  16073. }
  16074. };
  16075. module.exports = ReactDefaultPerf;
  16076. /***/ },
  16077. /* 143 */
  16078. /***/ function(module, exports, __webpack_require__) {
  16079. /**
  16080. * Copyright 2013-2015, Facebook, Inc.
  16081. * All rights reserved.
  16082. *
  16083. * This source code is licensed under the BSD-style license found in the
  16084. * LICENSE file in the root directory of this source tree. An additional grant
  16085. * of patent rights can be found in the PATENTS file in the same directory.
  16086. *
  16087. * @providesModule ReactDefaultPerfAnalysis
  16088. */
  16089. 'use strict';
  16090. var assign = __webpack_require__(39);
  16091. // Don't try to save users less than 1.2ms (a number I made up)
  16092. var DONT_CARE_THRESHOLD = 1.2;
  16093. var DOM_OPERATION_TYPES = {
  16094. '_mountImageIntoNode': 'set innerHTML',
  16095. INSERT_MARKUP: 'set innerHTML',
  16096. MOVE_EXISTING: 'move',
  16097. REMOVE_NODE: 'remove',
  16098. SET_MARKUP: 'set innerHTML',
  16099. TEXT_CONTENT: 'set textContent',
  16100. 'setValueForProperty': 'update attribute',
  16101. 'setValueForAttribute': 'update attribute',
  16102. 'deleteValueForProperty': 'remove attribute',
  16103. 'setValueForStyles': 'update styles',
  16104. 'replaceNodeWithMarkup': 'replace',
  16105. 'updateTextContent': 'set textContent'
  16106. };
  16107. function getTotalTime(measurements) {
  16108. // TODO: return number of DOM ops? could be misleading.
  16109. // TODO: measure dropped frames after reconcile?
  16110. // TODO: log total time of each reconcile and the top-level component
  16111. // class that triggered it.
  16112. var totalTime = 0;
  16113. for (var i = 0; i < measurements.length; i++) {
  16114. var measurement = measurements[i];
  16115. totalTime += measurement.totalTime;
  16116. }
  16117. return totalTime;
  16118. }
  16119. function getDOMSummary(measurements) {
  16120. var items = [];
  16121. measurements.forEach(function (measurement) {
  16122. Object.keys(measurement.writes).forEach(function (id) {
  16123. measurement.writes[id].forEach(function (write) {
  16124. items.push({
  16125. id: id,
  16126. type: DOM_OPERATION_TYPES[write.type] || write.type,
  16127. args: write.args
  16128. });
  16129. });
  16130. });
  16131. });
  16132. return items;
  16133. }
  16134. function getExclusiveSummary(measurements) {
  16135. var candidates = {};
  16136. var displayName;
  16137. for (var i = 0; i < measurements.length; i++) {
  16138. var measurement = measurements[i];
  16139. var allIDs = assign({}, measurement.exclusive, measurement.inclusive);
  16140. for (var id in allIDs) {
  16141. displayName = measurement.displayNames[id].current;
  16142. candidates[displayName] = candidates[displayName] || {
  16143. componentName: displayName,
  16144. inclusive: 0,
  16145. exclusive: 0,
  16146. render: 0,
  16147. count: 0
  16148. };
  16149. if (measurement.render[id]) {
  16150. candidates[displayName].render += measurement.render[id];
  16151. }
  16152. if (measurement.exclusive[id]) {
  16153. candidates[displayName].exclusive += measurement.exclusive[id];
  16154. }
  16155. if (measurement.inclusive[id]) {
  16156. candidates[displayName].inclusive += measurement.inclusive[id];
  16157. }
  16158. if (measurement.counts[id]) {
  16159. candidates[displayName].count += measurement.counts[id];
  16160. }
  16161. }
  16162. }
  16163. // Now make a sorted array with the results.
  16164. var arr = [];
  16165. for (displayName in candidates) {
  16166. if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {
  16167. arr.push(candidates[displayName]);
  16168. }
  16169. }
  16170. arr.sort(function (a, b) {
  16171. return b.exclusive - a.exclusive;
  16172. });
  16173. return arr;
  16174. }
  16175. function getInclusiveSummary(measurements, onlyClean) {
  16176. var candidates = {};
  16177. var inclusiveKey;
  16178. for (var i = 0; i < measurements.length; i++) {
  16179. var measurement = measurements[i];
  16180. var allIDs = assign({}, measurement.exclusive, measurement.inclusive);
  16181. var cleanComponents;
  16182. if (onlyClean) {
  16183. cleanComponents = getUnchangedComponents(measurement);
  16184. }
  16185. for (var id in allIDs) {
  16186. if (onlyClean && !cleanComponents[id]) {
  16187. continue;
  16188. }
  16189. var displayName = measurement.displayNames[id];
  16190. // Inclusive time is not useful for many components without knowing where
  16191. // they are instantiated. So we aggregate inclusive time with both the
  16192. // owner and current displayName as the key.
  16193. inclusiveKey = displayName.owner + ' > ' + displayName.current;
  16194. candidates[inclusiveKey] = candidates[inclusiveKey] || {
  16195. componentName: inclusiveKey,
  16196. time: 0,
  16197. count: 0
  16198. };
  16199. if (measurement.inclusive[id]) {
  16200. candidates[inclusiveKey].time += measurement.inclusive[id];
  16201. }
  16202. if (measurement.counts[id]) {
  16203. candidates[inclusiveKey].count += measurement.counts[id];
  16204. }
  16205. }
  16206. }
  16207. // Now make a sorted array with the results.
  16208. var arr = [];
  16209. for (inclusiveKey in candidates) {
  16210. if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {
  16211. arr.push(candidates[inclusiveKey]);
  16212. }
  16213. }
  16214. arr.sort(function (a, b) {
  16215. return b.time - a.time;
  16216. });
  16217. return arr;
  16218. }
  16219. function getUnchangedComponents(measurement) {
  16220. // For a given reconcile, look at which components did not actually
  16221. // render anything to the DOM and return a mapping of their ID to
  16222. // the amount of time it took to render the entire subtree.
  16223. var cleanComponents = {};
  16224. var dirtyLeafIDs = Object.keys(measurement.writes);
  16225. var allIDs = assign({}, measurement.exclusive, measurement.inclusive);
  16226. for (var id in allIDs) {
  16227. var isDirty = false;
  16228. // For each component that rendered, see if a component that triggered
  16229. // a DOM op is in its subtree.
  16230. for (var i = 0; i < dirtyLeafIDs.length; i++) {
  16231. if (dirtyLeafIDs[i].indexOf(id) === 0) {
  16232. isDirty = true;
  16233. break;
  16234. }
  16235. }
  16236. // check if component newly created
  16237. if (measurement.created[id]) {
  16238. isDirty = true;
  16239. }
  16240. if (!isDirty && measurement.counts[id] > 0) {
  16241. cleanComponents[id] = true;
  16242. }
  16243. }
  16244. return cleanComponents;
  16245. }
  16246. var ReactDefaultPerfAnalysis = {
  16247. getExclusiveSummary: getExclusiveSummary,
  16248. getInclusiveSummary: getInclusiveSummary,
  16249. getDOMSummary: getDOMSummary,
  16250. getTotalTime: getTotalTime
  16251. };
  16252. module.exports = ReactDefaultPerfAnalysis;
  16253. /***/ },
  16254. /* 144 */
  16255. /***/ function(module, exports, __webpack_require__) {
  16256. /**
  16257. * Copyright 2013-2015, Facebook, Inc.
  16258. * All rights reserved.
  16259. *
  16260. * This source code is licensed under the BSD-style license found in the
  16261. * LICENSE file in the root directory of this source tree. An additional grant
  16262. * of patent rights can be found in the PATENTS file in the same directory.
  16263. *
  16264. * @providesModule performanceNow
  16265. * @typechecks
  16266. */
  16267. 'use strict';
  16268. var performance = __webpack_require__(145);
  16269. var performanceNow;
  16270. /**
  16271. * Detect if we can use `window.performance.now()` and gracefully fallback to
  16272. * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
  16273. * because of Facebook's testing infrastructure.
  16274. */
  16275. if (performance.now) {
  16276. performanceNow = function () {
  16277. return performance.now();
  16278. };
  16279. } else {
  16280. performanceNow = function () {
  16281. return Date.now();
  16282. };
  16283. }
  16284. module.exports = performanceNow;
  16285. /***/ },
  16286. /* 145 */
  16287. /***/ function(module, exports, __webpack_require__) {
  16288. /**
  16289. * Copyright 2013-2015, Facebook, Inc.
  16290. * All rights reserved.
  16291. *
  16292. * This source code is licensed under the BSD-style license found in the
  16293. * LICENSE file in the root directory of this source tree. An additional grant
  16294. * of patent rights can be found in the PATENTS file in the same directory.
  16295. *
  16296. * @providesModule performance
  16297. * @typechecks
  16298. */
  16299. 'use strict';
  16300. var ExecutionEnvironment = __webpack_require__(9);
  16301. var performance;
  16302. if (ExecutionEnvironment.canUseDOM) {
  16303. performance = window.performance || window.msPerformance || window.webkitPerformance;
  16304. }
  16305. module.exports = performance || {};
  16306. /***/ },
  16307. /* 146 */
  16308. /***/ function(module, exports) {
  16309. /**
  16310. * Copyright 2013-2015, Facebook, Inc.
  16311. * All rights reserved.
  16312. *
  16313. * This source code is licensed under the BSD-style license found in the
  16314. * LICENSE file in the root directory of this source tree. An additional grant
  16315. * of patent rights can be found in the PATENTS file in the same directory.
  16316. *
  16317. * @providesModule ReactVersion
  16318. */
  16319. 'use strict';
  16320. module.exports = '0.14.8';
  16321. /***/ },
  16322. /* 147 */
  16323. /***/ function(module, exports, __webpack_require__) {
  16324. /**
  16325. * Copyright 2013-2015, Facebook, Inc.
  16326. * All rights reserved.
  16327. *
  16328. * This source code is licensed under the BSD-style license found in the
  16329. * LICENSE file in the root directory of this source tree. An additional grant
  16330. * of patent rights can be found in the PATENTS file in the same directory.
  16331. *
  16332. * @providesModule renderSubtreeIntoContainer
  16333. */
  16334. 'use strict';
  16335. var ReactMount = __webpack_require__(28);
  16336. module.exports = ReactMount.renderSubtreeIntoContainer;
  16337. /***/ },
  16338. /* 148 */
  16339. /***/ function(module, exports, __webpack_require__) {
  16340. /**
  16341. * Copyright 2013-2015, Facebook, Inc.
  16342. * All rights reserved.
  16343. *
  16344. * This source code is licensed under the BSD-style license found in the
  16345. * LICENSE file in the root directory of this source tree. An additional grant
  16346. * of patent rights can be found in the PATENTS file in the same directory.
  16347. *
  16348. * @providesModule ReactDOMServer
  16349. */
  16350. 'use strict';
  16351. var ReactDefaultInjection = __webpack_require__(71);
  16352. var ReactServerRendering = __webpack_require__(149);
  16353. var ReactVersion = __webpack_require__(146);
  16354. ReactDefaultInjection.inject();
  16355. var ReactDOMServer = {
  16356. renderToString: ReactServerRendering.renderToString,
  16357. renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
  16358. version: ReactVersion
  16359. };
  16360. module.exports = ReactDOMServer;
  16361. /***/ },
  16362. /* 149 */
  16363. /***/ function(module, exports, __webpack_require__) {
  16364. /* WEBPACK VAR INJECTION */(function(process) {/**
  16365. * Copyright 2013-2015, Facebook, Inc.
  16366. * All rights reserved.
  16367. *
  16368. * This source code is licensed under the BSD-style license found in the
  16369. * LICENSE file in the root directory of this source tree. An additional grant
  16370. * of patent rights can be found in the PATENTS file in the same directory.
  16371. *
  16372. * @typechecks static-only
  16373. * @providesModule ReactServerRendering
  16374. */
  16375. 'use strict';
  16376. var ReactDefaultBatchingStrategy = __webpack_require__(92);
  16377. var ReactElement = __webpack_require__(42);
  16378. var ReactInstanceHandles = __webpack_require__(45);
  16379. var ReactMarkupChecksum = __webpack_require__(48);
  16380. var ReactServerBatchingStrategy = __webpack_require__(150);
  16381. var ReactServerRenderingTransaction = __webpack_require__(151);
  16382. var ReactUpdates = __webpack_require__(54);
  16383. var emptyObject = __webpack_require__(58);
  16384. var instantiateReactComponent = __webpack_require__(62);
  16385. var invariant = __webpack_require__(13);
  16386. /**
  16387. * @param {ReactElement} element
  16388. * @return {string} the HTML markup
  16389. */
  16390. function renderToString(element) {
  16391. !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined;
  16392. var transaction;
  16393. try {
  16394. ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);
  16395. var id = ReactInstanceHandles.createReactRootID();
  16396. transaction = ReactServerRenderingTransaction.getPooled(false);
  16397. return transaction.perform(function () {
  16398. var componentInstance = instantiateReactComponent(element, null);
  16399. var markup = componentInstance.mountComponent(id, transaction, emptyObject);
  16400. return ReactMarkupChecksum.addChecksumToMarkup(markup);
  16401. }, null);
  16402. } finally {
  16403. ReactServerRenderingTransaction.release(transaction);
  16404. // Revert to the DOM batching strategy since these two renderers
  16405. // currently share these stateful modules.
  16406. ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);
  16407. }
  16408. }
  16409. /**
  16410. * @param {ReactElement} element
  16411. * @return {string} the HTML markup, without the extra React ID and checksum
  16412. * (for generating static pages)
  16413. */
  16414. function renderToStaticMarkup(element) {
  16415. !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined;
  16416. var transaction;
  16417. try {
  16418. ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);
  16419. var id = ReactInstanceHandles.createReactRootID();
  16420. transaction = ReactServerRenderingTransaction.getPooled(true);
  16421. return transaction.perform(function () {
  16422. var componentInstance = instantiateReactComponent(element, null);
  16423. return componentInstance.mountComponent(id, transaction, emptyObject);
  16424. }, null);
  16425. } finally {
  16426. ReactServerRenderingTransaction.release(transaction);
  16427. // Revert to the DOM batching strategy since these two renderers
  16428. // currently share these stateful modules.
  16429. ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);
  16430. }
  16431. }
  16432. module.exports = {
  16433. renderToString: renderToString,
  16434. renderToStaticMarkup: renderToStaticMarkup
  16435. };
  16436. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  16437. /***/ },
  16438. /* 150 */
  16439. /***/ function(module, exports) {
  16440. /**
  16441. * Copyright 2014-2015, Facebook, Inc.
  16442. * All rights reserved.
  16443. *
  16444. * This source code is licensed under the BSD-style license found in the
  16445. * LICENSE file in the root directory of this source tree. An additional grant
  16446. * of patent rights can be found in the PATENTS file in the same directory.
  16447. *
  16448. * @providesModule ReactServerBatchingStrategy
  16449. * @typechecks
  16450. */
  16451. 'use strict';
  16452. var ReactServerBatchingStrategy = {
  16453. isBatchingUpdates: false,
  16454. batchedUpdates: function (callback) {
  16455. // Don't do anything here. During the server rendering we don't want to
  16456. // schedule any updates. We will simply ignore them.
  16457. }
  16458. };
  16459. module.exports = ReactServerBatchingStrategy;
  16460. /***/ },
  16461. /* 151 */
  16462. /***/ function(module, exports, __webpack_require__) {
  16463. /**
  16464. * Copyright 2014-2015, Facebook, Inc.
  16465. * All rights reserved.
  16466. *
  16467. * This source code is licensed under the BSD-style license found in the
  16468. * LICENSE file in the root directory of this source tree. An additional grant
  16469. * of patent rights can be found in the PATENTS file in the same directory.
  16470. *
  16471. * @providesModule ReactServerRenderingTransaction
  16472. * @typechecks
  16473. */
  16474. 'use strict';
  16475. var PooledClass = __webpack_require__(56);
  16476. var CallbackQueue = __webpack_require__(55);
  16477. var Transaction = __webpack_require__(57);
  16478. var assign = __webpack_require__(39);
  16479. var emptyFunction = __webpack_require__(15);
  16480. /**
  16481. * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks
  16482. * during the performing of the transaction.
  16483. */
  16484. var ON_DOM_READY_QUEUEING = {
  16485. /**
  16486. * Initializes the internal `onDOMReady` queue.
  16487. */
  16488. initialize: function () {
  16489. this.reactMountReady.reset();
  16490. },
  16491. close: emptyFunction
  16492. };
  16493. /**
  16494. * Executed within the scope of the `Transaction` instance. Consider these as
  16495. * being member methods, but with an implied ordering while being isolated from
  16496. * each other.
  16497. */
  16498. var TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];
  16499. /**
  16500. * @class ReactServerRenderingTransaction
  16501. * @param {boolean} renderToStaticMarkup
  16502. */
  16503. function ReactServerRenderingTransaction(renderToStaticMarkup) {
  16504. this.reinitializeTransaction();
  16505. this.renderToStaticMarkup = renderToStaticMarkup;
  16506. this.reactMountReady = CallbackQueue.getPooled(null);
  16507. this.useCreateElement = false;
  16508. }
  16509. var Mixin = {
  16510. /**
  16511. * @see Transaction
  16512. * @abstract
  16513. * @final
  16514. * @return {array} Empty list of operation wrap procedures.
  16515. */
  16516. getTransactionWrappers: function () {
  16517. return TRANSACTION_WRAPPERS;
  16518. },
  16519. /**
  16520. * @return {object} The queue to collect `onDOMReady` callbacks with.
  16521. */
  16522. getReactMountReady: function () {
  16523. return this.reactMountReady;
  16524. },
  16525. /**
  16526. * `PooledClass` looks for this, and will invoke this before allowing this
  16527. * instance to be reused.
  16528. */
  16529. destructor: function () {
  16530. CallbackQueue.release(this.reactMountReady);
  16531. this.reactMountReady = null;
  16532. }
  16533. };
  16534. assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);
  16535. PooledClass.addPoolingTo(ReactServerRenderingTransaction);
  16536. module.exports = ReactServerRenderingTransaction;
  16537. /***/ },
  16538. /* 152 */
  16539. /***/ function(module, exports, __webpack_require__) {
  16540. /* WEBPACK VAR INJECTION */(function(process) {/**
  16541. * Copyright 2013-2015, Facebook, Inc.
  16542. * All rights reserved.
  16543. *
  16544. * This source code is licensed under the BSD-style license found in the
  16545. * LICENSE file in the root directory of this source tree. An additional grant
  16546. * of patent rights can be found in the PATENTS file in the same directory.
  16547. *
  16548. * @providesModule ReactIsomorphic
  16549. */
  16550. 'use strict';
  16551. var ReactChildren = __webpack_require__(110);
  16552. var ReactComponent = __webpack_require__(123);
  16553. var ReactClass = __webpack_require__(122);
  16554. var ReactDOMFactories = __webpack_require__(153);
  16555. var ReactElement = __webpack_require__(42);
  16556. var ReactElementValidator = __webpack_require__(154);
  16557. var ReactPropTypes = __webpack_require__(107);
  16558. var ReactVersion = __webpack_require__(146);
  16559. var assign = __webpack_require__(39);
  16560. var onlyChild = __webpack_require__(156);
  16561. var createElement = ReactElement.createElement;
  16562. var createFactory = ReactElement.createFactory;
  16563. var cloneElement = ReactElement.cloneElement;
  16564. if (process.env.NODE_ENV !== 'production') {
  16565. createElement = ReactElementValidator.createElement;
  16566. createFactory = ReactElementValidator.createFactory;
  16567. cloneElement = ReactElementValidator.cloneElement;
  16568. }
  16569. var React = {
  16570. // Modern
  16571. Children: {
  16572. map: ReactChildren.map,
  16573. forEach: ReactChildren.forEach,
  16574. count: ReactChildren.count,
  16575. toArray: ReactChildren.toArray,
  16576. only: onlyChild
  16577. },
  16578. Component: ReactComponent,
  16579. createElement: createElement,
  16580. cloneElement: cloneElement,
  16581. isValidElement: ReactElement.isValidElement,
  16582. // Classic
  16583. PropTypes: ReactPropTypes,
  16584. createClass: ReactClass.createClass,
  16585. createFactory: createFactory,
  16586. createMixin: function (mixin) {
  16587. // Currently a noop. Will be used to validate and trace mixins.
  16588. return mixin;
  16589. },
  16590. // This looks DOM specific but these are actually isomorphic helpers
  16591. // since they are just generating DOM strings.
  16592. DOM: ReactDOMFactories,
  16593. version: ReactVersion,
  16594. // Hook for JSX spread, don't use this for anything else.
  16595. __spread: assign
  16596. };
  16597. module.exports = React;
  16598. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  16599. /***/ },
  16600. /* 153 */
  16601. /***/ function(module, exports, __webpack_require__) {
  16602. /* WEBPACK VAR INJECTION */(function(process) {/**
  16603. * Copyright 2013-2015, Facebook, Inc.
  16604. * All rights reserved.
  16605. *
  16606. * This source code is licensed under the BSD-style license found in the
  16607. * LICENSE file in the root directory of this source tree. An additional grant
  16608. * of patent rights can be found in the PATENTS file in the same directory.
  16609. *
  16610. * @providesModule ReactDOMFactories
  16611. * @typechecks static-only
  16612. */
  16613. 'use strict';
  16614. var ReactElement = __webpack_require__(42);
  16615. var ReactElementValidator = __webpack_require__(154);
  16616. var mapObject = __webpack_require__(155);
  16617. /**
  16618. * Create a factory that creates HTML tag elements.
  16619. *
  16620. * @param {string} tag Tag name (e.g. `div`).
  16621. * @private
  16622. */
  16623. function createDOMFactory(tag) {
  16624. if (process.env.NODE_ENV !== 'production') {
  16625. return ReactElementValidator.createFactory(tag);
  16626. }
  16627. return ReactElement.createFactory(tag);
  16628. }
  16629. /**
  16630. * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.
  16631. * This is also accessible via `React.DOM`.
  16632. *
  16633. * @public
  16634. */
  16635. var ReactDOMFactories = mapObject({
  16636. a: 'a',
  16637. abbr: 'abbr',
  16638. address: 'address',
  16639. area: 'area',
  16640. article: 'article',
  16641. aside: 'aside',
  16642. audio: 'audio',
  16643. b: 'b',
  16644. base: 'base',
  16645. bdi: 'bdi',
  16646. bdo: 'bdo',
  16647. big: 'big',
  16648. blockquote: 'blockquote',
  16649. body: 'body',
  16650. br: 'br',
  16651. button: 'button',
  16652. canvas: 'canvas',
  16653. caption: 'caption',
  16654. cite: 'cite',
  16655. code: 'code',
  16656. col: 'col',
  16657. colgroup: 'colgroup',
  16658. data: 'data',
  16659. datalist: 'datalist',
  16660. dd: 'dd',
  16661. del: 'del',
  16662. details: 'details',
  16663. dfn: 'dfn',
  16664. dialog: 'dialog',
  16665. div: 'div',
  16666. dl: 'dl',
  16667. dt: 'dt',
  16668. em: 'em',
  16669. embed: 'embed',
  16670. fieldset: 'fieldset',
  16671. figcaption: 'figcaption',
  16672. figure: 'figure',
  16673. footer: 'footer',
  16674. form: 'form',
  16675. h1: 'h1',
  16676. h2: 'h2',
  16677. h3: 'h3',
  16678. h4: 'h4',
  16679. h5: 'h5',
  16680. h6: 'h6',
  16681. head: 'head',
  16682. header: 'header',
  16683. hgroup: 'hgroup',
  16684. hr: 'hr',
  16685. html: 'html',
  16686. i: 'i',
  16687. iframe: 'iframe',
  16688. img: 'img',
  16689. input: 'input',
  16690. ins: 'ins',
  16691. kbd: 'kbd',
  16692. keygen: 'keygen',
  16693. label: 'label',
  16694. legend: 'legend',
  16695. li: 'li',
  16696. link: 'link',
  16697. main: 'main',
  16698. map: 'map',
  16699. mark: 'mark',
  16700. menu: 'menu',
  16701. menuitem: 'menuitem',
  16702. meta: 'meta',
  16703. meter: 'meter',
  16704. nav: 'nav',
  16705. noscript: 'noscript',
  16706. object: 'object',
  16707. ol: 'ol',
  16708. optgroup: 'optgroup',
  16709. option: 'option',
  16710. output: 'output',
  16711. p: 'p',
  16712. param: 'param',
  16713. picture: 'picture',
  16714. pre: 'pre',
  16715. progress: 'progress',
  16716. q: 'q',
  16717. rp: 'rp',
  16718. rt: 'rt',
  16719. ruby: 'ruby',
  16720. s: 's',
  16721. samp: 'samp',
  16722. script: 'script',
  16723. section: 'section',
  16724. select: 'select',
  16725. small: 'small',
  16726. source: 'source',
  16727. span: 'span',
  16728. strong: 'strong',
  16729. style: 'style',
  16730. sub: 'sub',
  16731. summary: 'summary',
  16732. sup: 'sup',
  16733. table: 'table',
  16734. tbody: 'tbody',
  16735. td: 'td',
  16736. textarea: 'textarea',
  16737. tfoot: 'tfoot',
  16738. th: 'th',
  16739. thead: 'thead',
  16740. time: 'time',
  16741. title: 'title',
  16742. tr: 'tr',
  16743. track: 'track',
  16744. u: 'u',
  16745. ul: 'ul',
  16746. 'var': 'var',
  16747. video: 'video',
  16748. wbr: 'wbr',
  16749. // SVG
  16750. circle: 'circle',
  16751. clipPath: 'clipPath',
  16752. defs: 'defs',
  16753. ellipse: 'ellipse',
  16754. g: 'g',
  16755. image: 'image',
  16756. line: 'line',
  16757. linearGradient: 'linearGradient',
  16758. mask: 'mask',
  16759. path: 'path',
  16760. pattern: 'pattern',
  16761. polygon: 'polygon',
  16762. polyline: 'polyline',
  16763. radialGradient: 'radialGradient',
  16764. rect: 'rect',
  16765. stop: 'stop',
  16766. svg: 'svg',
  16767. text: 'text',
  16768. tspan: 'tspan'
  16769. }, createDOMFactory);
  16770. module.exports = ReactDOMFactories;
  16771. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  16772. /***/ },
  16773. /* 154 */
  16774. /***/ function(module, exports, __webpack_require__) {
  16775. /* WEBPACK VAR INJECTION */(function(process) {/**
  16776. * Copyright 2014-2015, Facebook, Inc.
  16777. * All rights reserved.
  16778. *
  16779. * This source code is licensed under the BSD-style license found in the
  16780. * LICENSE file in the root directory of this source tree. An additional grant
  16781. * of patent rights can be found in the PATENTS file in the same directory.
  16782. *
  16783. * @providesModule ReactElementValidator
  16784. */
  16785. /**
  16786. * ReactElementValidator provides a wrapper around a element factory
  16787. * which validates the props passed to the element. This is intended to be
  16788. * used only in DEV and could be replaced by a static type checker for languages
  16789. * that support it.
  16790. */
  16791. 'use strict';
  16792. var ReactElement = __webpack_require__(42);
  16793. var ReactPropTypeLocations = __webpack_require__(65);
  16794. var ReactPropTypeLocationNames = __webpack_require__(66);
  16795. var ReactCurrentOwner = __webpack_require__(5);
  16796. var canDefineProperty = __webpack_require__(43);
  16797. var getIteratorFn = __webpack_require__(108);
  16798. var invariant = __webpack_require__(13);
  16799. var warning = __webpack_require__(25);
  16800. function getDeclarationErrorAddendum() {
  16801. if (ReactCurrentOwner.current) {
  16802. var name = ReactCurrentOwner.current.getName();
  16803. if (name) {
  16804. return ' Check the render method of `' + name + '`.';
  16805. }
  16806. }
  16807. return '';
  16808. }
  16809. /**
  16810. * Warn if there's no key explicitly set on dynamic arrays of children or
  16811. * object keys are not valid. This allows us to keep track of children between
  16812. * updates.
  16813. */
  16814. var ownerHasKeyUseWarning = {};
  16815. var loggedTypeFailures = {};
  16816. /**
  16817. * Warn if the element doesn't have an explicit key assigned to it.
  16818. * This element is in an array. The array could grow and shrink or be
  16819. * reordered. All children that haven't already been validated are required to
  16820. * have a "key" property assigned to it.
  16821. *
  16822. * @internal
  16823. * @param {ReactElement} element Element that requires a key.
  16824. * @param {*} parentType element's parent's type.
  16825. */
  16826. function validateExplicitKey(element, parentType) {
  16827. if (!element._store || element._store.validated || element.key != null) {
  16828. return;
  16829. }
  16830. element._store.validated = true;
  16831. var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);
  16832. if (addenda === null) {
  16833. // we already showed the warning
  16834. return;
  16835. }
  16836. process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined;
  16837. }
  16838. /**
  16839. * Shared warning and monitoring code for the key warnings.
  16840. *
  16841. * @internal
  16842. * @param {string} messageType A key used for de-duping warnings.
  16843. * @param {ReactElement} element Component that requires a key.
  16844. * @param {*} parentType element's parent's type.
  16845. * @returns {?object} A set of addenda to use in the warning message, or null
  16846. * if the warning has already been shown before (and shouldn't be shown again).
  16847. */
  16848. function getAddendaForKeyUse(messageType, element, parentType) {
  16849. var addendum = getDeclarationErrorAddendum();
  16850. if (!addendum) {
  16851. var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
  16852. if (parentName) {
  16853. addendum = ' Check the top-level render call using <' + parentName + '>.';
  16854. }
  16855. }
  16856. var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});
  16857. if (memoizer[addendum]) {
  16858. return null;
  16859. }
  16860. memoizer[addendum] = true;
  16861. var addenda = {
  16862. parentOrOwner: addendum,
  16863. url: ' See https://fb.me/react-warning-keys for more information.',
  16864. childOwner: null
  16865. };
  16866. // Usually the current owner is the offender, but if it accepts children as a
  16867. // property, it may be the creator of the child that's responsible for
  16868. // assigning it a key.
  16869. if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
  16870. // Give the component that originally created this child.
  16871. addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
  16872. }
  16873. return addenda;
  16874. }
  16875. /**
  16876. * Ensure that every element either is passed in a static location, in an
  16877. * array with an explicit keys property defined, or in an object literal
  16878. * with valid key property.
  16879. *
  16880. * @internal
  16881. * @param {ReactNode} node Statically passed child of any type.
  16882. * @param {*} parentType node's parent's type.
  16883. */
  16884. function validateChildKeys(node, parentType) {
  16885. if (typeof node !== 'object') {
  16886. return;
  16887. }
  16888. if (Array.isArray(node)) {
  16889. for (var i = 0; i < node.length; i++) {
  16890. var child = node[i];
  16891. if (ReactElement.isValidElement(child)) {
  16892. validateExplicitKey(child, parentType);
  16893. }
  16894. }
  16895. } else if (ReactElement.isValidElement(node)) {
  16896. // This element was passed in a valid location.
  16897. if (node._store) {
  16898. node._store.validated = true;
  16899. }
  16900. } else if (node) {
  16901. var iteratorFn = getIteratorFn(node);
  16902. // Entry iterators provide implicit keys.
  16903. if (iteratorFn) {
  16904. if (iteratorFn !== node.entries) {
  16905. var iterator = iteratorFn.call(node);
  16906. var step;
  16907. while (!(step = iterator.next()).done) {
  16908. if (ReactElement.isValidElement(step.value)) {
  16909. validateExplicitKey(step.value, parentType);
  16910. }
  16911. }
  16912. }
  16913. }
  16914. }
  16915. }
  16916. /**
  16917. * Assert that the props are valid
  16918. *
  16919. * @param {string} componentName Name of the component for error messages.
  16920. * @param {object} propTypes Map of prop name to a ReactPropType
  16921. * @param {object} props
  16922. * @param {string} location e.g. "prop", "context", "child context"
  16923. * @private
  16924. */
  16925. function checkPropTypes(componentName, propTypes, props, location) {
  16926. for (var propName in propTypes) {
  16927. if (propTypes.hasOwnProperty(propName)) {
  16928. var error;
  16929. // Prop type validation may throw. In case they do, we don't want to
  16930. // fail the render phase where it didn't fail before. So we log it.
  16931. // After these have been cleaned up, we'll let them throw.
  16932. try {
  16933. // This is intentionally an invariant that gets caught. It's the same
  16934. // behavior as without this statement except with a better message.
  16935. !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;
  16936. error = propTypes[propName](props, propName, componentName, location);
  16937. } catch (ex) {
  16938. error = ex;
  16939. }
  16940. process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined;
  16941. if (error instanceof Error && !(error.message in loggedTypeFailures)) {
  16942. // Only monitor this failure once because there tends to be a lot of the
  16943. // same error.
  16944. loggedTypeFailures[error.message] = true;
  16945. var addendum = getDeclarationErrorAddendum();
  16946. process.env.NODE_ENV !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined;
  16947. }
  16948. }
  16949. }
  16950. }
  16951. /**
  16952. * Given an element, validate that its props follow the propTypes definition,
  16953. * provided by the type.
  16954. *
  16955. * @param {ReactElement} element
  16956. */
  16957. function validatePropTypes(element) {
  16958. var componentClass = element.type;
  16959. if (typeof componentClass !== 'function') {
  16960. return;
  16961. }
  16962. var name = componentClass.displayName || componentClass.name;
  16963. if (componentClass.propTypes) {
  16964. checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);
  16965. }
  16966. if (typeof componentClass.getDefaultProps === 'function') {
  16967. process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined;
  16968. }
  16969. }
  16970. var ReactElementValidator = {
  16971. createElement: function (type, props, children) {
  16972. var validType = typeof type === 'string' || typeof type === 'function';
  16973. // We warn in this case but don't throw. We expect the element creation to
  16974. // succeed and there will likely be errors in render.
  16975. process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined;
  16976. var element = ReactElement.createElement.apply(this, arguments);
  16977. // The result can be nullish if a mock or a custom function is used.
  16978. // TODO: Drop this when these are no longer allowed as the type argument.
  16979. if (element == null) {
  16980. return element;
  16981. }
  16982. // Skip key warning if the type isn't valid since our key validation logic
  16983. // doesn't expect a non-string/function type and can throw confusing errors.
  16984. // We don't want exception behavior to differ between dev and prod.
  16985. // (Rendering will throw with a helpful message and as soon as the type is
  16986. // fixed, the key warnings will appear.)
  16987. if (validType) {
  16988. for (var i = 2; i < arguments.length; i++) {
  16989. validateChildKeys(arguments[i], type);
  16990. }
  16991. }
  16992. validatePropTypes(element);
  16993. return element;
  16994. },
  16995. createFactory: function (type) {
  16996. var validatedFactory = ReactElementValidator.createElement.bind(null, type);
  16997. // Legacy hook TODO: Warn if this is accessed
  16998. validatedFactory.type = type;
  16999. if (process.env.NODE_ENV !== 'production') {
  17000. if (canDefineProperty) {
  17001. Object.defineProperty(validatedFactory, 'type', {
  17002. enumerable: false,
  17003. get: function () {
  17004. process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined;
  17005. Object.defineProperty(this, 'type', {
  17006. value: type
  17007. });
  17008. return type;
  17009. }
  17010. });
  17011. }
  17012. }
  17013. return validatedFactory;
  17014. },
  17015. cloneElement: function (element, props, children) {
  17016. var newElement = ReactElement.cloneElement.apply(this, arguments);
  17017. for (var i = 2; i < arguments.length; i++) {
  17018. validateChildKeys(arguments[i], newElement.type);
  17019. }
  17020. validatePropTypes(newElement);
  17021. return newElement;
  17022. }
  17023. };
  17024. module.exports = ReactElementValidator;
  17025. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  17026. /***/ },
  17027. /* 155 */
  17028. /***/ function(module, exports) {
  17029. /**
  17030. * Copyright 2013-2015, Facebook, Inc.
  17031. * All rights reserved.
  17032. *
  17033. * This source code is licensed under the BSD-style license found in the
  17034. * LICENSE file in the root directory of this source tree. An additional grant
  17035. * of patent rights can be found in the PATENTS file in the same directory.
  17036. *
  17037. * @providesModule mapObject
  17038. */
  17039. 'use strict';
  17040. var hasOwnProperty = Object.prototype.hasOwnProperty;
  17041. /**
  17042. * Executes the provided `callback` once for each enumerable own property in the
  17043. * object and constructs a new object from the results. The `callback` is
  17044. * invoked with three arguments:
  17045. *
  17046. * - the property value
  17047. * - the property name
  17048. * - the object being traversed
  17049. *
  17050. * Properties that are added after the call to `mapObject` will not be visited
  17051. * by `callback`. If the values of existing properties are changed, the value
  17052. * passed to `callback` will be the value at the time `mapObject` visits them.
  17053. * Properties that are deleted before being visited are not visited.
  17054. *
  17055. * @grep function objectMap()
  17056. * @grep function objMap()
  17057. *
  17058. * @param {?object} object
  17059. * @param {function} callback
  17060. * @param {*} context
  17061. * @return {?object}
  17062. */
  17063. function mapObject(object, callback, context) {
  17064. if (!object) {
  17065. return null;
  17066. }
  17067. var result = {};
  17068. for (var name in object) {
  17069. if (hasOwnProperty.call(object, name)) {
  17070. result[name] = callback.call(context, object[name], name, object);
  17071. }
  17072. }
  17073. return result;
  17074. }
  17075. module.exports = mapObject;
  17076. /***/ },
  17077. /* 156 */
  17078. /***/ function(module, exports, __webpack_require__) {
  17079. /* WEBPACK VAR INJECTION */(function(process) {/**
  17080. * Copyright 2013-2015, Facebook, Inc.
  17081. * All rights reserved.
  17082. *
  17083. * This source code is licensed under the BSD-style license found in the
  17084. * LICENSE file in the root directory of this source tree. An additional grant
  17085. * of patent rights can be found in the PATENTS file in the same directory.
  17086. *
  17087. * @providesModule onlyChild
  17088. */
  17089. 'use strict';
  17090. var ReactElement = __webpack_require__(42);
  17091. var invariant = __webpack_require__(13);
  17092. /**
  17093. * Returns the first child in a collection of children and verifies that there
  17094. * is only one child in the collection. The current implementation of this
  17095. * function assumes that a single child gets passed without a wrapper, but the
  17096. * purpose of this helper function is to abstract away the particular structure
  17097. * of children.
  17098. *
  17099. * @param {?object} children Child collection structure.
  17100. * @return {ReactComponent} The first and only `ReactComponent` contained in the
  17101. * structure.
  17102. */
  17103. function onlyChild(children) {
  17104. !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined;
  17105. return children;
  17106. }
  17107. module.exports = onlyChild;
  17108. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  17109. /***/ },
  17110. /* 157 */
  17111. /***/ function(module, exports, __webpack_require__) {
  17112. /* WEBPACK VAR INJECTION */(function(process) {/**
  17113. * Copyright 2013-2015, Facebook, Inc.
  17114. * All rights reserved.
  17115. *
  17116. * This source code is licensed under the BSD-style license found in the
  17117. * LICENSE file in the root directory of this source tree. An additional grant
  17118. * of patent rights can be found in the PATENTS file in the same directory.
  17119. *
  17120. * @providesModule deprecated
  17121. */
  17122. 'use strict';
  17123. var assign = __webpack_require__(39);
  17124. var warning = __webpack_require__(25);
  17125. /**
  17126. * This will log a single deprecation notice per function and forward the call
  17127. * on to the new API.
  17128. *
  17129. * @param {string} fnName The name of the function
  17130. * @param {string} newModule The module that fn will exist in
  17131. * @param {string} newPackage The module that fn will exist in
  17132. * @param {*} ctx The context this forwarded call should run in
  17133. * @param {function} fn The function to forward on to
  17134. * @return {function} The function that will warn once and then call fn
  17135. */
  17136. function deprecated(fnName, newModule, newPackage, ctx, fn) {
  17137. var warned = false;
  17138. if (process.env.NODE_ENV !== 'production') {
  17139. var newFn = function () {
  17140. process.env.NODE_ENV !== 'production' ? warning(warned,
  17141. // Require examples in this string must be split to prevent React's
  17142. // build tools from mistaking them for real requires.
  17143. // Otherwise the build tools will attempt to build a '%s' module.
  17144. 'React.%s is deprecated. Please use %s.%s from require' + '(\'%s\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined;
  17145. warned = true;
  17146. return fn.apply(ctx, arguments);
  17147. };
  17148. // We need to make sure all properties of the original fn are copied over.
  17149. // In particular, this is needed to support PropTypes
  17150. return assign(newFn, fn);
  17151. }
  17152. return fn;
  17153. }
  17154. module.exports = deprecated;
  17155. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  17156. /***/ },
  17157. /* 158 */
  17158. /***/ function(module, exports, __webpack_require__) {
  17159. 'use strict';
  17160. module.exports = __webpack_require__(3);
  17161. /***/ },
  17162. /* 159 */
  17163. /***/ function(module, exports, __webpack_require__) {
  17164. var React = __webpack_require__(1);
  17165. var ReactDOM = __webpack_require__(158);
  17166. var SimpleMDEReact = __webpack_require__(160);
  17167. var Editor = __webpack_require__(163);
  17168. let counter = 1;
  17169. module.exports = React.createClass({
  17170. displayName: 'exports',
  17171. getInitialState() {
  17172. return {
  17173. textValue: "chickens"
  17174. };
  17175. },
  17176. handleEditorChange(value) {
  17177. this.setState({
  17178. textValue: value
  17179. });
  17180. },
  17181. handleTextChange() {
  17182. this.setState({
  17183. textValue: `Changing text ${ counter++ }`
  17184. });
  17185. },
  17186. render() {
  17187. return React.createElement(
  17188. 'div',
  17189. { className: 'container container-narrow' },
  17190. React.createElement(
  17191. 'div',
  17192. { className: 'page-header' },
  17193. React.createElement(
  17194. 'h1',
  17195. null,
  17196. React.createElement(
  17197. 'a',
  17198. { href: 'https://github.com/benrlodge/react-simplemde-editor' },
  17199. 'react-simplemde-editor'
  17200. )
  17201. ),
  17202. React.createElement(
  17203. 'p',
  17204. { className: 'lead' },
  17205. 'A React.js wrapper for ',
  17206. React.createElement(
  17207. 'a',
  17208. { href: 'https://github.com/NextStepWebs/simplemde-markdown-editor' },
  17209. 'simplemde-markdown-editor'
  17210. ),
  17211. '.'
  17212. )
  17213. ),
  17214. React.createElement(
  17215. 'button',
  17216. { style: { display: "inline-block", margin: "10px 0" }, onClick: this.handleTextChange },
  17217. 'Click me to update the textValue outside of the editor'
  17218. ),
  17219. React.createElement(Editor, {
  17220. value: this.state.textValue,
  17221. handleEditorChange: this.handleEditorChange }),
  17222. React.createElement(
  17223. 'h5',
  17224. null,
  17225. 'this.state.textValue:'
  17226. ),
  17227. React.createElement(
  17228. 'pre',
  17229. null,
  17230. this.state.textValue
  17231. )
  17232. );
  17233. }
  17234. });
  17235. /***/ },
  17236. /* 160 */
  17237. /***/ function(module, exports, __webpack_require__) {
  17238. var React = __webpack_require__(1);
  17239. // not ideal, but doesn't properly load codemirror
  17240. // currently looking for a better solution
  17241. var SimpleMDE = __webpack_require__(161);
  17242. var $ = __webpack_require__(162);
  17243. let state = {
  17244. previousValue: null
  17245. };
  17246. module.exports = React.createClass({
  17247. displayName: 'exports',
  17248. getInitialState: function () {
  17249. return {
  17250. keyChange: false
  17251. };
  17252. },
  17253. getDefaultProps: function () {
  17254. return {
  17255. onChange: function () {},
  17256. options: {}
  17257. };
  17258. },
  17259. componentDidMount: function () {
  17260. var initialOptions = {
  17261. simplemdeement: document.getElementById("simplepostmd-editor")
  17262. };
  17263. var allOptions = $.extend({}, initialOptions, this.props.options);
  17264. this.simplemde = new SimpleMDE(allOptions);
  17265. state.previousValue = this.props.options.initialValue;
  17266. var _this = this;
  17267. $('.CodeMirror').on('keyup', '*', function () {
  17268. _this.setState({
  17269. keyChange: true
  17270. });
  17271. _this.simplemde.value();
  17272. _this.props.onChange(_this.simplemde.value());
  17273. });
  17274. $('.editor-toolbar').on('click', '*', function () {
  17275. _this.props.onChange(_this.simplemde.value());
  17276. });
  17277. },
  17278. componentWillReceiveProps: function (nextProps) {
  17279. if (!this.state.keyChange) {
  17280. this.simplemde.value(nextProps.value);
  17281. }
  17282. this.setState({
  17283. keyChange: false
  17284. });
  17285. },
  17286. componentWillUnmount: function () {
  17287. $('.CodeMirror').off('keyup', '*');
  17288. $('.editor-toolbar').off('click', '*');
  17289. },
  17290. render: function () {
  17291. return React.createElement('textarea', { id: 'simplepostmd-editor' });
  17292. }
  17293. });
  17294. /***/ },
  17295. /* 161 */
  17296. /***/ function(module, exports, __webpack_require__) {
  17297. var require;var require;/* WEBPACK VAR INJECTION */(function(global) {/**
  17298. * simplemde v1.10.1
  17299. * Copyright Next Step Webs, Inc.
  17300. * @link https://github.com/NextStepWebs/simplemde-markdown-editor
  17301. * @license MIT
  17302. */
  17303. !function(e){if(true)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.SimpleMDE=e()}}(function(){var e;return function t(e,n,r){function i(l,a){if(!n[l]){if(!e[l]){var s="function"==typeof require&&require;if(!a&&s)return require(l,!0);if(o)return o(l,!0);var c=new Error("Cannot find module '"+l+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[l]={exports:{}};e[l][0].call(u.exports,function(t){var n=e[l][1][t];return i(n?n:t)},u,u.exports,t,e,n,r)}return n[l].exports}for(var o="function"==typeof require&&require,l=0;l<r.length;l++)i(r[l]);return i}({1:[function(e,t,n){(function(n){Typo=n.Typo=e("D:\\My Web Sites\\simplemde-markdown-editor\\node_modules\\codemirror-spell-checker\\src\\js\\typo.js"),CodeMirror=n.CodeMirror=e("codemirror");(function(e,t,n){var r,i=0,o=!1,l=!1,a="",s="";CodeMirror.defineMode("spell-checker",function(e,t){if(!o){o=!0;var n=new XMLHttpRequest;n.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff",!0),n.onload=function(e){4===n.readyState&&200===n.status&&(a=n.responseText,i++,2==i&&(r=new Typo("en_US",a,s,{platform:"any"})))},n.send(null)}if(!l){l=!0;var c=new XMLHttpRequest;c.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic",!0),c.onload=function(e){4===c.readyState&&200===c.status&&(s=c.responseText,i++,2==i&&(r=new Typo("en_US",a,s,{platform:"any"})))},c.send(null)}var u='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~ ',d={token:function(e,t){var n=e.peek(),i="";if(u.includes(n))return e.next(),null;for(;null!=(n=e.peek())&&!u.includes(n);)i+=n,e.next();return r&&!r.check(i)?"spell-error":null}},h=CodeMirror.getMode(e,e.backdrop||"text/plain");return CodeMirror.overlayMode(h,d,!0)}),String.prototype.includes||(String.prototype.includes=function(){"use strict";return-1!==String.prototype.indexOf.apply(this,arguments)})}).call(n,t,void 0,void 0)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"D:\\My Web Sites\\simplemde-markdown-editor\\node_modules\\codemirror-spell-checker\\src\\js\\typo.js":2,codemirror:7}],2:[function(e,t,n){(function(e){(function(e,t,n,r,i){"use strict";var o=function(e,t,n,r){if(r=r||{},this.platform=r.platform||"chrome",this.dictionary=null,this.rules={},this.dictionaryTable={},this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=r.flags||{},e){if(this.dictionary=e,"chrome"==this.platform)t||(t=this._readFile(chrome.extension.getURL("lib/typo/dictionaries/"+e+"/"+e+".aff"))),n||(n=this._readFile(chrome.extension.getURL("lib/typo/dictionaries/"+e+"/"+e+".dic")));else{var i=r.dictionaryPath||"";t||(t=this._readFile(i+"/"+e+"/"+e+".aff")),n||(n=this._readFile(i+"/"+e+"/"+e+".dic"))}this.rules=this._parseAFF(t),this.compoundRuleCodes={};for(var o=0,l=this.compoundRules.length;l>o;o++)for(var a=this.compoundRules[o],s=0,c=a.length;c>s;s++)this.compoundRuleCodes[a[s]]=[];"ONLYINCOMPOUND"in this.flags&&(this.compoundRuleCodes[this.flags.ONLYINCOMPOUND]=[]),this.dictionaryTable=this._parseDIC(n);for(var o in this.compoundRuleCodes)0==this.compoundRuleCodes[o].length&&delete this.compoundRuleCodes[o];for(var o=0,l=this.compoundRules.length;l>o;o++){for(var u=this.compoundRules[o],d="",s=0,c=u.length;c>s;s++){var h=u[s];d+=h in this.compoundRuleCodes?"("+this.compoundRuleCodes[h].join("|")+")":h}this.compoundRules[o]=new RegExp(d,"i")}}return this};o.prototype={load:function(e){for(var t in e)this[t]=e[t];return this},_readFile:function(e,t){t||(t="ISO8859-1");var n=new XMLHttpRequest;return n.open("GET",e,!1),n.overrideMimeType&&n.overrideMimeType("text/plain; charset="+t),n.send(null),n.responseText},_parseAFF:function(e){var t={};e=this._removeAffixComments(e);for(var n=e.split("\n"),r=0,i=n.length;i>r;r++){var o=n[r],l=o.split(/\s+/),a=l[0];if("PFX"==a||"SFX"==a){for(var s=l[1],c=l[2],u=parseInt(l[3],10),d=[],h=r+1,f=r+1+u;f>h;h++){var o=n[h],p=o.split(/\s+/),m=p[2],g=p[3].split("/"),v=g[0];"0"===v&&(v="");var y=this.parseRuleCodes(g[1]),x=p[4],b={};b.add=v,y.length>0&&(b.continuationClasses=y),"."!==x&&("SFX"===a?b.match=new RegExp(x+"$"):b.match=new RegExp("^"+x)),"0"!=m&&("SFX"===a?b.remove=new RegExp(m+"$"):b.remove=m),d.push(b)}t[s]={type:a,combineable:"Y"==c,entries:d},r+=u}else if("COMPOUNDRULE"===a){for(var u=parseInt(l[1],10),h=r+1,f=r+1+u;f>h;h++){var o=n[h],p=o.split(/\s+/);this.compoundRules.push(p[1])}r+=u}else if("REP"===a){var p=o.split(/\s+/);3===p.length&&this.replacementTable.push([p[1],p[2]])}else this.flags[a]=l[1]}return t},_removeAffixComments:function(e){return e=e.replace(/#.*$/gm,""),e=e.replace(/^\s\s*/m,"").replace(/\s\s*$/m,""),e=e.replace(/\n{2,}/g,"\n"),e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")},_parseDIC:function(e){function t(e,t){e in r&&"object"==typeof r[e]||(r[e]=[]),r[e].push(t)}e=this._removeDicComments(e);for(var n=e.split("\n"),r={},i=1,o=n.length;o>i;i++){var l=n[i],a=l.split("/",2),s=a[0];if(a.length>1){var c=this.parseRuleCodes(a[1]);"NEEDAFFIX"in this.flags&&-1!=c.indexOf(this.flags.NEEDAFFIX)||t(s,c);for(var u=0,d=c.length;d>u;u++){var h=c[u],f=this.rules[h];if(f)for(var p=this._applyRule(s,f),m=0,g=p.length;g>m;m++){var v=p[m];if(t(v,[]),f.combineable)for(var y=u+1;d>y;y++){var x=c[y],b=this.rules[x];if(b&&b.combineable&&f.type!=b.type)for(var w=this._applyRule(v,b),k=0,C=w.length;C>k;k++){var S=w[k];t(S,[])}}}h in this.compoundRuleCodes&&this.compoundRuleCodes[h].push(s)}}else t(s.trim(),[])}return r},_removeDicComments:function(e){return e=e.replace(/^\t.*$/gm,"")},parseRuleCodes:function(e){if(!e)return[];if(!("FLAG"in this.flags))return e.split("");if("long"===this.flags.FLAG){for(var t=[],n=0,r=e.length;r>n;n+=2)t.push(e.substr(n,2));return t}return"num"===this.flags.FLAG?textCode.split(","):void 0},_applyRule:function(e,t){for(var n=t.entries,r=[],i=0,o=n.length;o>i;i++){var l=n[i];if(!l.match||e.match(l.match)){var a=e;if(l.remove&&(a=a.replace(l.remove,"")),"SFX"===t.type?a+=l.add:a=l.add+a,r.push(a),"continuationClasses"in l)for(var s=0,c=l.continuationClasses.length;c>s;s++){var u=this.rules[l.continuationClasses[s]];u&&(r=r.concat(this._applyRule(a,u)))}}}return r},check:function(e){var t=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"");if(this.checkExact(t))return!0;if(t.toUpperCase()===t){var n=t[0]+t.substring(1).toLowerCase();if(this.hasFlag(n,"KEEPCASE"))return!1;if(this.checkExact(n))return!0}var r=t.toLowerCase();if(r!==t){if(this.hasFlag(r,"KEEPCASE"))return!1;if(this.checkExact(r))return!0}return!1},checkExact:function(e){var t=this.dictionaryTable[e];if("undefined"==typeof t){if("COMPOUNDMIN"in this.flags&&e.length>=this.flags.COMPOUNDMIN)for(var n=0,r=this.compoundRules.length;r>n;n++)if(e.match(this.compoundRules[n]))return!0;return!1}for(var n=0,r=t.length;r>n;n++)if(!this.hasFlag(e,"ONLYINCOMPOUND",t[n]))return!0;return!1},hasFlag:function(e,t,n){if(t in this.flags){if("undefined"==typeof n)var n=Array.prototype.concat.apply([],this.dictionaryTable[e]);if(n&&-1!==n.indexOf(this.flags[t]))return!0}return!1},alphabet:"",suggest:function(e,t){function n(e){for(var t=[],n=0,r=e.length;r>n;n++){for(var i=e[n],o=[],l=0,a=i.length+1;a>l;l++)o.push([i.substring(0,l),i.substring(l,i.length)]);for(var s=[],l=0,a=o.length;a>l;l++){var u=o[l];u[1]&&s.push(u[0]+u[1].substring(1))}for(var d=[],l=0,a=o.length;a>l;l++){var u=o[l];u[1].length>1&&d.push(u[0]+u[1][1]+u[1][0]+u[1].substring(2))}for(var h=[],l=0,a=o.length;a>l;l++){var u=o[l];if(u[1])for(var f=0,p=c.alphabet.length;p>f;f++)h.push(u[0]+c.alphabet[f]+u[1].substring(1))}for(var m=[],l=0,a=o.length;a>l;l++){var u=o[l];if(u[1])for(var f=0,p=c.alphabet.length;p>f;f++)h.push(u[0]+c.alphabet[f]+u[1])}t=t.concat(s),t=t.concat(d),t=t.concat(h),t=t.concat(m)}return t}function r(e){for(var t=[],n=0;n<e.length;n++)c.check(e[n])&&t.push(e[n]);return t}function i(e){function i(e,t){return e[1]<t[1]?-1:1}for(var o=n([e]),l=n(o),a=r(o).concat(r(l)),s={},u=0,d=a.length;d>u;u++)a[u]in s?s[a[u]]+=1:s[a[u]]=1;var h=[];for(var u in s)h.push([u,s[u]]);h.sort(i).reverse();for(var f=[],u=0,d=Math.min(t,h.length);d>u;u++)c.hasFlag(h[u][0],"NOSUGGEST")||f.push(h[u][0]);return f}if(t||(t=5),this.check(e))return[];for(var o=0,l=this.replacementTable.length;l>o;o++){var a=this.replacementTable[o];if(-1!==e.indexOf(a[0])){var s=e.replace(a[0],a[1]);if(this.check(s))return[s]}}var c=this;return c.alphabet="abcdefghijklmnopqrstuvwxyz",i(e)}},i("undefined"!=typeof o?o:window.Typo)}).call(e,void 0,void 0,void 0,void 0,function(e){t.exports=e})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";function t(e){var t=e.getWrapperElement();e.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:t.style.width,height:t.style.height},t.style.width="",t.style.height="auto",t.className+=" CodeMirror-fullscreen",document.documentElement.style.overflow="hidden",e.refresh()}function n(e){var t=e.getWrapperElement();t.className=t.className.replace(/\s*CodeMirror-fullscreen\b/,""),document.documentElement.style.overflow="";var n=e.state.fullScreenRestore;t.style.width=n.width,t.style.height=n.height,window.scrollTo(n.scrollLeft,n.scrollTop),e.refresh()}e.defineOption("fullScreen",!1,function(r,i,o){o==e.Init&&(o=!1),!o!=!i&&(i?t(r):n(r))})})},{"../../lib/codemirror":7}],4:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){function t(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function n(e){t(e);var n=e.state.placeholder=document.createElement("pre");n.style.cssText="height: 0; overflow: visible",n.className="CodeMirror-placeholder";var r=e.getOption("placeholder");"string"==typeof r&&(r=document.createTextNode(r)),n.appendChild(r),e.display.lineSpace.insertBefore(n,e.display.lineSpace.firstChild)}function r(e){o(e)&&n(e)}function i(e){var r=e.getWrapperElement(),i=o(e);r.className=r.className.replace(" CodeMirror-empty","")+(i?" CodeMirror-empty":""),i?n(e):t(e)}function o(e){return 1===e.lineCount()&&""===e.getLine(0)}e.defineOption("placeholder","",function(n,o,l){var a=l&&l!=e.Init;if(o&&!a)n.on("blur",r),n.on("change",i),n.on("swapDoc",i),i(n);else if(!o&&a){n.off("blur",r),n.off("change",i),n.off("swapDoc",i),t(n);var s=n.getWrapperElement();s.className=s.className.replace(" CodeMirror-empty","")}o&&!n.hasFocus()&&r(n)})})},{"../../lib/codemirror":7}],5:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";var t=/^(\s*)(>[> ]*|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-]|(\d+)[.)])(\s*)$/,r=/[*+-]\s/;e.commands.newlineAndIndentContinueMarkdownList=function(i){if(i.getOption("disableInput"))return e.Pass;for(var o=i.listSelections(),l=[],a=0;a<o.length;a++){var s=o[a].head,c=i.getStateAfter(s.line),u=c.list!==!1,d=0!==c.quote,h=i.getLine(s.line),f=t.exec(h);if(!o[a].empty()||!u&&!d||!f)return void i.execCommand("newlineAndIndent");if(n.test(h))i.replaceRange("",{line:s.line,ch:0},{line:s.line,ch:s.ch+1}),l[a]="\n";else{var p=f[1],m=f[5],g=r.test(f[2])||f[2].indexOf(">")>=0?f[2]:parseInt(f[3],10)+1+f[4];l[a]="\n"+p+g+m}}i.replaceSelections(l)}})},{"../../lib/codemirror":7}],6:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";e.overlayMode=function(t,n,r){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(r){return{base:e.copyState(t,r.base),overlay:e.copyState(n,r.overlay),basePos:r.basePos,baseCur:null,overlayPos:r.overlayPos,overlayCur:null}},token:function(e,i){return(e!=i.streamSeen||Math.min(i.basePos,i.overlayPos)<e.start)&&(i.streamSeen=e,i.basePos=i.overlayPos=e.start),e.start==i.basePos&&(i.baseCur=t.token(e,i.base),i.basePos=e.pos),e.start==i.overlayPos&&(e.pos=e.start,i.overlayCur=n.token(e,i.overlay),i.overlayPos=e.pos),e.pos=Math.min(i.basePos,i.overlayPos),null==i.overlayCur?i.baseCur:null!=i.baseCur&&i.overlay.combineTokens||r&&null==i.overlay.combineTokens?i.baseCur+" "+i.overlayCur:i.overlayCur},indent:t.indent&&function(e,n){return t.indent(e.base,n)},electricChars:t.electricChars,innerMode:function(e){return{state:e.base,mode:t}},blankLine:function(e){t.blankLine&&t.blankLine(e.base),n.blankLine&&n.blankLine(e.overlay)}}}})},{"../../lib/codemirror":7}],7:[function(t,n,r){!function(t){if("object"==typeof r&&"object"==typeof n)n.exports=t();else{if("function"==typeof e&&e.amd)return e([],t);(this||window).CodeMirror=t()}}(function(){"use strict";function e(n,r){if(!(this instanceof e))return new e(n,r);this.options=r=r?Fi(r):{},Fi(Jo,r,!1),f(r);var i=r.value;"string"==typeof i&&(i=new Cl(i,r.mode,null,r.lineSeparator)),this.doc=i;var o=new e.inputStyles[r.inputStyle](this),l=this.display=new t(n,i,o);l.wrapper.CodeMirror=this,c(this),a(this),r.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),r.autofocus&&!Ao&&l.input.focus(),v(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Oi,keySeq:null,specialChars:null};var s=this;xo&&11>bo&&setTimeout(function(){s.display.input.reset(!0)},20),_t(this),Xi(),bt(this),this.curOp.forceUpdate=!0,Yr(this,i),r.autofocus&&!Ao||s.hasFocus()?setTimeout(zi(vn,this),20):yn(this);for(var u in el)el.hasOwnProperty(u)&&el[u](this,r[u],tl);k(this),r.finishInit&&r.finishInit(this);for(var d=0;d<ol.length;++d)ol[d](this);kt(this),wo&&r.lineWrapping&&"optimizelegibility"==getComputedStyle(l.lineDiv).textRendering&&(l.lineDiv.style.textRendering="auto")}function t(e,t,n){var r=this;this.input=n,r.scrollbarFiller=_i("div",null,"CodeMirror-scrollbar-filler"),r.scrollbarFiller.setAttribute("cm-not-content","true"),r.gutterFiller=_i("div",null,"CodeMirror-gutter-filler"),r.gutterFiller.setAttribute("cm-not-content","true"),r.lineDiv=_i("div",null,"CodeMirror-code"),r.selectionDiv=_i("div",null,null,"position: relative; z-index: 1"),r.cursorDiv=_i("div",null,"CodeMirror-cursors"),r.measure=_i("div",null,"CodeMirror-measure"),r.lineMeasure=_i("div",null,"CodeMirror-measure"),r.lineSpace=_i("div",[r.measure,r.lineMeasure,r.selectionDiv,r.cursorDiv,r.lineDiv],null,"position: relative; outline: none"),r.mover=_i("div",[_i("div",[r.lineSpace],"CodeMirror-lines")],null,"position: relative"),r.sizer=_i("div",[r.mover],"CodeMirror-sizer"),r.sizerWidth=null,r.heightForcer=_i("div",null,null,"position: absolute; height: "+El+"px; width: 1px;"),r.gutters=_i("div",null,"CodeMirror-gutters"),r.lineGutter=null,r.scroller=_i("div",[r.sizer,r.heightForcer,r.gutters],"CodeMirror-scroll"),r.scroller.setAttribute("tabIndex","-1"),r.wrapper=_i("div",[r.scrollbarFiller,r.gutterFiller,r.scroller],"CodeMirror"),xo&&8>bo&&(r.gutters.style.zIndex=-1,r.scroller.style.paddingRight=0),wo||go&&Ao||(r.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(r.wrapper):e(r.wrapper)),r.viewFrom=r.viewTo=t.first,r.reportedViewFrom=r.reportedViewTo=t.first,r.view=[],r.renderedView=null,r.externalMeasured=null,r.viewOffset=0,r.lastWrapHeight=r.lastWrapWidth=0,r.updateLineNumbers=null,r.nativeBarWidth=r.barHeight=r.barWidth=0,r.scrollbarsClipped=!1,r.lineNumWidth=r.lineNumInnerWidth=r.lineNumChars=null,r.alignWidgets=!1,r.cachedCharWidth=r.cachedTextHeight=r.cachedPaddingH=null,r.maxLine=null,r.maxLineLength=0,r.maxLineChanged=!1,r.wheelDX=r.wheelDY=r.wheelStartX=r.wheelStartY=null,r.shift=!1,r.selForContextMenu=null,r.activeTouch=null,n.init(r)}function n(t){t.doc.mode=e.getMode(t.options,t.doc.modeOption),r(t)}function r(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.frontier=e.doc.first,Re(e,100),e.state.modeGen++,e.curOp&&Dt(e)}function i(e){e.options.lineWrapping?(Zl(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(Yl(e.display.wrapper,"CodeMirror-wrap"),h(e)),l(e),Dt(e),at(e),setTimeout(function(){y(e)},100)}function o(e){var t=yt(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/xt(e.display)-3);return function(i){if(kr(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return n?o+(Math.ceil(i.text.length/r)||1)*t:o+t}}function l(e){var t=e.doc,n=o(e);t.iter(function(e){var t=n(e);t!=e.height&&ei(e,t)})}function a(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),at(e)}function s(e){c(e),Dt(e),setTimeout(function(){w(e)},20)}function c(e){var t=e.display.gutters,n=e.options.gutters;qi(t);for(var r=0;r<n.length;++r){var i=n[r],o=t.appendChild(_i("div",null,"CodeMirror-gutter "+i));"CodeMirror-linenumbers"==i&&(e.display.lineGutter=o,o.style.width=(e.display.lineNumWidth||1)+"px")}t.style.display=r?"":"none",u(e)}function u(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function d(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=mr(r);){var i=t.find(0,!0);r=i.from.line,n+=i.from.ch-i.to.ch}for(r=e;t=gr(r);){var i=t.find(0,!0);n-=r.text.length-i.from.ch,r=i.to.line,n+=r.text.length-i.to.ch}return n}function h(e){var t=e.display,n=e.doc;t.maxLine=Zr(n,n.first),t.maxLineLength=d(t.maxLine),t.maxLineChanged=!0,n.iter(function(e){var n=d(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}function f(e){var t=Ii(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function p(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Ue(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+$e(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function m(e,t,n){this.cm=n;var r=this.vert=_i("div",[_i("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=_i("div",[_i("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(r),e(i),Al(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),Al(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,xo&&8>bo&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function g(){}function v(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&Yl(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new e.scrollbarModel[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),Al(e,"mousedown",function(){t.state.focused&&setTimeout(function(){t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?on(t,e):rn(t,e)},t),t.display.scrollbars.addClass&&Zl(t.display.wrapper,t.display.scrollbars.addClass)}function y(e,t){t||(t=p(e));var n=e.display.barWidth,r=e.display.barHeight;x(e,t);for(var i=0;4>i&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&H(e),x(e,p(e)),n=e.display.barWidth,r=e.display.barHeight}function x(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}function b(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-qe(e));var i=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,o=ni(t,r),l=ni(t,i);if(n&&n.ensure){var a=n.ensure.from.line,s=n.ensure.to.line;o>a?(o=a,l=ni(t,ri(Zr(t,a))+e.wrapper.clientHeight)):Math.min(s,t.lastLine())>=l&&(o=ni(t,ri(Zr(t,s))-e.wrapper.clientHeight),l=s)}return{from:o,to:Math.max(l,o+1)}}function w(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=S(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;l<n.length;l++)if(!n[l].hidden){e.options.fixedGutter&&n[l].gutter&&(n[l].gutter.style.left=o);var a=n[l].alignable;if(a)for(var s=0;s<a.length;s++)a[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+"px")}}function k(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=C(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var i=r.measure.appendChild(_i("div",[_i("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=i.firstChild.offsetWidth,l=i.offsetWidth-o;return r.lineGutter.style.width="",r.lineNumInnerWidth=Math.max(o,r.lineGutter.offsetWidth-l)+1,r.lineNumWidth=r.lineNumInnerWidth+l,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+"px",u(e),!0}return!1}function C(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function S(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function L(e,t,n){var r=e.display;this.viewport=t,this.visible=b(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=Ve(e),this.force=n,this.dims=I(e),this.events=[]}function T(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=$e(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=$e(e)+"px",t.scrollbarsClipped=!0)}function M(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return Ft(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==jt(e))return!1;k(e)&&(Ft(e),t.dims=I(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(r.first,n.viewFrom)),n.viewTo>l&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),Po&&(o=br(e.doc,o),l=wr(e.doc,l));var a=o!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;Bt(e,o,l),n.viewOffset=ri(Zr(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var s=jt(e);if(!a&&0==s&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=Gi();return s>4&&(n.lineDiv.style.display="none"),E(e,n.updateLineNumbers,t.dims),s>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,c&&Gi()!=c&&c.offsetHeight&&c.focus(),qi(n.cursorDiv),qi(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,a&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,Re(e,400)),n.updateLineNumbers=null,!0}function N(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Ve(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Ue(e.display)-Ke(e),n.top)}),t.visible=b(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&M(e,t);r=!1){H(e);var i=p(e);Ee(e),O(e,i),y(e,i)}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function A(e,t){var n=new L(e,t);if(M(e,n)){H(e),N(e,n);var r=p(e);Ee(e),O(e,r),y(e,r),n.finish()}}function O(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=Math.max(t.docHeight+e.display.barHeight+$e(e),t.clientHeight)+"px"}function H(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i,o=t.view[r];if(!o.hidden){if(xo&&8>bo){var l=o.node.offsetTop+o.node.offsetHeight;i=l-n,n=l}else{var a=o.node.getBoundingClientRect();i=a.bottom-a.top}var s=o.line.height-i;if(2>i&&(i=yt(t)),(s>.001||-.001>s)&&(ei(o.line,i),W(o.line),o.rest))for(var c=0;c<o.rest.length;c++)W(o.rest[c])}}}function W(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t)e.widgets[t].height=e.widgets[t].node.parentNode.offsetHeight}function I(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)n[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,r[e.options.gutters[l]]=o.clientWidth;return{fixedPos:S(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function E(e,t,n){function r(t){var n=t.nextSibling;return wo&&Oo&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var i=e.display,o=e.options.lineNumbers,l=i.lineDiv,a=l.firstChild,s=i.view,c=i.viewFrom,u=0;u<s.length;u++){var d=s[u];if(d.hidden);else if(d.node&&d.node.parentNode==l){for(;a!=d.node;)a=r(a);var h=o&&null!=t&&c>=t&&d.lineNumber;d.changes&&(Ii(d.changes,"gutter")>-1&&(h=!1),D(e,d,c,n)),h&&(qi(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(C(e.options,c)))),a=d.node.nextSibling}else{var f=q(e,d,c,n);l.insertBefore(f,a)}c+=d.size}for(;a;)a=r(a)}function D(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?R(e,t):"gutter"==o?j(e,t,n,r):"class"==o?B(t):"widget"==o&&_(e,t,r)}t.changes=null}function P(e){return e.node==e.text&&(e.node=_i("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),xo&&8>bo&&(e.node.style.zIndex=2)),e.node}function F(e){var t=e.bgClass?e.bgClass+" "+(e.line.bgClass||""):e.line.bgClass;if(t&&(t+=" CodeMirror-linebackground"),e.background)t?e.background.className=t:(e.background.parentNode.removeChild(e.background),e.background=null);else if(t){var n=P(e);e.background=n.insertBefore(_i("div",null,t),n.firstChild)}}function z(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):zr(e,t)}function R(e,t){var n=t.text.className,r=z(e,t);t.text==t.node&&(t.node=r.pre),t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,B(t)):n&&(t.text.className=n)}function B(e){F(e),e.line.wrapClass?P(e).className=e.line.wrapClass:e.node!=e.text&&(e.node.className="");var t=e.textClass?e.textClass+" "+(e.line.textClass||""):e.line.textClass;e.text.className=t||""}function j(e,t,n,r){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=P(t);t.gutterBackground=_i("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px; width: "+r.gutterTotalWidth+"px"),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var i=P(t),l=t.gutter=_i("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px");if(e.display.input.setUneditable(l),i.insertBefore(l,t.text),t.line.gutterClass&&(l.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=l.appendChild(_i("div",C(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+r.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var a=0;a<e.options.gutters.length;++a){var s=e.options.gutters[a],c=o.hasOwnProperty(s)&&o[s];c&&l.appendChild(_i("div",[c],"CodeMirror-gutter-elt","left: "+r.gutterLeft[s]+"px; width: "+r.gutterWidth[s]+"px"))}}}function _(e,t,n){t.alignable&&(t.alignable=null);for(var r,i=t.node.firstChild;i;i=r){var r=i.nextSibling;"CodeMirror-linewidget"==i.className&&t.node.removeChild(i)}U(e,t,n)}function q(e,t,n,r){var i=z(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),B(t),j(e,t,n,r),U(e,t,r),t.node}function U(e,t,n){if(G(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)G(e,t.rest[r],t,n,!1)}function G(e,t,n,r,i){if(t.widgets)for(var o=P(n),l=0,a=t.widgets;l<a.length;++l){var s=a[l],c=_i("div",[s.node],"CodeMirror-linewidget");s.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),$(s,c,n,r),e.display.input.setUneditable(c),i&&s.above?o.insertBefore(c,n.gutter||n.text):o.appendChild(c),Si(s,"redraw")}}function $(e,t,n,r){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var i=r.wrapperWidth;t.style.left=r.fixedPos+"px",e.coverGutter||(i-=r.gutterTotalWidth,t.style.paddingLeft=r.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-r.gutterTotalWidth+"px"))}function V(e){return Fo(e.line,e.ch)}function K(e,t){return zo(e,t)<0?t:e}function X(e,t){return zo(e,t)<0?e:t}function Y(e){e.state.focused||(e.display.input.focus(),vn(e))}function Z(e,t,n,r,i){var o=e.doc;e.display.shift=!1,r||(r=o.sel);var l=e.state.pasteIncoming||"paste"==i,a=o.splitLines(t),s=null;if(l&&r.ranges.length>1)if(Ro&&Ro.join("\n")==t){if(r.ranges.length%Ro.length==0){s=[];for(var c=0;c<Ro.length;c++)s.push(o.splitLines(Ro[c]))}}else a.length==r.ranges.length&&(s=Ei(a,function(e){return[e]}));for(var c=r.ranges.length-1;c>=0;c--){var u=r.ranges[c],d=u.from(),h=u.to();u.empty()&&(n&&n>0?d=Fo(d.line,d.ch-n):e.state.overwrite&&!l&&(h=Fo(h.line,Math.min(Zr(o,h.line).text.length,h.ch+Wi(a).length))));var f=e.curOp.updateInput,p={from:d,to:h,text:s?s[c%s.length]:a,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};Tn(e.doc,p),Si(e,"inputRead",e,p)}t&&!l&&J(e,t),zn(e),e.curOp.updateInput=f,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Q(e,t){var n=e.clipboardData&&e.clipboardData.getData("text/plain");return n?(e.preventDefault(),t.isReadOnly()||t.options.disableInput||At(t,function(){Z(t,n,0,null,"paste")}),!0):void 0}function J(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var a=0;a<o.electricChars.length;a++)if(t.indexOf(o.electricChars.charAt(a))>-1){l=Bn(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Zr(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Bn(e,i.head.line,"smart"));l&&Si(e,"electricInput",e,i.head.line)}}}function ee(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,o={anchor:Fo(i,0),head:Fo(i+1,0)};n.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:n}}function te(e){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),
  17304. e.setAttribute("spellcheck","false")}function ne(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new Oi,this.inaccurateSelection=!1,this.hasSelection=!1,this.composing=null}function re(){var e=_i("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none"),t=_i("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return wo?e.style.width="1000px":e.setAttribute("wrap","off"),No&&(e.style.border="1px solid black"),te(e),t}function ie(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Oi,this.gracePeriod=!1}function oe(e,t){var n=Je(e,t.line);if(!n||n.hidden)return null;var r=Zr(e.doc,t.line),i=Ye(n,r,t.line),o=ii(r),l="left";if(o){var a=co(o,t.ch);l=a%2?"right":"left"}var s=nt(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function le(e,t){return t&&(e.bad=!0),e}function ae(e,t,n){var r;if(t==e.display.lineDiv){if(r=e.display.lineDiv.childNodes[n],!r)return le(e.clipPos(Fo(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==r)return se(o,t,n)}}function se(e,t,n){function r(t,n,r){for(var i=-1;i<(u?u.length:0);i++)for(var o=0>i?c.map:u[i],l=0;l<o.length;l+=3){var a=o[l+2];if(a==t||a==n){var s=ti(0>i?e.line:e.rest[i]),d=o[l]+r;return(0>r||a!=t)&&(d=o[l+(r?1:0)]),Fo(s,d)}}}var i=e.text.firstChild,o=!1;if(!t||!Vl(i,t))return le(Fo(ti(e.line),0),!0);if(t==i&&(o=!0,t=i.childNodes[n],n=0,!t)){var l=e.rest?Wi(e.rest):e.line;return le(Fo(ti(l),l.text.length),o)}var a=3==t.nodeType?t:null,s=t;for(a||1!=t.childNodes.length||3!=t.firstChild.nodeType||(a=t.firstChild,n&&(n=a.nodeValue.length));s.parentNode!=i;)s=s.parentNode;var c=e.measure,u=c.maps,d=r(a,s,n);if(d)return le(d,o);for(var h=s.nextSibling,f=a?a.nodeValue.length-n:0;h;h=h.nextSibling){if(d=r(h,h.firstChild,0))return le(Fo(d.line,d.ch-f),o);f+=h.textContent.length}for(var p=s.previousSibling,f=n;p;p=p.previousSibling){if(d=r(p,p.firstChild,-1))return le(Fo(d.line,d.ch+f),o);f+=h.textContent.length}}function ce(e,t,n,r,i){function o(e){return function(t){return t.id==e}}function l(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(null!=n)return""==n&&(n=t.textContent.replace(/\u200b/g,"")),void(a+=n);var u,d=t.getAttribute("cm-marker");if(d){var h=e.findMarks(Fo(r,0),Fo(i+1,0),o(+d));return void(h.length&&(u=h[0].find())&&(a+=Qr(e.doc,u.from,u.to).join(c)))}if("false"==t.getAttribute("contenteditable"))return;for(var f=0;f<t.childNodes.length;f++)l(t.childNodes[f]);/^(pre|div|p)$/i.test(t.nodeName)&&(s=!0)}else if(3==t.nodeType){var p=t.nodeValue;if(!p)return;s&&(a+=c,s=!1),a+=p}}for(var a="",s=!1,c=e.doc.lineSeparator();l(t),t!=n;)t=t.nextSibling;return a}function ue(e,t){this.ranges=e,this.primIndex=t}function de(e,t){this.anchor=e,this.head=t}function he(e,t){var n=e[t];e.sort(function(e,t){return zo(e.from(),t.from())}),t=Ii(e,n);for(var r=1;r<e.length;r++){var i=e[r],o=e[r-1];if(zo(o.to(),i.from())>=0){var l=X(o.from(),i.from()),a=K(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;t>=r&&--t,e.splice(--r,2,new de(s?a:l,s?l:a))}}return new ue(e,t)}function fe(e,t){return new ue([new de(e,t||e)],0)}function pe(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function me(e,t){if(t.line<e.first)return Fo(e.first,0);var n=e.first+e.size-1;return t.line>n?Fo(n,Zr(e,n).text.length):ge(t,Zr(e,t.line).text.length)}function ge(e,t){var n=e.ch;return null==n||n>t?Fo(e.line,t):0>n?Fo(e.line,0):e}function ve(e,t){return t>=e.first&&t<e.first+e.size}function ye(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=me(e,t[r]);return n}function xe(e,t,n,r){if(e.cm&&e.cm.display.shift||e.extend){var i=t.anchor;if(r){var o=zo(n,i)<0;o!=zo(r,i)<0?(i=n,n=r):o!=zo(n,r)<0&&(n=r)}return new de(i,n)}return new de(r||n,n)}function be(e,t,n,r){Te(e,new ue([xe(e,e.sel.primary(),t,n)],0),r)}function we(e,t,n){for(var r=[],i=0;i<e.sel.ranges.length;i++)r[i]=xe(e,e.sel.ranges[i],t[i],null);var o=he(r,e.sel.primIndex);Te(e,o,n)}function ke(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,Te(e,he(i,e.sel.primIndex),r)}function Ce(e,t,n,r){Te(e,fe(t,n),r)}function Se(e,t,n){var r={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new de(me(e,t[n].anchor),me(e,t[n].head))},origin:n&&n.origin};return Wl(e,"beforeSelectionChange",e,r),e.cm&&Wl(e.cm,"beforeSelectionChange",e.cm,r),r.ranges!=t.ranges?he(r.ranges,r.ranges.length-1):t}function Le(e,t,n){var r=e.history.done,i=Wi(r);i&&i.ranges?(r[r.length-1]=t,Me(e,t,n)):Te(e,t,n)}function Te(e,t,n){Me(e,t,n),di(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Me(e,t,n){(Ni(e,"beforeSelectionChange")||e.cm&&Ni(e.cm,"beforeSelectionChange"))&&(t=Se(e,t,n));var r=n&&n.bias||(zo(t.primary().head,e.sel.primary().head)<0?-1:1);Ne(e,Oe(e,t,r,!0)),n&&n.scroll===!1||!e.cm||zn(e.cm)}function Ne(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,Mi(e.cm)),Si(e,"cursorActivity",e))}function Ae(e){Ne(e,Oe(e,e.sel,null,!1),Pl)}function Oe(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],a=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=We(e,l.anchor,a&&a.anchor,n,r),c=We(e,l.head,a&&a.head,n,r);(i||s!=l.anchor||c!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new de(s,c))}return i?he(i,t.primIndex):t}function He(e,t,n,r,i){var o=Zr(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var a=o.markedSpans[l],s=a.marker;if((null==a.from||(s.inclusiveLeft?a.from<=t.ch:a.from<t.ch))&&(null==a.to||(s.inclusiveRight?a.to>=t.ch:a.to>t.ch))){if(i&&(Wl(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!s.atomic)continue;if(n){var c,u=s.find(0>r?1:-1);if((0>r?s.inclusiveRight:s.inclusiveLeft)&&(u=Ie(e,u,-r,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=zo(u,n))&&(0>r?0>c:c>0))return He(e,u,t,r,i)}var d=s.find(0>r?-1:1);return(0>r?s.inclusiveLeft:s.inclusiveRight)&&(d=Ie(e,d,r,d.line==t.line?o:null)),d?He(e,d,t,r,i):null}}return t}function We(e,t,n,r,i){var o=r||1,l=He(e,t,n,o,i)||!i&&He(e,t,n,o,!0)||He(e,t,n,-o,i)||!i&&He(e,t,n,-o,!0);return l?l:(e.cantEdit=!0,Fo(e.first,0))}function Ie(e,t,n,r){return 0>n&&0==t.ch?t.line>e.first?me(e,Fo(t.line-1)):null:n>0&&t.ch==(r||Zr(e,t.line)).text.length?t.line<e.first+e.size-1?Fo(t.line+1,0):null:new Fo(t.line,t.ch+n)}function Ee(e){e.display.input.showSelection(e.display.input.prepareSelection())}function De(e,t){for(var n=e.doc,r={},i=r.cursors=document.createDocumentFragment(),o=r.selection=document.createDocumentFragment(),l=0;l<n.sel.ranges.length;l++)if(t!==!1||l!=n.sel.primIndex){var a=n.sel.ranges[l];if(!(a.from().line>=e.display.viewTo||a.to().line<e.display.viewFrom)){var s=a.empty();(s||e.options.showCursorWhenSelecting)&&Pe(e,a.head,i),s||Fe(e,a,o)}}return r}function Pe(e,t,n){var r=ft(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),i=n.appendChild(_i("div"," ","CodeMirror-cursor"));if(i.style.left=r.left+"px",i.style.top=r.top+"px",i.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+"px",r.other){var o=n.appendChild(_i("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=r.other.left+"px",o.style.top=r.other.top+"px",o.style.height=.85*(r.other.bottom-r.other.top)+"px"}}function Fe(e,t,n){function r(e,t,n,r){0>t&&(t=0),t=Math.round(t),r=Math.round(r),a.appendChild(_i("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px; top: "+t+"px; width: "+(null==n?u-e:n)+"px; height: "+(r-t)+"px"))}function i(t,n,i){function o(n,r){return ht(e,Fo(t,n),"div",d,r)}var a,s,d=Zr(l,t),h=d.text.length;return eo(ii(d),n||0,null==i?h:i,function(e,t,l){var d,f,p,m=o(e,"left");if(e==t)d=m,f=p=m.left;else{if(d=o(t-1,"right"),"rtl"==l){var g=m;m=d,d=g}f=m.left,p=d.right}null==n&&0==e&&(f=c),d.top-m.top>3&&(r(f,m.top,null,m.bottom),f=c,m.bottom<d.top&&r(f,m.bottom,null,d.top)),null==i&&t==h&&(p=u),(!a||m.top<a.top||m.top==a.top&&m.left<a.left)&&(a=m),(!s||d.bottom>s.bottom||d.bottom==s.bottom&&d.right>s.right)&&(s=d),c+1>f&&(f=c),r(f,d.top,p-f,d.bottom)}),{start:a,end:s}}var o=e.display,l=e.doc,a=document.createDocumentFragment(),s=Ge(e.display),c=s.left,u=Math.max(o.sizerWidth,Ve(e)-o.sizer.offsetLeft)-s.right,d=t.from(),h=t.to();if(d.line==h.line)i(d.line,d.ch,h.ch);else{var f=Zr(l,d.line),p=Zr(l,h.line),m=yr(f)==yr(p),g=i(d.line,d.ch,m?f.text.length+1:null).end,v=i(h.line,m?0:null,h.ch).start;m&&(g.top<v.top-2?(r(g.right,g.top,null,g.bottom),r(c,v.top,v.left,v.bottom)):r(g.right,g.top,v.left-g.right,g.bottom)),g.bottom<v.top&&r(c,g.bottom,null,v.top)}n.appendChild(a)}function ze(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Re(e,t){e.doc.mode.startState&&e.doc.frontier<e.display.viewTo&&e.state.highlight.set(t,zi(Be,e))}function Be(e){var t=e.doc;if(t.frontier<t.first&&(t.frontier=t.first),!(t.frontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,r=al(t.mode,_e(e,t.frontier)),i=[];t.iter(t.frontier,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(t.frontier>=e.display.viewFrom){var l=o.styles,a=o.text.length>e.options.maxHighlightLength,s=Er(e,o,a?al(t.mode,r):r,!0);o.styles=s.styles;var c=o.styleClasses,u=s.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var d=!l||l.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&h<l.length;++h)d=l[h]!=o.styles[h];d&&i.push(t.frontier),o.stateAfter=a?r:al(t.mode,r)}else o.text.length<=e.options.maxHighlightLength&&Pr(e,o.text,r),o.stateAfter=t.frontier%5==0?al(t.mode,r):null;return++t.frontier,+new Date>n?(Re(e,e.options.workDelay),!0):void 0}),i.length&&At(e,function(){for(var t=0;t<i.length;t++)Pt(e,i[t],"text")})}}function je(e,t,n){for(var r,i,o=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),a=t;a>l;--a){if(a<=o.first)return o.first;var s=Zr(o,a-1);if(s.stateAfter&&(!n||a<=o.frontier))return a;var c=Rl(s.text,null,e.options.tabSize);(null==i||r>c)&&(i=a-1,r=c)}return i}function _e(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return!0;var o=je(e,t,n),l=o>r.first&&Zr(r,o-1).stateAfter;return l=l?al(r.mode,l):sl(r.mode),r.iter(o,t,function(n){Pr(e,n.text,l);var a=o==t-1||o%5==0||o>=i.viewFrom&&o<i.viewTo;n.stateAfter=a?al(r.mode,l):null,++o}),n&&(r.frontier=o),l}function qe(e){return e.lineSpace.offsetTop}function Ue(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Ge(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=Ui(e.measure,_i("pre","x")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,r={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(r.left)||isNaN(r.right)||(e.cachedPaddingH=r),r}function $e(e){return El-e.display.nativeBarWidth}function Ve(e){return e.display.scroller.clientWidth-$e(e)-e.display.barWidth}function Ke(e){return e.display.scroller.clientHeight-$e(e)-e.display.barHeight}function Xe(e,t,n){var r=e.options.lineWrapping,i=r&&Ve(e);if(!t.measure.heights||r&&t.measure.width!=i){var o=t.measure.heights=[];if(r){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),a=0;a<l.length-1;a++){var s=l[a],c=l[a+1];Math.abs(s.bottom-c.bottom)>2&&o.push((s.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function Ye(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var r=0;r<e.rest.length;r++)if(ti(e.rest[r])>n)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}function Ze(e,t){t=yr(t);var n=ti(t),r=e.display.externalMeasured=new It(e.doc,t,n);r.lineN=n;var i=r.built=zr(e,r);return r.text=i.pre,Ui(e.display.lineMeasure,i.pre),r}function Qe(e,t,n,r){return tt(e,et(e,t),n,r)}function Je(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[zt(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function et(e,t){var n=ti(t),r=Je(e,n);r&&!r.text?r=null:r&&r.changes&&(D(e,r,n,I(e)),e.curOp.forceUpdate=!0),r||(r=Ze(e,t));var i=Ye(r,t,n);return{line:t,view:r,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function tt(e,t,n,r,i){t.before&&(n=-1);var o,l=n+(r||"");return t.cache.hasOwnProperty(l)?o=t.cache[l]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Xe(e,t.view,t.rect),t.hasHeights=!0),o=rt(e,t,n,r),o.bogus||(t.cache[l]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}function nt(e,t,n){for(var r,i,o,l,a=0;a<e.length;a+=3){var s=e[a],c=e[a+1];if(s>t?(i=0,o=1,l="left"):c>t?(i=t-s,o=i+1):(a==e.length-3||t==c&&e[a+3]>t)&&(o=c-s,i=o-1,t>=c&&(l="right")),null!=i){if(r=e[a+2],s==c&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;a&&e[a-2]==e[a-3]&&e[a-1].insertLeft;)r=e[(a-=3)+2],l="left";if("right"==n&&i==c-s)for(;a<e.length-3&&e[a+3]==e[a+4]&&!e[a+5].insertLeft;)r=e[(a+=3)+2],l="right";break}}return{node:r,start:i,end:o,collapse:l,coverStart:s,coverEnd:c}}function rt(e,t,n,r){var i,o=nt(t.map,n,r),l=o.node,a=o.start,s=o.end,c=o.collapse;if(3==l.nodeType){for(var u=0;4>u;u++){for(;a&&ji(t.line.text.charAt(o.coverStart+a));)--a;for(;o.coverStart+s<o.coverEnd&&ji(t.line.text.charAt(o.coverStart+s));)++s;if(xo&&9>bo&&0==a&&s==o.coverEnd-o.coverStart)i=l.parentNode.getBoundingClientRect();else if(xo&&e.options.lineWrapping){var d=ql(l,a,s).getClientRects();i=d.length?d["right"==r?d.length-1:0]:qo}else i=ql(l,a,s).getBoundingClientRect()||qo;if(i.left||i.right||0==a)break;s=a,a-=1,c="right"}xo&&11>bo&&(i=it(e.display.measure,i))}else{a>0&&(c=r="right");var d;i=e.options.lineWrapping&&(d=l.getClientRects()).length>1?d["right"==r?d.length-1:0]:l.getBoundingClientRect()}if(xo&&9>bo&&!a&&(!i||!i.left&&!i.right)){var h=l.parentNode.getClientRects()[0];i=h?{left:h.left,right:h.left+xt(e.display),top:h.top,bottom:h.bottom}:qo}for(var f=i.top-t.rect.top,p=i.bottom-t.rect.top,m=(f+p)/2,g=t.view.measure.heights,u=0;u<g.length-1&&!(m<g[u]);u++);var v=u?g[u-1]:0,y=g[u],x={left:("right"==c?i.right:i.left)-t.rect.left,right:("left"==c?i.left:i.right)-t.rect.left,top:v,bottom:y};return i.left||i.right||(x.bogus=!0),e.options.singleCursorHeightPerLine||(x.rtop=f,x.rbottom=p),x}function it(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!Ji(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}function ot(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function lt(e){e.display.externalMeasure=null,qi(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)ot(e.display.view[t])}function at(e){lt(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function st(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function ct(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function ut(e,t,n,r){if(t.widgets)for(var i=0;i<t.widgets.length;++i)if(t.widgets[i].above){var o=Lr(t.widgets[i]);n.top+=o,n.bottom+=o}if("line"==r)return n;r||(r="local");var l=ri(t);if("local"==r?l+=qe(e.display):l-=e.display.viewOffset,"page"==r||"window"==r){var a=e.display.lineSpace.getBoundingClientRect();l+=a.top+("window"==r?0:ct());var s=a.left+("window"==r?0:st());n.left+=s,n.right+=s}return n.top+=l,n.bottom+=l,n}function dt(e,t,n){if("div"==n)return t;var r=t.left,i=t.top;if("page"==n)r-=st(),i-=ct();else if("local"==n||!n){var o=e.display.sizer.getBoundingClientRect();r+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:r-l.left,top:i-l.top}}function ht(e,t,n,r,i){return r||(r=Zr(e.doc,t.line)),ut(e,r,Qe(e,r,t.ch,i),n)}function ft(e,t,n,r,i,o){function l(t,l){var a=tt(e,i,t,l?"right":"left",o);return l?a.left=a.right:a.right=a.left,ut(e,r,a,n)}function a(e,t){var n=s[t],r=n.level%2;return e==to(n)&&t&&n.level<s[t-1].level?(n=s[--t],e=no(n)-(n.level%2?0:1),r=!0):e==no(n)&&t<s.length-1&&n.level<s[t+1].level&&(n=s[++t],e=to(n)-n.level%2,r=!1),r&&e==n.to&&e>n.from?l(e-1):l(e,r)}r=r||Zr(e.doc,t.line),i||(i=et(e,r));var s=ii(r),c=t.ch;if(!s)return l(c);var u=co(s,c),d=a(c,u);return null!=oa&&(d.other=a(c,oa)),d}function pt(e,t){var n=0,t=me(e.doc,t);e.options.lineWrapping||(n=xt(e.display)*t.ch);var r=Zr(e.doc,t.line),i=ri(r)+qe(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function mt(e,t,n,r){var i=Fo(e,t);return i.xRel=r,n&&(i.outside=!0),i}function gt(e,t,n){var r=e.doc;if(n+=e.display.viewOffset,0>n)return mt(r.first,0,!0,-1);var i=ni(r,n),o=r.first+r.size-1;if(i>o)return mt(r.first+r.size-1,Zr(r,o).text.length,!0,1);0>t&&(t=0);for(var l=Zr(r,i);;){var a=vt(e,l,i,t,n),s=gr(l),c=s&&s.find(0,!0);if(!s||!(a.ch>c.from.ch||a.ch==c.from.ch&&a.xRel>0))return a;i=ti(l=c.to.line)}}function vt(e,t,n,r,i){function o(r){var i=ft(e,Fo(n,r),"line",t,c);return a=!0,l>i.bottom?i.left-s:l<i.top?i.left+s:(a=!1,i.left)}var l=i-ri(t),a=!1,s=2*e.display.wrapper.clientWidth,c=et(e,t),u=ii(t),d=t.text.length,h=ro(t),f=io(t),p=o(h),m=a,g=o(f),v=a;if(r>g)return mt(n,f,v,1);for(;;){if(u?f==h||f==ho(t,h,1):1>=f-h){for(var y=p>r||g-r>=r-p?h:f,x=r-(y==h?p:g);ji(t.text.charAt(y));)++y;var b=mt(n,y,y==h?m:v,-1>x?-1:x>1?1:0);return b}var w=Math.ceil(d/2),k=h+w;if(u){k=h;for(var C=0;w>C;++C)k=ho(t,k,1)}var S=o(k);S>r?(f=k,g=S,(v=a)&&(g+=1e3),d=w):(h=k,p=S,m=a,d-=w)}}function yt(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Bo){Bo=_i("pre");for(var t=0;49>t;++t)Bo.appendChild(document.createTextNode("x")),Bo.appendChild(_i("br"));Bo.appendChild(document.createTextNode("x"))}Ui(e.measure,Bo);var n=Bo.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),qi(e.measure),n||1}function xt(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=_i("span","xxxxxxxxxx"),n=_i("pre",[t]);Ui(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function bt(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Go},Uo?Uo.ops.push(e.curOp):e.curOp.ownsGroup=Uo={ops:[e.curOp],delayedCallbacks:[]}}function wt(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var i=e.ops[r];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(n<t.length)}function kt(e){var t=e.curOp,n=t.ownsGroup;if(n)try{wt(n)}finally{Uo=null;for(var r=0;r<n.ops.length;r++)n.ops[r].cm.curOp=null;Ct(n)}}function Ct(e){for(var t=e.ops,n=0;n<t.length;n++)St(t[n]);for(var n=0;n<t.length;n++)Lt(t[n]);for(var n=0;n<t.length;n++)Tt(t[n]);for(var n=0;n<t.length;n++)Mt(t[n]);for(var n=0;n<t.length;n++)Nt(t[n])}function St(e){var t=e.cm,n=t.display;T(t),e.updateMaxLine&&h(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new L(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Lt(e){e.updatedDisplay=e.mustUpdate&&M(e.cm,e.update)}function Tt(e){var t=e.cm,n=t.display;e.updatedDisplay&&H(t),e.barMeasure=p(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Qe(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+$e(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Ve(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Mt(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&on(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1),e.preparedSelection&&t.display.input.showSelection(e.preparedSelection),e.updatedDisplay&&O(t,e.barMeasure),(e.updatedDisplay||e.startHeight!=t.doc.height)&&y(t,e.barMeasure),e.selectionChanged&&ze(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),!e.focus||e.focus!=Gi()||document.hasFocus&&!document.hasFocus()||Y(e.cm)}function Nt(e){var t=e.cm,n=t.display,r=t.doc;if(e.updatedDisplay&&N(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null==e.scrollTop||n.scroller.scrollTop==e.scrollTop&&!e.forceScroll||(r.scrollTop=Math.max(0,Math.min(n.scroller.scrollHeight-n.scroller.clientHeight,e.scrollTop)),n.scrollbars.setScrollTop(r.scrollTop),n.scroller.scrollTop=r.scrollTop),null==e.scrollLeft||n.scroller.scrollLeft==e.scrollLeft&&!e.forceScroll||(r.scrollLeft=Math.max(0,Math.min(n.scroller.scrollWidth-n.scroller.clientWidth,e.scrollLeft)),n.scrollbars.setScrollLeft(r.scrollLeft),n.scroller.scrollLeft=r.scrollLeft,w(t)),e.scrollToPos){var i=En(t,me(r,e.scrollToPos.from),me(r,e.scrollToPos.to),e.scrollToPos.margin);e.scrollToPos.isCursor&&t.state.focused&&In(t,i)}var o=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(o)for(var a=0;a<o.length;++a)o[a].lines.length||Wl(o[a],"hide");if(l)for(var a=0;a<l.length;++a)l[a].lines.length&&Wl(l[a],"unhide");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&Wl(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function At(e,t){if(e.curOp)return t();bt(e);try{return t()}finally{kt(e)}}function Ot(e,t){return function(){if(e.curOp)return t.apply(e,arguments);bt(e);try{return t.apply(e,arguments)}finally{kt(e)}}}function Ht(e){return function(){if(this.curOp)return e.apply(this,arguments);bt(this);try{return e.apply(this,arguments)}finally{kt(this)}}}function Wt(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);bt(t);try{return e.apply(this,arguments)}finally{kt(t)}}}function It(e,t,n){this.line=t,this.rest=xr(t),this.size=this.rest?ti(Wi(this.rest))-n+1:1,this.node=this.text=null,this.hidden=kr(e,t)}function Et(e,t,n){for(var r,i=[],o=t;n>o;o=r){var l=new It(e.doc,Zr(e.doc,o),o);r=o+l.size,i.push(l)}return i}function Dt(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var i=e.display;if(r&&n<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Po&&br(e.doc,t)<i.viewTo&&Ft(e);else if(n<=i.viewFrom)Po&&wr(e.doc,n+r)>i.viewFrom?Ft(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)Ft(e);else if(t<=i.viewFrom){var o=Rt(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):Ft(e)}else if(n>=i.viewTo){var o=Rt(e,t,t,-1);o?(i.view=i.view.slice(0,o.index),i.viewTo=o.lineN):Ft(e)}else{var l=Rt(e,t,t,-1),a=Rt(e,n,n+r,1);l&&a?(i.view=i.view.slice(0,l.index).concat(Et(e,l.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=r):Ft(e)}var s=i.externalMeasured;s&&(n<s.lineN?s.lineN+=r:t<s.lineN+s.size&&(i.externalMeasured=null))}function Pt(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var o=r.view[zt(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==Ii(l,n)&&l.push(n)}}}function Ft(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function zt(e,t){if(t>=e.display.viewTo)return null;if(t-=e.display.viewFrom,0>t)return null;for(var n=e.display.view,r=0;r<n.length;r++)if(t-=n[r].size,0>t)return r}function Rt(e,t,n,r){var i,o=zt(e,t),l=e.display.view;if(!Po||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var a=0,s=e.display.viewFrom;o>a;a++)s+=l[a].size;if(s!=t){if(r>0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,n+=i}for(;br(e.doc,n)!=n;){if(o==(0>r?0:l.length-1))return null;n+=r*l[o-(0>r?1:0)].size,o+=r}return{index:o,lineN:n}}function Bt(e,t,n){var r=e.display,i=r.view;0==i.length||t>=r.viewTo||n<=r.viewFrom?(r.view=Et(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=Et(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(zt(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(Et(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,zt(e,n)))),r.viewTo=n}function jt(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function _t(e){function t(){i.activeTouch&&(o=setTimeout(function(){i.activeTouch=null},1e3),l=i.activeTouch,l.end=+new Date)}function n(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function r(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}var i=e.display;Al(i.scroller,"mousedown",Ot(e,Vt)),xo&&11>bo?Al(i.scroller,"dblclick",Ot(e,function(t){if(!Ti(e,t)){var n=$t(e,t);if(n&&!Qt(e,t)&&!Gt(e.display,t)){Tl(t);var r=e.findWordAt(n);be(e.doc,r.anchor,r.head)}}})):Al(i.scroller,"dblclick",function(t){Ti(e,t)||Tl(t)}),Eo||Al(i.scroller,"contextmenu",function(t){xn(e,t)});var o,l={end:0};Al(i.scroller,"touchstart",function(t){if(!Ti(e,t)&&!n(t)){clearTimeout(o);var r=+new Date;i.activeTouch={start:r,moved:!1,prev:r-l.end<=300?l:null},1==t.touches.length&&(i.activeTouch.left=t.touches[0].pageX,i.activeTouch.top=t.touches[0].pageY)}}),Al(i.scroller,"touchmove",function(){i.activeTouch&&(i.activeTouch.moved=!0)}),Al(i.scroller,"touchend",function(n){var o=i.activeTouch;if(o&&!Gt(i,n)&&null!=o.left&&!o.moved&&new Date-o.start<300){var l,a=e.coordsChar(i.activeTouch,"page");l=!o.prev||r(o,o.prev)?new de(a,a):!o.prev.prev||r(o,o.prev.prev)?e.findWordAt(a):new de(Fo(a.line,0),me(e.doc,Fo(a.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),Tl(n)}t()}),Al(i.scroller,"touchcancel",t),Al(i.scroller,"scroll",function(){i.scroller.clientHeight&&(rn(e,i.scroller.scrollTop),on(e,i.scroller.scrollLeft,!0),Wl(e,"scroll",e))}),Al(i.scroller,"mousewheel",function(t){ln(e,t)}),Al(i.scroller,"DOMMouseScroll",function(t){ln(e,t)}),Al(i.wrapper,"scroll",function(){i.wrapper.scrollTop=i.wrapper.scrollLeft=0}),i.dragFunctions={enter:function(t){Ti(e,t)||Nl(t)},over:function(t){Ti(e,t)||(tn(e,t),Nl(t))},start:function(t){en(e,t)},drop:Ot(e,Jt),leave:function(){nn(e)}};var a=i.input.getField();Al(a,"keyup",function(t){pn.call(e,t)}),Al(a,"keydown",Ot(e,hn)),Al(a,"keypress",Ot(e,mn)),Al(a,"focus",zi(vn,e)),Al(a,"blur",zi(yn,e))}function qt(t,n,r){var i=r&&r!=e.Init;if(!n!=!i){var o=t.display.dragFunctions,l=n?Al:Hl;l(t.display.scroller,"dragstart",o.start),l(t.display.scroller,"dragenter",o.enter),l(t.display.scroller,"dragover",o.over),l(t.display.scroller,"dragleave",o.leave),l(t.display.scroller,"drop",o.drop)}}function Ut(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function Gt(e,t){for(var n=wi(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return!0}function $t(e,t,n,r){var i=e.display;if(!n&&"true"==wi(t).getAttribute("cm-not-content"))return null;var o,l,a=i.lineSpace.getBoundingClientRect();try{o=t.clientX-a.left,l=t.clientY-a.top}catch(t){return null}var s,c=gt(e,o,l);if(r&&1==c.xRel&&(s=Zr(e.doc,c.line).text).length==c.ch){var u=Rl(s,s.length,e.options.tabSize)-s.length;c=Fo(c.line,Math.max(0,Math.round((o-Ge(e.display).left)/xt(e.display))-u))}return c}function Vt(e){var t=this,n=t.display;if(!(Ti(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.shift=e.shiftKey,Gt(n,e))return void(wo||(n.scroller.draggable=!1,setTimeout(function(){n.scroller.draggable=!0},100)));if(!Qt(t,e)){var r=$t(t,e);switch(window.focus(),ki(e)){case 1:t.state.selectingText?t.state.selectingText(e):r?Kt(t,e,r):wi(e)==n.scroller&&Tl(e);break;case 2:wo&&(t.state.lastMiddleDown=+new Date),r&&be(t.doc,r),setTimeout(function(){n.input.focus()},20),Tl(e);break;case 3:Eo?xn(t,e):gn(t)}}}}function Kt(e,t,n){xo?setTimeout(zi(Y,e),0):e.curOp.focus=Gi();var r,i=+new Date;_o&&_o.time>i-400&&0==zo(_o.pos,n)?r="triple":jo&&jo.time>i-400&&0==zo(jo.pos,n)?(r="double",_o={time:i,pos:n}):(r="single",jo={time:i,pos:n});var o,l=e.doc.sel,a=Oo?t.metaKey:t.ctrlKey;e.options.dragDrop&&Jl&&!e.isReadOnly()&&"single"==r&&(o=l.contains(n))>-1&&(zo((o=l.ranges[o]).from(),n)<0||n.xRel>0)&&(zo(o.to(),n)>0||n.xRel<0)?Xt(e,t,n,a):Yt(e,t,n,r,a)}function Xt(e,t,n,r){var i=e.display,o=+new Date,l=Ot(e,function(a){wo&&(i.scroller.draggable=!1),e.state.draggingText=!1,Hl(document,"mouseup",l),Hl(i.scroller,"drop",l),Math.abs(t.clientX-a.clientX)+Math.abs(t.clientY-a.clientY)<10&&(Tl(a),!r&&+new Date-200<o&&be(e.doc,n),wo||xo&&9==bo?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())});wo&&(i.scroller.draggable=!0),e.state.draggingText=l,i.scroller.dragDrop&&i.scroller.dragDrop(),Al(document,"mouseup",l),Al(i.scroller,"drop",l)}function Yt(e,t,n,r,i){function o(t){if(0!=zo(g,t))if(g=t,"rect"==r){for(var i=[],o=e.options.tabSize,l=Rl(Zr(c,n.line).text,n.ch,o),a=Rl(Zr(c,t.line).text,t.ch,o),s=Math.min(l,a),f=Math.max(l,a),p=Math.min(n.line,t.line),m=Math.min(e.lastLine(),Math.max(n.line,t.line));m>=p;p++){var v=Zr(c,p).text,y=Bl(v,s,o);s==f?i.push(new de(Fo(p,y),Fo(p,y))):v.length>y&&i.push(new de(Fo(p,y),Fo(p,Bl(v,f,o))))}i.length||i.push(new de(n,n)),Te(c,he(h.ranges.slice(0,d).concat(i),d),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var x=u,b=x.anchor,w=t;if("single"!=r){if("double"==r)var k=e.findWordAt(t);else var k=new de(Fo(t.line,0),me(c,Fo(t.line+1,0)));zo(k.anchor,b)>0?(w=k.head,b=X(x.from(),k.anchor)):(w=k.anchor,b=K(x.to(),k.head))}var i=h.ranges.slice(0);i[d]=new de(me(c,b),w),Te(c,he(i,d),Fl)}}function l(t){var n=++y,i=$t(e,t,!0,"rect"==r);if(i)if(0!=zo(i,g)){e.curOp.focus=Gi(),o(i);var a=b(s,c);(i.line>=a.to||i.line<a.from)&&setTimeout(Ot(e,function(){y==n&&l(t)}),150)}else{var u=t.clientY<v.top?-20:t.clientY>v.bottom?20:0;u&&setTimeout(Ot(e,function(){y==n&&(s.scroller.scrollTop+=u,l(t))}),50)}}function a(t){e.state.selectingText=!1,y=1/0,Tl(t),s.input.focus(),Hl(document,"mousemove",x),Hl(document,"mouseup",w),c.history.lastSelOrigin=null}var s=e.display,c=e.doc;Tl(t);var u,d,h=c.sel,f=h.ranges;if(i&&!t.shiftKey?(d=c.sel.contains(n),u=d>-1?f[d]:new de(n,n)):(u=c.sel.primary(),d=c.sel.primIndex),t.altKey)r="rect",i||(u=new de(n,n)),n=$t(e,t,!0,!0),d=-1;else if("double"==r){var p=e.findWordAt(n);u=e.display.shift||c.extend?xe(c,u,p.anchor,p.head):p}else if("triple"==r){var m=new de(Fo(n.line,0),me(c,Fo(n.line+1,0)));u=e.display.shift||c.extend?xe(c,u,m.anchor,m.head):m}else u=xe(c,u,n);i?-1==d?(d=f.length,Te(c,he(f.concat([u]),d),{scroll:!1,origin:"*mouse"})):f.length>1&&f[d].empty()&&"single"==r&&!t.shiftKey?(Te(c,he(f.slice(0,d).concat(f.slice(d+1)),0),{scroll:!1,origin:"*mouse"}),h=c.sel):ke(c,d,u,Fl):(d=0,Te(c,new ue([u],0),Fl),h=c.sel);var g=n,v=s.wrapper.getBoundingClientRect(),y=0,x=Ot(e,function(e){ki(e)?l(e):a(e)}),w=Ot(e,a);e.state.selectingText=w,Al(document,"mousemove",x),Al(document,"mouseup",w)}function Zt(e,t,n,r){try{var i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&Tl(t);var l=e.display,a=l.lineDiv.getBoundingClientRect();
  17305. if(o>a.bottom||!Ni(e,n))return bi(t);o-=a.top-l.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var c=l.gutters.childNodes[s];if(c&&c.getBoundingClientRect().right>=i){var u=ni(e.doc,o),d=e.options.gutters[s];return Wl(e,n,e,u,d,t),bi(t)}}}function Qt(e,t){return Zt(e,t,"gutterClick",!0)}function Jt(e){var t=this;if(nn(t),!Ti(t,e)&&!Gt(t.display,e)){Tl(e),xo&&($o=+new Date);var n=$t(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var i=r.length,o=Array(i),l=0,a=function(e,r){if(!t.options.allowDropFileTypes||-1!=Ii(t.options.allowDropFileTypes,e.type)){var a=new FileReader;a.onload=Ot(t,function(){var e=a.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[r]=e,++l==i){n=me(t.doc,n);var s={from:n,to:n,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Tn(t.doc,s),Le(t.doc,fe(n,Qo(s)))}}),a.readAsText(e)}},s=0;i>s;++s)a(r[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout(function(){t.display.input.focus()},20);try{var o=e.dataTransfer.getData("Text");if(o){if(t.state.draggingText&&!(Oo?e.altKey:e.ctrlKey))var c=t.listSelections();if(Me(t.doc,fe(n,n)),c)for(var s=0;s<c.length;++s)Wn(t.doc,"",c[s].anchor,c[s].head,"drag");t.replaceSelection(o,"around","paste"),t.display.input.focus()}}catch(e){}}}}function en(e,t){if(xo&&(!e.state.draggingText||+new Date-$o<100))return void Nl(t);if(!Ti(e,t)&&!Gt(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.setDragImage&&!Lo)){var n=_i("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",So&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),So&&n.parentNode.removeChild(n)}}function tn(e,t){var n=$t(e,t);if(n){var r=document.createDocumentFragment();Pe(e,n,r),e.display.dragCursor||(e.display.dragCursor=_i("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),Ui(e.display.dragCursor,r)}}function nn(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function rn(e,t){Math.abs(e.doc.scrollTop-t)<2||(e.doc.scrollTop=t,go||A(e,{top:t}),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t),e.display.scrollbars.setScrollTop(t),go&&A(e),Re(e,100))}function on(e,t,n){(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)||(t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),e.doc.scrollLeft=t,w(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function ln(e,t){var n=Xo(t),r=n.x,i=n.y,o=e.display,l=o.scroller,a=l.scrollWidth>l.clientWidth,s=l.scrollHeight>l.clientHeight;if(r&&a||i&&s){if(i&&Oo&&wo)e:for(var c=t.target,u=o.view;c!=l;c=c.parentNode)for(var d=0;d<u.length;d++)if(u[d].node==c){e.display.currentWheelTarget=c;break e}if(r&&!go&&!So&&null!=Ko)return i&&s&&rn(e,Math.max(0,Math.min(l.scrollTop+i*Ko,l.scrollHeight-l.clientHeight))),on(e,Math.max(0,Math.min(l.scrollLeft+r*Ko,l.scrollWidth-l.clientWidth))),(!i||i&&s)&&Tl(t),void(o.wheelStartX=null);if(i&&null!=Ko){var h=i*Ko,f=e.doc.scrollTop,p=f+o.wrapper.clientHeight;0>h?f=Math.max(0,f+h-50):p=Math.min(e.doc.height,p+h+50),A(e,{top:f,bottom:p})}20>Vo&&(null==o.wheelStartX?(o.wheelStartX=l.scrollLeft,o.wheelStartY=l.scrollTop,o.wheelDX=r,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=l.scrollLeft-o.wheelStartX,t=l.scrollTop-o.wheelStartY,n=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,n&&(Ko=(Ko*Vo+n)/(Vo+1),++Vo)}},200)):(o.wheelDX+=r,o.wheelDY+=i))}}function an(e,t,n){if("string"==typeof t&&(t=cl[t],!t))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=Dl}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}function sn(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=dl(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&dl(t,e.options.extraKeys,n,e)||dl(t,e.options.keyMap,n,e)}function cn(e,t,n,r){var i=e.state.keySeq;if(i){if(hl(t))return"handled";Yo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),t=i+" "+t}var o=sn(e,t,r);return"multi"==o&&(e.state.keySeq=t),"handled"==o&&Si(e,"keyHandled",e,t,n),"handled"!=o&&"multi"!=o||(Tl(n),ze(e)),i&&!o&&/\'$/.test(t)?(Tl(n),!0):!!o}function un(e,t){var n=fl(t,!0);return n?t.shiftKey&&!e.state.keySeq?cn(e,"Shift-"+n,t,function(t){return an(e,t,!0)})||cn(e,n,t,function(t){return("string"==typeof t?/^go[A-Z]/.test(t):t.motion)?an(e,t):void 0}):cn(e,n,t,function(t){return an(e,t)}):!1}function dn(e,t,n){return cn(e,"'"+n+"'",t,function(t){return an(e,t,!0)})}function hn(e){var t=this;if(t.curOp.focus=Gi(),!Ti(t,e)){xo&&11>bo&&27==e.keyCode&&(e.returnValue=!1);var n=e.keyCode;t.display.shift=16==n||e.shiftKey;var r=un(t,e);So&&(Zo=r?n:null,!r&&88==n&&!na&&(Oo?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=n||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||fn(t)}}function fn(e){function t(e){18!=e.keyCode&&e.altKey||(Yl(n,"CodeMirror-crosshair"),Hl(document,"keyup",t),Hl(document,"mouseover",t))}var n=e.display.lineDiv;Zl(n,"CodeMirror-crosshair"),Al(document,"keyup",t),Al(document,"mouseover",t)}function pn(e){16==e.keyCode&&(this.doc.sel.shift=!1),Ti(this,e)}function mn(e){var t=this;if(!(Gt(t.display,e)||Ti(t,e)||e.ctrlKey&&!e.altKey||Oo&&e.metaKey)){var n=e.keyCode,r=e.charCode;if(So&&n==Zo)return Zo=null,void Tl(e);if(!So||e.which&&!(e.which<10)||!un(t,e)){var i=String.fromCharCode(null==r?n:r);dn(t,e,i)||t.display.input.onKeyPress(e)}}}function gn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,yn(e))},100)}function vn(e){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(Wl(e,"focus",e),e.state.focused=!0,Zl(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),wo&&setTimeout(function(){e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),ze(e))}function yn(e){e.state.delayingBlurEvent||(e.state.focused&&(Wl(e,"blur",e),e.state.focused=!1,Yl(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function xn(e,t){Gt(e.display,t)||bn(e,t)||Ti(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function bn(e,t){return Ni(e,"gutterContextMenu")?Zt(e,t,"gutterContextMenu",!1):!1}function wn(e,t){if(zo(e,t.from)<0)return e;if(zo(e,t.to)<=0)return Qo(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Qo(t).ch-t.to.ch),Fo(n,r)}function kn(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new de(wn(i.anchor,t),wn(i.head,t)))}return he(n,e.sel.primIndex)}function Cn(e,t,n){return e.line==t.line?Fo(n.line,e.ch-t.ch+n.ch):Fo(n.line+(e.line-t.line),e.ch)}function Sn(e,t,n){for(var r=[],i=Fo(e.first,0),o=i,l=0;l<t.length;l++){var a=t[l],s=Cn(a.from,i,o),c=Cn(Qo(a),i,o);if(i=a.to,o=c,"around"==n){var u=e.sel.ranges[l],d=zo(u.head,u.anchor)<0;r[l]=new de(d?c:s,d?s:c)}else r[l]=new de(s,s)}return new ue(r,e.sel.primIndex)}function Ln(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){this.canceled=!0}};return n&&(r.update=function(t,n,r,i){t&&(this.from=me(e,t)),n&&(this.to=me(e,n)),r&&(this.text=r),void 0!==i&&(this.origin=i)}),Wl(e,"beforeChange",e,r),e.cm&&Wl(e.cm,"beforeChange",e.cm,r),r.canceled?null:{from:r.from,to:r.to,text:r.text,origin:r.origin}}function Tn(e,t,n){if(e.cm){if(!e.cm.curOp)return Ot(e.cm,Tn)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Ni(e,"beforeChange")||e.cm&&Ni(e.cm,"beforeChange"))||(t=Ln(e,t,!0))){var r=Do&&!n&&sr(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)Mn(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text});else Mn(e,t)}}function Mn(e,t){if(1!=t.text.length||""!=t.text[0]||0!=zo(t.from,t.to)){var n=kn(e,t);ci(e,t,n,e.cm?e.cm.curOp.id:NaN),On(e,t,n,or(e,t));var r=[];Xr(e,function(e,n){n||-1!=Ii(r,e.history)||(xi(e.history,t),r.push(e.history)),On(e,t,null,or(e,t))})}}function Nn(e,t,n){if(!e.cm||!e.cm.state.suppressEdits){for(var r,i=e.history,o=e.sel,l="undo"==t?i.done:i.undone,a="undo"==t?i.undone:i.done,s=0;s<l.length&&(r=l[s],n?!r.ranges||r.equals(e.sel):r.ranges);s++);if(s!=l.length){for(i.lastOrigin=i.lastSelOrigin=null;r=l.pop(),r.ranges;){if(hi(r,a),n&&!r.equals(e.sel))return void Te(e,r,{clearRedo:!1});o=r}var c=[];hi(o,a),a.push({changes:c,generation:i.generation}),i.generation=r.generation||++i.maxGeneration;for(var u=Ni(e,"beforeChange")||e.cm&&Ni(e.cm,"beforeChange"),s=r.changes.length-1;s>=0;--s){var d=r.changes[s];if(d.origin=t,u&&!Ln(e,d,!1))return void(l.length=0);c.push(li(e,d));var h=s?kn(e,d):Wi(l);On(e,d,h,ar(e,d)),!s&&e.cm&&e.cm.scrollIntoView({from:d.from,to:Qo(d)});var f=[];Xr(e,function(e,t){t||-1!=Ii(f,e.history)||(xi(e.history,d),f.push(e.history)),On(e,d,null,ar(e,d))})}}}}function An(e,t){if(0!=t&&(e.first+=t,e.sel=new ue(Ei(e.sel.ranges,function(e){return new de(Fo(e.anchor.line+t,e.anchor.ch),Fo(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Dt(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)Pt(e.cm,r,"gutter")}}function On(e,t,n,r){if(e.cm&&!e.cm.curOp)return Ot(e.cm,On)(e,t,n,r);if(t.to.line<e.first)return void An(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);An(e,i),t={from:Fo(e.first,0),to:Fo(t.to.line+i,t.to.ch),text:[Wi(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:Fo(o,Zr(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Qr(e,t.from,t.to),n||(n=kn(e,t)),e.cm?Hn(e.cm,t,r):$r(e,t,r),Me(e,n,Pl)}}function Hn(e,t,n){var r=e.doc,i=e.display,l=t.from,a=t.to,s=!1,c=l.line;e.options.lineWrapping||(c=ti(yr(Zr(r,l.line))),r.iter(c,a.line+1,function(e){return e==i.maxLine?(s=!0,!0):void 0})),r.sel.contains(t.from,t.to)>-1&&Mi(e),$r(r,t,n,o(e)),e.options.lineWrapping||(r.iter(c,l.line+t.text.length,function(e){var t=d(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),r.frontier=Math.min(r.frontier,l.line),Re(e,400);var u=t.text.length-(a.line-l.line)-1;t.full?Dt(e):l.line!=a.line||1!=t.text.length||Gr(e.doc,t)?Dt(e,l.line,a.line+1,u):Pt(e,l.line,"text");var h=Ni(e,"changes"),f=Ni(e,"change");if(f||h){var p={from:l,to:a,text:t.text,removed:t.removed,origin:t.origin};f&&Si(e,"change",e,p),h&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(p)}e.display.selForContextMenu=null}function Wn(e,t,n,r,i){if(r||(r=n),zo(r,n)<0){var o=r;r=n,n=o}"string"==typeof t&&(t=e.splitLines(t)),Tn(e,{from:n,to:r,text:t,origin:i})}function In(e,t){if(!Ti(e,"scrollCursorIntoView")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null;if(t.top+r.top<0?i=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!Mo){var o=_i("div","​",null,"position: absolute; top: "+(t.top-n.viewOffset-qe(e.display))+"px; height: "+(t.bottom-t.top+$e(e)+n.barHeight)+"px; left: "+t.left+"px; width: 2px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}function En(e,t,n,r){null==r&&(r=0);for(var i=0;5>i;i++){var o=!1,l=ft(e,t),a=n&&n!=t?ft(e,n):l,s=Pn(e,Math.min(l.left,a.left),Math.min(l.top,a.top)-r,Math.max(l.left,a.left),Math.max(l.bottom,a.bottom)+r),c=e.doc.scrollTop,u=e.doc.scrollLeft;if(null!=s.scrollTop&&(rn(e,s.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(o=!0)),null!=s.scrollLeft&&(on(e,s.scrollLeft),Math.abs(e.doc.scrollLeft-u)>1&&(o=!0)),!o)break}return l}function Dn(e,t,n,r,i){var o=Pn(e,t,n,r,i);null!=o.scrollTop&&rn(e,o.scrollTop),null!=o.scrollLeft&&on(e,o.scrollLeft)}function Pn(e,t,n,r,i){var o=e.display,l=yt(e.display);0>n&&(n=0);var a=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:o.scroller.scrollTop,s=Ke(e),c={};i-n>s&&(i=n+s);var u=e.doc.height+Ue(o),d=l>n,h=i>u-l;if(a>n)c.scrollTop=d?0:n;else if(i>a+s){var f=Math.min(n,(h?u:i)-s);f!=a&&(c.scrollTop=f)}var p=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:o.scroller.scrollLeft,m=Ve(e)-(e.options.fixedGutter?o.gutters.offsetWidth:0),g=r-t>m;return g&&(r=t+m),10>t?c.scrollLeft=0:p>t?c.scrollLeft=Math.max(0,t-(g?0:10)):r>m+p-3&&(c.scrollLeft=r+(g?0:10)-m),c}function Fn(e,t,n){null==t&&null==n||Rn(e),null!=t&&(e.curOp.scrollLeft=(null==e.curOp.scrollLeft?e.doc.scrollLeft:e.curOp.scrollLeft)+t),null!=n&&(e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+n)}function zn(e){Rn(e);var t=e.getCursor(),n=t,r=t;e.options.lineWrapping||(n=t.ch?Fo(t.line,t.ch-1):t,r=Fo(t.line,t.ch+1)),e.curOp.scrollToPos={from:n,to:r,margin:e.options.cursorScrollMargin,isCursor:!0}}function Rn(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=pt(e,t.from),r=pt(e,t.to),i=Pn(e,Math.min(n.left,r.left),Math.min(n.top,r.top)-t.margin,Math.max(n.right,r.right),Math.max(n.bottom,r.bottom)+t.margin);e.scrollTo(i.scrollLeft,i.scrollTop)}}function Bn(e,t,n,r){var i,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?i=_e(e,t):n="prev");var l=e.options.tabSize,a=Zr(o,t),s=Rl(a.text,null,l);a.stateAfter&&(a.stateAfter=null);var c,u=a.text.match(/^\s*/)[0];if(r||/\S/.test(a.text)){if("smart"==n&&(c=o.mode.indent(i,a.text.slice(u.length),a.text),c==Dl||c>150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?Rl(Zr(o,t-1).text,null,l):0:"add"==n?c=s+e.options.indentUnit:"subtract"==n?c=s-e.options.indentUnit:"number"==typeof n&&(c=s+n),c=Math.max(0,c);var d="",h=0;if(e.options.indentWithTabs)for(var f=Math.floor(c/l);f;--f)h+=l,d+=" ";if(c>h&&(d+=Hi(c-h)),d!=u)return Wn(o,d,Fo(t,0),Fo(t,u.length),"+input"),a.stateAfter=null,!0;for(var f=0;f<o.sel.ranges.length;f++){var p=o.sel.ranges[f];if(p.head.line==t&&p.head.ch<u.length){var h=Fo(t,u.length);ke(o,f,new de(h,h));break}}}function jn(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=Zr(e,pe(e,t)):i=ti(t),null==i?null:(r(o,i)&&e.cm&&Pt(e.cm,i,n),o)}function _n(e,t){for(var n=e.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=t(n[i]);r.length&&zo(o.from,Wi(r).to)<=0;){var l=r.pop();if(zo(l.from,o.from)<0){o.from=l.from;break}}r.push(o)}At(e,function(){for(var t=r.length-1;t>=0;t--)Wn(e.doc,"",r[t].from,r[t].to,"+delete");zn(e)})}function qn(e,t,n,r,i){function o(){var t=a+n;return t<e.first||t>=e.first+e.size?!1:(a=t,u=Zr(e,t))}function l(e){var t=(i?ho:fo)(u,s,n,!0);if(null==t){if(e||!o())return!1;s=i?(0>n?io:ro)(u):0>n?u.text.length:0}else s=t;return!0}var a=t.line,s=t.ch,c=n,u=Zr(e,a);if("char"==r)l();else if("column"==r)l(!0);else if("word"==r||"group"==r)for(var d=null,h="group"==r,f=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(0>n)||l(!p);p=!1){var m=u.text.charAt(s)||"\n",g=Ri(m,f)?"w":h&&"\n"==m?"n":!h||/\s/.test(m)?null:"p";if(!h||p||g||(g="s"),d&&d!=g){0>n&&(n=1,l());break}if(g&&(d=g),n>0&&!l(!p))break}var v=We(e,Fo(a,s),t,c,!0);return zo(t,v)||(v.hitSide=!0),v}function Un(e,t,n,r){var i,o=e.doc,l=t.left;if("page"==r){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);i=t.top+n*(a-(0>n?1.5:.5)*yt(e.display))}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;;){var s=gt(e,l,i);if(!s.outside)break;if(0>n?0>=i:i>=o.height){s.hitSide=!0;break}i+=5*n}return s}function Gn(t,n,r,i){e.defaults[t]=n,r&&(el[t]=i?function(e,t,n){n!=tl&&r(e,t,n)}:r)}function $n(e){for(var t,n,r,i,o=e.split(/-(?!$)/),e=o[o.length-1],l=0;l<o.length-1;l++){var a=o[l];if(/^(cmd|meta|m)$/i.test(a))i=!0;else if(/^a(lt)?$/i.test(a))t=!0;else if(/^(c|ctrl|control)$/i.test(a))n=!0;else{if(!/^s(hift)$/i.test(a))throw new Error("Unrecognized modifier name: "+a);r=!0}}return t&&(e="Alt-"+e),n&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),r&&(e="Shift-"+e),e}function Vn(e){return"string"==typeof e?ul[e]:e}function Kn(e,t,n,r,i){if(r&&r.shared)return Xn(e,t,n,r,i);if(e.cm&&!e.cm.curOp)return Ot(e.cm,Kn)(e,t,n,r,i);var o=new gl(e,i),l=zo(t,n);if(r&&Fi(r,o,!1),l>0||0==l&&o.clearWhenEmpty!==!1)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=_i("span",[o.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(vr(e,t.line,t,n,o)||t.line!=n.line&&vr(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Po=!0}o.addToHistory&&ci(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var a,s=t.line,c=e.cm;if(e.iter(s,n.line+1,function(e){c&&o.collapsed&&!c.options.lineWrapping&&yr(e)==c.display.maxLine&&(a=!0),o.collapsed&&s!=t.line&&ei(e,0),nr(e,new Jn(o,s==t.line?t.ch:null,s==n.line?n.ch:null)),++s}),o.collapsed&&e.iter(t.line,n.line+1,function(t){kr(e,t)&&ei(t,0)}),o.clearOnEnter&&Al(o,"beforeCursorEnter",function(){o.clear()}),o.readOnly&&(Do=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++ml,o.atomic=!0),c){if(a&&(c.curOp.updateMaxLine=!0),o.collapsed)Dt(c,t.line,n.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var u=t.line;u<=n.line;u++)Pt(c,u,"text");o.atomic&&Ae(c.doc),Si(c,"markerAdded",c,o)}return o}function Xn(e,t,n,r,i){r=Fi(r),r.shared=!1;var o=[Kn(e,t,n,r,i)],l=o[0],a=r.widgetNode;return Xr(e,function(e){a&&(r.widgetNode=a.cloneNode(!0)),o.push(Kn(e,me(e,t),me(e,n),r,i));for(var s=0;s<e.linked.length;++s)if(e.linked[s].isParent)return;l=Wi(o)}),new vl(o,l)}function Yn(e){return e.findMarks(Fo(e.first,0),e.clipPos(Fo(e.lastLine())),function(e){return e.parent})}function Zn(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(zo(o,l)){var a=Kn(e,o,l,r.primary,r.primary.type);r.markers.push(a),a.parent=r}}}function Qn(e){for(var t=0;t<e.length;t++){var n=e[t],r=[n.primary.doc];Xr(n.primary.doc,function(e){r.push(e)});for(var i=0;i<n.markers.length;i++){var o=n.markers[i];-1==Ii(r,o.doc)&&(o.parent=null,n.markers.splice(i--,1))}}}function Jn(e,t,n){this.marker=e,this.from=t,this.to=n}function er(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function tr(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(e[r]);return n}function nr(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function rr(e,t,n){if(e)for(var r,i=0;i<e.length;++i){var o=e[i],l=o.marker,a=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);if(a||o.from==t&&"bookmark"==l.type&&(!n||!o.marker.insertLeft)){var s=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);(r||(r=[])).push(new Jn(l,o.from,s?null:o.to))}}return r}function ir(e,t,n){if(e)for(var r,i=0;i<e.length;++i){var o=e[i],l=o.marker,a=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);if(a||o.from==t&&"bookmark"==l.type&&(!n||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);(r||(r=[])).push(new Jn(l,s?null:o.from-t,null==o.to?null:o.to-t))}}return r}function or(e,t){if(t.full)return null;var n=ve(e,t.from.line)&&Zr(e,t.from.line).markedSpans,r=ve(e,t.to.line)&&Zr(e,t.to.line).markedSpans;if(!n&&!r)return null;var i=t.from.ch,o=t.to.ch,l=0==zo(t.from,t.to),a=rr(n,i,l),s=ir(r,o,l),c=1==t.text.length,u=Wi(t.text).length+(c?i:0);if(a)for(var d=0;d<a.length;++d){var h=a[d];if(null==h.to){var f=er(s,h.marker);f?c&&(h.to=null==f.to?null:f.to+u):h.to=i}}if(s)for(var d=0;d<s.length;++d){var h=s[d];if(null!=h.to&&(h.to+=u),null==h.from){var f=er(a,h.marker);f||(h.from=u,c&&(a||(a=[])).push(h))}else h.from+=u,c&&(a||(a=[])).push(h)}a&&(a=lr(a)),s&&s!=a&&(s=lr(s));var p=[a];if(!c){var m,g=t.text.length-2;if(g>0&&a)for(var d=0;d<a.length;++d)null==a[d].to&&(m||(m=[])).push(new Jn(a[d].marker,null,null));for(var d=0;g>d;++d)p.push(m);p.push(s)}return p}function lr(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&n.marker.clearWhenEmpty!==!1&&e.splice(t--,1)}return e.length?e:null}function ar(e,t){var n=mi(e,t),r=or(e,t);if(!n)return r;if(!r)return n;for(var i=0;i<n.length;++i){var o=n[i],l=r[i];if(o&&l)e:for(var a=0;a<l.length;++a){for(var s=l[a],c=0;c<o.length;++c)if(o[c].marker==s.marker)continue e;o.push(s)}else l&&(n[i]=l)}return n}function sr(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=Ii(r,n)||(r||(r=[])).push(n)}}),!r)return null;for(var i=[{from:t,to:n}],o=0;o<r.length;++o)for(var l=r[o],a=l.find(0),s=0;s<i.length;++s){var c=i[s];if(!(zo(c.to,a.from)<0||zo(c.from,a.to)>0)){var u=[s,1],d=zo(c.from,a.from),h=zo(c.to,a.to);(0>d||!l.inclusiveLeft&&!d)&&u.push({from:c.from,to:a.from}),(h>0||!l.inclusiveRight&&!h)&&u.push({from:a.to,to:c.to}),i.splice.apply(i,u),s+=u.length-1}}return i}function cr(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function ur(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function dr(e){return e.inclusiveLeft?-1:0}function hr(e){return e.inclusiveRight?1:0}function fr(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),i=t.find(),o=zo(r.from,i.from)||dr(e)-dr(t);if(o)return-o;var l=zo(r.to,i.to)||hr(e)-hr(t);return l?l:t.id-e.id}function pr(e,t){var n,r=Po&&e.markedSpans;if(r)for(var i,o=0;o<r.length;++o)i=r[o],i.marker.collapsed&&null==(t?i.from:i.to)&&(!n||fr(n,i.marker)<0)&&(n=i.marker);return n}function mr(e){return pr(e,!0)}function gr(e){return pr(e,!1)}function vr(e,t,n,r,i){var o=Zr(e,t),l=Po&&o.markedSpans;if(l)for(var a=0;a<l.length;++a){var s=l[a];if(s.marker.collapsed){var c=s.marker.find(0),u=zo(c.from,n)||dr(s.marker)-dr(i),d=zo(c.to,r)||hr(s.marker)-hr(i);if(!(u>=0&&0>=d||0>=u&&d>=0)&&(0>=u&&(zo(c.to,n)>0||s.marker.inclusiveRight&&i.inclusiveLeft)||u>=0&&(zo(c.from,r)<0||s.marker.inclusiveLeft&&i.inclusiveRight)))return!0}}}function yr(e){for(var t;t=mr(e);)e=t.find(-1,!0).line;return e}function xr(e){for(var t,n;t=gr(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function br(e,t){var n=Zr(e,t),r=yr(n);return n==r?t:ti(r)}function wr(e,t){if(t>e.lastLine())return t;var n,r=Zr(e,t);if(!kr(e,r))return t;for(;n=gr(r);)r=n.find(1,!0).line;return ti(r)+1}function kr(e,t){var n=Po&&t.markedSpans;if(n)for(var r,i=0;i<n.length;++i)if(r=n[i],r.marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&Cr(e,t,r))return!0}}function Cr(e,t,n){if(null==n.to){var r=n.marker.find(1,!0);return Cr(e,r.line,er(r.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var i,o=0;o<t.markedSpans.length;++o)if(i=t.markedSpans[o],i.marker.collapsed&&!i.marker.widgetNode&&i.from==n.to&&(null==i.to||i.to!=n.from)&&(i.marker.inclusiveLeft||n.marker.inclusiveRight)&&Cr(e,t,i))return!0}function Sr(e,t,n){ri(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Fn(e,null,n)}function Lr(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!Vl(document.body,e.node)){var n="position: relative;";e.coverGutter&&(n+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(n+="width: "+t.display.wrapper.clientWidth+"px;"),Ui(t.display.measure,_i("div",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function Tr(e,t,n,r){var i=new yl(e,n,r),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),jn(e,t,"widget",function(t){var n=t.widgets||(t.widgets=[]);if(null==i.insertAt?n.push(i):n.splice(Math.min(n.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!kr(e,t)){var r=ri(t)<e.scrollTop;ei(t,t.height+Lr(i)),r&&Fn(o,null,i.height),o.curOp.forceUpdate=!0}return!0}),i}function Mr(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),cr(e),ur(e,n);var i=r?r(e):1;i!=e.height&&ei(e,i)}function Nr(e){e.parent=null,cr(e)}function Ar(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?"bgClass":"textClass";null==t[r]?t[r]=n[2]:new RegExp("(?:^|s)"+n[2]+"(?:$|s)").test(t[r])||(t[r]+=" "+n[2])}return e}function Or(t,n){if(t.blankLine)return t.blankLine(n);if(t.innerMode){var r=e.innerMode(t,n);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Hr(t,n,r,i){for(var o=0;10>o;o++){i&&(i[0]=e.innerMode(t,r).mode);var l=t.token(n,r);if(n.pos>n.start)return l}throw new Error("Mode "+t.name+" failed to advance stream.")}function Wr(e,t,n,r){function i(e){return{start:d.start,end:d.pos,string:d.current(),type:o||null,state:e?al(l.mode,u):u}}var o,l=e.doc,a=l.mode;t=me(l,t);var s,c=Zr(l,t.line),u=_e(e,t.line,n),d=new pl(c.text,e.options.tabSize);for(r&&(s=[]);(r||d.pos<t.ch)&&!d.eol();)d.start=d.pos,o=Hr(a,d,u),r&&s.push(i(!0));return r?s:i()}function Ir(e,t,n,r,i,o,l){var a=n.flattenSpans;null==a&&(a=e.options.flattenSpans);var s,c=0,u=null,d=new pl(t,e.options.tabSize),h=e.options.addModeClass&&[null];for(""==t&&Ar(Or(n,r),o);!d.eol();){if(d.pos>e.options.maxHighlightLength?(a=!1,l&&Pr(e,t,r,d.pos),d.pos=t.length,s=null):s=Ar(Hr(n,d,r,h),o),h){var f=h[0].name;f&&(s="m-"+(s?f+" "+s:f))}if(!a||u!=s){for(;c<d.start;)c=Math.min(d.start,c+5e4),i(c,u);u=s}d.start=d.pos}for(;c<d.pos;){var p=Math.min(d.pos,c+5e4);i(p,u),c=p}}function Er(e,t,n,r){var i=[e.state.modeGen],o={};Ir(e,t.text,e.doc.mode,n,function(e,t){i.push(e,t)},o,r);for(var l=0;l<e.state.overlays.length;++l){var a=e.state.overlays[l],s=1,c=0;Ir(e,t.text,a.mode,!0,function(e,t){for(var n=s;e>c;){var r=i[s];r>e&&i.splice(s,1,e,i[s+1],r),s+=2,c=Math.min(e,r)}if(t)if(a.opaque)i.splice(n,s-n,e,"cm-overlay "+t),s=n+2;else for(;s>n;n+=2){var o=i[n+1];i[n+1]=(o?o+" ":"")+"cm-overlay "+t}},o)}return{styles:i,classes:o.bgClass||o.textClass?o:null}}function Dr(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=_e(e,ti(t)),i=Er(e,t,t.text.length>e.options.maxHighlightLength?al(e.doc.mode,r):r);t.stateAfter=r,t.styles=i.styles,i.classes?t.styleClasses=i.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.frontier&&e.doc.frontier++}return t.styles}function Pr(e,t,n,r){var i=e.doc.mode,o=new pl(t,e.options.tabSize);for(o.start=o.pos=r||0,""==t&&Or(i,n);!o.eol();)Hr(i,o,n),o.start=o.pos}function Fr(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?wl:bl;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function zr(e,t){var n=_i("span",null,null,wo?"padding-right: .1px":null),r={pre:_i("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,splitSpaces:(xo||wo)&&e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o,l=i?t.rest[i-1]:t.line;r.pos=0,r.addToken=Br,Qi(e.display.measure)&&(o=ii(l))&&(r.addToken=_r(r.addToken,o)),r.map=[];var a=t!=e.display.externalMeasured&&ti(l);Ur(l,r,Dr(e,l,a)),l.styleClasses&&(l.styleClasses.bgClass&&(r.bgClass=Vi(l.styleClasses.bgClass,r.bgClass||"")),l.styleClasses.textClass&&(r.textClass=Vi(l.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Zi(e.display.measure))),0==i?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}return wo&&/\bcm-tab\b/.test(r.content.lastChild.className)&&(r.content.className="cm-tab-wrap-hack"),Wl(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=Vi(r.pre.className,r.textClass||"")),r}function Rr(e){var t=_i("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Br(e,t,n,r,i,o,l){if(t){var a=e.splitSpaces?t.replace(/ {3,}/g,jr):t,s=e.cm.state.specialChars,c=!1;if(s.test(t))for(var u=document.createDocumentFragment(),d=0;;){s.lastIndex=d;var h=s.exec(t),f=h?h.index-d:t.length-d;if(f){var p=document.createTextNode(a.slice(d,d+f));xo&&9>bo?u.appendChild(_i("span",[p])):u.appendChild(p),e.map.push(e.pos,e.pos+f,p),e.col+=f,e.pos+=f}if(!h)break;if(d+=f+1," "==h[0]){var m=e.cm.options.tabSize,g=m-e.col%m,p=u.appendChild(_i("span",Hi(g),"cm-tab"));p.setAttribute("role","presentation"),p.setAttribute("cm-text"," "),e.col+=g}else if("\r"==h[0]||"\n"==h[0]){var p=u.appendChild(_i("span","\r"==h[0]?"␍":"␤","cm-invalidchar"));p.setAttribute("cm-text",h[0]),e.col+=1}else{var p=e.cm.options.specialCharPlaceholder(h[0]);p.setAttribute("cm-text",h[0]),xo&&9>bo?u.appendChild(_i("span",[p])):u.appendChild(p),e.col+=1}e.map.push(e.pos,e.pos+1,p),e.pos++}else{e.col+=t.length;var u=document.createTextNode(a);e.map.push(e.pos,e.pos+t.length,u),xo&&9>bo&&(c=!0),e.pos+=t.length}if(n||r||i||c||l){var v=n||"";r&&(v+=r),i&&(v+=i);var y=_i("span",[u],v,l);return o&&(y.title=o),e.content.appendChild(y)}e.content.appendChild(u)}}function jr(e){for(var t=" ",n=0;n<e.length-2;++n)t+=n%2?" ":" ";return t+=" "}function _r(e,t){return function(n,r,i,o,l,a,s){i=i?i+" cm-force-border":"cm-force-border";for(var c=n.pos,u=c+r.length;;){for(var d=0;d<t.length;d++){var h=t[d];if(h.to>c&&h.from<=c)break}if(h.to>=u)return e(n,r,i,o,l,a,s);e(n,r.slice(0,h.to-c),i,o,null,a,s),o=null,r=r.slice(h.to-c),c=h.to}}}function qr(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t}function Ur(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var l,a,s,c,u,d,h,f=i.length,p=0,m=1,g="",v=0;;){if(v==p){s=c=u=d=a="",h=null,v=1/0;for(var y,x=[],b=0;b<r.length;++b){var w=r[b],k=w.marker;"bookmark"==k.type&&w.from==p&&k.widgetNode?x.push(k):w.from<=p&&(null==w.to||w.to>p||k.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&v>w.to&&(v=w.to,c=""),k.className&&(s+=" "+k.className),k.css&&(a=(a?a+";":"")+k.css),k.startStyle&&w.from==p&&(u+=" "+k.startStyle),k.endStyle&&w.to==v&&(y||(y=[])).push(k.endStyle,w.to),k.title&&!d&&(d=k.title),k.collapsed&&(!h||fr(h.marker,k)<0)&&(h=w)):w.from>p&&v>w.from&&(v=w.from)}if(y)for(var b=0;b<y.length;b+=2)y[b+1]==v&&(c+=" "+y[b]);if(!h||h.from==p)for(var b=0;b<x.length;++b)qr(t,0,x[b]);if(h&&(h.from||0)==p){if(qr(t,(null==h.to?f+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=f)break;for(var C=Math.min(f,v);;){if(g){var S=p+g.length;if(!h){var L=S>C?g.slice(0,C-p):g;t.addToken(t,L,l?l+s:s,u,p+L.length==v?c:"",d,a)}if(S>=C){g=g.slice(C-p),p=C;break}p=S,u=""}g=i.slice(o,o=n[m++]),l=Fr(n[m++],t.cm.options)}}else for(var m=1;m<n.length;m+=2)t.addToken(t,i.slice(o,o=n[m]),Fr(n[m+1],t.cm.options))}function Gr(e,t){return 0==t.from.ch&&0==t.to.ch&&""==Wi(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function $r(e,t,n,r){function i(e){return n?n[e]:null}function o(e,n,i){Mr(e,n,i,r),Si(e,"change",e,t)}function l(e,t){for(var n=e,o=[];t>n;++n)o.push(new xl(c[n],i(n),r));return o}var a=t.from,s=t.to,c=t.text,u=Zr(e,a.line),d=Zr(e,s.line),h=Wi(c),f=i(c.length-1),p=s.line-a.line;if(t.full)e.insert(0,l(0,c.length)),e.remove(c.length,e.size-c.length);else if(Gr(e,t)){var m=l(0,c.length-1);o(d,d.text,f),p&&e.remove(a.line,p),m.length&&e.insert(a.line,m)}else if(u==d)if(1==c.length)o(u,u.text.slice(0,a.ch)+h+u.text.slice(s.ch),f);else{var m=l(1,c.length-1);m.push(new xl(h+u.text.slice(s.ch),f,r)),o(u,u.text.slice(0,a.ch)+c[0],i(0)),e.insert(a.line+1,m)}else if(1==c.length)o(u,u.text.slice(0,a.ch)+c[0]+d.text.slice(s.ch),i(0)),e.remove(a.line+1,p);else{o(u,u.text.slice(0,a.ch)+c[0],i(0)),o(d,h+d.text.slice(s.ch),f);var m=l(1,c.length-1);p>1&&e.remove(a.line+1,p-1),e.insert(a.line+1,m)}Si(e,"change",e,t)}function Vr(e){this.lines=e,this.parent=null;for(var t=0,n=0;t<e.length;++t)e[t].parent=this,n+=e[t].height;this.height=n}function Kr(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){
  17306. var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}function Xr(e,t,n){function r(e,i,o){if(e.linked)for(var l=0;l<e.linked.length;++l){var a=e.linked[l];if(a.doc!=i){var s=o&&a.sharedHist;n&&!s||(t(a.doc,s),r(a.doc,e,s))}}}r(e,null,!0)}function Yr(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,l(e),n(e),e.options.lineWrapping||h(e),e.options.mode=t.modeOption,Dt(e)}function Zr(e,t){if(t-=e.first,0>t||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(o>t){n=i;break}t-=o}return n.lines[t]}function Qr(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){var o=e.text;i==n.line&&(o=o.slice(0,n.ch)),i==t.line&&(o=o.slice(t.ch)),r.push(o),++i}),r}function Jr(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function ei(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function ti(e){if(null==e.parent)return null;for(var t=e.parent,n=Ii(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function ni(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(o>t){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var r=0;r<e.lines.length;++r){var l=e.lines[r],a=l.height;if(a>t)break;t-=a}return n+r}function ri(e){e=yr(e);for(var t=0,n=e.parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;n=o,o=n.parent)for(var r=0;r<o.children.length;++r){var l=o.children[r];if(l==n)break;t+=l.height}return t}function ii(e){var t=e.order;return null==t&&(t=e.order=la(e.text)),t}function oi(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function li(e,t){var n={from:V(t.from),to:Qo(t),text:Qr(e,t.from,t.to)};return fi(e,n,t.from.line,t.to.line+1),Xr(e,function(e){fi(e,n,t.from.line,t.to.line+1)},!0),n}function ai(e){for(;e.length;){var t=Wi(e);if(!t.ranges)break;e.pop()}}function si(e,t){return t?(ai(e.done),Wi(e.done)):e.done.length&&!Wi(e.done).ranges?Wi(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Wi(e.done)):void 0}function ci(e,t,n,r){var i=e.history;i.undone.length=0;var o,l=+new Date;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>l-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=si(i,i.lastOp==r))){var a=Wi(o.changes);0==zo(t.from,t.to)&&0==zo(t.from,a.to)?a.to=Qo(t):o.changes.push(li(e,t))}else{var s=Wi(i.done);for(s&&s.ranges||hi(e.sel,i.done),o={changes:[li(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=l,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,a||Wl(e,"historyAdded")}function ui(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function di(e,t,n,r){var i=e.history,o=r&&r.origin;n==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||ui(e,o,Wi(i.done),t))?i.done[i.done.length-1]=t:hi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=n,r&&r.clearRedo!==!1&&ai(i.undone)}function hi(e,t){var n=Wi(t);n&&n.ranges&&n.equals(e)||t.push(e)}function fi(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=n.markedSpans),++o})}function pi(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function mi(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=0,i=[];r<t.text.length;++r)i.push(pi(n[r]));return i}function gi(e,t,n){for(var r=0,i=[];r<e.length;++r){var o=e[r];if(o.ranges)i.push(n?ue.prototype.deepCopy.call(o):o);else{var l=o.changes,a=[];i.push({changes:a});for(var s=0;s<l.length;++s){var c,u=l[s];if(a.push({from:u.from,to:u.to,text:u.text}),t)for(var d in u)(c=d.match(/^spans_(\d+)$/))&&Ii(t,Number(c[1]))>-1&&(Wi(a)[d]=u[d],delete u[d])}}}return i}function vi(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function yi(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||(o=e[i]=o.deepCopy(),o.copied=!0);for(var a=0;a<o.ranges.length;a++)vi(o.ranges[a].anchor,t,n,r),vi(o.ranges[a].head,t,n,r)}else{for(var a=0;a<o.changes.length;++a){var s=o.changes[a];if(n<s.from.line)s.from=Fo(s.from.line+r,s.from.ch),s.to=Fo(s.to.line+r,s.to.ch);else if(t<=s.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function xi(e,t){var n=t.from.line,r=t.to.line,i=t.text.length-(r-n)-1;yi(e.done,n,r,i),yi(e.undone,n,r,i)}function bi(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function wi(e){return e.target||e.srcElement}function ki(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Oo&&e.ctrlKey&&1==t&&(t=3),t}function Ci(e,t,n){var r=e._handlers&&e._handlers[t];return n?r&&r.length>0?r.slice():Ol:r||Ol}function Si(e,t){function n(e){return function(){e.apply(null,o)}}var r=Ci(e,t,!1);if(r.length){var i,o=Array.prototype.slice.call(arguments,2);Uo?i=Uo.delayedCallbacks:Il?i=Il:(i=Il=[],setTimeout(Li,0));for(var l=0;l<r.length;++l)i.push(n(r[l]))}}function Li(){var e=Il;Il=null;for(var t=0;t<e.length;++t)e[t]()}function Ti(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),Wl(e,n||t.type,e,t),bi(t)||t.codemirrorIgnore}function Mi(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==Ii(n,t[r])&&n.push(t[r])}function Ni(e,t){return Ci(e,t).length>0}function Ai(e){e.prototype.on=function(e,t){Al(this,e,t)},e.prototype.off=function(e,t){Hl(this,e,t)}}function Oi(){this.id=null}function Hi(e){for(;jl.length<=e;)jl.push(Wi(jl)+" ");return jl[e]}function Wi(e){return e[e.length-1]}function Ii(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}function Ei(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function Di(){}function Pi(e,t){var n;return Object.create?n=Object.create(e):(Di.prototype=e,n=new Di),t&&Fi(t,n),n}function Fi(e,t,n){t||(t={});for(var r in e)!e.hasOwnProperty(r)||n===!1&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function zi(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function Ri(e,t){return t?t.source.indexOf("\\w")>-1&&Gl(e)?!0:t.test(e):Gl(e)}function Bi(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function ji(e){return e.charCodeAt(0)>=768&&$l.test(e)}function _i(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function qi(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function Ui(e,t){return qi(e).appendChild(t)}function Gi(){for(var e=document.activeElement;e&&e.root&&e.root.activeElement;)e=e.root.activeElement;return e}function $i(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function Vi(e,t){for(var n=e.split(" "),r=0;r<n.length;r++)n[r]&&!$i(n[r]).test(t)&&(t+=" "+n[r]);return t}function Ki(e){if(document.body.getElementsByClassName)for(var t=document.body.getElementsByClassName("CodeMirror"),n=0;n<t.length;n++){var r=t[n].CodeMirror;r&&e(r)}}function Xi(){Ql||(Yi(),Ql=!0)}function Yi(){var e;Al(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,Ki(Ut)},100))}),Al(window,"blur",function(){Ki(yn)})}function Zi(e){if(null==Kl){var t=_i("span","​");Ui(e,_i("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Kl=t.offsetWidth<=1&&t.offsetHeight>2&&!(xo&&8>bo))}var n=Kl?_i("span","​"):_i("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Qi(e){if(null!=Xl)return Xl;var t=Ui(e,document.createTextNode("AخA")),n=ql(t,0,1).getBoundingClientRect();if(!n||n.left==n.right)return!1;var r=ql(t,1,2).getBoundingClientRect();return Xl=r.right-n.right<3}function Ji(e){if(null!=ra)return ra;var t=Ui(e,_i("span","x")),n=t.getBoundingClientRect(),r=ql(t,0,1).getBoundingClientRect();return ra=Math.abs(n.left-r.left)>1}function eo(e,t,n,r){if(!e)return r(t,n,"ltr");for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<n&&l.to>t||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr"),i=!0)}i||r(t,n,"ltr")}function to(e){return e.level%2?e.to:e.from}function no(e){return e.level%2?e.from:e.to}function ro(e){var t=ii(e);return t?to(t[0]):0}function io(e){var t=ii(e);return t?no(Wi(t)):e.text.length}function oo(e,t){var n=Zr(e.doc,t),r=yr(n);r!=n&&(t=ti(r));var i=ii(r),o=i?i[0].level%2?io(r):ro(r):0;return Fo(t,o)}function lo(e,t){for(var n,r=Zr(e.doc,t);n=gr(r);)r=n.find(1,!0).line,t=null;var i=ii(r),o=i?i[0].level%2?ro(r):io(r):r.text.length;return Fo(null==t?ti(r):t,o)}function ao(e,t){var n=oo(e,t.line),r=Zr(e.doc,n.line),i=ii(r);if(!i||0==i[0].level){var o=Math.max(0,r.text.search(/\S/)),l=t.line==n.line&&t.ch<=o&&t.ch;return Fo(n.line,l?0:o)}return n}function so(e,t,n){var r=e[0].level;return t==r?!0:n==r?!1:n>t}function co(e,t){oa=null;for(var n,r=0;r<e.length;++r){var i=e[r];if(i.from<t&&i.to>t)return r;if(i.from==t||i.to==t){if(null!=n)return so(e,i.level,e[n].level)?(i.from!=i.to&&(oa=n),r):(i.from!=i.to&&(oa=r),n);n=r}}return n}function uo(e,t,n,r){if(!r)return t+n;do t+=n;while(t>0&&ji(e.text.charAt(t)));return t}function ho(e,t,n,r){var i=ii(e);if(!i)return fo(e,t,n,r);for(var o=co(i,t),l=i[o],a=uo(e,t,l.level%2?-n:n,r);;){if(a>l.from&&a<l.to)return a;if(a==l.from||a==l.to)return co(i,a)==o?a:(l=i[o+=n],n>0==l.level%2?l.to:l.from);if(l=i[o+=n],!l)return null;a=n>0==l.level%2?uo(e,l.to,-1,r):uo(e,l.from,1,r)}}function fo(e,t,n,r){var i=t+n;if(r)for(;i>0&&ji(e.text.charAt(i));)i+=n;return 0>i||i>e.text.length?null:i}var po=navigator.userAgent,mo=navigator.platform,go=/gecko\/\d/i.test(po),vo=/MSIE \d/.test(po),yo=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(po),xo=vo||yo,bo=xo&&(vo?document.documentMode||6:yo[1]),wo=/WebKit\//.test(po),ko=wo&&/Qt\/\d+\.\d+/.test(po),Co=/Chrome\//.test(po),So=/Opera\//.test(po),Lo=/Apple Computer/.test(navigator.vendor),To=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(po),Mo=/PhantomJS/.test(po),No=/AppleWebKit/.test(po)&&/Mobile\/\w+/.test(po),Ao=No||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(po),Oo=No||/Mac/.test(mo),Ho=/win/i.test(mo),Wo=So&&po.match(/Version\/(\d*\.\d*)/);Wo&&(Wo=Number(Wo[1])),Wo&&Wo>=15&&(So=!1,wo=!0);var Io=Oo&&(ko||So&&(null==Wo||12.11>Wo)),Eo=go||xo&&bo>=9,Do=!1,Po=!1;m.prototype=Fi({update:function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=e.scrollWidth-e.clientWidth+o+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},setScrollLeft:function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz)},setScrollTop:function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert)},zeroWidthHack:function(){var e=Oo&&!To?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new Oi,this.disableVert=new Oi},enableZeroWidthBar:function(e,t){function n(){var r=e.getBoundingClientRect(),i=document.elementFromPoint(r.left+1,r.bottom-1);i!=e?e.style.pointerEvents="none":t.set(1e3,n)}e.style.pointerEvents="auto",t.set(1e3,n)},clear:function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)}},m.prototype),g.prototype=Fi({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},g.prototype),e.scrollbarModel={"native":m,"null":g},L.prototype.signal=function(e,t){Ni(e,t)&&this.events.push(arguments)},L.prototype.finish=function(){for(var e=0;e<this.events.length;e++)Wl.apply(null,this.events[e])};var Fo=e.Pos=function(e,t){return this instanceof Fo?(this.line=e,void(this.ch=t)):new Fo(e,t)},zo=e.cmpPos=function(e,t){return e.line-t.line||e.ch-t.ch},Ro=null;ne.prototype=Fi({init:function(e){function t(e){if(!Ti(r,e)){if(r.somethingSelected())Ro=r.getSelections(),n.inaccurateSelection&&(n.prevInput="",n.inaccurateSelection=!1,o.value=Ro.join("\n"),_l(o));else{if(!r.options.lineWiseCopyCut)return;var t=ee(r);Ro=t.text,"cut"==e.type?r.setSelections(t.ranges,null,Pl):(n.prevInput="",o.value=t.text.join("\n"),_l(o))}"cut"==e.type&&(r.state.cutIncoming=!0)}}var n=this,r=this.cm,i=this.wrapper=re(),o=this.textarea=i.firstChild;e.wrapper.insertBefore(i,e.wrapper.firstChild),No&&(o.style.width="0px"),Al(o,"input",function(){xo&&bo>=9&&n.hasSelection&&(n.hasSelection=null),n.poll()}),Al(o,"paste",function(e){Ti(r,e)||Q(e,r)||(r.state.pasteIncoming=!0,n.fastPoll())}),Al(o,"cut",t),Al(o,"copy",t),Al(e.scroller,"paste",function(t){Gt(e,t)||Ti(r,t)||(r.state.pasteIncoming=!0,n.focus())}),Al(e.lineSpace,"selectstart",function(t){Gt(e,t)||Tl(t)}),Al(o,"compositionstart",function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}}),Al(o,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},prepareSelection:function(){var e=this.cm,t=e.display,n=e.doc,r=De(e);if(e.options.moveInputWithCursor){var i=ft(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return r},showSelection:function(e){var t=this.cm,n=t.display;Ui(n.cursorDiv,e.cursors),Ui(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},reset:function(e){if(!this.contextMenuPending){var t,n,r=this.cm,i=r.doc;if(r.somethingSelected()){this.prevInput="";var o=i.sel.primary();t=na&&(o.to().line-o.from().line>100||(n=r.getSelection()).length>1e3);var l=t?"-":n||r.getSelection();this.textarea.value=l,r.state.focused&&_l(this.textarea),xo&&bo>=9&&(this.hasSelection=l)}else e||(this.prevInput=this.textarea.value="",xo&&bo>=9&&(this.hasSelection=null));this.inaccurateSelection=t}},getField:function(){return this.textarea},supportsTouch:function(){return!1},focus:function(){if("nocursor"!=this.cm.options.readOnly&&(!Ao||Gi()!=this.textarea))try{this.textarea.focus()}catch(e){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var e=this;e.pollingFast||e.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},fastPoll:function(){function e(){var r=n.poll();r||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))}var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,e)},poll:function(){var e=this.cm,t=this.textarea,n=this.prevInput;if(this.contextMenuPending||!e.state.focused||ta(t)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=t.value;if(r==n&&!e.somethingSelected())return!1;if(xo&&bo>=9&&this.hasSelection===r||Oo&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var i=r.charCodeAt(0);if(8203!=i||n||(n="​"),8666==i)return this.reset(),this.cm.execCommand("undo")}for(var o=0,l=Math.min(n.length,r.length);l>o&&n.charCodeAt(o)==r.charCodeAt(o);)++o;var a=this;return At(e,function(){Z(e,r.slice(o),n.length-o,null,a.composing?"*compose":null),r.length>1e3||r.indexOf("\n")>-1?t.value=a.prevInput="":a.prevInput=r,a.composing&&(a.composing.range.clear(),a.composing.range=e.markText(a.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){xo&&bo>=9&&(this.hasSelection=null),this.fastPoll()},onContextMenu:function(e){function t(){if(null!=l.selectionStart){var e=i.somethingSelected(),t="​"+(e?l.value:"");l.value="⇚",l.value=t,r.prevInput=e?"":"​",l.selectionStart=1,l.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function n(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=d,l.style.cssText=u,xo&&9>bo&&o.scrollbars.setScrollTop(o.scroller.scrollTop=s),null!=l.selectionStart){(!xo||xo&&9>bo)&&t();var e=0,n=function(){o.selForContextMenu==i.doc.sel&&0==l.selectionStart&&l.selectionEnd>0&&"​"==r.prevInput?Ot(i,cl.selectAll)(i):e++<10?o.detectingSelectAll=setTimeout(n,500):o.input.reset()};o.detectingSelectAll=setTimeout(n,200)}}var r=this,i=r.cm,o=i.display,l=r.textarea,a=$t(i,e),s=o.scroller.scrollTop;if(a&&!So){var c=i.options.resetSelectionOnContextMenu;c&&-1==i.doc.sel.contains(a)&&Ot(i,Te)(i.doc,fe(a),Pl);var u=l.style.cssText,d=r.wrapper.style.cssText;r.wrapper.style.cssText="position: absolute";var h=r.wrapper.getBoundingClientRect();if(l.style.cssText="position: absolute; width: 30px; height: 30px; top: "+(e.clientY-h.top-5)+"px; left: "+(e.clientX-h.left-5)+"px; z-index: 1000; background: "+(xo?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",wo)var f=window.scrollY;if(o.input.focus(),wo&&window.scrollTo(null,f),o.input.reset(),i.somethingSelected()||(l.value=r.prevInput=" "),r.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),xo&&bo>=9&&t(),Eo){Nl(e);var p=function(){Hl(window,"mouseup",p),setTimeout(n,20)};Al(window,"mouseup",p)}else setTimeout(n,50)}},readOnlyChanged:function(e){e||this.reset()},setUneditable:Di,needsContentAttribute:!1},ne.prototype),ie.prototype=Fi({init:function(e){function t(e){if(!Ti(r,e)){if(r.somethingSelected())Ro=r.getSelections(),"cut"==e.type&&r.replaceSelection("",null,"cut");else{if(!r.options.lineWiseCopyCut)return;var t=ee(r);Ro=t.text,"cut"==e.type&&r.operation(function(){r.setSelections(t.ranges,0,Pl),r.replaceSelection("",null,"cut")})}if(e.clipboardData&&!No)e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/plain",Ro.join("\n"));else{var n=re(),i=n.firstChild;r.display.lineSpace.insertBefore(n,r.display.lineSpace.firstChild),i.value=Ro.join("\n");var o=document.activeElement;_l(i),setTimeout(function(){r.display.lineSpace.removeChild(n),o.focus()},50)}}}var n=this,r=n.cm,i=n.div=e.lineDiv;te(i),Al(i,"paste",function(e){Ti(r,e)||Q(e,r)}),Al(i,"compositionstart",function(e){var t=e.data;if(n.composing={sel:r.doc.sel,data:t,startData:t},t){var i=r.doc.sel.primary(),o=r.getLine(i.head.line),l=o.indexOf(t,Math.max(0,i.head.ch-t.length));l>-1&&l<=i.head.ch&&(n.composing.sel=fe(Fo(i.head.line,l),Fo(i.head.line,l+t.length)))}}),Al(i,"compositionupdate",function(e){n.composing.data=e.data}),Al(i,"compositionend",function(e){var t=n.composing;t&&(e.data==t.startData||/\u200b/.test(e.data)||(t.data=e.data),setTimeout(function(){t.handled||n.applyComposition(t),n.composing==t&&(n.composing=null)},50))}),Al(i,"touchstart",function(){n.forceCompositionEnd()}),Al(i,"input",function(){n.composing||!r.isReadOnly()&&n.pollContent()||At(n.cm,function(){Dt(r)})}),Al(i,"copy",t),Al(i,"cut",t)},prepareSelection:function(){var e=De(this.cm,!1);return e.focus=this.cm.state.focused,e},showSelection:function(e){e&&this.cm.display.view.length&&(e.focus&&this.showPrimarySelection(),this.showMultipleSelections(e))},showPrimarySelection:function(){var e=window.getSelection(),t=this.cm.doc.sel.primary(),n=ae(this.cm,e.anchorNode,e.anchorOffset),r=ae(this.cm,e.focusNode,e.focusOffset);if(!n||n.bad||!r||r.bad||0!=zo(X(n,r),t.from())||0!=zo(K(n,r),t.to())){var i=oe(this.cm,t.from()),o=oe(this.cm,t.to());if(i||o){var l=this.cm.display.view,a=e.rangeCount&&e.getRangeAt(0);if(i){if(!o){var s=l[l.length-1].measure,c=s.maps?s.maps[s.maps.length-1]:s.map;o={node:c[c.length-1],offset:c[c.length-2]-c[c.length-3]}}}else i={node:l[0].measure.map[2],offset:0};try{var u=ql(i.node,i.offset,o.offset,o.node)}catch(d){}u&&(!go&&this.cm.state.focused?(e.collapse(i.node,i.offset),u.collapsed||e.addRange(u)):(e.removeAllRanges(),e.addRange(u)),a&&null==e.anchorNode?e.addRange(a):go&&this.startGracePeriod()),this.rememberSelection()}}},startGracePeriod:function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){e.cm.curOp.selectionChanged=!0})},20)},showMultipleSelections:function(e){Ui(this.cm.display.cursorDiv,e.cursors),Ui(this.cm.display.selectionDiv,e.selection)},rememberSelection:function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},selectionInEditor:function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return Vl(this.div,t)},focus:function(){"nocursor"!=this.cm.options.readOnly&&this.div.focus()},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return!0},receivedFocus:function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():At(this.cm,function(){t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},selectionChanged:function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;this.rememberSelection();var n=ae(t,e.anchorNode,e.anchorOffset),r=ae(t,e.focusNode,e.focusOffset);n&&r&&At(t,function(){Te(t.doc,fe(n,r),Pl),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})}},pollContent:function(){var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),i=n.to();if(r.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o;if(r.line==t.viewFrom||0==(o=zt(e,r.line)))var l=ti(t.view[0].line),a=t.view[0].node;else var l=ti(t.view[o].line),a=t.view[o-1].node.nextSibling;var s=zt(e,i.line);if(s==t.view.length-1)var c=t.viewTo-1,u=t.lineDiv.lastChild;else var c=ti(t.view[s+1].line)-1,u=t.view[s+1].node.previousSibling;for(var d=e.doc.splitLines(ce(e,a,u,l,c)),h=Qr(e.doc,Fo(l,0),Fo(c,Zr(e.doc,c).text.length));d.length>1&&h.length>1;)if(Wi(d)==Wi(h))d.pop(),h.pop(),c--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),l++}for(var f=0,p=0,m=d[0],g=h[0],v=Math.min(m.length,g.length);v>f&&m.charCodeAt(f)==g.charCodeAt(f);)++f;for(var y=Wi(d),x=Wi(h),b=Math.min(y.length-(1==d.length?f:0),x.length-(1==h.length?f:0));b>p&&y.charCodeAt(y.length-p-1)==x.charCodeAt(x.length-p-1);)++p;d[d.length-1]=y.slice(0,y.length-p),d[0]=d[0].slice(f);var w=Fo(l,f),k=Fo(c,h.length?Wi(h).length-p:0);return d.length>1||d[0]||zo(w,k)?(Wn(e.doc,d,w,k,"+input"),!0):void 0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&!this.composing.handled&&(this.applyComposition(this.composing),this.composing.handled=!0,this.div.blur(),this.div.focus())},applyComposition:function(e){this.cm.isReadOnly()?Ot(this.cm,Dt)(this.cm):e.data&&e.data!=e.startData&&Ot(this.cm,Z)(this.cm,e.data,0,e.sel)},setUneditable:function(e){e.contentEditable="false"},onKeyPress:function(e){e.preventDefault(),this.cm.isReadOnly()||Ot(this.cm,Z)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0)},readOnlyChanged:function(e){this.div.contentEditable=String("nocursor"!=e)},onContextMenu:Di,resetPosition:Di,needsContentAttribute:!0},ie.prototype),e.inputStyles={textarea:ne,contenteditable:ie},ue.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(0!=zo(n.anchor,r.anchor)||0!=zo(n.head,r.head))return!1}return!0},deepCopy:function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new de(V(this.ranges[t].anchor),V(this.ranges[t].head));return new ue(e,this.primIndex)},somethingSelected:function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},contains:function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(zo(t,r.from())>=0&&zo(e,r.to())<=0)return n}return-1}},de.prototype={from:function(){return X(this.anchor,this.head)},to:function(){return K(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var Bo,jo,_o,qo={left:0,right:0,top:0,bottom:0},Uo=null,Go=0,$o=0,Vo=0,Ko=null;xo?Ko=-.53:go?Ko=15:Co?Ko=-.7:Lo&&(Ko=-1/3);var Xo=function(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}};e.wheelEventPixels=function(e){var t=Xo(e);return t.x*=Ko,t.y*=Ko,t};var Yo=new Oi,Zo=null,Qo=e.changeEnd=function(e){return e.text?Fo(e.from.line+e.text.length-1,Wi(e.text).length+(1==e.text.length?e.from.ch:0)):e.to};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var n=this.options,r=n[e];n[e]==t&&"mode"!=e||(n[e]=t,el.hasOwnProperty(e)&&Ot(this,el[e])(this,t,r))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Vn(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:Ht(function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error("Overlays may not be stateful.");this.state.overlays.push({mode:r,modeSpec:t,opaque:n&&n.opaque}),this.state.modeGen++,Dt(this)}),removeOverlay:Ht(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||"string"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void Dt(this)}}),indentLine:Ht(function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),ve(this.doc,e)&&Bn(this,e,t,n)}),indentSelection:Ht(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(Bn(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&zn(this));else{var o=i.from(),l=i.to(),a=Math.max(n,o.line);n=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var s=a;n>s;++s)Bn(this,s,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&c[r].from().ch>0&&ke(this.doc,r,new de(o,c[r].to()),Pl)}}}),getTokenAt:function(e,t){return Wr(this,e,t)},getLineTokens:function(e,t){return Wr(this,Fo(e),t,!0)},getTokenTypeAt:function(e){e=me(this.doc,e);var t,n=Dr(this,Zr(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var l=r+i>>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]<o)){t=n[2*l+2];break}r=l+1}}var a=t?t.indexOf("cm-overlay "):-1;return 0>a?t:0==a?null:t.slice(0,a-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!ll.hasOwnProperty(t))return n;var r=ll[t],i=this.getModeAt(e);if("string"==typeof i[t])r[i[t]]&&n.push(r[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var l=r[i[t][o]];l&&n.push(l)}else i.helperType&&r[i.helperType]?n.push(r[i.helperType]):r[i.name]&&n.push(r[i.name]);for(var o=0;o<r._global.length;o++){var a=r._global[o];a.pred(i,this)&&-1==Ii(n,a.val)&&n.push(a.val)}return n},getStateAfter:function(e,t){var n=this.doc;return e=pe(n,null==e?n.first+n.size-1:e),_e(this,e+1,t)},cursorCoords:function(e,t){var n,r=this.doc.sel.primary();return n=null==e?r.head:"object"==typeof e?me(this.doc,e):e?r.from():r.to(),ft(this,n,t||"page")},charCoords:function(e,t){return ht(this,me(this.doc,e),t||"page")},coordsChar:function(e,t){return e=dt(this,e,t||"page"),gt(this,e.left,e.top)},lineAtHeight:function(e,t){return e=dt(this,{top:e,left:0},t||"page").top,ni(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t){var n,r=!1;if("number"==typeof e){var i=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>i&&(e=i,r=!0),n=Zr(this.doc,e)}else n=e;return ut(this,n,{top:0,left:0},t||"page").top+(r?this.doc.height-ri(n):0)},defaultTextHeight:function(){return yt(this.display)},defaultCharWidth:function(){return xt(this.display)},setGutterMarker:Ht(function(e,t,n){return jn(this.doc,e,"gutter",function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&Bi(r)&&(e.gutterMarkers=null),!0})}),clearGutter:Ht(function(e){var t=this,n=t.doc,r=n.first;n.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&(n.gutterMarkers[e]=null,Pt(t,r,"gutter"),Bi(n.gutterMarkers)&&(n.gutterMarkers=null)),++r})}),lineInfo:function(e){if("number"==typeof e){if(!ve(this.doc,e))return null;var t=e;if(e=Zr(this.doc,e),!e)return null}else{var t=ti(e);if(null==t)return null}return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o=this.display;e=ft(this,me(this.doc,e));var l=e.bottom,a=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==r)l=e.top;else if("above"==r||"near"==r){var s=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>s)&&e.top>t.offsetHeight?l=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=s&&(l=e.bottom),a+t.offsetWidth>c&&(a=c-t.offsetWidth)}t.style.top=l+"px",t.style.left=t.style.right="","right"==i?(a=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?a=0:"middle"==i&&(a=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=a+"px"),n&&Dn(this,a,l,a+t.offsetWidth,l+t.offsetHeight)},triggerOnKeyDown:Ht(hn),triggerOnKeyPress:Ht(mn),triggerOnKeyUp:pn,execCommand:function(e){return cl.hasOwnProperty(e)?cl[e].call(null,this):void 0},triggerElectric:Ht(function(e){J(this,e)}),findPosH:function(e,t,n,r){var i=1;0>t&&(i=-1,t=-t);for(var o=0,l=me(this.doc,e);t>o&&(l=qn(this.doc,l,i,n,r),!l.hitSide);++o);return l},moveH:Ht(function(e,t){var n=this;n.extendSelectionsBy(function(r){return n.display.shift||n.doc.extend||r.empty()?qn(n.doc,r.head,e,t,n.options.rtlMoveVisually):0>e?r.from():r.to();
  17307. },zl)}),deleteH:Ht(function(e,t){var n=this.doc.sel,r=this.doc;n.somethingSelected()?r.replaceSelection("",null,"+delete"):_n(this,function(n){var i=qn(r,n.head,e,t,!1);return 0>e?{from:i,to:n.head}:{from:n.head,to:i}})}),findPosV:function(e,t,n,r){var i=1,o=r;0>t&&(i=-1,t=-t);for(var l=0,a=me(this.doc,e);t>l;++l){var s=ft(this,a,"div");if(null==o?o=s.left:s.left=o,a=Un(this,s,i,n),a.hitSide)break}return a},moveV:Ht(function(e,t){var n=this,r=this.doc,i=[],o=!n.display.shift&&!r.extend&&r.sel.somethingSelected();if(r.extendSelectionsBy(function(l){if(o)return 0>e?l.from():l.to();var a=ft(n,l.head,"div");null!=l.goalColumn&&(a.left=l.goalColumn),i.push(a.left);var s=Un(n,a,e,t);return"page"==t&&l==r.sel.primary()&&Fn(n,null,ht(n,s,"div").top-a.top),s},zl),i.length)for(var l=0;l<r.sel.ranges.length;l++)r.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=this.doc,n=Zr(t,e.line).text,r=e.ch,i=e.ch;if(n){var o=this.getHelper(e,"wordChars");(e.xRel<0||i==n.length)&&r?--r:++i;for(var l=n.charAt(r),a=Ri(l,o)?function(e){return Ri(e,o)}:/\s/.test(l)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!Ri(e)};r>0&&a(n.charAt(r-1));)--r;for(;i<n.length&&a(n.charAt(i));)++i}return new de(Fo(e.line,r),Fo(e.line,i))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?Zl(this.display.cursorDiv,"CodeMirror-overwrite"):Yl(this.display.cursorDiv,"CodeMirror-overwrite"),Wl(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==Gi()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Ht(function(e,t){null==e&&null==t||Rn(this),null!=e&&(this.curOp.scrollLeft=e),null!=t&&(this.curOp.scrollTop=t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-$e(this)-this.display.barHeight,width:e.scrollWidth-$e(this)-this.display.barWidth,clientHeight:Ke(this),clientWidth:Ve(this)}},scrollIntoView:Ht(function(e,t){if(null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:Fo(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line)Rn(this),this.curOp.scrollToPos=e;else{var n=Pn(this,Math.min(e.from.left,e.to.left),Math.min(e.from.top,e.to.top)-e.margin,Math.max(e.from.right,e.to.right),Math.max(e.from.bottom,e.to.bottom)+e.margin);this.scrollTo(n.scrollLeft,n.scrollTop)}}),setSize:Ht(function(e,t){function n(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e}var r=this;null!=e&&(r.display.wrapper.style.width=n(e)),null!=t&&(r.display.wrapper.style.height=n(t)),r.options.lineWrapping&&lt(this);var i=r.display.viewFrom;r.doc.iter(i,r.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Pt(r,i,"widget");break}++i}),r.curOp.forceUpdate=!0,Wl(r,"refresh",this)}),operation:function(e){return At(this,e)},refresh:Ht(function(){var e=this.display.cachedTextHeight;Dt(this),this.curOp.forceUpdate=!0,at(this),this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop),u(this),(null==e||Math.abs(e-yt(this.display))>.5)&&l(this),Wl(this,"refresh",this)}),swapDoc:Ht(function(e){var t=this.doc;return t.cm=null,Yr(this,e),at(this),this.display.input.reset(),this.scrollTo(e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Si(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ai(e);var Jo=e.defaults={},el=e.optionHandlers={},tl=e.Init={toString:function(){return"CodeMirror.Init"}};Gn("value","",function(e,t){e.setValue(t)},!0),Gn("mode",null,function(e,t){e.doc.modeOption=t,n(e)},!0),Gn("indentUnit",2,n,!0),Gn("indentWithTabs",!1),Gn("smartIndent",!0),Gn("tabSize",4,function(e){r(e),at(e),Dt(e)},!0),Gn("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,n.push(Fo(r,o))}r++});for(var i=n.length-1;i>=0;i--)Wn(e.doc,t,n[i],Fo(n[i].line,n[i].ch+t.length))}}),Gn("specialChars",/[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,n,r){t.state.specialChars=new RegExp(n.source+(n.test(" ")?"":"| "),"g"),r!=e.Init&&t.refresh()}),Gn("specialCharPlaceholder",Rr,function(e){e.refresh()},!0),Gn("electricChars",!0),Gn("inputStyle",Ao?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),Gn("rtlMoveVisually",!Ho),Gn("wholeLineUpdateBefore",!0),Gn("theme","default",function(e){a(e),s(e)},!0),Gn("keyMap","default",function(t,n,r){var i=Vn(n),o=r!=e.Init&&Vn(r);o&&o.detach&&o.detach(t,i),i.attach&&i.attach(t,o||null)}),Gn("extraKeys",null),Gn("lineWrapping",!1,i,!0),Gn("gutters",[],function(e){f(e.options),s(e)},!0),Gn("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?S(e.display)+"px":"0",e.refresh()},!0),Gn("coverGutterNextToScrollbar",!1,function(e){y(e)},!0),Gn("scrollbarStyle","native",function(e){v(e),y(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),Gn("lineNumbers",!1,function(e){f(e.options),s(e)},!0),Gn("firstLineNumber",1,s,!0),Gn("lineNumberFormatter",function(e){return e},s,!0),Gn("showCursorWhenSelecting",!1,Ee,!0),Gn("resetSelectionOnContextMenu",!0),Gn("lineWiseCopyCut",!0),Gn("readOnly",!1,function(e,t){"nocursor"==t?(yn(e),e.display.input.blur(),e.display.disabled=!0):e.display.disabled=!1,e.display.input.readOnlyChanged(t)}),Gn("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),Gn("dragDrop",!0,qt),Gn("allowDropFileTypes",null),Gn("cursorBlinkRate",530),Gn("cursorScrollMargin",0),Gn("cursorHeight",1,Ee,!0),Gn("singleCursorHeightPerLine",!0,Ee,!0),Gn("workTime",100),Gn("workDelay",100),Gn("flattenSpans",!0,r,!0),Gn("addModeClass",!1,r,!0),Gn("pollInterval",100),Gn("undoDepth",200,function(e,t){e.doc.history.undoDepth=t}),Gn("historyEventDelay",1250),Gn("viewportMargin",10,function(e){e.refresh()},!0),Gn("maxHighlightLength",1e4,r,!0),Gn("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),Gn("tabindex",null,function(e,t){e.display.input.getField().tabIndex=t||""}),Gn("autofocus",null);var nl=e.modes={},rl=e.mimeModes={};e.defineMode=function(t,n){e.defaults.mode||"null"==t||(e.defaults.mode=t),arguments.length>2&&(n.dependencies=Array.prototype.slice.call(arguments,2)),nl[t]=n},e.defineMIME=function(e,t){rl[e]=t},e.resolveMode=function(t){if("string"==typeof t&&rl.hasOwnProperty(t))t=rl[t];else if(t&&"string"==typeof t.name&&rl.hasOwnProperty(t.name)){var n=rl[t.name];"string"==typeof n&&(n={name:n}),t=Pi(n,t),t.name=n.name}else if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return e.resolveMode("application/xml");return"string"==typeof t?{name:t}:t||{name:"null"}},e.getMode=function(t,n){var n=e.resolveMode(n),r=nl[n.name];if(!r)return e.getMode(t,"text/plain");var i=r(t,n);if(il.hasOwnProperty(n.name)){var o=il[n.name];for(var l in o)o.hasOwnProperty(l)&&(i.hasOwnProperty(l)&&(i["_"+l]=i[l]),i[l]=o[l])}if(i.name=n.name,n.helperType&&(i.helperType=n.helperType),n.modeProps)for(var l in n.modeProps)i[l]=n.modeProps[l];return i},e.defineMode("null",function(){return{token:function(e){e.skipToEnd()}}}),e.defineMIME("text/plain","null");var il=e.modeExtensions={};e.extendMode=function(e,t){var n=il.hasOwnProperty(e)?il[e]:il[e]={};Fi(t,n)},e.defineExtension=function(t,n){e.prototype[t]=n},e.defineDocExtension=function(e,t){Cl.prototype[e]=t},e.defineOption=Gn;var ol=[];e.defineInitHook=function(e){ol.push(e)};var ll=e.helpers={};e.registerHelper=function(t,n,r){ll.hasOwnProperty(t)||(ll[t]=e[t]={_global:[]}),ll[t][n]=r},e.registerGlobalHelper=function(t,n,r,i){e.registerHelper(t,n,i),ll[t]._global.push({pred:r,val:i})};var al=e.copyState=function(e,t){if(t===!0)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n},sl=e.startState=function(e,t,n){return e.startState?e.startState(t,n):!0};e.innerMode=function(e,t){for(;e.innerMode;){var n=e.innerMode(t);if(!n||n.mode==e)break;t=n.state,e=n.mode}return n||{mode:e,state:t}};var cl=e.commands={selectAll:function(e){e.setSelection(Fo(e.firstLine(),0),Fo(e.lastLine()),Pl)},singleSelection:function(e){e.setSelection(e.getCursor("anchor"),e.getCursor("head"),Pl)},killLine:function(e){_n(e,function(t){if(t.empty()){var n=Zr(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:Fo(t.head.line+1,0)}:{from:t.head,to:Fo(t.head.line,n)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){_n(e,function(t){return{from:Fo(t.from().line,0),to:me(e.doc,Fo(t.to().line+1,0))}})},delLineLeft:function(e){_n(e,function(e){return{from:Fo(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){_n(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return{from:r,to:t.from()}})},delWrappedLineRight:function(e){_n(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div");return{from:t.from(),to:r}})},undo:function(e){e.undo()},redo:function(e){e.redo()},undoSelection:function(e){e.undoSelection()},redoSelection:function(e){e.redoSelection()},goDocStart:function(e){e.extendSelection(Fo(e.firstLine(),0))},goDocEnd:function(e){e.extendSelection(Fo(e.lastLine()))},goLineStart:function(e){e.extendSelectionsBy(function(t){return oo(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){e.extendSelectionsBy(function(t){return ao(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){e.extendSelectionsBy(function(t){return lo(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div")},zl)},goLineLeft:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:n},"div")},zl)},goLineLeftSmart:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return r.ch<e.getLine(r.line).search(/\S/)?ao(e,t.head):r},zl)},goLineUp:function(e){e.moveV(-1,"line")},goLineDown:function(e){e.moveV(1,"line")},goPageUp:function(e){e.moveV(-1,"page")},goPageDown:function(e){e.moveV(1,"page")},goCharLeft:function(e){e.moveH(-1,"char")},goCharRight:function(e){e.moveH(1,"char")},goColumnLeft:function(e){e.moveH(-1,"column")},goColumnRight:function(e){e.moveH(1,"column")},goWordLeft:function(e){e.moveH(-1,"word")},goGroupRight:function(e){e.moveH(1,"group")},goGroupLeft:function(e){e.moveH(-1,"group")},goWordRight:function(e){e.moveH(1,"word")},delCharBefore:function(e){e.deleteH(-1,"char")},delCharAfter:function(e){e.deleteH(1,"char")},delWordBefore:function(e){e.deleteH(-1,"word")},delWordAfter:function(e){e.deleteH(1,"word")},delGroupBefore:function(e){e.deleteH(-1,"group")},delGroupAfter:function(e){e.deleteH(1,"group")},indentAuto:function(e){e.indentSelection("smart")},indentMore:function(e){e.indentSelection("add")},indentLess:function(e){e.indentSelection("subtract")},insertTab:function(e){e.replaceSelection(" ")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),l=Rl(e.getLine(o.line),o.ch,r);t.push(new Array(r-l%r+1).join(" "))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){At(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++){var i=t[r].head,o=Zr(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new Fo(i.line,i.ch-1)),i.ch>0)i=new Fo(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),Fo(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=Zr(e.doc,i.line-1).text;l&&e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),Fo(i.line-1,l.length-1),Fo(i.line,1),"+transpose")}n.push(new de(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){At(e,function(){for(var t=e.listSelections().length,n=0;t>n;n++){var r=e.listSelections()[n];e.replaceRange(e.doc.lineSeparator(),r.anchor,r.head,"+input"),e.indentLine(r.from().line+1,null,!0)}zn(e)})},toggleOverwrite:function(e){e.toggleOverwrite()}},ul=e.keyMap={};ul.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},ul.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},ul.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},ul.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},ul["default"]=Oo?ul.macDefault:ul.pcDefault,e.normalizeKeyMap=function(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==r){delete e[n];continue}for(var i=Ei(n.split(" "),$n),o=0;o<i.length;o++){var l,a;o==i.length-1?(a=i.join(" "),l=r):(a=i.slice(0,o+1).join(" "),l="...");var s=t[a];if(s){if(s!=l)throw new Error("Inconsistent bindings for "+a)}else t[a]=l}delete e[n]}for(var c in t)e[c]=t[c];return e};var dl=e.lookupKey=function(e,t,n,r){t=Vn(t);var i=t.call?t.call(e,r):t[e];if(i===!1)return"nothing";if("..."===i)return"multi";if(null!=i&&n(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return dl(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var l=dl(e,t.fallthrough[o],n,r);if(l)return l}}},hl=e.isModifierKey=function(e){var t="string"==typeof e?e:ia[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t},fl=e.keyName=function(e,t){if(So&&34==e.keyCode&&e["char"])return!1;var n=ia[e.keyCode],r=n;return null==r||e.altGraphKey?!1:(e.altKey&&"Alt"!=n&&(r="Alt-"+r),(Io?e.metaKey:e.ctrlKey)&&"Ctrl"!=n&&(r="Ctrl-"+r),(Io?e.ctrlKey:e.metaKey)&&"Cmd"!=n&&(r="Cmd-"+r),!t&&e.shiftKey&&"Shift"!=n&&(r="Shift-"+r),r)};e.fromTextArea=function(t,n){function r(){t.value=c.getValue()}if(n=n?Fi(n):{},n.value=t.value,!n.tabindex&&t.tabIndex&&(n.tabindex=t.tabIndex),!n.placeholder&&t.placeholder&&(n.placeholder=t.placeholder),null==n.autofocus){var i=Gi();n.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}if(t.form&&(Al(t.form,"submit",r),!n.leaveSubmitMethodAlone)){var o=t.form,l=o.submit;try{var a=o.submit=function(){r(),o.submit=l,o.submit(),o.submit=a}}catch(s){}}n.finishInit=function(e){e.save=r,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,r(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(Hl(t.form,"submit",r),"function"==typeof t.form.submit&&(t.form.submit=l))}},t.style.display="none";var c=e(function(e){t.parentNode.insertBefore(e,t.nextSibling)},n);return c};var pl=e.StringStream=function(e,t){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};pl.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(e){var t=this.string.charAt(this.pos);if("string"==typeof e)var n=t==e;else var n=t&&(e.test?e.test(t):e(t));return n?(++this.pos,t):void 0},eatWhile:function(e){for(var t=this.pos;this.eat(e););return this.pos>t},eatSpace:function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);return t>-1?(this.pos=t,!0):void 0},backUp:function(e){this.pos-=e},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Rl(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?Rl(this.string,this.lineStart,this.tabSize):0)},indentation:function(){return Rl(this.string,null,this.tabSize)-(this.lineStart?Rl(this.string,this.lineStart,this.tabSize):0)},match:function(e,t,n){if("string"!=typeof e){var r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&t!==!1&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e},o=this.string.substr(this.pos,e.length);return i(o)==i(e)?(t!==!1&&(this.pos+=e.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}};var ml=0,gl=e.TextMarker=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++ml};Ai(gl),gl.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&bt(e),Ni(this,"clear")){var n=this.find();n&&Si(this,"clear",n.from,n.to)}for(var r=null,i=null,o=0;o<this.lines.length;++o){var l=this.lines[o],a=er(l.markedSpans,this);e&&!this.collapsed?Pt(e,ti(l),"text"):e&&(null!=a.to&&(i=ti(l)),null!=a.from&&(r=ti(l))),l.markedSpans=tr(l.markedSpans,a),null==a.from&&this.collapsed&&!kr(this.doc,l)&&e&&ei(l,yt(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var o=0;o<this.lines.length;++o){var s=yr(this.lines[o]),c=d(s);c>e.display.maxLineLength&&(e.display.maxLine=s,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&Dt(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Ae(e.doc)),e&&Si(e,"markerCleared",e,this),t&&kt(e),this.parent&&this.parent.clear()}},gl.prototype.find=function(e,t){null==e&&"bookmark"==this.type&&(e=1);for(var n,r,i=0;i<this.lines.length;++i){var o=this.lines[i],l=er(o.markedSpans,this);if(null!=l.from&&(n=Fo(t?o:ti(o),l.from),-1==e))return n;if(null!=l.to&&(r=Fo(t?o:ti(o),l.to),1==e))return r}return n&&{from:n,to:r}},gl.prototype.changed=function(){var e=this.find(-1,!0),t=this,n=this.doc.cm;e&&n&&At(n,function(){var r=e.line,i=ti(e.line),o=Je(n,i);if(o&&(ot(o),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!kr(t.doc,r)&&null!=t.height){var l=t.height;t.height=null;var a=Lr(t)-l;a&&ei(r,r.height+a)}})},gl.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=Ii(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},gl.prototype.detachLine=function(e){if(this.lines.splice(Ii(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}};var ml=0,vl=e.SharedTextMarker=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};Ai(vl),vl.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Si(this,"clear")}},vl.prototype.find=function(e,t){return this.primary.find(e,t)};var yl=e.LineWidget=function(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t};Ai(yl),yl.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=ti(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=Lr(this);ei(n,Math.max(0,n.height-o)),e&&At(e,function(){Sr(e,n,-o),Pt(e,r,"widget")})}},yl.prototype.changed=function(){var e=this.height,t=this.doc.cm,n=this.line;this.height=null;var r=Lr(this)-e;r&&(ei(n,n.height+r),t&&At(t,function(){t.curOp.forceUpdate=!0,Sr(t,n,r)}))};var xl=e.Line=function(e,t,n){this.text=e,ur(this,t),this.height=n?n(this):1};Ai(xl),xl.prototype.lineNo=function(){return ti(this)};var bl={},wl={};Vr.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,r=e+t;r>n;++n){var i=this.lines[n];this.height-=i.height,Nr(i),Si(i,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;r>e;++e)if(n(this.lines[e]))return!0}},Kr.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var r=this.children[n],i=r.chunkSize();if(i>e){var o=Math.min(t,i-e),l=r.height;if(r.removeInner(e,o),this.height-=l-r.height,i==o&&(this.children.splice(n--,1),r.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof Vr))){var a=[];this.collapse(a),this.children=[new Vr(a)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(o>=e){if(i.insertInner(e,t,n),i.lines&&i.lines.length>50){for(;i.lines.length>50;){var l=i.lines.splice(i.lines.length-25,25),a=new Vr(l);i.height-=a.height,this.children.splice(r+1,0,a),a.parent=this}this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new Kr(t);if(e.parent){e.size-=n.size,e.height-=n.height;var r=Ii(e.parent.children,e);e.parent.children.splice(r+1,0,n)}else{var i=new Kr(e.children);i.parent=e,e.children=[i,n],e=i}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(o>e){var l=Math.min(t,o-e);if(i.iterN(e,l,n))return!0;if(0==(t-=l))break;e=0}else e-=o}}};var kl=0,Cl=e.Doc=function(e,t,n,r){if(!(this instanceof Cl))return new Cl(e,t,n,r);null==n&&(n=0),Kr.call(this,[new Vr([new xl("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=n;var i=Fo(n,0);this.sel=fe(i),this.history=new oi(null),this.id=++kl,this.modeOption=t,this.lineSep=r,this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),$r(this,{from:i,to:i,text:e}),Te(this,fe(i),Pl)};Cl.prototype=Pi(Kr.prototype,{constructor:Cl,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=Jr(this,this.first,this.first+this.size);return e===!1?t:t.join(e||this.lineSeparator())},setValue:Wt(function(e){var t=Fo(this.first,0),n=this.first+this.size-1;Tn(this,{from:t,to:Fo(n,Zr(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),Te(this,fe(t))}),replaceRange:function(e,t,n,r){t=me(this,t),n=n?me(this,n):t,Wn(this,e,t,n,r)},getRange:function(e,t,n){var r=Qr(this,me(this,e),me(this,t));return n===!1?r:r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){return ve(this,e)?Zr(this,e):void 0},getLineNumber:function(e){return ti(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=Zr(this,e)),yr(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return me(this,e)},getCursor:function(e){var t,n=this.sel.primary();return t=null==e||"head"==e?n.head:"anchor"==e?n.anchor:"end"==e||"to"==e||e===!1?n.to():n.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Wt(function(e,t,n){Ce(this,me(this,"number"==typeof e?Fo(e,t||0):e),null,n)}),setSelection:Wt(function(e,t,n){Ce(this,me(this,e),me(this,t||e),n)}),extendSelection:Wt(function(e,t,n){be(this,me(this,e),t&&me(this,t),n)}),extendSelections:Wt(function(e,t){we(this,ye(this,e),t)}),extendSelectionsBy:Wt(function(e,t){var n=Ei(this.sel.ranges,e);we(this,ye(this,n),t)}),setSelections:Wt(function(e,t,n){if(e.length){for(var r=0,i=[];r<e.length;r++)i[r]=new de(me(this,e[r].anchor),me(this,e[r].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Te(this,he(i,t),n)}}),addSelection:Wt(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new de(me(this,e),me(this,t||e))),Te(this,he(r,r.length-1),n)}),getSelection:function(e){for(var t,n=this.sel.ranges,r=0;r<n.length;r++){var i=Qr(this,n[r].from(),n[r].to());t=t?t.concat(i):i}return e===!1?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=Qr(this,n[r].from(),n[r].to());e!==!1&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||"+input")},replaceSelections:Wt(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];r[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:n}}for(var a=t&&"end"!=t&&Sn(this,r,t),o=r.length-1;o>=0;o--)Tn(this,r[o]);a?Le(this,a):this.cm&&zn(this.cm)}),undo:Wt(function(){Nn(this,"undo")}),redo:Wt(function(){Nn(this,"redo")}),undoSelection:Wt(function(){Nn(this,"undo",!0)}),redoSelection:Wt(function(){Nn(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var r=0;r<e.undone.length;r++)e.undone[r].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){this.history=new oi(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:gi(this.history.done),undone:gi(this.history.undone)}},setHistory:function(e){var t=this.history=new oi(this.history.maxGeneration);t.done=gi(e.done.slice(0),null,!0),t.undone=gi(e.undone.slice(0),null,!0)},addLineClass:Wt(function(e,t,n){return jn(this,e,"gutter"==t?"gutter":"class",function(e){var r="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass";if(e[r]){if($i(n).test(e[r]))return!1;e[r]+=" "+n}else e[r]=n;return!0})}),removeLineClass:Wt(function(e,t,n){return jn(this,e,"gutter"==t?"gutter":"class",function(e){var r="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass",i=e[r];if(!i)return!1;if(null==n)e[r]=null;else{var o=i.match($i(n));if(!o)return!1;var l=o.index+o[0].length;e[r]=i.slice(0,o.index)+(o.index&&l!=i.length?" ":"")+i.slice(l)||null}return!0})}),addLineWidget:Wt(function(e,t,n){return Tr(this,e,t,n)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return Kn(this,me(this,e),me(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=me(this,e),Kn(this,e,e,n,"bookmark")},findMarksAt:function(e){e=me(this,e);var t=[],n=Zr(this,e.line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=me(this,e),t=me(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var a=0;a<l.length;a++){var s=l[a];null!=s.to&&i==e.line&&e.ch>s.to||null==s.from&&i!=e.line||null!=s.from&&i==t.line&&s.from>t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;r<n.length;++r)null!=n[r].from&&e.push(n[r].marker)}),e},posFromIndex:function(e){var t,n=this.first;return this.iter(function(r){var i=r.text.length+1;return i>e?(t=e,!0):(e-=i,void++n)}),me(this,Fo(n,t))},indexFromPos:function(e){e=me(this,e);var t=e.ch;return e.line<this.first||e.ch<0?0:(this.iter(this.first,e.line,function(e){t+=e.text.length+1}),t)},copy:function(e){var t=new Cl(Jr(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new Cl(Jr(this,t,n),e.mode||this.modeOption,t,this.lineSep);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],Zn(r,Yn(this)),r},unlinkDoc:function(t){if(t instanceof e&&(t=t.doc),this.linked)for(var n=0;n<this.linked.length;++n){var r=this.linked[n];if(r.doc==t){this.linked.splice(n,1),t.unlinkDoc(this),Qn(Yn(this));break}}if(t.history==this.history){var i=[t.id];Xr(t,function(e){i.push(e.id)},!0),t.history=new oi(null),t.history.done=gi(this.history.done,i),t.history.undone=gi(this.history.undone,i)}},iterLinkedDocs:function(e){Xr(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):ea(e)},lineSeparator:function(){return this.lineSep||"\n"}}),Cl.prototype.eachLine=Cl.prototype.iter;var Sl="iter insert remove copy getEditor constructor".split(" ");for(var Ll in Cl.prototype)Cl.prototype.hasOwnProperty(Ll)&&Ii(Sl,Ll)<0&&(e.prototype[Ll]=function(e){return function(){return e.apply(this.doc,arguments)}}(Cl.prototype[Ll]));Ai(Cl);var Tl=e.e_preventDefault=function(e){
  17308. e.preventDefault?e.preventDefault():e.returnValue=!1},Ml=e.e_stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},Nl=e.e_stop=function(e){Tl(e),Ml(e)},Al=e.on=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent("on"+t,n);else{var r=e._handlers||(e._handlers={}),i=r[t]||(r[t]=[]);i.push(n)}},Ol=[],Hl=e.off=function(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent("on"+t,n);else for(var r=Ci(e,t,!1),i=0;i<r.length;++i)if(r[i]==n){r.splice(i,1);break}},Wl=e.signal=function(e,t){var n=Ci(e,t,!0);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)},Il=null,El=30,Dl=e.Pass={toString:function(){return"CodeMirror.Pass"}},Pl={scroll:!1},Fl={origin:"*mouse"},zl={origin:"+move"};Oi.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var Rl=e.countColumn=function(e,t,n,r,i){null==t&&(t=e.search(/[^\s\u00a0]/),-1==t&&(t=e.length));for(var o=r||0,l=i||0;;){var a=e.indexOf(" ",o);if(0>a||a>=t)return l+(t-o);l+=a-o,l+=n-l%n,o=a+1}},Bl=e.findColumn=function(e,t,n){for(var r=0,i=0;;){var o=e.indexOf(" ",r);-1==o&&(o=e.length);var l=o-r;if(o==e.length||i+l>=t)return r+Math.min(l,t-i);if(i+=o-r,i+=n-i%n,r=o+1,i>=t)return r}},jl=[""],_l=function(e){e.select()};No?_l=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:xo&&(_l=function(e){try{e.select()}catch(t){}});var ql,Ul=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Gl=e.isWordChar=function(e){return/\w/.test(e)||e>"€"&&(e.toUpperCase()!=e.toLowerCase()||Ul.test(e))},$l=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;ql=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(i){return r}return r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",t),r};var Vl=e.contains=function(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do if(11==t.nodeType&&(t=t.host),t==e)return!0;while(t=t.parentNode)};xo&&11>bo&&(Gi=function(){try{return document.activeElement}catch(e){return document.body}});var Kl,Xl,Yl=e.rmClass=function(e,t){var n=e.className,r=$i(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}},Zl=e.addClass=function(e,t){var n=e.className;$i(t).test(n)||(e.className+=(n?" ":"")+t)},Ql=!1,Jl=function(){if(xo&&9>bo)return!1;var e=_i("div");return"draggable"in e||"dragDrop"in e}(),ea=e.splitLines=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;r>=t;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(n.push(o.slice(0,l)),t+=l+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},ta=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(t){return!1}}:function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return t&&t.parentElement()==e?0!=t.compareEndPoints("StartToEnd",t):!1},na=function(){var e=_i("div");return"oncopy"in e?!0:(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),ra=null,ia=e.keyNames={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};!function(){for(var e=0;10>e;e++)ia[e+48]=ia[e+96]=String(e);for(var e=65;90>=e;e++)ia[e]=String.fromCharCode(e);for(var e=1;12>=e;e++)ia[e+111]=ia[e+63235]="F"+e}();var oa,la=function(){function e(e){return 247>=e?n.charAt(e):e>=1424&&1524>=e?"R":e>=1536&&1773>=e?r.charAt(e-1536):e>=1774&&2220>=e?"r":e>=8192&&8203>=e?"w":8204==e?"b":"L"}function t(e,t,n){this.level=e,this.from=t,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",r="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,l=/[LRr]/,a=/[Lb1n]/,s=/[1n]/,c="L";return function(n){if(!i.test(n))return!1;for(var r,u=n.length,d=[],h=0;u>h;++h)d.push(r=e(n.charCodeAt(h)));for(var h=0,f=c;u>h;++h){var r=d[h];"m"==r?d[h]=f:f=r}for(var h=0,p=c;u>h;++h){var r=d[h];"1"==r&&"r"==p?d[h]="n":l.test(r)&&(p=r,"r"==r&&(d[h]="R"))}for(var h=1,f=d[0];u-1>h;++h){var r=d[h];"+"==r&&"1"==f&&"1"==d[h+1]?d[h]="1":","!=r||f!=d[h+1]||"1"!=f&&"n"!=f||(d[h]=f),f=r}for(var h=0;u>h;++h){var r=d[h];if(","==r)d[h]="N";else if("%"==r){for(var m=h+1;u>m&&"%"==d[m];++m);for(var g=h&&"!"==d[h-1]||u>m&&"1"==d[m]?"1":"N",v=h;m>v;++v)d[v]=g;h=m-1}}for(var h=0,p=c;u>h;++h){var r=d[h];"L"==p&&"1"==r?d[h]="L":l.test(r)&&(p=r)}for(var h=0;u>h;++h)if(o.test(d[h])){for(var m=h+1;u>m&&o.test(d[m]);++m);for(var y="L"==(h?d[h-1]:c),x="L"==(u>m?d[m]:c),g=y||x?"L":"R",v=h;m>v;++v)d[v]=g;h=m-1}for(var b,w=[],h=0;u>h;)if(a.test(d[h])){var k=h;for(++h;u>h&&a.test(d[h]);++h);w.push(new t(0,k,h))}else{var C=h,S=w.length;for(++h;u>h&&"L"!=d[h];++h);for(var v=C;h>v;)if(s.test(d[v])){v>C&&w.splice(S,0,new t(1,C,v));var L=v;for(++v;h>v&&s.test(d[v]);++v);w.splice(S,0,new t(2,L,v)),C=v}else++v;h>C&&w.splice(S,0,new t(1,C,h))}return 1==w[0].level&&(b=n.match(/^\s+/))&&(w[0].from=b[0].length,w.unshift(new t(0,0,b[0].length))),1==Wi(w).level&&(b=n.match(/\s+$/))&&(Wi(w).to-=b[0].length,w.push(new t(0,u-b[0].length,u))),2==w[0].level&&w.unshift(new t(1,w[0].to,w[0].to)),w[0].level!=Wi(w).level&&w.push(new t(w[0].level,u,u)),w}}();return e.version="5.12.1",e})},{}],8:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror"),t("../markdown/markdown"),t("../../addon/mode/overlay")):"function"==typeof e&&e.amd?e(["../../lib/codemirror","../markdown/markdown","../../addon/mode/overlay"],i):i(CodeMirror)}(function(e){"use strict";var t=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",function(n,r){function i(e){return e.code=!1,null}var o=0,l={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var i=e.pos;e.eatWhile("`");var l=1+e.pos-i;return n.code?l===o&&(n.code=!1):(o=l,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,r.gitHubSpice!==!1)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:i},a={underscoresBreakWords:!1,taskLists:!0,fencedCodeBlocks:"```",strikethrough:!0};for(var s in r)a[s]=r[s];return a.name="markdown",e.overlayMode(e.getMode(n,a),l)},"markdown"),e.defineMIME("text/x-gfm","gfm")})},{"../../addon/mode/overlay":6,"../../lib/codemirror":7,"../markdown/markdown":9}],9:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror"),t("../xml/xml"),t("../meta")):"function"==typeof e&&e.amd?e(["../../lib/codemirror","../xml/xml","../meta"],i):i(CodeMirror)}(function(e){"use strict";e.defineMode("markdown",function(t,n){function r(n){if(e.findModeByName){var r=e.findModeByName(n);r&&(n=r.mime||r.mimes[0])}var i=e.getMode(t,n);return"null"==i.name?null:i}function i(e,t,n){return t.f=t.inline=n,n(e,t)}function o(e,t,n){return t.f=t.block=n,n(e,t)}function l(e){return!e||!/\S/.test(e.string)}function a(e){return e.linkTitle=!1,e.em=!1,e.strong=!1,e.strikethrough=!1,e.quote=0,e.indentedCode=!1,C&&e.f==c&&(e.f=p,e.block=s),e.trailingSpace=0,e.trailingSpaceNewLine=!1,e.prevLine=e.thisLine,e.thisLine=null,null}function s(e,t){var o=e.sol(),a=t.list!==!1,s=t.indentedCode;t.indentedCode=!1,a&&(t.indentationDiff>=0?(t.indentationDiff<4&&(t.indentation-=t.indentationDiff),t.list=null):t.indentation>0?t.list=null:t.list=!1);var c=null;if(t.indentationDiff>=4)return e.skipToEnd(),s||l(t.prevLine)?(t.indentation-=4,t.indentedCode=!0,S.code):null;if(e.eatSpace())return null;if((c=e.match(O))&&c[1].length<=6)return t.header=c[1].length,n.highlightFormatting&&(t.formatting="header"),t.f=t.inline,h(t);if(!(l(t.prevLine)||t.quote||a||s)&&(c=e.match(H)))return t.header="="==c[0].charAt(0)?1:2,n.highlightFormatting&&(t.formatting="header"),t.f=t.inline,h(t);if(e.eat(">"))return t.quote=o?1:t.quote+1,n.highlightFormatting&&(t.formatting="quote"),e.eatSpace(),h(t);if("["===e.peek())return i(e,t,y);if(e.match(T,!0))return t.hr=!0,S.hr;if((l(t.prevLine)||a)&&(e.match(M,!1)||e.match(N,!1))){var d=null;for(e.match(M,!0)?d="ul":(e.match(N,!0),d="ol"),t.indentation=e.column()+e.current().length,t.list=!0;t.listStack&&e.column()<t.listStack[t.listStack.length-1];)t.listStack.pop();return t.listStack.push(t.indentation),n.taskLists&&e.match(A,!1)&&(t.taskList=!0),t.f=t.inline,n.highlightFormatting&&(t.formatting=["list","list-"+d]),h(t)}return n.fencedCodeBlocks&&(c=e.match(I,!0))?(t.fencedChars=c[1],t.localMode=r(c[2]),t.localMode&&(t.localState=t.localMode.startState()),t.f=t.block=u,n.highlightFormatting&&(t.formatting="code-block"),t.code=-1,h(t)):i(e,t,t.inline)}function c(t,n){var r=k.token(t,n.htmlState);if(!C){var i=e.innerMode(k,n.htmlState);("xml"==i.mode.name&&null===i.state.tagStart&&!i.state.context&&i.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=p,n.block=s,n.htmlState=null)}return r}function u(e,t){return t.fencedChars&&e.match(t.fencedChars,!1)?(t.localMode=t.localState=null,t.f=t.block=d,null):t.localMode?t.localMode.token(e,t.localState):(e.skipToEnd(),S.code)}function d(e,t){e.match(t.fencedChars),t.block=s,t.f=p,t.fencedChars=null,n.highlightFormatting&&(t.formatting="code-block"),t.code=1;var r=h(t);return t.code=0,r}function h(e){var t=[];if(e.formatting){t.push(S.formatting),"string"==typeof e.formatting&&(e.formatting=[e.formatting]);for(var r=0;r<e.formatting.length;r++)t.push(S.formatting+"-"+e.formatting[r]),"header"===e.formatting[r]&&t.push(S.formatting+"-"+e.formatting[r]+"-"+e.header),"quote"===e.formatting[r]&&(!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(S.formatting+"-"+e.formatting[r]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(S.linkHref,"url"):(e.strong&&t.push(S.strong),e.em&&t.push(S.em),e.strikethrough&&t.push(S.strikethrough),e.linkText&&t.push(S.linkText),e.code&&t.push(S.code)),e.header&&t.push(S.header,S.header+"-"+e.header),e.quote&&(t.push(S.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(S.quote+"-"+e.quote):t.push(S.quote+"-"+n.maxBlockquoteDepth)),e.list!==!1){var i=(e.listStack.length-1)%3;i?1===i?t.push(S.list2):t.push(S.list3):t.push(S.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function f(e,t){return e.match(W,!0)?h(t):void 0}function p(t,r){var i=r.text(t,r);if("undefined"!=typeof i)return i;if(r.list)return r.list=null,h(r);if(r.taskList){var l="x"!==t.match(A,!0)[1];return l?r.taskOpen=!0:r.taskClosed=!0,n.highlightFormatting&&(r.formatting="task"),r.taskList=!1,h(r)}if(r.taskOpen=!1,r.taskClosed=!1,r.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(r.formatting="header"),h(r);var a=t.sol(),s=t.next();if(r.linkTitle){r.linkTitle=!1;var u=s;"("===s&&(u=")"),u=(u+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var d="^\\s*(?:[^"+u+"\\\\]+|\\\\\\\\|\\\\.)"+u;if(t.match(new RegExp(d),!0))return S.linkHref}if("`"===s){var f=r.formatting;n.highlightFormatting&&(r.formatting="code"),t.eatWhile("`");var p=t.current().length;if(0==r.code)return r.code=p,h(r);if(p==r.code){var v=h(r);return r.code=0,v}return r.formatting=f,h(r)}if(r.code)return h(r);if("\\"===s&&(t.next(),n.highlightFormatting)){var y=h(r),x=S.formatting+"-escape";return y?y+" "+x:x}if("!"===s&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return t.match(/\[[^\]]*\]/),r.inline=r.f=g,S.image;if("["===s&&t.match(/.*\](\(.*\)| ?\[.*\])/,!1))return r.linkText=!0,n.highlightFormatting&&(r.formatting="link"),h(r);if("]"===s&&r.linkText&&t.match(/\(.*\)| ?\[.*\]/,!1)){n.highlightFormatting&&(r.formatting="link");var y=h(r);return r.linkText=!1,r.inline=r.f=g,y}if("<"===s&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){r.f=r.inline=m,n.highlightFormatting&&(r.formatting="link");var y=h(r);return y?y+=" ":y="",y+S.linkInline}if("<"===s&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){r.f=r.inline=m,n.highlightFormatting&&(r.formatting="link");var y=h(r);return y?y+=" ":y="",y+S.linkEmail}if("<"===s&&t.match(/^(!--|\w)/,!1)){var b=t.string.indexOf(">",t.pos);if(-1!=b){var w=t.string.substring(t.start,b);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(w)&&(r.md_inside=!0)}return t.backUp(1),r.htmlState=e.startState(k),o(t,r,c)}if("<"===s&&t.match(/^\/\w*?>/))return r.md_inside=!1,"tag";var C=!1;if(!n.underscoresBreakWords&&"_"===s&&"_"!==t.peek()&&t.match(/(\w)/,!1)){var L=t.pos-2;if(L>=0){var T=t.string.charAt(L);"_"!==T&&T.match(/(\w)/,!1)&&(C=!0)}}if("*"===s||"_"===s&&!C)if(a&&" "===t.peek());else{if(r.strong===s&&t.eat(s)){n.highlightFormatting&&(r.formatting="strong");var v=h(r);return r.strong=!1,v}if(!r.strong&&t.eat(s))return r.strong=s,n.highlightFormatting&&(r.formatting="strong"),h(r);if(r.em===s){n.highlightFormatting&&(r.formatting="em");var v=h(r);return r.em=!1,v}if(!r.em)return r.em=s,n.highlightFormatting&&(r.formatting="em"),h(r)}else if(" "===s&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return h(r);t.backUp(1)}if(n.strikethrough)if("~"===s&&t.eatWhile(s)){if(r.strikethrough){n.highlightFormatting&&(r.formatting="strikethrough");var v=h(r);return r.strikethrough=!1,v}if(t.match(/^[^\s]/,!1))return r.strikethrough=!0,n.highlightFormatting&&(r.formatting="strikethrough"),h(r)}else if(" "===s&&t.match(/^~~/,!0)){if(" "===t.peek())return h(r);t.backUp(2)}return" "===s&&(t.match(/ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),h(r)}function m(e,t){var r=e.next();if(">"===r){t.f=t.inline=p,n.highlightFormatting&&(t.formatting="link");var i=h(t);return i?i+=" ":i="",i+S.linkInline}return e.match(/^[^>]+/,!0),S.linkInline}function g(e,t){if(e.eatSpace())return null;var r=e.next();return"("===r||"["===r?(t.f=t.inline=v("("===r?")":"]"),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,h(t)):"error"}function v(e){return function(t,r){var i=t.next();if(i===e){r.f=r.inline=p,n.highlightFormatting&&(r.formatting="link-string");var o=h(r);return r.linkHref=!1,o}return t.match(w(e),!0)&&t.backUp(1),r.linkHref=!0,h(r)}}function y(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=x,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,h(t)):i(e,t,p)}function x(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=b,n.highlightFormatting&&(t.formatting="link");var r=h(t);return t.linkText=!1,r}return e.match(/^([^\]\\]|\\.)+/,!0),S.linkText}function b(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=p,S.linkHref+" url")}function w(e){return E[e]||(e=(e+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1"),E[e]=new RegExp("^(?:[^\\\\]|\\\\.)*?("+e+")")),E[e]}var k=e.getMode(t,"text/html"),C="null"==k.name;void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.underscoresBreakWords&&(n.underscoresBreakWords=!0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var S={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"tag",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough"};for(var L in S)S.hasOwnProperty(L)&&n.tokenTypeOverrides[L]&&(S[L]=n.tokenTypeOverrides[L]);var T=/^([*\-_])(?:\s*\1){2,}\s*$/,M=/^[*\-+]\s+/,N=/^[0-9]+([.)])\s+/,A=/^\[(x| )\](?=\s)/,O=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,H=/^ *(?:\={1,}|-{1,})\s*$/,W=/^[^#!\[\]*_\\<>` "'(~]+/,I=new RegExp("^("+(n.fencedCodeBlocks===!0?"~~~+|```+":n.fencedCodeBlocks)+")[ \\t]*([\\w+#]*)"),E=[],D={startState:function(){return{f:s,prevLine:null,thisLine:null,block:s,htmlState:null,indentation:0,inline:p,text:f,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,fencedChars:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(k,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkTitle:t.linkTitle,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,header:t.header,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedChars:t.fencedChars}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine){var n=t.header||t.hr;if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0)||n){if(a(t),!n)return null;t.prevLine=null}t.prevLine=t.thisLine,t.thisLine=e,t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.f=t.block;var r=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentationDiff=Math.min(r-t.indentation,4),t.indentation=t.indentation+t.indentationDiff,r>0)return null}return t.f(e,t)},innerMode:function(e){return e.block==c?{state:e.htmlState,mode:k}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:D}},blankLine:a,getType:h,fold:"markdown"};return D},"xml"),e.defineMIME("text/x-markdown","markdown")})},{"../../lib/codemirror":7,"../meta":10,"../xml/xml":11}],10:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../lib/codemirror")):"function"==typeof e&&e.amd?e(["../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["pgp"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists.txt$/},{name:"CoffeeScript",mime:"text/x-coffeescript",mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history).md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"]},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Jade",mime:"text/x-jade",mode:"jade",ext:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"null",mode:"jinja2"},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mime:"text/n-triples",mode:"ntriples",ext:["nt"]},{name:"Objective C",mime:"text/x-objectivec",mode:"clike",ext:["m","mm"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mime:"application/x-httpd-php",mode:"php",ext:["php","php3","php4","php5","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["py","pyw"]},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mime:"text/x-sh",mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki ",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",
  17309. ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"YAML",mime:"text/x-yaml",mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]}];for(var t=0;t<e.modeInfo.length;t++){var n=e.modeInfo[t];n.mimes&&(n.mime=n.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.mime==t)return r;if(r.mimes)for(var i=0;i<r.mimes.length;i++)if(r.mimes[i]==t)return r}},e.findModeByExtension=function(t){for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.ext)for(var i=0;i<r.ext.length;i++)if(r.ext[i]==t)return r}},e.findModeByFileName=function(t){for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.file&&r.file.test(t))return r}var i=t.lastIndexOf("."),o=i>-1&&t.substring(i+1,t.length);return o?e.findModeByExtension(o):void 0},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.name.toLowerCase()==t)return r;if(r.alias)for(var i=0;i<r.alias.length;i++)if(r.alias[i].toLowerCase()==t)return r}}})},{"../lib/codemirror":7}],11:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};e.defineMode("xml",function(r,i){function o(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();if("<"==r)return e.eat("!")?e.eat("[")?e.match("CDATA[")?n(s("atom","]]>")):null:e.match("--")?n(s("comment","-->")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(c(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=s("meta","?>"),"meta"):(T=e.eat("/")?"closeTag":"openTag",t.tokenize=l,"tag bracket");if("&"==r){var i;return i=e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"),i?"atom":"error"}return e.eatWhile(/[^&<]/),null}function l(e,t){var n=e.next();if(">"==n||"/"==n&&e.eat(">"))return t.tokenize=o,T=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return T="equals",null;if("<"==n){t.tokenize=o,t.state=f,t.tagName=t.tagStart=null;var r=t.tokenize(e,t);return r?r+" tag error":"tag error"}return/[\'\"]/.test(n)?(t.tokenize=a(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function a(e){var t=function(t,n){for(;!t.eol();)if(t.next()==e){n.tokenize=l;break}return"string"};return t.isInAttribute=!0,t}function s(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=o;break}n.next()}return e}}function c(e){return function(t,n){for(var r;null!=(r=t.next());){if("<"==r)return n.tokenize=c(e+1),n.tokenize(t,n);if(">"==r){if(1==e){n.tokenize=o;break}return n.tokenize=c(e-1),n.tokenize(t,n)}}return"meta"}}function u(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(C.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function d(e){e.context&&(e.context=e.context.prev)}function h(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!C.contextGrabbers.hasOwnProperty(n)||!C.contextGrabbers[n].hasOwnProperty(t))return;d(e)}}function f(e,t,n){return"openTag"==e?(n.tagStart=t.column(),p):"closeTag"==e?m:f}function p(e,t,n){return"word"==e?(n.tagName=t.current(),M="tag",y):(M="error",p)}function m(e,t,n){if("word"==e){var r=t.current();return n.context&&n.context.tagName!=r&&C.implicitlyClosed.hasOwnProperty(n.context.tagName)&&d(n),n.context&&n.context.tagName==r||C.matchClosing===!1?(M="tag",g):(M="tag error",v)}return M="error",v}function g(e,t,n){return"endTag"!=e?(M="error",g):(d(n),f)}function v(e,t,n){return M="error",g(e,t,n)}function y(e,t,n){if("word"==e)return M="attribute",x;if("endTag"==e||"selfcloseTag"==e){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||C.autoSelfClosers.hasOwnProperty(r)?h(n,r):(h(n,r),n.context=new u(n,r,i==n.indented)),f}return M="error",y}function x(e,t,n){return"equals"==e?b:(C.allowMissing||(M="error"),y(e,t,n))}function b(e,t,n){return"string"==e?w:"word"==e&&C.allowUnquoted?(M="string",y):(M="error",y(e,t,n))}function w(e,t,n){return"string"==e?w:y(e,t,n)}var k=r.indentUnit,C={},S=i.htmlMode?t:n;for(var L in S)C[L]=S[L];for(var L in i)C[L]=i[L];var T,M;return o.isInText=!0,{startState:function(e){var t={tokenize:o,state:f,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;T=null;var n=t.tokenize(e,t);return(n||T)&&"comment"!=n&&(M=null,t.state=t.state(T||n,e,t),M&&(n="error"==M?n+" error":M)),n},indent:function(t,n,r){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+k;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=l&&t.tokenize!=o)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return C.multilineTagIndentPastTag!==!1?t.tagStart+t.tagName.length+2:t.tagStart+k*(C.multilineTagIndentFactor||1);if(C.alignCDATA&&/<!\[CDATA\[/.test(n))return 0;var a=n&&/^<(\/)?([\w_:\.-]*)/.exec(n);if(a&&a[1])for(;i;){if(i.tagName==a[2]){i=i.prev;break}if(!C.implicitlyClosed.hasOwnProperty(i.tagName))break;i=i.prev}else if(a)for(;i;){var s=C.contextGrabbers[i.tagName];if(!s||!s.hasOwnProperty(a[2]))break;i=i.prev}for(;i&&i.prev&&!i.startOfLine;)i=i.prev;return i?i.indent+k:t.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:C.htmlMode?"html":"xml",helperType:C.htmlMode?"html":"xml",skipAttribute:function(e){e.state==b&&(e.state=y)}}}),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})})},{"../../lib/codemirror":7}],12:[function(t,n,r){(function(t){(function(){function t(e){this.tokens=[],this.tokens.links={},this.options=e||h.defaults,this.rules=f.normal,this.options.gfm&&(this.options.tables?this.rules=f.tables:this.rules=f.gfm)}function i(e,t){if(this.options=t||h.defaults,this.links=e,this.rules=p.normal,this.renderer=this.options.renderer||new o,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=p.breaks:this.rules=p.gfm:this.options.pedantic&&(this.rules=p.pedantic)}function o(e){this.options=e||{}}function l(e){this.tokens=[],this.token=null,this.options=e||h.defaults,this.options.renderer=this.options.renderer||new o,this.renderer=this.options.renderer,this.renderer.options=this.options}function a(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function s(e){return e.replace(/&([#\w]+);/g,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function c(e,t){return e=e.source,t=t||"",function n(r,i){return r?(i=i.source||i,i=i.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(r,i),n):new RegExp(e,t)}}function u(){}function d(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function h(e,n,r){if(r||"function"==typeof n){r||(r=n,n=null),n=d({},h.defaults,n||{});var i,o,s=n.highlight,c=0;try{i=t.lex(e,n)}catch(u){return r(u)}o=i.length;var f=function(e){if(e)return n.highlight=s,r(e);var t;try{t=l.parse(i,n)}catch(o){e=o}return n.highlight=s,e?r(e):r(null,t)};if(!s||s.length<3)return f();if(delete n.highlight,!o)return f();for(;c<i.length;c++)!function(e){return"code"!==e.type?--o||f():s(e.text,e.lang,function(t,n){return t?f(t):null==n||n===e.text?--o||f():(e.text=n,e.escaped=!0,void(--o||f()))})}(i[c])}else try{return n&&(n=d({},h.defaults,n)),l.parse(t.lex(e,n),n)}catch(u){if(u.message+="\nPlease report this to https://github.com/chjj/marked.",(n||h.defaults).silent)return"<p>An error occured:</p><pre>"+a(u.message+"",!0)+"</pre>";throw u}}var f={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:u,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:u,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:u,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};f.bullet=/(?:[*+-]|\d+\.)/,f.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,f.item=c(f.item,"gm")(/bull/g,f.bullet)(),f.list=c(f.list)(/bull/g,f.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+f.def.source+")")(),f.blockquote=c(f.blockquote)("def",f.def)(),f._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",f.html=c(f.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,f._tag)(),f.paragraph=c(f.paragraph)("hr",f.hr)("heading",f.heading)("lheading",f.lheading)("blockquote",f.blockquote)("tag","<"+f._tag)("def",f.def)(),f.normal=d({},f),f.gfm=d({},f.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),f.gfm.paragraph=c(f.paragraph)("(?!","(?!"+f.gfm.fences.source.replace("\\1","\\2")+"|"+f.list.source.replace("\\1","\\3")+"|")(),f.tables=d({},f.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),t.rules=f,t.lex=function(e,n){var r=new t(n);return r.lex(e)},t.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},t.prototype.token=function(e,t,n){for(var r,i,o,l,a,s,c,u,d,e=e.replace(/^ +$/gm,"");e;)if((o=this.rules.newline.exec(e))&&(e=e.substring(o[0].length),o[0].length>1&&this.tokens.push({type:"space"})),o=this.rules.code.exec(e))e=e.substring(o[0].length),o=o[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?o:o.replace(/\n+$/,"")});else if(o=this.rules.fences.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"code",lang:o[2],text:o[3]||""});else if(o=this.rules.heading.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"heading",depth:o[1].length,text:o[2]});else if(t&&(o=this.rules.nptable.exec(e))){for(e=e.substring(o[0].length),s={type:"table",header:o[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:o[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:o[3].replace(/\n$/,"").split("\n")},u=0;u<s.align.length;u++)/^ *-+: *$/.test(s.align[u])?s.align[u]="right":/^ *:-+: *$/.test(s.align[u])?s.align[u]="center":/^ *:-+ *$/.test(s.align[u])?s.align[u]="left":s.align[u]=null;for(u=0;u<s.cells.length;u++)s.cells[u]=s.cells[u].split(/ *\| */);this.tokens.push(s)}else if(o=this.rules.lheading.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"heading",depth:"="===o[2]?1:2,text:o[1]});else if(o=this.rules.hr.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"hr"});else if(o=this.rules.blockquote.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"blockquote_start"}),o=o[0].replace(/^ *> ?/gm,""),this.token(o,t,!0),this.tokens.push({type:"blockquote_end"});else if(o=this.rules.list.exec(e)){for(e=e.substring(o[0].length),l=o[2],this.tokens.push({type:"list_start",ordered:l.length>1}),o=o[0].match(this.rules.item),r=!1,d=o.length,u=0;d>u;u++)s=o[u],c=s.length,s=s.replace(/^ *([*+-]|\d+\.) +/,""),~s.indexOf("\n ")&&(c-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+c+"}","gm"),"")),this.options.smartLists&&u!==d-1&&(a=f.bullet.exec(o[u+1])[0],l===a||l.length>1&&a.length>1||(e=o.slice(u+1).join("\n")+e,u=d-1)),i=r||/\n\n(?!\s*$)/.test(s),u!==d-1&&(r="\n"===s.charAt(s.length-1),i||(i=r)),this.tokens.push({type:i?"loose_item_start":"list_item_start"}),this.token(s,!1,n),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(o=this.rules.html.exec(e))e=e.substring(o[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===o[1]||"script"===o[1]||"style"===o[1]),text:o[0]});else if(!n&&t&&(o=this.rules.def.exec(e)))e=e.substring(o[0].length),this.tokens.links[o[1].toLowerCase()]={href:o[2],title:o[3]};else if(t&&(o=this.rules.table.exec(e))){for(e=e.substring(o[0].length),s={type:"table",header:o[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:o[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:o[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u<s.align.length;u++)/^ *-+: *$/.test(s.align[u])?s.align[u]="right":/^ *:-+: *$/.test(s.align[u])?s.align[u]="center":/^ *:-+ *$/.test(s.align[u])?s.align[u]="left":s.align[u]=null;for(u=0;u<s.cells.length;u++)s.cells[u]=s.cells[u].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */);this.tokens.push(s)}else if(t&&(o=this.rules.paragraph.exec(e)))e=e.substring(o[0].length),this.tokens.push({type:"paragraph",text:"\n"===o[1].charAt(o[1].length-1)?o[1].slice(0,-1):o[1]});else if(o=this.rules.text.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"text",text:o[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var p={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:u,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:u,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};p._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/,p._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/,p.link=c(p.link)("inside",p._inside)("href",p._href)(),p.reflink=c(p.reflink)("inside",p._inside)(),p.normal=d({},p),p.pedantic=d({},p.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),p.gfm=d({},p.normal,{escape:c(p.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:c(p.text)("]|","~]|")("|","|https?://|")()}),p.breaks=d({},p.gfm,{br:c(p.br)("{2,}","*")(),text:c(p.gfm.text)("{2,}","*")()}),i.rules=p,i.output=function(e,t,n){var r=new i(t,n);return r.output(e)},i.prototype.output=function(e){for(var t,n,r,i,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=i[1];else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),"@"===i[2]?(n=":"===i[1].charAt(6)?this.mangle(i[1].substring(7)):this.mangle(i[1]),r=this.mangle("mailto:")+n):(n=a(i[1]),r=n),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(i[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(i[0])&&(this.inLink=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):a(i[0]):i[0];else if(i=this.rules.link.exec(e))e=e.substring(i[0].length),this.inLink=!0,o+=this.outputLink(i,{href:i[2],title:i[3]}),this.inLink=!1;else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(a(i[2],!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),o+=this.renderer.text(a(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(i[0].length),n=a(i[1]),r=n,o+=this.renderer.link(r,null,n);return o},i.prototype.outputLink=function(e,t){var n=a(t.href),r=t.title?a(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,a(e[1]))},i.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},i.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;r>i;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},o.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'<pre><code class="'+this.options.langPrefix+a(t,!0)+'">'+(n?e:a(e,!0))+"\n</code></pre>\n":"<pre><code>"+(n?e:a(e,!0))+"\n</code></pre>"},o.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},o.prototype.html=function(e){return e},o.prototype.heading=function(e,t,n){return"<h"+t+' id="'+this.options.headerPrefix+n.toLowerCase().replace(/[^\w]+/g,"-")+'">'+e+"</h"+t+">\n"},o.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},o.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"</"+n+">\n"},o.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},o.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},o.prototype.table=function(e,t){return"<table>\n<thead>\n"+e+"</thead>\n<tbody>\n"+t+"</tbody>\n</table>\n"},o.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},o.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},o.prototype.strong=function(e){return"<strong>"+e+"</strong>"},o.prototype.em=function(e){return"<em>"+e+"</em>"},o.prototype.codespan=function(e){return"<code>"+e+"</code>"},o.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},o.prototype.del=function(e){return"<del>"+e+"</del>"},o.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(s(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(i){return""}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:"))return""}var o='<a href="'+e+'"';return t&&(o+=' title="'+t+'"'),o+=">"+n+"</a>"},o.prototype.image=function(e,t,n){var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},o.prototype.text=function(e){return e},l.parse=function(e,t,n){var r=new l(t,n);return r.parse(e)},l.prototype.parse=function(e){this.inline=new i(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},l.prototype.next=function(){return this.token=this.tokens.pop()},l.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},l.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},l.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i,o="",l="";for(n="",e=0;e<this.token.header.length;e++)r={header:!0,align:this.token.align[e]},n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(o+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",i=0;i<t.length;i++)n+=this.renderer.tablecell(this.inline.output(t[i]),{header:!1,align:this.token.align[i]});l+=this.renderer.tablerow(n)}return this.renderer.table(o,l);case"blockquote_start":for(var l="";"blockquote_end"!==this.next().type;)l+=this.tok();return this.renderer.blockquote(l);case"list_start":for(var l="",a=this.token.ordered;"list_end"!==this.next().type;)l+=this.tok();return this.renderer.list(l,a);case"list_item_start":for(var l="";"list_item_end"!==this.next().type;)l+="text"===this.token.type?this.parseText():this.tok();return this.renderer.listitem(l);case"loose_item_start":for(var l="";"list_item_end"!==this.next().type;)l+=this.tok();return this.renderer.listitem(l);case"html":var s=this.token.pre||this.options.pedantic?this.token.text:this.inline.output(this.token.text);return this.renderer.html(s);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText())}},u.exec=u,h.options=h.setOptions=function(e){return d(h.defaults,e),h},h.defaults={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,sanitizer:null,mangle:!0,smartLists:!1,silent:!1,highlight:null,langPrefix:"lang-",smartypants:!1,headerPrefix:"",renderer:new o,xhtml:!1},h.Parser=l,h.parser=l.parse,h.Renderer=o,h.Lexer=t,h.lexer=t.lex,h.InlineLexer=i,h.inlineLexer=i.output,h.parse=h,"undefined"!=typeof n&&"object"==typeof r?n.exports=h:"function"==typeof e&&e.amd?e(function(){return h}):this.marked=h}).call(function(){return this||("undefined"!=typeof window?window:t)}())}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],13:[function(e,t,n){var r=e("codemirror");r.commands.tabAndIndentMarkdownList=function(e){var t=e.listSelections(),n=t[0].head,r=e.getStateAfter(n.line),i=r.list!==!1;if(i)return void e.execCommand("indentMore");if(e.options.indentWithTabs)e.execCommand("insertTab");else{var o=Array(e.options.tabSize+1).join(" ");e.replaceSelection(o)}},r.commands.shiftTabAndUnindentMarkdownList=function(e){var t=e.listSelections(),n=t[0].head,r=e.getStateAfter(n.line),i=r.list!==!1;if(i)return void e.execCommand("indentLess");if(e.options.indentWithTabs)e.execCommand("insertTab");else{var o=Array(e.options.tabSize+1).join(" ");e.replaceSelection(o)}}},{codemirror:7}],14:[function(e,t,n){"use strict";function r(e){return e=_?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}function i(e,t,n){e=e||{};var r=document.createElement("a");return t=void 0==t?!0:t,e.title&&t&&(r.title=l(e.title,e.action,n),_&&(r.title=r.title.replace("Ctrl","⌘"),r.title=r.title.replace("Alt","⌥"))),r.tabIndex=-1,r.className=e.className,r}function o(){var e=document.createElement("i");return e.className="separator",e.innerHTML="|",e}function l(e,t,n){var i,o=e;return t&&(i=G(t),n[i]&&(o+=" ("+r(n[i])+")")),o}function a(e,t){t=t||e.getCursor("start");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,i,o=n.type.split(" "),l={},a=0;a<o.length;a++)r=o[a],"strong"===r?l.bold=!0:"variable-2"===r?(i=e.getLine(t.line),/^\s*\d+\.\s/.test(i)?l["ordered-list"]=!0:l["unordered-list"]=!0):"atom"===r?l.quote=!0:"em"===r?l.italic=!0:"quote"===r?l.quote=!0:"strikethrough"===r?l.strikethrough=!0:"comment"===r?l.code=!0:"link"===r?l.link=!0:"tag"===r?l.image=!0:r.match(/^header(\-[1-6])?$/)&&(l[r.replace("header","heading")]=!0);return l}function s(e){var t=e.codemirror;t.setOption("fullScreen",!t.getOption("fullScreen")),t.getOption("fullScreen")?(V=document.body.style.overflow,document.body.style.overflow="hidden"):document.body.style.overflow=V;var n=t.getWrapperElement();/fullscreen/.test(n.previousSibling.className)?n.previousSibling.className=n.previousSibling.className.replace(/\s*fullscreen\b/,""):n.previousSibling.className+=" fullscreen";var r=e.toolbarElements.fullscreen;/active/.test(r.className)?r.className=r.className.replace(/\s*active\s*/g,""):r.className+=" active";var i=t.getWrapperElement().nextSibling;/editor-preview-active-side/.test(i.className)&&N(e)}function c(e){I(e,"bold",e.options.blockStyles.bold)}function u(e){I(e,"italic",e.options.blockStyles.italic)}function d(e){I(e,"strikethrough","~~")}function h(e){function t(e){if("object"!=typeof e)throw"fencing_line() takes a 'line' object (not a line number, or line text). Got: "+typeof e+": "+e;return e.styles&&e.styles[2]&&-1!==e.styles[2].indexOf("formatting-code-block")}function n(e){return e.state.base.base||e.state.base}function r(e,r,i,o,l){i=i||e.getLineHandle(r),o=o||e.getTokenAt({line:r,ch:1}),l=l||!!i.text&&e.getTokenAt({line:r,ch:i.text.length-1});var a=o.type?o.type.split(" "):[];return l&&n(l).indentedCode?"indented":-1===a.indexOf("comment")?!1:n(o).fencedChars||n(l).fencedChars||t(i)?"fenced":"single"}function i(e,t,n,r){var i=t.line+1,o=n.line+1,l=t.line!==n.line,a=r+"\n",s="\n"+r;l&&o++,l&&0===n.ch&&(s=r+"\n",o--),O(e,!1,[a,s]),e.setSelection({line:i,ch:0},{line:o,ch:0})}var o,l,a,s=e.options.blockStyles.code,c=e.codemirror,u=c.getCursor("start"),d=c.getCursor("end"),h=c.getTokenAt({line:u.line,ch:u.ch||1}),f=c.getLineHandle(u.line),p=r(c,u.line,f,h);if("single"===p){var m=f.text.slice(0,u.ch).replace("`",""),g=f.text.slice(u.ch).replace("`","");c.replaceRange(m+g,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),u.ch--,u!==d&&d.ch--,c.setSelection(u,d),c.focus()}else if("fenced"===p)if(u.line!==d.line||u.ch!==d.ch){for(o=u.line;o>=0&&(f=c.getLineHandle(o),!t(f));o--);var v,y,x,b,w=c.getTokenAt({line:o,ch:1}),k=n(w).fencedChars;t(c.getLineHandle(u.line))?(v="",y=u.line):t(c.getLineHandle(u.line-1))?(v="",y=u.line-1):(v=k+"\n",y=u.line),t(c.getLineHandle(d.line))?(x="",b=d.line,0===d.ch&&(b+=1)):0!==d.ch&&t(c.getLineHandle(d.line+1))?(x="",b=d.line+1):(x=k+"\n",b=d.line+1),0===d.ch&&(b-=1),c.operation(function(){c.replaceRange(x,{line:b,ch:0},{line:b+(x?0:1),ch:0}),c.replaceRange(v,{line:y,ch:0},{line:y+(v?0:1),ch:0})}),c.setSelection({line:y+(v?1:0),ch:0},{line:b+(v?1:-1),ch:0}),c.focus()}else{var C=u.line;if(t(c.getLineHandle(u.line))&&("fenced"===r(c,u.line+1)?(o=u.line,C=u.line+1):(l=u.line,C=u.line-1)),void 0===o)for(o=C;o>=0&&(f=c.getLineHandle(o),!t(f));o--);if(void 0===l)for(a=c.lineCount(),l=C;a>l&&(f=c.getLineHandle(l),!t(f));l++);c.operation(function(){c.replaceRange("",{line:o,ch:0},{line:o+1,ch:0}),c.replaceRange("",{line:l-1,ch:0},{line:l,ch:0})}),c.focus()}else if("indented"===p){if(u.line!==d.line||u.ch!==d.ch)o=u.line,l=d.line,0===d.ch&&l--;else{for(o=u.line;o>=0;o--)if(f=c.getLineHandle(o),!f.text.match(/^\s*$/)&&"indented"!==r(c,o,f)){o+=1;break}for(a=c.lineCount(),l=u.line;a>l;l++)if(f=c.getLineHandle(l),!f.text.match(/^\s*$/)&&"indented"!==r(c,l,f)){l-=1;break}}var S=c.getLineHandle(l+1),L=S&&c.getTokenAt({line:l+1,ch:S.text.length-1}),T=L&&n(L).indentedCode;T&&c.replaceRange("\n",{line:l+1,ch:0});for(var M=o;l>=M;M++)c.indentLine(M,"subtract");c.focus()}else{var N=u.line===d.line&&u.ch===d.ch&&0===u.ch,A=u.line!==d.line;N||A?i(c,u,d,s):O(c,!1,["`","`"])}}function f(e){var t=e.codemirror;W(t,"quote")}function p(e){var t=e.codemirror;H(t,"smaller")}function m(e){var t=e.codemirror;H(t,"bigger")}function g(e){var t=e.codemirror;H(t,void 0,1)}function v(e){var t=e.codemirror;H(t,void 0,2)}function y(e){var t=e.codemirror;H(t,void 0,3)}function x(e){var t=e.codemirror;W(t,"unordered-list")}function b(e){var t=e.codemirror;W(t,"ordered-list")}function w(e){var t=e.codemirror;E(t)}function k(e){var t=e.codemirror,n=a(t),r=e.options,i="http://";return r.promptURLs&&(i=prompt(r.promptTexts.link),!i)?!1:void O(t,n.link,r.insertTexts.link,i)}function C(e){var t=e.codemirror,n=a(t),r=e.options,i="http://";return r.promptURLs&&(i=prompt(r.promptTexts.image),!i)?!1:void O(t,n.image,r.insertTexts.image,i)}function S(e){var t=e.codemirror,n=a(t),r=e.options;O(t,n.table,r.insertTexts.table)}function L(e){var t=e.codemirror,n=a(t),r=e.options;O(t,n.image,r.insertTexts.horizontalRule)}function T(e){var t=e.codemirror;t.undo(),t.focus()}function M(e){var t=e.codemirror;t.redo(),t.focus()}function N(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.nextSibling,i=e.toolbarElements["side-by-side"],o=!1;/editor-preview-active-side/.test(r.className)?(r.className=r.className.replace(/\s*editor-preview-active-side\s*/g,""),i.className=i.className.replace(/\s*active\s*/g,""),n.className=n.className.replace(/\s*CodeMirror-sided\s*/g," ")):(setTimeout(function(){t.getOption("fullScreen")||s(e),r.className+=" editor-preview-active-side"},1),i.className+=" active",n.className+=" CodeMirror-sided",o=!0);var l=n.lastChild;if(/editor-preview-active/.test(l.className)){l.className=l.className.replace(/\s*editor-preview-active\s*/g,"");var a=e.toolbarElements.preview,c=n.previousSibling;a.className=a.className.replace(/\s*active\s*/g,""),c.className=c.className.replace(/\s*disabled-for-preview*/g,"")}var u=function(){r.innerHTML=e.options.previewRender(e.value(),r)};t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=u),o?(r.innerHTML=e.options.previewRender(e.value(),r),t.on("update",t.sideBySideRenderingFunction)):t.off("update",t.sideBySideRenderingFunction)}function A(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.previousSibling,i=e.options.toolbar?e.toolbarElements.preview:!1,o=n.lastChild;o&&/editor-preview/.test(o.className)||(o=document.createElement("div"),o.className="editor-preview",n.appendChild(o)),/editor-preview-active/.test(o.className)?(o.className=o.className.replace(/\s*editor-preview-active\s*/g,""),i&&(i.className=i.className.replace(/\s*active\s*/g,""),r.className=r.className.replace(/\s*disabled-for-preview*/g,""))):(setTimeout(function(){o.className+=" editor-preview-active"},1),i&&(i.className+=" active",r.className+=" disabled-for-preview")),o.innerHTML=e.options.previewRender(e.value(),o);var l=t.getWrapperElement().nextSibling;/editor-preview-active-side/.test(l.className)&&N(e)}function O(e,t,n,r){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){var i,o=n[0],l=n[1],a=e.getCursor("start"),s=e.getCursor("end");r&&(l=l.replace("#url#",r)),t?(i=e.getLine(a.line),o=i.slice(0,a.ch),l=i.slice(a.ch),e.replaceRange(o+l,{line:a.line,ch:0})):(i=e.getSelection(),e.replaceSelection(o+i+l),a.ch+=o.length,a!==s&&(s.ch+=o.length)),e.setSelection(a,s),e.focus()}}function H(e,t,n){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){
  17310. for(var r=e.getCursor("start"),i=e.getCursor("end"),o=r.line;o<=i.line;o++)!function(r){var i=e.getLine(r),o=i.search(/[^#]/);i=void 0!==t?0>=o?"bigger"==t?"###### "+i:"# "+i:6==o&&"smaller"==t?i.substr(7):1==o&&"bigger"==t?i.substr(2):"bigger"==t?i.substr(1):"#"+i:1==n?0>=o?"# "+i:o==n?i.substr(o+1):"# "+i.substr(o+1):2==n?0>=o?"## "+i:o==n?i.substr(o+1):"## "+i.substr(o+1):0>=o?"### "+i:o==n?i.substr(o+1):"### "+i.substr(o+1),e.replaceRange(i,{line:r,ch:0},{line:r,ch:99999999999999})}(o);e.focus()}}function W(e,t){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){for(var n=a(e),r=e.getCursor("start"),i=e.getCursor("end"),o={quote:/^(\s*)\>\s+/,"unordered-list":/^(\s*)(\*|\-|\+)\s+/,"ordered-list":/^(\s*)\d+\.\s+/},l={quote:"> ","unordered-list":"* ","ordered-list":"1. "},s=r.line;s<=i.line;s++)!function(r){var i=e.getLine(r);i=n[t]?i.replace(o[t],"$1"):l[t]+i,e.replaceRange(i,{line:r,ch:0},{line:r,ch:99999999999999})}(s);e.focus()}}function I(e,t,n,r){if(!/editor-preview-active/.test(e.codemirror.getWrapperElement().lastChild.className)){r="undefined"==typeof r?n:r;var i,o=e.codemirror,l=a(o),s=n,c=r,u=o.getCursor("start"),d=o.getCursor("end");l[t]?(i=o.getLine(u.line),s=i.slice(0,u.ch),c=i.slice(u.ch),"bold"==t?(s=s.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),c=c.replace(/(\*\*|__)/,"")):"italic"==t?(s=s.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),c=c.replace(/(\*|_)/,"")):"strikethrough"==t&&(s=s.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),c=c.replace(/(\*\*|~~)/,"")),o.replaceRange(s+c,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),"bold"==t||"strikethrough"==t?(u.ch-=2,u!==d&&(d.ch-=2)):"italic"==t&&(u.ch-=1,u!==d&&(d.ch-=1))):(i=o.getSelection(),"bold"==t?(i=i.split("**").join(""),i=i.split("__").join("")):"italic"==t?(i=i.split("*").join(""),i=i.split("_").join("")):"strikethrough"==t&&(i=i.split("~~").join("")),o.replaceSelection(s+i+c),u.ch+=n.length,d.ch=u.ch+i.length),o.setSelection(u,d),o.focus()}}function E(e){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className))for(var t,n=e.getCursor("start"),r=e.getCursor("end"),i=n.line;i<=r.line;i++)t=e.getLine(i),t=t.replace(/^[ ]*([# ]+|\*|\-|[> ]+|[0-9]+(.|\)))[ ]*/,""),e.replaceRange(t,{line:i,ch:0},{line:i,ch:99999999999999})}function D(e,t){for(var n in t)t.hasOwnProperty(n)&&(t[n]instanceof Array?e[n]=t[n].concat(e[n]instanceof Array?e[n]:[]):null!==t[n]&&"object"==typeof t[n]&&t[n].constructor===Object?e[n]=D(e[n]||{},t[n]):e[n]=t[n]);return e}function P(e){for(var t=1;t<arguments.length;t++)e=D(e,arguments[t]);return e}function F(e){var t=/[a-zA-Z0-9_\u0392-\u03c9]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/g,n=e.match(t),r=0;if(null===n)return r;for(var i=0;i<n.length;i++)r+=n[i].charCodeAt(0)>=19968?n[i].length:1;return r}function z(e){e=e||{},e.parent=this;var t=!0;if(e.autoDownloadFontAwesome===!1&&(t=!1),e.autoDownloadFontAwesome!==!0)for(var n=document.styleSheets,r=0;r<n.length;r++)n[r].href&&n[r].href.indexOf("//maxcdn.bootstrapcdn.com/font-awesome/")>-1&&(t=!1);if(t){var i=document.createElement("link");i.rel="stylesheet",i.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(i)}if(e.element)this.element=e.element;else if(null===e.element)return void console.log("SimpleMDE: Error. No element was found.");if(void 0===e.toolbar){e.toolbar=[];for(var o in K)K.hasOwnProperty(o)&&(-1!=o.indexOf("separator-")&&e.toolbar.push("|"),(K[o]["default"]===!0||e.showIcons&&e.showIcons.constructor===Array&&-1!=e.showIcons.indexOf(o))&&e.toolbar.push(o))}e.hasOwnProperty("status")||(e.status=["autosave","lines","words","cursor"]),e.previewRender||(e.previewRender=function(e){return this.parent.markdown(e)}),e.parsingConfig=P({highlightFormatting:!0},e.parsingConfig||{}),e.insertTexts=P({},X,e.insertTexts||{}),e.promptTexts=Y,e.blockStyles=P({},Z,e.blockStyles||{}),e.shortcuts=P({},U,e.shortcuts||{}),void 0!=e.autosave&&void 0!=e.autosave.unique_id&&""!=e.autosave.unique_id&&(e.autosave.uniqueId=e.autosave.unique_id),this.options=e,this.render(),!e.initialValue||this.options.autosave&&this.options.autosave.foundSavedValue===!0||this.value(e.initialValue)}function R(){if("object"!=typeof localStorage)return!1;try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch(e){return!1}return!0}var B=e("codemirror");e("codemirror/addon/edit/continuelist.js"),e("./codemirror/tablist"),e("codemirror/addon/display/fullscreen.js"),e("codemirror/mode/markdown/markdown.js"),e("codemirror/addon/mode/overlay.js"),e("codemirror/addon/display/placeholder.js"),e("codemirror/mode/gfm/gfm.js"),e("codemirror/mode/xml/xml.js"),e("spell-checker");var j=e("marked"),_=/Mac/.test(navigator.platform),q={toggleBold:c,toggleItalic:u,drawLink:k,toggleHeadingSmaller:p,toggleHeadingBigger:m,drawImage:C,toggleBlockquote:f,toggleOrderedList:b,toggleUnorderedList:x,toggleCodeBlock:h,togglePreview:A,toggleStrikethrough:d,toggleHeading1:g,toggleHeading2:v,toggleHeading3:y,cleanBlock:w,drawTable:S,drawHorizontalRule:L,undo:T,redo:M,toggleSideBySide:N,toggleFullScreen:s},U={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},G=function(e){for(var t in q)if(q[t]===e)return t;return null},$=function(){var e=!1;return function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(e=!0)}(navigator.userAgent||navigator.vendor||window.opera),e},V="",K={bold:{name:"bold",action:c,className:"fa fa-bold",title:"Bold","default":!0},italic:{name:"italic",action:u,className:"fa fa-italic",title:"Italic","default":!0},strikethrough:{name:"strikethrough",action:d,className:"fa fa-strikethrough",title:"Strikethrough"},heading:{name:"heading",action:p,className:"fa fa-header",title:"Heading","default":!0},"heading-smaller":{name:"heading-smaller",action:p,className:"fa fa-header fa-header-x fa-header-smaller",title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:m,className:"fa fa-header fa-header-x fa-header-bigger",title:"Bigger Heading"},"heading-1":{name:"heading-1",action:g,className:"fa fa-header fa-header-x fa-header-1",title:"Big Heading"},"heading-2":{name:"heading-2",action:v,className:"fa fa-header fa-header-x fa-header-2",title:"Medium Heading"},"heading-3":{name:"heading-3",action:y,className:"fa fa-header fa-header-x fa-header-3",title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:h,className:"fa fa-code",title:"Code"},quote:{name:"quote",action:f,className:"fa fa-quote-left",title:"Quote","default":!0},"unordered-list":{name:"unordered-list",action:x,className:"fa fa-list-ul",title:"Generic List","default":!0},"ordered-list":{name:"ordered-list",action:b,className:"fa fa-list-ol",title:"Numbered List","default":!0},"clean-block":{name:"clean-block",action:w,className:"fa fa-eraser fa-clean-block",title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:k,className:"fa fa-link",title:"Create Link","default":!0},image:{name:"image",action:C,className:"fa fa-picture-o",title:"Insert Image","default":!0},table:{name:"table",action:S,className:"fa fa-table",title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:L,className:"fa fa-minus",title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:A,className:"fa fa-eye no-disable",title:"Toggle Preview","default":!0},"side-by-side":{name:"side-by-side",action:N,className:"fa fa-columns no-disable no-mobile",title:"Toggle Side by Side","default":!0},fullscreen:{name:"fullscreen",action:s,className:"fa fa-arrows-alt no-disable no-mobile",title:"Toggle Fullscreen","default":!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://simplemde.com/markdown-guide",className:"fa fa-question-circle",title:"Markdown Guide","default":!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:T,className:"fa fa-undo no-disable",title:"Undo"},redo:{name:"redo",action:M,className:"fa fa-repeat no-disable",title:"Redo"}},X={link:["[","](#url#)"],image:["![","](#url#)"],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},Y={link:"URL for the link:",image:"URL of the image:"},Z={bold:"**",code:"```",italic:"*"};z.prototype.markdown=function(e){if(j){var t={};return this.options&&this.options.renderingConfig&&this.options.renderingConfig.singleLineBreaks===!1?t.breaks=!1:t.breaks=!0,this.options&&this.options.renderingConfig&&this.options.renderingConfig.codeSyntaxHighlighting===!0&&window.hljs&&(t.highlight=function(e){return window.hljs.highlightAuto(e).value}),j.setOptions(t),j(e)}},z.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName("textarea")[0]),!this._rendered||this._rendered!==e){this.element=e;var t=this.options,n=this,i={};for(var o in t.shortcuts)null!==t.shortcuts[o]&&null!==q[o]&&!function(e){i[r(t.shortcuts[e])]=function(){q[e](n)}}(o);i.Enter="newlineAndIndentContinueMarkdownList",i.Tab="tabAndIndentMarkdownList",i["Shift-Tab"]="shiftTabAndUnindentMarkdownList",i.Esc=function(e){e.getOption("fullScreen")&&s(n)},document.addEventListener("keydown",function(e){e=e||window.event,27==e.keyCode&&n.codemirror.getOption("fullScreen")&&s(n)},!1);var l,a;if(t.spellChecker!==!1?(l="spell-checker",a=t.parsingConfig,a.name="gfm",a.gitHubSpice=!1):(l=t.parsingConfig,l.name="gfm",l.gitHubSpice=!1),this.codemirror=B.fromTextArea(e,{mode:l,backdrop:a,theme:"paper",tabSize:void 0!=t.tabSize?t.tabSize:2,indentUnit:void 0!=t.tabSize?t.tabSize:2,indentWithTabs:t.indentWithTabs!==!1,lineNumbers:!1,autofocus:t.autofocus===!0,extraKeys:i,lineWrapping:t.lineWrapping!==!1,allowDropFileTypes:["text/plain"],placeholder:t.placeholder||e.getAttribute("placeholder")||""}),t.forceSync===!0){var c=this.codemirror;c.on("change",function(){c.save()})}this.gui={},t.toolbar!==!1&&(this.gui.toolbar=this.createToolbar()),t.status!==!1&&(this.gui.statusbar=this.createStatusbar()),void 0!=t.autosave&&t.autosave.enabled===!0&&this.autosave(),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element}},z.prototype.autosave=function(){if(R()){var e=this;if(void 0==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("SimpleMDE: You must set a uniqueId to use the autosave feature");null!=e.element.form&&void 0!=e.element.form&&e.element.form.addEventListener("submit",function(){localStorage.removeItem("smde_"+e.options.autosave.uniqueId)}),this.options.autosave.loaded!==!0&&("string"==typeof localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&""!=localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&(this.codemirror.setValue(localStorage.getItem("smde_"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0),localStorage.setItem("smde_"+this.options.autosave.uniqueId,e.value());var t=document.getElementById("autosaved");if(null!=t&&void 0!=t&&""!=t){var n=new Date,r=n.getHours(),i=n.getMinutes(),o="am",l=r;l>=12&&(l=r-12,o="pm"),0==l&&(l=12),i=10>i?"0"+i:i,t.innerHTML="Autosaved: "+l+":"+i+" "+o}this.autosaveTimeoutId=setTimeout(function(){e.autosave()},this.options.autosave.delay||1e4)}else console.log("SimpleMDE: localStorage not available, cannot autosave")},z.prototype.clearAutosavedValue=function(){if(R()){if(void 0==this.options.autosave||void 0==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("SimpleMDE: You must set a uniqueId to clear the autosave value");localStorage.removeItem("smde_"+this.options.autosave.uniqueId)}else console.log("SimpleMDE: localStorage not available, cannot autosave")},z.prototype.createSideBySide=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;n&&/editor-preview-side/.test(n.className)||(n=document.createElement("div"),n.className="editor-preview-side",t.parentNode.insertBefore(n,t.nextSibling));var r=!1,i=!1;return e.on("scroll",function(e){if(r)return void(r=!1);i=!0;var t=e.getScrollInfo().height-e.getScrollInfo().clientHeight,o=parseFloat(e.getScrollInfo().top)/t,l=(n.scrollHeight-n.clientHeight)*o;n.scrollTop=l}),n.onscroll=function(){if(i)return void(i=!1);r=!0;var t=n.scrollHeight-n.clientHeight,o=parseFloat(n.scrollTop)/t,l=(e.getScrollInfo().height-e.getScrollInfo().clientHeight)*o;e.scrollTo(0,l)},n},z.prototype.createToolbar=function(e){if(e=e||this.options.toolbar,e&&0!==e.length){var t;for(t=0;t<e.length;t++)void 0!=K[e[t]]&&(e[t]=K[e[t]]);var n=document.createElement("div");n.className="editor-toolbar";var r=this,l={};for(r.toolbar=e,t=0;t<e.length;t++)if(("guide"!=e[t].name||r.options.toolbarGuideIcon!==!1)&&!(r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[t].name)||("fullscreen"==e[t].name||"side-by-side"==e[t].name)&&$())){if("|"===e[t]){for(var s=!1,c=t+1;c<e.length;c++)console.log(c),"|"===e[c]||r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[c].name)||(console.log(e[c]),s=!0);if(!s)continue}!function(e){var t;t="|"===e?o():i(e,r.options.toolbarTips,r.options.shortcuts),e.action&&("function"==typeof e.action?t.onclick=function(){e.action(r)}:"string"==typeof e.action&&(t.href=e.action,t.target="_blank")),l[e.name||e]=t,n.appendChild(t)}(e[t])}r.toolbarElements=l;var u=this.codemirror;u.on("cursorActivity",function(){var e=a(u);for(var t in l)!function(t){var n=l[t];e[t]?n.className+=" active":"fullscreen"!=t&&"side-by-side"!=t&&(n.className=n.className.replace(/\s*active\s*/g,""))}(t)});var d=u.getWrapperElement();return d.parentNode.insertBefore(n,d),n}},z.prototype.createStatusbar=function(e){e=e||this.options.status;var t=this.options,n=this.codemirror;if(e&&0!==e.length){var r,i,o,l=[];for(r=0;r<e.length;r++)if(i=void 0,o=void 0,"object"==typeof e[r])l.push({className:e[r].className,defaultValue:e[r].defaultValue,onUpdate:e[r].onUpdate});else{var a=e[r];"words"===a?(o=function(e){e.innerHTML="0"},i=function(e){e.innerHTML=F(n.getValue())}):"lines"===a?(o=function(e){e.innerHTML="0"},i=function(e){e.innerHTML=n.lineCount()}):"cursor"===a?(o=function(e){e.innerHTML="0:0"},i=function(e){var t=n.getCursor();e.innerHTML=t.line+":"+t.ch}):"autosave"===a&&(o=function(e){void 0!=t.autosave&&t.autosave.enabled===!0&&e.setAttribute("id","autosaved")}),l.push({className:a,defaultValue:o,onUpdate:i})}var s=document.createElement("div");for(s.className="editor-statusbar",r=0;r<l.length;r++){var c=l[r],u=document.createElement("span");u.className=c.className,"function"==typeof c.defaultValue&&c.defaultValue(u),"function"==typeof c.onUpdate&&this.codemirror.on("update",function(e,t){return function(){t.onUpdate(e)}}(u,c)),s.appendChild(u)}var d=this.codemirror.getWrapperElement();return d.parentNode.insertBefore(s,d.nextSibling),s}},z.prototype.value=function(e){return void 0===e?this.codemirror.getValue():(this.codemirror.getDoc().setValue(e),this)},z.toggleBold=c,z.toggleItalic=u,z.toggleStrikethrough=d,z.toggleBlockquote=f,z.toggleHeadingSmaller=p,z.toggleHeadingBigger=m,z.toggleHeading1=g,z.toggleHeading2=v,z.toggleHeading3=y,z.toggleCodeBlock=h,z.toggleUnorderedList=x,z.toggleOrderedList=b,z.cleanBlock=w,z.drawLink=k,z.drawImage=C,z.drawTable=S,z.drawHorizontalRule=L,z.undo=T,z.redo=M,z.togglePreview=A,z.toggleSideBySide=N,z.toggleFullScreen=s,z.prototype.toggleBold=function(){c(this)},z.prototype.toggleItalic=function(){u(this)},z.prototype.toggleStrikethrough=function(){d(this)},z.prototype.toggleBlockquote=function(){f(this)},z.prototype.toggleHeadingSmaller=function(){p(this)},z.prototype.toggleHeadingBigger=function(){m(this)},z.prototype.toggleHeading1=function(){g(this)},z.prototype.toggleHeading2=function(){v(this)},z.prototype.toggleHeading3=function(){y(this)},z.prototype.toggleCodeBlock=function(){h(this)},z.prototype.toggleUnorderedList=function(){x(this)},z.prototype.toggleOrderedList=function(){b(this)},z.prototype.cleanBlock=function(){w(this)},z.prototype.drawLink=function(){k(this)},z.prototype.drawImage=function(){C(this)},z.prototype.drawTable=function(){S(this)},z.prototype.drawHorizontalRule=function(){L(this)},z.prototype.undo=function(){T(this)},z.prototype.redo=function(){M(this)},z.prototype.togglePreview=function(){A(this)},z.prototype.toggleSideBySide=function(){N(this)},z.prototype.toggleFullScreen=function(){s(this)},z.prototype.isPreviewActive=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.lastChild;return/editor-preview-active/.test(n.className)},z.prototype.isSideBySideActive=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;return/editor-preview-active-side/.test(n.className)},z.prototype.isFullscreenActive=function(){var e=this.codemirror;return e.getOption("fullScreen")},z.prototype.getState=function(){var e=this.codemirror;return a(e)},z.prototype.toTextArea=function(){var e=this.codemirror,t=e.getWrapperElement();t.parentNode.removeChild(this.gui.toolbar),t.parentNode.removeChild(this.gui.statusbar),t.parentNode.removeChild(this.gui.sideBySide),e.toTextArea(),this.autosaveTimeoutId&&(clearTimeout(this.autosaveTimeoutId),this.autosaveTimeoutId=void 0,this.clearAutosavedValue())},t.exports=z},{"./codemirror/tablist":13,codemirror:7,"codemirror/addon/display/fullscreen.js":3,"codemirror/addon/display/placeholder.js":4,"codemirror/addon/edit/continuelist.js":5,"codemirror/addon/mode/overlay.js":6,"codemirror/mode/gfm/gfm.js":8,"codemirror/mode/markdown/markdown.js":9,"codemirror/mode/xml/xml.js":11,marked:12,"spell-checker":1}]},{},[14])(14)});
  17311. /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  17312. /***/ },
  17313. /* 162 */
  17314. /***/ function(module, exports, __webpack_require__) {
  17315. var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
  17316. * jQuery JavaScript Library v2.2.3
  17317. * http://jquery.com/
  17318. *
  17319. * Includes Sizzle.js
  17320. * http://sizzlejs.com/
  17321. *
  17322. * Copyright jQuery Foundation and other contributors
  17323. * Released under the MIT license
  17324. * http://jquery.org/license
  17325. *
  17326. * Date: 2016-04-05T19:26Z
  17327. */
  17328. (function( global, factory ) {
  17329. if ( typeof module === "object" && typeof module.exports === "object" ) {
  17330. // For CommonJS and CommonJS-like environments where a proper `window`
  17331. // is present, execute the factory and get jQuery.
  17332. // For environments that do not have a `window` with a `document`
  17333. // (such as Node.js), expose a factory as module.exports.
  17334. // This accentuates the need for the creation of a real `window`.
  17335. // e.g. var jQuery = require("jquery")(window);
  17336. // See ticket #14549 for more info.
  17337. module.exports = global.document ?
  17338. factory( global, true ) :
  17339. function( w ) {
  17340. if ( !w.document ) {
  17341. throw new Error( "jQuery requires a window with a document" );
  17342. }
  17343. return factory( w );
  17344. };
  17345. } else {
  17346. factory( global );
  17347. }
  17348. // Pass this if window is not defined yet
  17349. }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
  17350. // Support: Firefox 18+
  17351. // Can't be in strict mode, several libs including ASP.NET trace
  17352. // the stack via arguments.caller.callee and Firefox dies if
  17353. // you try to trace through "use strict" call chains. (#13335)
  17354. //"use strict";
  17355. var arr = [];
  17356. var document = window.document;
  17357. var slice = arr.slice;
  17358. var concat = arr.concat;
  17359. var push = arr.push;
  17360. var indexOf = arr.indexOf;
  17361. var class2type = {};
  17362. var toString = class2type.toString;
  17363. var hasOwn = class2type.hasOwnProperty;
  17364. var support = {};
  17365. var
  17366. version = "2.2.3",
  17367. // Define a local copy of jQuery
  17368. jQuery = function( selector, context ) {
  17369. // The jQuery object is actually just the init constructor 'enhanced'
  17370. // Need init if jQuery is called (just allow error to be thrown if not included)
  17371. return new jQuery.fn.init( selector, context );
  17372. },
  17373. // Support: Android<4.1
  17374. // Make sure we trim BOM and NBSP
  17375. rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
  17376. // Matches dashed string for camelizing
  17377. rmsPrefix = /^-ms-/,
  17378. rdashAlpha = /-([\da-z])/gi,
  17379. // Used by jQuery.camelCase as callback to replace()
  17380. fcamelCase = function( all, letter ) {
  17381. return letter.toUpperCase();
  17382. };
  17383. jQuery.fn = jQuery.prototype = {
  17384. // The current version of jQuery being used
  17385. jquery: version,
  17386. constructor: jQuery,
  17387. // Start with an empty selector
  17388. selector: "",
  17389. // The default length of a jQuery object is 0
  17390. length: 0,
  17391. toArray: function() {
  17392. return slice.call( this );
  17393. },
  17394. // Get the Nth element in the matched element set OR
  17395. // Get the whole matched element set as a clean array
  17396. get: function( num ) {
  17397. return num != null ?
  17398. // Return just the one element from the set
  17399. ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
  17400. // Return all the elements in a clean array
  17401. slice.call( this );
  17402. },
  17403. // Take an array of elements and push it onto the stack
  17404. // (returning the new matched element set)
  17405. pushStack: function( elems ) {
  17406. // Build a new jQuery matched element set
  17407. var ret = jQuery.merge( this.constructor(), elems );
  17408. // Add the old object onto the stack (as a reference)
  17409. ret.prevObject = this;
  17410. ret.context = this.context;
  17411. // Return the newly-formed element set
  17412. return ret;
  17413. },
  17414. // Execute a callback for every element in the matched set.
  17415. each: function( callback ) {
  17416. return jQuery.each( this, callback );
  17417. },
  17418. map: function( callback ) {
  17419. return this.pushStack( jQuery.map( this, function( elem, i ) {
  17420. return callback.call( elem, i, elem );
  17421. } ) );
  17422. },
  17423. slice: function() {
  17424. return this.pushStack( slice.apply( this, arguments ) );
  17425. },
  17426. first: function() {
  17427. return this.eq( 0 );
  17428. },
  17429. last: function() {
  17430. return this.eq( -1 );
  17431. },
  17432. eq: function( i ) {
  17433. var len = this.length,
  17434. j = +i + ( i < 0 ? len : 0 );
  17435. return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
  17436. },
  17437. end: function() {
  17438. return this.prevObject || this.constructor();
  17439. },
  17440. // For internal use only.
  17441. // Behaves like an Array's method, not like a jQuery method.
  17442. push: push,
  17443. sort: arr.sort,
  17444. splice: arr.splice
  17445. };
  17446. jQuery.extend = jQuery.fn.extend = function() {
  17447. var options, name, src, copy, copyIsArray, clone,
  17448. target = arguments[ 0 ] || {},
  17449. i = 1,
  17450. length = arguments.length,
  17451. deep = false;
  17452. // Handle a deep copy situation
  17453. if ( typeof target === "boolean" ) {
  17454. deep = target;
  17455. // Skip the boolean and the target
  17456. target = arguments[ i ] || {};
  17457. i++;
  17458. }
  17459. // Handle case when target is a string or something (possible in deep copy)
  17460. if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
  17461. target = {};
  17462. }
  17463. // Extend jQuery itself if only one argument is passed
  17464. if ( i === length ) {
  17465. target = this;
  17466. i--;
  17467. }
  17468. for ( ; i < length; i++ ) {
  17469. // Only deal with non-null/undefined values
  17470. if ( ( options = arguments[ i ] ) != null ) {
  17471. // Extend the base object
  17472. for ( name in options ) {
  17473. src = target[ name ];
  17474. copy = options[ name ];
  17475. // Prevent never-ending loop
  17476. if ( target === copy ) {
  17477. continue;
  17478. }
  17479. // Recurse if we're merging plain objects or arrays
  17480. if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
  17481. ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
  17482. if ( copyIsArray ) {
  17483. copyIsArray = false;
  17484. clone = src && jQuery.isArray( src ) ? src : [];
  17485. } else {
  17486. clone = src && jQuery.isPlainObject( src ) ? src : {};
  17487. }
  17488. // Never move original objects, clone them
  17489. target[ name ] = jQuery.extend( deep, clone, copy );
  17490. // Don't bring in undefined values
  17491. } else if ( copy !== undefined ) {
  17492. target[ name ] = copy;
  17493. }
  17494. }
  17495. }
  17496. }
  17497. // Return the modified object
  17498. return target;
  17499. };
  17500. jQuery.extend( {
  17501. // Unique for each copy of jQuery on the page
  17502. expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
  17503. // Assume jQuery is ready without the ready module
  17504. isReady: true,
  17505. error: function( msg ) {
  17506. throw new Error( msg );
  17507. },
  17508. noop: function() {},
  17509. isFunction: function( obj ) {
  17510. return jQuery.type( obj ) === "function";
  17511. },
  17512. isArray: Array.isArray,
  17513. isWindow: function( obj ) {
  17514. return obj != null && obj === obj.window;
  17515. },
  17516. isNumeric: function( obj ) {
  17517. // parseFloat NaNs numeric-cast false positives (null|true|false|"")
  17518. // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
  17519. // subtraction forces infinities to NaN
  17520. // adding 1 corrects loss of precision from parseFloat (#15100)
  17521. var realStringObj = obj && obj.toString();
  17522. return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
  17523. },
  17524. isPlainObject: function( obj ) {
  17525. var key;
  17526. // Not plain objects:
  17527. // - Any object or value whose internal [[Class]] property is not "[object Object]"
  17528. // - DOM nodes
  17529. // - window
  17530. if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
  17531. return false;
  17532. }
  17533. // Not own constructor property must be Object
  17534. if ( obj.constructor &&
  17535. !hasOwn.call( obj, "constructor" ) &&
  17536. !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) {
  17537. return false;
  17538. }
  17539. // Own properties are enumerated firstly, so to speed up,
  17540. // if last one is own, then all properties are own
  17541. for ( key in obj ) {}
  17542. return key === undefined || hasOwn.call( obj, key );
  17543. },
  17544. isEmptyObject: function( obj ) {
  17545. var name;
  17546. for ( name in obj ) {
  17547. return false;
  17548. }
  17549. return true;
  17550. },
  17551. type: function( obj ) {
  17552. if ( obj == null ) {
  17553. return obj + "";
  17554. }
  17555. // Support: Android<4.0, iOS<6 (functionish RegExp)
  17556. return typeof obj === "object" || typeof obj === "function" ?
  17557. class2type[ toString.call( obj ) ] || "object" :
  17558. typeof obj;
  17559. },
  17560. // Evaluates a script in a global context
  17561. globalEval: function( code ) {
  17562. var script,
  17563. indirect = eval;
  17564. code = jQuery.trim( code );
  17565. if ( code ) {
  17566. // If the code includes a valid, prologue position
  17567. // strict mode pragma, execute code by injecting a
  17568. // script tag into the document.
  17569. if ( code.indexOf( "use strict" ) === 1 ) {
  17570. script = document.createElement( "script" );
  17571. script.text = code;
  17572. document.head.appendChild( script ).parentNode.removeChild( script );
  17573. } else {
  17574. // Otherwise, avoid the DOM node creation, insertion
  17575. // and removal by using an indirect global eval
  17576. indirect( code );
  17577. }
  17578. }
  17579. },
  17580. // Convert dashed to camelCase; used by the css and data modules
  17581. // Support: IE9-11+
  17582. // Microsoft forgot to hump their vendor prefix (#9572)
  17583. camelCase: function( string ) {
  17584. return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
  17585. },
  17586. nodeName: function( elem, name ) {
  17587. return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
  17588. },
  17589. each: function( obj, callback ) {
  17590. var length, i = 0;
  17591. if ( isArrayLike( obj ) ) {
  17592. length = obj.length;
  17593. for ( ; i < length; i++ ) {
  17594. if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
  17595. break;
  17596. }
  17597. }
  17598. } else {
  17599. for ( i in obj ) {
  17600. if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
  17601. break;
  17602. }
  17603. }
  17604. }
  17605. return obj;
  17606. },
  17607. // Support: Android<4.1
  17608. trim: function( text ) {
  17609. return text == null ?
  17610. "" :
  17611. ( text + "" ).replace( rtrim, "" );
  17612. },
  17613. // results is for internal usage only
  17614. makeArray: function( arr, results ) {
  17615. var ret = results || [];
  17616. if ( arr != null ) {
  17617. if ( isArrayLike( Object( arr ) ) ) {
  17618. jQuery.merge( ret,
  17619. typeof arr === "string" ?
  17620. [ arr ] : arr
  17621. );
  17622. } else {
  17623. push.call( ret, arr );
  17624. }
  17625. }
  17626. return ret;
  17627. },
  17628. inArray: function( elem, arr, i ) {
  17629. return arr == null ? -1 : indexOf.call( arr, elem, i );
  17630. },
  17631. merge: function( first, second ) {
  17632. var len = +second.length,
  17633. j = 0,
  17634. i = first.length;
  17635. for ( ; j < len; j++ ) {
  17636. first[ i++ ] = second[ j ];
  17637. }
  17638. first.length = i;
  17639. return first;
  17640. },
  17641. grep: function( elems, callback, invert ) {
  17642. var callbackInverse,
  17643. matches = [],
  17644. i = 0,
  17645. length = elems.length,
  17646. callbackExpect = !invert;
  17647. // Go through the array, only saving the items
  17648. // that pass the validator function
  17649. for ( ; i < length; i++ ) {
  17650. callbackInverse = !callback( elems[ i ], i );
  17651. if ( callbackInverse !== callbackExpect ) {
  17652. matches.push( elems[ i ] );
  17653. }
  17654. }
  17655. return matches;
  17656. },
  17657. // arg is for internal usage only
  17658. map: function( elems, callback, arg ) {
  17659. var length, value,
  17660. i = 0,
  17661. ret = [];
  17662. // Go through the array, translating each of the items to their new values
  17663. if ( isArrayLike( elems ) ) {
  17664. length = elems.length;
  17665. for ( ; i < length; i++ ) {
  17666. value = callback( elems[ i ], i, arg );
  17667. if ( value != null ) {
  17668. ret.push( value );
  17669. }
  17670. }
  17671. // Go through every key on the object,
  17672. } else {
  17673. for ( i in elems ) {
  17674. value = callback( elems[ i ], i, arg );
  17675. if ( value != null ) {
  17676. ret.push( value );
  17677. }
  17678. }
  17679. }
  17680. // Flatten any nested arrays
  17681. return concat.apply( [], ret );
  17682. },
  17683. // A global GUID counter for objects
  17684. guid: 1,
  17685. // Bind a function to a context, optionally partially applying any
  17686. // arguments.
  17687. proxy: function( fn, context ) {
  17688. var tmp, args, proxy;
  17689. if ( typeof context === "string" ) {
  17690. tmp = fn[ context ];
  17691. context = fn;
  17692. fn = tmp;
  17693. }
  17694. // Quick check to determine if target is callable, in the spec
  17695. // this throws a TypeError, but we will just return undefined.
  17696. if ( !jQuery.isFunction( fn ) ) {
  17697. return undefined;
  17698. }
  17699. // Simulated bind
  17700. args = slice.call( arguments, 2 );
  17701. proxy = function() {
  17702. return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
  17703. };
  17704. // Set the guid of unique handler to the same of original handler, so it can be removed
  17705. proxy.guid = fn.guid = fn.guid || jQuery.guid++;
  17706. return proxy;
  17707. },
  17708. now: Date.now,
  17709. // jQuery.support is not used in Core but other projects attach their
  17710. // properties to it so it needs to exist.
  17711. support: support
  17712. } );
  17713. // JSHint would error on this code due to the Symbol not being defined in ES5.
  17714. // Defining this global in .jshintrc would create a danger of using the global
  17715. // unguarded in another place, it seems safer to just disable JSHint for these
  17716. // three lines.
  17717. /* jshint ignore: start */
  17718. if ( typeof Symbol === "function" ) {
  17719. jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
  17720. }
  17721. /* jshint ignore: end */
  17722. // Populate the class2type map
  17723. jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
  17724. function( i, name ) {
  17725. class2type[ "[object " + name + "]" ] = name.toLowerCase();
  17726. } );
  17727. function isArrayLike( obj ) {
  17728. // Support: iOS 8.2 (not reproducible in simulator)
  17729. // `in` check used to prevent JIT error (gh-2145)
  17730. // hasOwn isn't used here due to false negatives
  17731. // regarding Nodelist length in IE
  17732. var length = !!obj && "length" in obj && obj.length,
  17733. type = jQuery.type( obj );
  17734. if ( type === "function" || jQuery.isWindow( obj ) ) {
  17735. return false;
  17736. }
  17737. return type === "array" || length === 0 ||
  17738. typeof length === "number" && length > 0 && ( length - 1 ) in obj;
  17739. }
  17740. var Sizzle =
  17741. /*!
  17742. * Sizzle CSS Selector Engine v2.2.1
  17743. * http://sizzlejs.com/
  17744. *
  17745. * Copyright jQuery Foundation and other contributors
  17746. * Released under the MIT license
  17747. * http://jquery.org/license
  17748. *
  17749. * Date: 2015-10-17
  17750. */
  17751. (function( window ) {
  17752. var i,
  17753. support,
  17754. Expr,
  17755. getText,
  17756. isXML,
  17757. tokenize,
  17758. compile,
  17759. select,
  17760. outermostContext,
  17761. sortInput,
  17762. hasDuplicate,
  17763. // Local document vars
  17764. setDocument,
  17765. document,
  17766. docElem,
  17767. documentIsHTML,
  17768. rbuggyQSA,
  17769. rbuggyMatches,
  17770. matches,
  17771. contains,
  17772. // Instance-specific data
  17773. expando = "sizzle" + 1 * new Date(),
  17774. preferredDoc = window.document,
  17775. dirruns = 0,
  17776. done = 0,
  17777. classCache = createCache(),
  17778. tokenCache = createCache(),
  17779. compilerCache = createCache(),
  17780. sortOrder = function( a, b ) {
  17781. if ( a === b ) {
  17782. hasDuplicate = true;
  17783. }
  17784. return 0;
  17785. },
  17786. // General-purpose constants
  17787. MAX_NEGATIVE = 1 << 31,
  17788. // Instance methods
  17789. hasOwn = ({}).hasOwnProperty,
  17790. arr = [],
  17791. pop = arr.pop,
  17792. push_native = arr.push,
  17793. push = arr.push,
  17794. slice = arr.slice,
  17795. // Use a stripped-down indexOf as it's faster than native
  17796. // http://jsperf.com/thor-indexof-vs-for/5
  17797. indexOf = function( list, elem ) {
  17798. var i = 0,
  17799. len = list.length;
  17800. for ( ; i < len; i++ ) {
  17801. if ( list[i] === elem ) {
  17802. return i;
  17803. }
  17804. }
  17805. return -1;
  17806. },
  17807. booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
  17808. // Regular expressions
  17809. // http://www.w3.org/TR/css3-selectors/#whitespace
  17810. whitespace = "[\\x20\\t\\r\\n\\f]",
  17811. // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
  17812. identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
  17813. // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
  17814. attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
  17815. // Operator (capture 2)
  17816. "*([*^$|!~]?=)" + whitespace +
  17817. // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
  17818. "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
  17819. "*\\]",
  17820. pseudos = ":(" + identifier + ")(?:\\((" +
  17821. // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
  17822. // 1. quoted (capture 3; capture 4 or capture 5)
  17823. "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
  17824. // 2. simple (capture 6)
  17825. "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
  17826. // 3. anything else (capture 2)
  17827. ".*" +
  17828. ")\\)|)",
  17829. // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
  17830. rwhitespace = new RegExp( whitespace + "+", "g" ),
  17831. rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
  17832. rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
  17833. rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
  17834. rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
  17835. rpseudo = new RegExp( pseudos ),
  17836. ridentifier = new RegExp( "^" + identifier + "$" ),
  17837. matchExpr = {
  17838. "ID": new RegExp( "^#(" + identifier + ")" ),
  17839. "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
  17840. "TAG": new RegExp( "^(" + identifier + "|[*])" ),
  17841. "ATTR": new RegExp( "^" + attributes ),
  17842. "PSEUDO": new RegExp( "^" + pseudos ),
  17843. "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
  17844. "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
  17845. "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
  17846. "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
  17847. // For use in libraries implementing .is()
  17848. // We use this for POS matching in `select`
  17849. "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
  17850. whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
  17851. },
  17852. rinputs = /^(?:input|select|textarea|button)$/i,
  17853. rheader = /^h\d$/i,
  17854. rnative = /^[^{]+\{\s*\[native \w/,
  17855. // Easily-parseable/retrievable ID or TAG or CLASS selectors
  17856. rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
  17857. rsibling = /[+~]/,
  17858. rescape = /'|\\/g,
  17859. // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
  17860. runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
  17861. funescape = function( _, escaped, escapedWhitespace ) {
  17862. var high = "0x" + escaped - 0x10000;
  17863. // NaN means non-codepoint
  17864. // Support: Firefox<24
  17865. // Workaround erroneous numeric interpretation of +"0x"
  17866. return high !== high || escapedWhitespace ?
  17867. escaped :
  17868. high < 0 ?
  17869. // BMP codepoint
  17870. String.fromCharCode( high + 0x10000 ) :
  17871. // Supplemental Plane codepoint (surrogate pair)
  17872. String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
  17873. },
  17874. // Used for iframes
  17875. // See setDocument()
  17876. // Removing the function wrapper causes a "Permission Denied"
  17877. // error in IE
  17878. unloadHandler = function() {
  17879. setDocument();
  17880. };
  17881. // Optimize for push.apply( _, NodeList )
  17882. try {
  17883. push.apply(
  17884. (arr = slice.call( preferredDoc.childNodes )),
  17885. preferredDoc.childNodes
  17886. );
  17887. // Support: Android<4.0
  17888. // Detect silently failing push.apply
  17889. arr[ preferredDoc.childNodes.length ].nodeType;
  17890. } catch ( e ) {
  17891. push = { apply: arr.length ?
  17892. // Leverage slice if possible
  17893. function( target, els ) {
  17894. push_native.apply( target, slice.call(els) );
  17895. } :
  17896. // Support: IE<9
  17897. // Otherwise append directly
  17898. function( target, els ) {
  17899. var j = target.length,
  17900. i = 0;
  17901. // Can't trust NodeList.length
  17902. while ( (target[j++] = els[i++]) ) {}
  17903. target.length = j - 1;
  17904. }
  17905. };
  17906. }
  17907. function Sizzle( selector, context, results, seed ) {
  17908. var m, i, elem, nid, nidselect, match, groups, newSelector,
  17909. newContext = context && context.ownerDocument,
  17910. // nodeType defaults to 9, since context defaults to document
  17911. nodeType = context ? context.nodeType : 9;
  17912. results = results || [];
  17913. // Return early from calls with invalid selector or context
  17914. if ( typeof selector !== "string" || !selector ||
  17915. nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
  17916. return results;
  17917. }
  17918. // Try to shortcut find operations (as opposed to filters) in HTML documents
  17919. if ( !seed ) {
  17920. if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
  17921. setDocument( context );
  17922. }
  17923. context = context || document;
  17924. if ( documentIsHTML ) {
  17925. // If the selector is sufficiently simple, try using a "get*By*" DOM method
  17926. // (excepting DocumentFragment context, where the methods don't exist)
  17927. if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
  17928. // ID selector
  17929. if ( (m = match[1]) ) {
  17930. // Document context
  17931. if ( nodeType === 9 ) {
  17932. if ( (elem = context.getElementById( m )) ) {
  17933. // Support: IE, Opera, Webkit
  17934. // TODO: identify versions
  17935. // getElementById can match elements by name instead of ID
  17936. if ( elem.id === m ) {
  17937. results.push( elem );
  17938. return results;
  17939. }
  17940. } else {
  17941. return results;
  17942. }
  17943. // Element context
  17944. } else {
  17945. // Support: IE, Opera, Webkit
  17946. // TODO: identify versions
  17947. // getElementById can match elements by name instead of ID
  17948. if ( newContext && (elem = newContext.getElementById( m )) &&
  17949. contains( context, elem ) &&
  17950. elem.id === m ) {
  17951. results.push( elem );
  17952. return results;
  17953. }
  17954. }
  17955. // Type selector
  17956. } else if ( match[2] ) {
  17957. push.apply( results, context.getElementsByTagName( selector ) );
  17958. return results;
  17959. // Class selector
  17960. } else if ( (m = match[3]) && support.getElementsByClassName &&
  17961. context.getElementsByClassName ) {
  17962. push.apply( results, context.getElementsByClassName( m ) );
  17963. return results;
  17964. }
  17965. }
  17966. // Take advantage of querySelectorAll
  17967. if ( support.qsa &&
  17968. !compilerCache[ selector + " " ] &&
  17969. (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
  17970. if ( nodeType !== 1 ) {
  17971. newContext = context;
  17972. newSelector = selector;
  17973. // qSA looks outside Element context, which is not what we want
  17974. // Thanks to Andrew Dupont for this workaround technique
  17975. // Support: IE <=8
  17976. // Exclude object elements
  17977. } else if ( context.nodeName.toLowerCase() !== "object" ) {
  17978. // Capture the context ID, setting it first if necessary
  17979. if ( (nid = context.getAttribute( "id" )) ) {
  17980. nid = nid.replace( rescape, "\\$&" );
  17981. } else {
  17982. context.setAttribute( "id", (nid = expando) );
  17983. }
  17984. // Prefix every selector in the list
  17985. groups = tokenize( selector );
  17986. i = groups.length;
  17987. nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
  17988. while ( i-- ) {
  17989. groups[i] = nidselect + " " + toSelector( groups[i] );
  17990. }
  17991. newSelector = groups.join( "," );
  17992. // Expand context for sibling selectors
  17993. newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
  17994. context;
  17995. }
  17996. if ( newSelector ) {
  17997. try {
  17998. push.apply( results,
  17999. newContext.querySelectorAll( newSelector )
  18000. );
  18001. return results;
  18002. } catch ( qsaError ) {
  18003. } finally {
  18004. if ( nid === expando ) {
  18005. context.removeAttribute( "id" );
  18006. }
  18007. }
  18008. }
  18009. }
  18010. }
  18011. }
  18012. // All others
  18013. return select( selector.replace( rtrim, "$1" ), context, results, seed );
  18014. }
  18015. /**
  18016. * Create key-value caches of limited size
  18017. * @returns {function(string, object)} Returns the Object data after storing it on itself with
  18018. * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
  18019. * deleting the oldest entry
  18020. */
  18021. function createCache() {
  18022. var keys = [];
  18023. function cache( key, value ) {
  18024. // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
  18025. if ( keys.push( key + " " ) > Expr.cacheLength ) {
  18026. // Only keep the most recent entries
  18027. delete cache[ keys.shift() ];
  18028. }
  18029. return (cache[ key + " " ] = value);
  18030. }
  18031. return cache;
  18032. }
  18033. /**
  18034. * Mark a function for special use by Sizzle
  18035. * @param {Function} fn The function to mark
  18036. */
  18037. function markFunction( fn ) {
  18038. fn[ expando ] = true;
  18039. return fn;
  18040. }
  18041. /**
  18042. * Support testing using an element
  18043. * @param {Function} fn Passed the created div and expects a boolean result
  18044. */
  18045. function assert( fn ) {
  18046. var div = document.createElement("div");
  18047. try {
  18048. return !!fn( div );
  18049. } catch (e) {
  18050. return false;
  18051. } finally {
  18052. // Remove from its parent by default
  18053. if ( div.parentNode ) {
  18054. div.parentNode.removeChild( div );
  18055. }
  18056. // release memory in IE
  18057. div = null;
  18058. }
  18059. }
  18060. /**
  18061. * Adds the same handler for all of the specified attrs
  18062. * @param {String} attrs Pipe-separated list of attributes
  18063. * @param {Function} handler The method that will be applied
  18064. */
  18065. function addHandle( attrs, handler ) {
  18066. var arr = attrs.split("|"),
  18067. i = arr.length;
  18068. while ( i-- ) {
  18069. Expr.attrHandle[ arr[i] ] = handler;
  18070. }
  18071. }
  18072. /**
  18073. * Checks document order of two siblings
  18074. * @param {Element} a
  18075. * @param {Element} b
  18076. * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
  18077. */
  18078. function siblingCheck( a, b ) {
  18079. var cur = b && a,
  18080. diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
  18081. ( ~b.sourceIndex || MAX_NEGATIVE ) -
  18082. ( ~a.sourceIndex || MAX_NEGATIVE );
  18083. // Use IE sourceIndex if available on both nodes
  18084. if ( diff ) {
  18085. return diff;
  18086. }
  18087. // Check if b follows a
  18088. if ( cur ) {
  18089. while ( (cur = cur.nextSibling) ) {
  18090. if ( cur === b ) {
  18091. return -1;
  18092. }
  18093. }
  18094. }
  18095. return a ? 1 : -1;
  18096. }
  18097. /**
  18098. * Returns a function to use in pseudos for input types
  18099. * @param {String} type
  18100. */
  18101. function createInputPseudo( type ) {
  18102. return function( elem ) {
  18103. var name = elem.nodeName.toLowerCase();
  18104. return name === "input" && elem.type === type;
  18105. };
  18106. }
  18107. /**
  18108. * Returns a function to use in pseudos for buttons
  18109. * @param {String} type
  18110. */
  18111. function createButtonPseudo( type ) {
  18112. return function( elem ) {
  18113. var name = elem.nodeName.toLowerCase();
  18114. return (name === "input" || name === "button") && elem.type === type;
  18115. };
  18116. }
  18117. /**
  18118. * Returns a function to use in pseudos for positionals
  18119. * @param {Function} fn
  18120. */
  18121. function createPositionalPseudo( fn ) {
  18122. return markFunction(function( argument ) {
  18123. argument = +argument;
  18124. return markFunction(function( seed, matches ) {
  18125. var j,
  18126. matchIndexes = fn( [], seed.length, argument ),
  18127. i = matchIndexes.length;
  18128. // Match elements found at the specified indexes
  18129. while ( i-- ) {
  18130. if ( seed[ (j = matchIndexes[i]) ] ) {
  18131. seed[j] = !(matches[j] = seed[j]);
  18132. }
  18133. }
  18134. });
  18135. });
  18136. }
  18137. /**
  18138. * Checks a node for validity as a Sizzle context
  18139. * @param {Element|Object=} context
  18140. * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
  18141. */
  18142. function testContext( context ) {
  18143. return context && typeof context.getElementsByTagName !== "undefined" && context;
  18144. }
  18145. // Expose support vars for convenience
  18146. support = Sizzle.support = {};
  18147. /**
  18148. * Detects XML nodes
  18149. * @param {Element|Object} elem An element or a document
  18150. * @returns {Boolean} True iff elem is a non-HTML XML node
  18151. */
  18152. isXML = Sizzle.isXML = function( elem ) {
  18153. // documentElement is verified for cases where it doesn't yet exist
  18154. // (such as loading iframes in IE - #4833)
  18155. var documentElement = elem && (elem.ownerDocument || elem).documentElement;
  18156. return documentElement ? documentElement.nodeName !== "HTML" : false;
  18157. };
  18158. /**
  18159. * Sets document-related variables once based on the current document
  18160. * @param {Element|Object} [doc] An element or document object to use to set the document
  18161. * @returns {Object} Returns the current document
  18162. */
  18163. setDocument = Sizzle.setDocument = function( node ) {
  18164. var hasCompare, parent,
  18165. doc = node ? node.ownerDocument || node : preferredDoc;
  18166. // Return early if doc is invalid or already selected
  18167. if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
  18168. return document;
  18169. }
  18170. // Update global variables
  18171. document = doc;
  18172. docElem = document.documentElement;
  18173. documentIsHTML = !isXML( document );
  18174. // Support: IE 9-11, Edge
  18175. // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
  18176. if ( (parent = document.defaultView) && parent.top !== parent ) {
  18177. // Support: IE 11
  18178. if ( parent.addEventListener ) {
  18179. parent.addEventListener( "unload", unloadHandler, false );
  18180. // Support: IE 9 - 10 only
  18181. } else if ( parent.attachEvent ) {
  18182. parent.attachEvent( "onunload", unloadHandler );
  18183. }
  18184. }
  18185. /* Attributes
  18186. ---------------------------------------------------------------------- */
  18187. // Support: IE<8
  18188. // Verify that getAttribute really returns attributes and not properties
  18189. // (excepting IE8 booleans)
  18190. support.attributes = assert(function( div ) {
  18191. div.className = "i";
  18192. return !div.getAttribute("className");
  18193. });
  18194. /* getElement(s)By*
  18195. ---------------------------------------------------------------------- */
  18196. // Check if getElementsByTagName("*") returns only elements
  18197. support.getElementsByTagName = assert(function( div ) {
  18198. div.appendChild( document.createComment("") );
  18199. return !div.getElementsByTagName("*").length;
  18200. });
  18201. // Support: IE<9
  18202. support.getElementsByClassName = rnative.test( document.getElementsByClassName );
  18203. // Support: IE<10
  18204. // Check if getElementById returns elements by name
  18205. // The broken getElementById methods don't pick up programatically-set names,
  18206. // so use a roundabout getElementsByName test
  18207. support.getById = assert(function( div ) {
  18208. docElem.appendChild( div ).id = expando;
  18209. return !document.getElementsByName || !document.getElementsByName( expando ).length;
  18210. });
  18211. // ID find and filter
  18212. if ( support.getById ) {
  18213. Expr.find["ID"] = function( id, context ) {
  18214. if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
  18215. var m = context.getElementById( id );
  18216. return m ? [ m ] : [];
  18217. }
  18218. };
  18219. Expr.filter["ID"] = function( id ) {
  18220. var attrId = id.replace( runescape, funescape );
  18221. return function( elem ) {
  18222. return elem.getAttribute("id") === attrId;
  18223. };
  18224. };
  18225. } else {
  18226. // Support: IE6/7
  18227. // getElementById is not reliable as a find shortcut
  18228. delete Expr.find["ID"];
  18229. Expr.filter["ID"] = function( id ) {
  18230. var attrId = id.replace( runescape, funescape );
  18231. return function( elem ) {
  18232. var node = typeof elem.getAttributeNode !== "undefined" &&
  18233. elem.getAttributeNode("id");
  18234. return node && node.value === attrId;
  18235. };
  18236. };
  18237. }
  18238. // Tag
  18239. Expr.find["TAG"] = support.getElementsByTagName ?
  18240. function( tag, context ) {
  18241. if ( typeof context.getElementsByTagName !== "undefined" ) {
  18242. return context.getElementsByTagName( tag );
  18243. // DocumentFragment nodes don't have gEBTN
  18244. } else if ( support.qsa ) {
  18245. return context.querySelectorAll( tag );
  18246. }
  18247. } :
  18248. function( tag, context ) {
  18249. var elem,
  18250. tmp = [],
  18251. i = 0,
  18252. // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
  18253. results = context.getElementsByTagName( tag );
  18254. // Filter out possible comments
  18255. if ( tag === "*" ) {
  18256. while ( (elem = results[i++]) ) {
  18257. if ( elem.nodeType === 1 ) {
  18258. tmp.push( elem );
  18259. }
  18260. }
  18261. return tmp;
  18262. }
  18263. return results;
  18264. };
  18265. // Class
  18266. Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
  18267. if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
  18268. return context.getElementsByClassName( className );
  18269. }
  18270. };
  18271. /* QSA/matchesSelector
  18272. ---------------------------------------------------------------------- */
  18273. // QSA and matchesSelector support
  18274. // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
  18275. rbuggyMatches = [];
  18276. // qSa(:focus) reports false when true (Chrome 21)
  18277. // We allow this because of a bug in IE8/9 that throws an error
  18278. // whenever `document.activeElement` is accessed on an iframe
  18279. // So, we allow :focus to pass through QSA all the time to avoid the IE error
  18280. // See http://bugs.jquery.com/ticket/13378
  18281. rbuggyQSA = [];
  18282. if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
  18283. // Build QSA regex
  18284. // Regex strategy adopted from Diego Perini
  18285. assert(function( div ) {
  18286. // Select is set to empty string on purpose
  18287. // This is to test IE's treatment of not explicitly
  18288. // setting a boolean content attribute,
  18289. // since its presence should be enough
  18290. // http://bugs.jquery.com/ticket/12359
  18291. docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
  18292. "<select id='" + expando + "-\r\\' msallowcapture=''>" +
  18293. "<option selected=''></option></select>";
  18294. // Support: IE8, Opera 11-12.16
  18295. // Nothing should be selected when empty strings follow ^= or $= or *=
  18296. // The test attribute must be unknown in Opera but "safe" for WinRT
  18297. // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
  18298. if ( div.querySelectorAll("[msallowcapture^='']").length ) {
  18299. rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
  18300. }
  18301. // Support: IE8
  18302. // Boolean attributes and "value" are not treated correctly
  18303. if ( !div.querySelectorAll("[selected]").length ) {
  18304. rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
  18305. }
  18306. // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
  18307. if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
  18308. rbuggyQSA.push("~=");
  18309. }
  18310. // Webkit/Opera - :checked should return selected option elements
  18311. // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
  18312. // IE8 throws error here and will not see later tests
  18313. if ( !div.querySelectorAll(":checked").length ) {
  18314. rbuggyQSA.push(":checked");
  18315. }
  18316. // Support: Safari 8+, iOS 8+
  18317. // https://bugs.webkit.org/show_bug.cgi?id=136851
  18318. // In-page `selector#id sibing-combinator selector` fails
  18319. if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
  18320. rbuggyQSA.push(".#.+[+~]");
  18321. }
  18322. });
  18323. assert(function( div ) {
  18324. // Support: Windows 8 Native Apps
  18325. // The type and name attributes are restricted during .innerHTML assignment
  18326. var input = document.createElement("input");
  18327. input.setAttribute( "type", "hidden" );
  18328. div.appendChild( input ).setAttribute( "name", "D" );
  18329. // Support: IE8
  18330. // Enforce case-sensitivity of name attribute
  18331. if ( div.querySelectorAll("[name=d]").length ) {
  18332. rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
  18333. }
  18334. // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
  18335. // IE8 throws error here and will not see later tests
  18336. if ( !div.querySelectorAll(":enabled").length ) {
  18337. rbuggyQSA.push( ":enabled", ":disabled" );
  18338. }
  18339. // Opera 10-11 does not throw on post-comma invalid pseudos
  18340. div.querySelectorAll("*,:x");
  18341. rbuggyQSA.push(",.*:");
  18342. });
  18343. }
  18344. if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
  18345. docElem.webkitMatchesSelector ||
  18346. docElem.mozMatchesSelector ||
  18347. docElem.oMatchesSelector ||
  18348. docElem.msMatchesSelector) )) ) {
  18349. assert(function( div ) {
  18350. // Check to see if it's possible to do matchesSelector
  18351. // on a disconnected node (IE 9)
  18352. support.disconnectedMatch = matches.call( div, "div" );
  18353. // This should fail with an exception
  18354. // Gecko does not error, returns false instead
  18355. matches.call( div, "[s!='']:x" );
  18356. rbuggyMatches.push( "!=", pseudos );
  18357. });
  18358. }
  18359. rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
  18360. rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
  18361. /* Contains
  18362. ---------------------------------------------------------------------- */
  18363. hasCompare = rnative.test( docElem.compareDocumentPosition );
  18364. // Element contains another
  18365. // Purposefully self-exclusive
  18366. // As in, an element does not contain itself
  18367. contains = hasCompare || rnative.test( docElem.contains ) ?
  18368. function( a, b ) {
  18369. var adown = a.nodeType === 9 ? a.documentElement : a,
  18370. bup = b && b.parentNode;
  18371. return a === bup || !!( bup && bup.nodeType === 1 && (
  18372. adown.contains ?
  18373. adown.contains( bup ) :
  18374. a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
  18375. ));
  18376. } :
  18377. function( a, b ) {
  18378. if ( b ) {
  18379. while ( (b = b.parentNode) ) {
  18380. if ( b === a ) {
  18381. return true;
  18382. }
  18383. }
  18384. }
  18385. return false;
  18386. };
  18387. /* Sorting
  18388. ---------------------------------------------------------------------- */
  18389. // Document order sorting
  18390. sortOrder = hasCompare ?
  18391. function( a, b ) {
  18392. // Flag for duplicate removal
  18393. if ( a === b ) {
  18394. hasDuplicate = true;
  18395. return 0;
  18396. }
  18397. // Sort on method existence if only one input has compareDocumentPosition
  18398. var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
  18399. if ( compare ) {
  18400. return compare;
  18401. }
  18402. // Calculate position if both inputs belong to the same document
  18403. compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
  18404. a.compareDocumentPosition( b ) :
  18405. // Otherwise we know they are disconnected
  18406. 1;
  18407. // Disconnected nodes
  18408. if ( compare & 1 ||
  18409. (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
  18410. // Choose the first element that is related to our preferred document
  18411. if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
  18412. return -1;
  18413. }
  18414. if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
  18415. return 1;
  18416. }
  18417. // Maintain original order
  18418. return sortInput ?
  18419. ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
  18420. 0;
  18421. }
  18422. return compare & 4 ? -1 : 1;
  18423. } :
  18424. function( a, b ) {
  18425. // Exit early if the nodes are identical
  18426. if ( a === b ) {
  18427. hasDuplicate = true;
  18428. return 0;
  18429. }
  18430. var cur,
  18431. i = 0,
  18432. aup = a.parentNode,
  18433. bup = b.parentNode,
  18434. ap = [ a ],
  18435. bp = [ b ];
  18436. // Parentless nodes are either documents or disconnected
  18437. if ( !aup || !bup ) {
  18438. return a === document ? -1 :
  18439. b === document ? 1 :
  18440. aup ? -1 :
  18441. bup ? 1 :
  18442. sortInput ?
  18443. ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
  18444. 0;
  18445. // If the nodes are siblings, we can do a quick check
  18446. } else if ( aup === bup ) {
  18447. return siblingCheck( a, b );
  18448. }
  18449. // Otherwise we need full lists of their ancestors for comparison
  18450. cur = a;
  18451. while ( (cur = cur.parentNode) ) {
  18452. ap.unshift( cur );
  18453. }
  18454. cur = b;
  18455. while ( (cur = cur.parentNode) ) {
  18456. bp.unshift( cur );
  18457. }
  18458. // Walk down the tree looking for a discrepancy
  18459. while ( ap[i] === bp[i] ) {
  18460. i++;
  18461. }
  18462. return i ?
  18463. // Do a sibling check if the nodes have a common ancestor
  18464. siblingCheck( ap[i], bp[i] ) :
  18465. // Otherwise nodes in our document sort first
  18466. ap[i] === preferredDoc ? -1 :
  18467. bp[i] === preferredDoc ? 1 :
  18468. 0;
  18469. };
  18470. return document;
  18471. };
  18472. Sizzle.matches = function( expr, elements ) {
  18473. return Sizzle( expr, null, null, elements );
  18474. };
  18475. Sizzle.matchesSelector = function( elem, expr ) {
  18476. // Set document vars if needed
  18477. if ( ( elem.ownerDocument || elem ) !== document ) {
  18478. setDocument( elem );
  18479. }
  18480. // Make sure that attribute selectors are quoted
  18481. expr = expr.replace( rattributeQuotes, "='$1']" );
  18482. if ( support.matchesSelector && documentIsHTML &&
  18483. !compilerCache[ expr + " " ] &&
  18484. ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
  18485. ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
  18486. try {
  18487. var ret = matches.call( elem, expr );
  18488. // IE 9's matchesSelector returns false on disconnected nodes
  18489. if ( ret || support.disconnectedMatch ||
  18490. // As well, disconnected nodes are said to be in a document
  18491. // fragment in IE 9
  18492. elem.document && elem.document.nodeType !== 11 ) {
  18493. return ret;
  18494. }
  18495. } catch (e) {}
  18496. }
  18497. return Sizzle( expr, document, null, [ elem ] ).length > 0;
  18498. };
  18499. Sizzle.contains = function( context, elem ) {
  18500. // Set document vars if needed
  18501. if ( ( context.ownerDocument || context ) !== document ) {
  18502. setDocument( context );
  18503. }
  18504. return contains( context, elem );
  18505. };
  18506. Sizzle.attr = function( elem, name ) {
  18507. // Set document vars if needed
  18508. if ( ( elem.ownerDocument || elem ) !== document ) {
  18509. setDocument( elem );
  18510. }
  18511. var fn = Expr.attrHandle[ name.toLowerCase() ],
  18512. // Don't get fooled by Object.prototype properties (jQuery #13807)
  18513. val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
  18514. fn( elem, name, !documentIsHTML ) :
  18515. undefined;
  18516. return val !== undefined ?
  18517. val :
  18518. support.attributes || !documentIsHTML ?
  18519. elem.getAttribute( name ) :
  18520. (val = elem.getAttributeNode(name)) && val.specified ?
  18521. val.value :
  18522. null;
  18523. };
  18524. Sizzle.error = function( msg ) {
  18525. throw new Error( "Syntax error, unrecognized expression: " + msg );
  18526. };
  18527. /**
  18528. * Document sorting and removing duplicates
  18529. * @param {ArrayLike} results
  18530. */
  18531. Sizzle.uniqueSort = function( results ) {
  18532. var elem,
  18533. duplicates = [],
  18534. j = 0,
  18535. i = 0;
  18536. // Unless we *know* we can detect duplicates, assume their presence
  18537. hasDuplicate = !support.detectDuplicates;
  18538. sortInput = !support.sortStable && results.slice( 0 );
  18539. results.sort( sortOrder );
  18540. if ( hasDuplicate ) {
  18541. while ( (elem = results[i++]) ) {
  18542. if ( elem === results[ i ] ) {
  18543. j = duplicates.push( i );
  18544. }
  18545. }
  18546. while ( j-- ) {
  18547. results.splice( duplicates[ j ], 1 );
  18548. }
  18549. }
  18550. // Clear input after sorting to release objects
  18551. // See https://github.com/jquery/sizzle/pull/225
  18552. sortInput = null;
  18553. return results;
  18554. };
  18555. /**
  18556. * Utility function for retrieving the text value of an array of DOM nodes
  18557. * @param {Array|Element} elem
  18558. */
  18559. getText = Sizzle.getText = function( elem ) {
  18560. var node,
  18561. ret = "",
  18562. i = 0,
  18563. nodeType = elem.nodeType;
  18564. if ( !nodeType ) {
  18565. // If no nodeType, this is expected to be an array
  18566. while ( (node = elem[i++]) ) {
  18567. // Do not traverse comment nodes
  18568. ret += getText( node );
  18569. }
  18570. } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
  18571. // Use textContent for elements
  18572. // innerText usage removed for consistency of new lines (jQuery #11153)
  18573. if ( typeof elem.textContent === "string" ) {
  18574. return elem.textContent;
  18575. } else {
  18576. // Traverse its children
  18577. for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
  18578. ret += getText( elem );
  18579. }
  18580. }
  18581. } else if ( nodeType === 3 || nodeType === 4 ) {
  18582. return elem.nodeValue;
  18583. }
  18584. // Do not include comment or processing instruction nodes
  18585. return ret;
  18586. };
  18587. Expr = Sizzle.selectors = {
  18588. // Can be adjusted by the user
  18589. cacheLength: 50,
  18590. createPseudo: markFunction,
  18591. match: matchExpr,
  18592. attrHandle: {},
  18593. find: {},
  18594. relative: {
  18595. ">": { dir: "parentNode", first: true },
  18596. " ": { dir: "parentNode" },
  18597. "+": { dir: "previousSibling", first: true },
  18598. "~": { dir: "previousSibling" }
  18599. },
  18600. preFilter: {
  18601. "ATTR": function( match ) {
  18602. match[1] = match[1].replace( runescape, funescape );
  18603. // Move the given value to match[3] whether quoted or unquoted
  18604. match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
  18605. if ( match[2] === "~=" ) {
  18606. match[3] = " " + match[3] + " ";
  18607. }
  18608. return match.slice( 0, 4 );
  18609. },
  18610. "CHILD": function( match ) {
  18611. /* matches from matchExpr["CHILD"]
  18612. 1 type (only|nth|...)
  18613. 2 what (child|of-type)
  18614. 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
  18615. 4 xn-component of xn+y argument ([+-]?\d*n|)
  18616. 5 sign of xn-component
  18617. 6 x of xn-component
  18618. 7 sign of y-component
  18619. 8 y of y-component
  18620. */
  18621. match[1] = match[1].toLowerCase();
  18622. if ( match[1].slice( 0, 3 ) === "nth" ) {
  18623. // nth-* requires argument
  18624. if ( !match[3] ) {
  18625. Sizzle.error( match[0] );
  18626. }
  18627. // numeric x and y parameters for Expr.filter.CHILD
  18628. // remember that false/true cast respectively to 0/1
  18629. match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
  18630. match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
  18631. // other types prohibit arguments
  18632. } else if ( match[3] ) {
  18633. Sizzle.error( match[0] );
  18634. }
  18635. return match;
  18636. },
  18637. "PSEUDO": function( match ) {
  18638. var excess,
  18639. unquoted = !match[6] && match[2];
  18640. if ( matchExpr["CHILD"].test( match[0] ) ) {
  18641. return null;
  18642. }
  18643. // Accept quoted arguments as-is
  18644. if ( match[3] ) {
  18645. match[2] = match[4] || match[5] || "";
  18646. // Strip excess characters from unquoted arguments
  18647. } else if ( unquoted && rpseudo.test( unquoted ) &&
  18648. // Get excess from tokenize (recursively)
  18649. (excess = tokenize( unquoted, true )) &&
  18650. // advance to the next closing parenthesis
  18651. (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
  18652. // excess is a negative index
  18653. match[0] = match[0].slice( 0, excess );
  18654. match[2] = unquoted.slice( 0, excess );
  18655. }
  18656. // Return only captures needed by the pseudo filter method (type and argument)
  18657. return match.slice( 0, 3 );
  18658. }
  18659. },
  18660. filter: {
  18661. "TAG": function( nodeNameSelector ) {
  18662. var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
  18663. return nodeNameSelector === "*" ?
  18664. function() { return true; } :
  18665. function( elem ) {
  18666. return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
  18667. };
  18668. },
  18669. "CLASS": function( className ) {
  18670. var pattern = classCache[ className + " " ];
  18671. return pattern ||
  18672. (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
  18673. classCache( className, function( elem ) {
  18674. return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
  18675. });
  18676. },
  18677. "ATTR": function( name, operator, check ) {
  18678. return function( elem ) {
  18679. var result = Sizzle.attr( elem, name );
  18680. if ( result == null ) {
  18681. return operator === "!=";
  18682. }
  18683. if ( !operator ) {
  18684. return true;
  18685. }
  18686. result += "";
  18687. return operator === "=" ? result === check :
  18688. operator === "!=" ? result !== check :
  18689. operator === "^=" ? check && result.indexOf( check ) === 0 :
  18690. operator === "*=" ? check && result.indexOf( check ) > -1 :
  18691. operator === "$=" ? check && result.slice( -check.length ) === check :
  18692. operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
  18693. operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
  18694. false;
  18695. };
  18696. },
  18697. "CHILD": function( type, what, argument, first, last ) {
  18698. var simple = type.slice( 0, 3 ) !== "nth",
  18699. forward = type.slice( -4 ) !== "last",
  18700. ofType = what === "of-type";
  18701. return first === 1 && last === 0 ?
  18702. // Shortcut for :nth-*(n)
  18703. function( elem ) {
  18704. return !!elem.parentNode;
  18705. } :
  18706. function( elem, context, xml ) {
  18707. var cache, uniqueCache, outerCache, node, nodeIndex, start,
  18708. dir = simple !== forward ? "nextSibling" : "previousSibling",
  18709. parent = elem.parentNode,
  18710. name = ofType && elem.nodeName.toLowerCase(),
  18711. useCache = !xml && !ofType,
  18712. diff = false;
  18713. if ( parent ) {
  18714. // :(first|last|only)-(child|of-type)
  18715. if ( simple ) {
  18716. while ( dir ) {
  18717. node = elem;
  18718. while ( (node = node[ dir ]) ) {
  18719. if ( ofType ?
  18720. node.nodeName.toLowerCase() === name :
  18721. node.nodeType === 1 ) {
  18722. return false;
  18723. }
  18724. }
  18725. // Reverse direction for :only-* (if we haven't yet done so)
  18726. start = dir = type === "only" && !start && "nextSibling";
  18727. }
  18728. return true;
  18729. }
  18730. start = [ forward ? parent.firstChild : parent.lastChild ];
  18731. // non-xml :nth-child(...) stores cache data on `parent`
  18732. if ( forward && useCache ) {
  18733. // Seek `elem` from a previously-cached index
  18734. // ...in a gzip-friendly way
  18735. node = parent;
  18736. outerCache = node[ expando ] || (node[ expando ] = {});
  18737. // Support: IE <9 only
  18738. // Defend against cloned attroperties (jQuery gh-1709)
  18739. uniqueCache = outerCache[ node.uniqueID ] ||
  18740. (outerCache[ node.uniqueID ] = {});
  18741. cache = uniqueCache[ type ] || [];
  18742. nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
  18743. diff = nodeIndex && cache[ 2 ];
  18744. node = nodeIndex && parent.childNodes[ nodeIndex ];
  18745. while ( (node = ++nodeIndex && node && node[ dir ] ||
  18746. // Fallback to seeking `elem` from the start
  18747. (diff = nodeIndex = 0) || start.pop()) ) {
  18748. // When found, cache indexes on `parent` and break
  18749. if ( node.nodeType === 1 && ++diff && node === elem ) {
  18750. uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
  18751. break;
  18752. }
  18753. }
  18754. } else {
  18755. // Use previously-cached element index if available
  18756. if ( useCache ) {
  18757. // ...in a gzip-friendly way
  18758. node = elem;
  18759. outerCache = node[ expando ] || (node[ expando ] = {});
  18760. // Support: IE <9 only
  18761. // Defend against cloned attroperties (jQuery gh-1709)
  18762. uniqueCache = outerCache[ node.uniqueID ] ||
  18763. (outerCache[ node.uniqueID ] = {});
  18764. cache = uniqueCache[ type ] || [];
  18765. nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
  18766. diff = nodeIndex;
  18767. }
  18768. // xml :nth-child(...)
  18769. // or :nth-last-child(...) or :nth(-last)?-of-type(...)
  18770. if ( diff === false ) {
  18771. // Use the same loop as above to seek `elem` from the start
  18772. while ( (node = ++nodeIndex && node && node[ dir ] ||
  18773. (diff = nodeIndex = 0) || start.pop()) ) {
  18774. if ( ( ofType ?
  18775. node.nodeName.toLowerCase() === name :
  18776. node.nodeType === 1 ) &&
  18777. ++diff ) {
  18778. // Cache the index of each encountered element
  18779. if ( useCache ) {
  18780. outerCache = node[ expando ] || (node[ expando ] = {});
  18781. // Support: IE <9 only
  18782. // Defend against cloned attroperties (jQuery gh-1709)
  18783. uniqueCache = outerCache[ node.uniqueID ] ||
  18784. (outerCache[ node.uniqueID ] = {});
  18785. uniqueCache[ type ] = [ dirruns, diff ];
  18786. }
  18787. if ( node === elem ) {
  18788. break;
  18789. }
  18790. }
  18791. }
  18792. }
  18793. }
  18794. // Incorporate the offset, then check against cycle size
  18795. diff -= last;
  18796. return diff === first || ( diff % first === 0 && diff / first >= 0 );
  18797. }
  18798. };
  18799. },
  18800. "PSEUDO": function( pseudo, argument ) {
  18801. // pseudo-class names are case-insensitive
  18802. // http://www.w3.org/TR/selectors/#pseudo-classes
  18803. // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
  18804. // Remember that setFilters inherits from pseudos
  18805. var args,
  18806. fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
  18807. Sizzle.error( "unsupported pseudo: " + pseudo );
  18808. // The user may use createPseudo to indicate that
  18809. // arguments are needed to create the filter function
  18810. // just as Sizzle does
  18811. if ( fn[ expando ] ) {
  18812. return fn( argument );
  18813. }
  18814. // But maintain support for old signatures
  18815. if ( fn.length > 1 ) {
  18816. args = [ pseudo, pseudo, "", argument ];
  18817. return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
  18818. markFunction(function( seed, matches ) {
  18819. var idx,
  18820. matched = fn( seed, argument ),
  18821. i = matched.length;
  18822. while ( i-- ) {
  18823. idx = indexOf( seed, matched[i] );
  18824. seed[ idx ] = !( matches[ idx ] = matched[i] );
  18825. }
  18826. }) :
  18827. function( elem ) {
  18828. return fn( elem, 0, args );
  18829. };
  18830. }
  18831. return fn;
  18832. }
  18833. },
  18834. pseudos: {
  18835. // Potentially complex pseudos
  18836. "not": markFunction(function( selector ) {
  18837. // Trim the selector passed to compile
  18838. // to avoid treating leading and trailing
  18839. // spaces as combinators
  18840. var input = [],
  18841. results = [],
  18842. matcher = compile( selector.replace( rtrim, "$1" ) );
  18843. return matcher[ expando ] ?
  18844. markFunction(function( seed, matches, context, xml ) {
  18845. var elem,
  18846. unmatched = matcher( seed, null, xml, [] ),
  18847. i = seed.length;
  18848. // Match elements unmatched by `matcher`
  18849. while ( i-- ) {
  18850. if ( (elem = unmatched[i]) ) {
  18851. seed[i] = !(matches[i] = elem);
  18852. }
  18853. }
  18854. }) :
  18855. function( elem, context, xml ) {
  18856. input[0] = elem;
  18857. matcher( input, null, xml, results );
  18858. // Don't keep the element (issue #299)
  18859. input[0] = null;
  18860. return !results.pop();
  18861. };
  18862. }),
  18863. "has": markFunction(function( selector ) {
  18864. return function( elem ) {
  18865. return Sizzle( selector, elem ).length > 0;
  18866. };
  18867. }),
  18868. "contains": markFunction(function( text ) {
  18869. text = text.replace( runescape, funescape );
  18870. return function( elem ) {
  18871. return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
  18872. };
  18873. }),
  18874. // "Whether an element is represented by a :lang() selector
  18875. // is based solely on the element's language value
  18876. // being equal to the identifier C,
  18877. // or beginning with the identifier C immediately followed by "-".
  18878. // The matching of C against the element's language value is performed case-insensitively.
  18879. // The identifier C does not have to be a valid language name."
  18880. // http://www.w3.org/TR/selectors/#lang-pseudo
  18881. "lang": markFunction( function( lang ) {
  18882. // lang value must be a valid identifier
  18883. if ( !ridentifier.test(lang || "") ) {
  18884. Sizzle.error( "unsupported lang: " + lang );
  18885. }
  18886. lang = lang.replace( runescape, funescape ).toLowerCase();
  18887. return function( elem ) {
  18888. var elemLang;
  18889. do {
  18890. if ( (elemLang = documentIsHTML ?
  18891. elem.lang :
  18892. elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
  18893. elemLang = elemLang.toLowerCase();
  18894. return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
  18895. }
  18896. } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
  18897. return false;
  18898. };
  18899. }),
  18900. // Miscellaneous
  18901. "target": function( elem ) {
  18902. var hash = window.location && window.location.hash;
  18903. return hash && hash.slice( 1 ) === elem.id;
  18904. },
  18905. "root": function( elem ) {
  18906. return elem === docElem;
  18907. },
  18908. "focus": function( elem ) {
  18909. return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
  18910. },
  18911. // Boolean properties
  18912. "enabled": function( elem ) {
  18913. return elem.disabled === false;
  18914. },
  18915. "disabled": function( elem ) {
  18916. return elem.disabled === true;
  18917. },
  18918. "checked": function( elem ) {
  18919. // In CSS3, :checked should return both checked and selected elements
  18920. // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
  18921. var nodeName = elem.nodeName.toLowerCase();
  18922. return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
  18923. },
  18924. "selected": function( elem ) {
  18925. // Accessing this property makes selected-by-default
  18926. // options in Safari work properly
  18927. if ( elem.parentNode ) {
  18928. elem.parentNode.selectedIndex;
  18929. }
  18930. return elem.selected === true;
  18931. },
  18932. // Contents
  18933. "empty": function( elem ) {
  18934. // http://www.w3.org/TR/selectors/#empty-pseudo
  18935. // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
  18936. // but not by others (comment: 8; processing instruction: 7; etc.)
  18937. // nodeType < 6 works because attributes (2) do not appear as children
  18938. for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
  18939. if ( elem.nodeType < 6 ) {
  18940. return false;
  18941. }
  18942. }
  18943. return true;
  18944. },
  18945. "parent": function( elem ) {
  18946. return !Expr.pseudos["empty"]( elem );
  18947. },
  18948. // Element/input types
  18949. "header": function( elem ) {
  18950. return rheader.test( elem.nodeName );
  18951. },
  18952. "input": function( elem ) {
  18953. return rinputs.test( elem.nodeName );
  18954. },
  18955. "button": function( elem ) {
  18956. var name = elem.nodeName.toLowerCase();
  18957. return name === "input" && elem.type === "button" || name === "button";
  18958. },
  18959. "text": function( elem ) {
  18960. var attr;
  18961. return elem.nodeName.toLowerCase() === "input" &&
  18962. elem.type === "text" &&
  18963. // Support: IE<8
  18964. // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
  18965. ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
  18966. },
  18967. // Position-in-collection
  18968. "first": createPositionalPseudo(function() {
  18969. return [ 0 ];
  18970. }),
  18971. "last": createPositionalPseudo(function( matchIndexes, length ) {
  18972. return [ length - 1 ];
  18973. }),
  18974. "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
  18975. return [ argument < 0 ? argument + length : argument ];
  18976. }),
  18977. "even": createPositionalPseudo(function( matchIndexes, length ) {
  18978. var i = 0;
  18979. for ( ; i < length; i += 2 ) {
  18980. matchIndexes.push( i );
  18981. }
  18982. return matchIndexes;
  18983. }),
  18984. "odd": createPositionalPseudo(function( matchIndexes, length ) {
  18985. var i = 1;
  18986. for ( ; i < length; i += 2 ) {
  18987. matchIndexes.push( i );
  18988. }
  18989. return matchIndexes;
  18990. }),
  18991. "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
  18992. var i = argument < 0 ? argument + length : argument;
  18993. for ( ; --i >= 0; ) {
  18994. matchIndexes.push( i );
  18995. }
  18996. return matchIndexes;
  18997. }),
  18998. "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
  18999. var i = argument < 0 ? argument + length : argument;
  19000. for ( ; ++i < length; ) {
  19001. matchIndexes.push( i );
  19002. }
  19003. return matchIndexes;
  19004. })
  19005. }
  19006. };
  19007. Expr.pseudos["nth"] = Expr.pseudos["eq"];
  19008. // Add button/input type pseudos
  19009. for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
  19010. Expr.pseudos[ i ] = createInputPseudo( i );
  19011. }
  19012. for ( i in { submit: true, reset: true } ) {
  19013. Expr.pseudos[ i ] = createButtonPseudo( i );
  19014. }
  19015. // Easy API for creating new setFilters
  19016. function setFilters() {}
  19017. setFilters.prototype = Expr.filters = Expr.pseudos;
  19018. Expr.setFilters = new setFilters();
  19019. tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
  19020. var matched, match, tokens, type,
  19021. soFar, groups, preFilters,
  19022. cached = tokenCache[ selector + " " ];
  19023. if ( cached ) {
  19024. return parseOnly ? 0 : cached.slice( 0 );
  19025. }
  19026. soFar = selector;
  19027. groups = [];
  19028. preFilters = Expr.preFilter;
  19029. while ( soFar ) {
  19030. // Comma and first run
  19031. if ( !matched || (match = rcomma.exec( soFar )) ) {
  19032. if ( match ) {
  19033. // Don't consume trailing commas as valid
  19034. soFar = soFar.slice( match[0].length ) || soFar;
  19035. }
  19036. groups.push( (tokens = []) );
  19037. }
  19038. matched = false;
  19039. // Combinators
  19040. if ( (match = rcombinators.exec( soFar )) ) {
  19041. matched = match.shift();
  19042. tokens.push({
  19043. value: matched,
  19044. // Cast descendant combinators to space
  19045. type: match[0].replace( rtrim, " " )
  19046. });
  19047. soFar = soFar.slice( matched.length );
  19048. }
  19049. // Filters
  19050. for ( type in Expr.filter ) {
  19051. if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
  19052. (match = preFilters[ type ]( match ))) ) {
  19053. matched = match.shift();
  19054. tokens.push({
  19055. value: matched,
  19056. type: type,
  19057. matches: match
  19058. });
  19059. soFar = soFar.slice( matched.length );
  19060. }
  19061. }
  19062. if ( !matched ) {
  19063. break;
  19064. }
  19065. }
  19066. // Return the length of the invalid excess
  19067. // if we're just parsing
  19068. // Otherwise, throw an error or return tokens
  19069. return parseOnly ?
  19070. soFar.length :
  19071. soFar ?
  19072. Sizzle.error( selector ) :
  19073. // Cache the tokens
  19074. tokenCache( selector, groups ).slice( 0 );
  19075. };
  19076. function toSelector( tokens ) {
  19077. var i = 0,
  19078. len = tokens.length,
  19079. selector = "";
  19080. for ( ; i < len; i++ ) {
  19081. selector += tokens[i].value;
  19082. }
  19083. return selector;
  19084. }
  19085. function addCombinator( matcher, combinator, base ) {
  19086. var dir = combinator.dir,
  19087. checkNonElements = base && dir === "parentNode",
  19088. doneName = done++;
  19089. return combinator.first ?
  19090. // Check against closest ancestor/preceding element
  19091. function( elem, context, xml ) {
  19092. while ( (elem = elem[ dir ]) ) {
  19093. if ( elem.nodeType === 1 || checkNonElements ) {
  19094. return matcher( elem, context, xml );
  19095. }
  19096. }
  19097. } :
  19098. // Check against all ancestor/preceding elements
  19099. function( elem, context, xml ) {
  19100. var oldCache, uniqueCache, outerCache,
  19101. newCache = [ dirruns, doneName ];
  19102. // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
  19103. if ( xml ) {
  19104. while ( (elem = elem[ dir ]) ) {
  19105. if ( elem.nodeType === 1 || checkNonElements ) {
  19106. if ( matcher( elem, context, xml ) ) {
  19107. return true;
  19108. }
  19109. }
  19110. }
  19111. } else {
  19112. while ( (elem = elem[ dir ]) ) {
  19113. if ( elem.nodeType === 1 || checkNonElements ) {
  19114. outerCache = elem[ expando ] || (elem[ expando ] = {});
  19115. // Support: IE <9 only
  19116. // Defend against cloned attroperties (jQuery gh-1709)
  19117. uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
  19118. if ( (oldCache = uniqueCache[ dir ]) &&
  19119. oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
  19120. // Assign to newCache so results back-propagate to previous elements
  19121. return (newCache[ 2 ] = oldCache[ 2 ]);
  19122. } else {
  19123. // Reuse newcache so results back-propagate to previous elements
  19124. uniqueCache[ dir ] = newCache;
  19125. // A match means we're done; a fail means we have to keep checking
  19126. if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
  19127. return true;
  19128. }
  19129. }
  19130. }
  19131. }
  19132. }
  19133. };
  19134. }
  19135. function elementMatcher( matchers ) {
  19136. return matchers.length > 1 ?
  19137. function( elem, context, xml ) {
  19138. var i = matchers.length;
  19139. while ( i-- ) {
  19140. if ( !matchers[i]( elem, context, xml ) ) {
  19141. return false;
  19142. }
  19143. }
  19144. return true;
  19145. } :
  19146. matchers[0];
  19147. }
  19148. function multipleContexts( selector, contexts, results ) {
  19149. var i = 0,
  19150. len = contexts.length;
  19151. for ( ; i < len; i++ ) {
  19152. Sizzle( selector, contexts[i], results );
  19153. }
  19154. return results;
  19155. }
  19156. function condense( unmatched, map, filter, context, xml ) {
  19157. var elem,
  19158. newUnmatched = [],
  19159. i = 0,
  19160. len = unmatched.length,
  19161. mapped = map != null;
  19162. for ( ; i < len; i++ ) {
  19163. if ( (elem = unmatched[i]) ) {
  19164. if ( !filter || filter( elem, context, xml ) ) {
  19165. newUnmatched.push( elem );
  19166. if ( mapped ) {
  19167. map.push( i );
  19168. }
  19169. }
  19170. }
  19171. }
  19172. return newUnmatched;
  19173. }
  19174. function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
  19175. if ( postFilter && !postFilter[ expando ] ) {
  19176. postFilter = setMatcher( postFilter );
  19177. }
  19178. if ( postFinder && !postFinder[ expando ] ) {
  19179. postFinder = setMatcher( postFinder, postSelector );
  19180. }
  19181. return markFunction(function( seed, results, context, xml ) {
  19182. var temp, i, elem,
  19183. preMap = [],
  19184. postMap = [],
  19185. preexisting = results.length,
  19186. // Get initial elements from seed or context
  19187. elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
  19188. // Prefilter to get matcher input, preserving a map for seed-results synchronization
  19189. matcherIn = preFilter && ( seed || !selector ) ?
  19190. condense( elems, preMap, preFilter, context, xml ) :
  19191. elems,
  19192. matcherOut = matcher ?
  19193. // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
  19194. postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
  19195. // ...intermediate processing is necessary
  19196. [] :
  19197. // ...otherwise use results directly
  19198. results :
  19199. matcherIn;
  19200. // Find primary matches
  19201. if ( matcher ) {
  19202. matcher( matcherIn, matcherOut, context, xml );
  19203. }
  19204. // Apply postFilter
  19205. if ( postFilter ) {
  19206. temp = condense( matcherOut, postMap );
  19207. postFilter( temp, [], context, xml );
  19208. // Un-match failing elements by moving them back to matcherIn
  19209. i = temp.length;
  19210. while ( i-- ) {
  19211. if ( (elem = temp[i]) ) {
  19212. matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
  19213. }
  19214. }
  19215. }
  19216. if ( seed ) {
  19217. if ( postFinder || preFilter ) {
  19218. if ( postFinder ) {
  19219. // Get the final matcherOut by condensing this intermediate into postFinder contexts
  19220. temp = [];
  19221. i = matcherOut.length;
  19222. while ( i-- ) {
  19223. if ( (elem = matcherOut[i]) ) {
  19224. // Restore matcherIn since elem is not yet a final match
  19225. temp.push( (matcherIn[i] = elem) );
  19226. }
  19227. }
  19228. postFinder( null, (matcherOut = []), temp, xml );
  19229. }
  19230. // Move matched elements from seed to results to keep them synchronized
  19231. i = matcherOut.length;
  19232. while ( i-- ) {
  19233. if ( (elem = matcherOut[i]) &&
  19234. (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
  19235. seed[temp] = !(results[temp] = elem);
  19236. }
  19237. }
  19238. }
  19239. // Add elements to results, through postFinder if defined
  19240. } else {
  19241. matcherOut = condense(
  19242. matcherOut === results ?
  19243. matcherOut.splice( preexisting, matcherOut.length ) :
  19244. matcherOut
  19245. );
  19246. if ( postFinder ) {
  19247. postFinder( null, results, matcherOut, xml );
  19248. } else {
  19249. push.apply( results, matcherOut );
  19250. }
  19251. }
  19252. });
  19253. }
  19254. function matcherFromTokens( tokens ) {
  19255. var checkContext, matcher, j,
  19256. len = tokens.length,
  19257. leadingRelative = Expr.relative[ tokens[0].type ],
  19258. implicitRelative = leadingRelative || Expr.relative[" "],
  19259. i = leadingRelative ? 1 : 0,
  19260. // The foundational matcher ensures that elements are reachable from top-level context(s)
  19261. matchContext = addCombinator( function( elem ) {
  19262. return elem === checkContext;
  19263. }, implicitRelative, true ),
  19264. matchAnyContext = addCombinator( function( elem ) {
  19265. return indexOf( checkContext, elem ) > -1;
  19266. }, implicitRelative, true ),
  19267. matchers = [ function( elem, context, xml ) {
  19268. var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
  19269. (checkContext = context).nodeType ?
  19270. matchContext( elem, context, xml ) :
  19271. matchAnyContext( elem, context, xml ) );
  19272. // Avoid hanging onto element (issue #299)
  19273. checkContext = null;
  19274. return ret;
  19275. } ];
  19276. for ( ; i < len; i++ ) {
  19277. if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
  19278. matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
  19279. } else {
  19280. matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
  19281. // Return special upon seeing a positional matcher
  19282. if ( matcher[ expando ] ) {
  19283. // Find the next relative operator (if any) for proper handling
  19284. j = ++i;
  19285. for ( ; j < len; j++ ) {
  19286. if ( Expr.relative[ tokens[j].type ] ) {
  19287. break;
  19288. }
  19289. }
  19290. return setMatcher(
  19291. i > 1 && elementMatcher( matchers ),
  19292. i > 1 && toSelector(
  19293. // If the preceding token was a descendant combinator, insert an implicit any-element `*`
  19294. tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
  19295. ).replace( rtrim, "$1" ),
  19296. matcher,
  19297. i < j && matcherFromTokens( tokens.slice( i, j ) ),
  19298. j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
  19299. j < len && toSelector( tokens )
  19300. );
  19301. }
  19302. matchers.push( matcher );
  19303. }
  19304. }
  19305. return elementMatcher( matchers );
  19306. }
  19307. function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  19308. var bySet = setMatchers.length > 0,
  19309. byElement = elementMatchers.length > 0,
  19310. superMatcher = function( seed, context, xml, results, outermost ) {
  19311. var elem, j, matcher,
  19312. matchedCount = 0,
  19313. i = "0",
  19314. unmatched = seed && [],
  19315. setMatched = [],
  19316. contextBackup = outermostContext,
  19317. // We must always have either seed elements or outermost context
  19318. elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
  19319. // Use integer dirruns iff this is the outermost matcher
  19320. dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
  19321. len = elems.length;
  19322. if ( outermost ) {
  19323. outermostContext = context === document || context || outermost;
  19324. }
  19325. // Add elements passing elementMatchers directly to results
  19326. // Support: IE<9, Safari
  19327. // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
  19328. for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
  19329. if ( byElement && elem ) {
  19330. j = 0;
  19331. if ( !context && elem.ownerDocument !== document ) {
  19332. setDocument( elem );
  19333. xml = !documentIsHTML;
  19334. }
  19335. while ( (matcher = elementMatchers[j++]) ) {
  19336. if ( matcher( elem, context || document, xml) ) {
  19337. results.push( elem );
  19338. break;
  19339. }
  19340. }
  19341. if ( outermost ) {
  19342. dirruns = dirrunsUnique;
  19343. }
  19344. }
  19345. // Track unmatched elements for set filters
  19346. if ( bySet ) {
  19347. // They will have gone through all possible matchers
  19348. if ( (elem = !matcher && elem) ) {
  19349. matchedCount--;
  19350. }
  19351. // Lengthen the array for every element, matched or not
  19352. if ( seed ) {
  19353. unmatched.push( elem );
  19354. }
  19355. }
  19356. }
  19357. // `i` is now the count of elements visited above, and adding it to `matchedCount`
  19358. // makes the latter nonnegative.
  19359. matchedCount += i;
  19360. // Apply set filters to unmatched elements
  19361. // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
  19362. // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
  19363. // no element matchers and no seed.
  19364. // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
  19365. // case, which will result in a "00" `matchedCount` that differs from `i` but is also
  19366. // numerically zero.
  19367. if ( bySet && i !== matchedCount ) {
  19368. j = 0;
  19369. while ( (matcher = setMatchers[j++]) ) {
  19370. matcher( unmatched, setMatched, context, xml );
  19371. }
  19372. if ( seed ) {
  19373. // Reintegrate element matches to eliminate the need for sorting
  19374. if ( matchedCount > 0 ) {
  19375. while ( i-- ) {
  19376. if ( !(unmatched[i] || setMatched[i]) ) {
  19377. setMatched[i] = pop.call( results );
  19378. }
  19379. }
  19380. }
  19381. // Discard index placeholder values to get only actual matches
  19382. setMatched = condense( setMatched );
  19383. }
  19384. // Add matches to results
  19385. push.apply( results, setMatched );
  19386. // Seedless set matches succeeding multiple successful matchers stipulate sorting
  19387. if ( outermost && !seed && setMatched.length > 0 &&
  19388. ( matchedCount + setMatchers.length ) > 1 ) {
  19389. Sizzle.uniqueSort( results );
  19390. }
  19391. }
  19392. // Override manipulation of globals by nested matchers
  19393. if ( outermost ) {
  19394. dirruns = dirrunsUnique;
  19395. outermostContext = contextBackup;
  19396. }
  19397. return unmatched;
  19398. };
  19399. return bySet ?
  19400. markFunction( superMatcher ) :
  19401. superMatcher;
  19402. }
  19403. compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
  19404. var i,
  19405. setMatchers = [],
  19406. elementMatchers = [],
  19407. cached = compilerCache[ selector + " " ];
  19408. if ( !cached ) {
  19409. // Generate a function of recursive functions that can be used to check each element
  19410. if ( !match ) {
  19411. match = tokenize( selector );
  19412. }
  19413. i = match.length;
  19414. while ( i-- ) {
  19415. cached = matcherFromTokens( match[i] );
  19416. if ( cached[ expando ] ) {
  19417. setMatchers.push( cached );
  19418. } else {
  19419. elementMatchers.push( cached );
  19420. }
  19421. }
  19422. // Cache the compiled function
  19423. cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
  19424. // Save selector and tokenization
  19425. cached.selector = selector;
  19426. }
  19427. return cached;
  19428. };
  19429. /**
  19430. * A low-level selection function that works with Sizzle's compiled
  19431. * selector functions
  19432. * @param {String|Function} selector A selector or a pre-compiled
  19433. * selector function built with Sizzle.compile
  19434. * @param {Element} context
  19435. * @param {Array} [results]
  19436. * @param {Array} [seed] A set of elements to match against
  19437. */
  19438. select = Sizzle.select = function( selector, context, results, seed ) {
  19439. var i, tokens, token, type, find,
  19440. compiled = typeof selector === "function" && selector,
  19441. match = !seed && tokenize( (selector = compiled.selector || selector) );
  19442. results = results || [];
  19443. // Try to minimize operations if there is only one selector in the list and no seed
  19444. // (the latter of which guarantees us context)
  19445. if ( match.length === 1 ) {
  19446. // Reduce context if the leading compound selector is an ID
  19447. tokens = match[0] = match[0].slice( 0 );
  19448. if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
  19449. support.getById && context.nodeType === 9 && documentIsHTML &&
  19450. Expr.relative[ tokens[1].type ] ) {
  19451. context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
  19452. if ( !context ) {
  19453. return results;
  19454. // Precompiled matchers will still verify ancestry, so step up a level
  19455. } else if ( compiled ) {
  19456. context = context.parentNode;
  19457. }
  19458. selector = selector.slice( tokens.shift().value.length );
  19459. }
  19460. // Fetch a seed set for right-to-left matching
  19461. i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
  19462. while ( i-- ) {
  19463. token = tokens[i];
  19464. // Abort if we hit a combinator
  19465. if ( Expr.relative[ (type = token.type) ] ) {
  19466. break;
  19467. }
  19468. if ( (find = Expr.find[ type ]) ) {
  19469. // Search, expanding context for leading sibling combinators
  19470. if ( (seed = find(
  19471. token.matches[0].replace( runescape, funescape ),
  19472. rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
  19473. )) ) {
  19474. // If seed is empty or no tokens remain, we can return early
  19475. tokens.splice( i, 1 );
  19476. selector = seed.length && toSelector( tokens );
  19477. if ( !selector ) {
  19478. push.apply( results, seed );
  19479. return results;
  19480. }
  19481. break;
  19482. }
  19483. }
  19484. }
  19485. }
  19486. // Compile and execute a filtering function if one is not provided
  19487. // Provide `match` to avoid retokenization if we modified the selector above
  19488. ( compiled || compile( selector, match ) )(
  19489. seed,
  19490. context,
  19491. !documentIsHTML,
  19492. results,
  19493. !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
  19494. );
  19495. return results;
  19496. };
  19497. // One-time assignments
  19498. // Sort stability
  19499. support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
  19500. // Support: Chrome 14-35+
  19501. // Always assume duplicates if they aren't passed to the comparison function
  19502. support.detectDuplicates = !!hasDuplicate;
  19503. // Initialize against the default document
  19504. setDocument();
  19505. // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
  19506. // Detached nodes confoundingly follow *each other*
  19507. support.sortDetached = assert(function( div1 ) {
  19508. // Should return 1, but returns 4 (following)
  19509. return div1.compareDocumentPosition( document.createElement("div") ) & 1;
  19510. });
  19511. // Support: IE<8
  19512. // Prevent attribute/property "interpolation"
  19513. // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
  19514. if ( !assert(function( div ) {
  19515. div.innerHTML = "<a href='#'></a>";
  19516. return div.firstChild.getAttribute("href") === "#" ;
  19517. }) ) {
  19518. addHandle( "type|href|height|width", function( elem, name, isXML ) {
  19519. if ( !isXML ) {
  19520. return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
  19521. }
  19522. });
  19523. }
  19524. // Support: IE<9
  19525. // Use defaultValue in place of getAttribute("value")
  19526. if ( !support.attributes || !assert(function( div ) {
  19527. div.innerHTML = "<input/>";
  19528. div.firstChild.setAttribute( "value", "" );
  19529. return div.firstChild.getAttribute( "value" ) === "";
  19530. }) ) {
  19531. addHandle( "value", function( elem, name, isXML ) {
  19532. if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
  19533. return elem.defaultValue;
  19534. }
  19535. });
  19536. }
  19537. // Support: IE<9
  19538. // Use getAttributeNode to fetch booleans when getAttribute lies
  19539. if ( !assert(function( div ) {
  19540. return div.getAttribute("disabled") == null;
  19541. }) ) {
  19542. addHandle( booleans, function( elem, name, isXML ) {
  19543. var val;
  19544. if ( !isXML ) {
  19545. return elem[ name ] === true ? name.toLowerCase() :
  19546. (val = elem.getAttributeNode( name )) && val.specified ?
  19547. val.value :
  19548. null;
  19549. }
  19550. });
  19551. }
  19552. return Sizzle;
  19553. })( window );
  19554. jQuery.find = Sizzle;
  19555. jQuery.expr = Sizzle.selectors;
  19556. jQuery.expr[ ":" ] = jQuery.expr.pseudos;
  19557. jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
  19558. jQuery.text = Sizzle.getText;
  19559. jQuery.isXMLDoc = Sizzle.isXML;
  19560. jQuery.contains = Sizzle.contains;
  19561. var dir = function( elem, dir, until ) {
  19562. var matched = [],
  19563. truncate = until !== undefined;
  19564. while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
  19565. if ( elem.nodeType === 1 ) {
  19566. if ( truncate && jQuery( elem ).is( until ) ) {
  19567. break;
  19568. }
  19569. matched.push( elem );
  19570. }
  19571. }
  19572. return matched;
  19573. };
  19574. var siblings = function( n, elem ) {
  19575. var matched = [];
  19576. for ( ; n; n = n.nextSibling ) {
  19577. if ( n.nodeType === 1 && n !== elem ) {
  19578. matched.push( n );
  19579. }
  19580. }
  19581. return matched;
  19582. };
  19583. var rneedsContext = jQuery.expr.match.needsContext;
  19584. var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
  19585. var risSimple = /^.[^:#\[\.,]*$/;
  19586. // Implement the identical functionality for filter and not
  19587. function winnow( elements, qualifier, not ) {
  19588. if ( jQuery.isFunction( qualifier ) ) {
  19589. return jQuery.grep( elements, function( elem, i ) {
  19590. /* jshint -W018 */
  19591. return !!qualifier.call( elem, i, elem ) !== not;
  19592. } );
  19593. }
  19594. if ( qualifier.nodeType ) {
  19595. return jQuery.grep( elements, function( elem ) {
  19596. return ( elem === qualifier ) !== not;
  19597. } );
  19598. }
  19599. if ( typeof qualifier === "string" ) {
  19600. if ( risSimple.test( qualifier ) ) {
  19601. return jQuery.filter( qualifier, elements, not );
  19602. }
  19603. qualifier = jQuery.filter( qualifier, elements );
  19604. }
  19605. return jQuery.grep( elements, function( elem ) {
  19606. return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
  19607. } );
  19608. }
  19609. jQuery.filter = function( expr, elems, not ) {
  19610. var elem = elems[ 0 ];
  19611. if ( not ) {
  19612. expr = ":not(" + expr + ")";
  19613. }
  19614. return elems.length === 1 && elem.nodeType === 1 ?
  19615. jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
  19616. jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
  19617. return elem.nodeType === 1;
  19618. } ) );
  19619. };
  19620. jQuery.fn.extend( {
  19621. find: function( selector ) {
  19622. var i,
  19623. len = this.length,
  19624. ret = [],
  19625. self = this;
  19626. if ( typeof selector !== "string" ) {
  19627. return this.pushStack( jQuery( selector ).filter( function() {
  19628. for ( i = 0; i < len; i++ ) {
  19629. if ( jQuery.contains( self[ i ], this ) ) {
  19630. return true;
  19631. }
  19632. }
  19633. } ) );
  19634. }
  19635. for ( i = 0; i < len; i++ ) {
  19636. jQuery.find( selector, self[ i ], ret );
  19637. }
  19638. // Needed because $( selector, context ) becomes $( context ).find( selector )
  19639. ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
  19640. ret.selector = this.selector ? this.selector + " " + selector : selector;
  19641. return ret;
  19642. },
  19643. filter: function( selector ) {
  19644. return this.pushStack( winnow( this, selector || [], false ) );
  19645. },
  19646. not: function( selector ) {
  19647. return this.pushStack( winnow( this, selector || [], true ) );
  19648. },
  19649. is: function( selector ) {
  19650. return !!winnow(
  19651. this,
  19652. // If this is a positional/relative selector, check membership in the returned set
  19653. // so $("p:first").is("p:last") won't return true for a doc with two "p".
  19654. typeof selector === "string" && rneedsContext.test( selector ) ?
  19655. jQuery( selector ) :
  19656. selector || [],
  19657. false
  19658. ).length;
  19659. }
  19660. } );
  19661. // Initialize a jQuery object
  19662. // A central reference to the root jQuery(document)
  19663. var rootjQuery,
  19664. // A simple way to check for HTML strings
  19665. // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
  19666. // Strict HTML recognition (#11290: must start with <)
  19667. rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
  19668. init = jQuery.fn.init = function( selector, context, root ) {
  19669. var match, elem;
  19670. // HANDLE: $(""), $(null), $(undefined), $(false)
  19671. if ( !selector ) {
  19672. return this;
  19673. }
  19674. // Method init() accepts an alternate rootjQuery
  19675. // so migrate can support jQuery.sub (gh-2101)
  19676. root = root || rootjQuery;
  19677. // Handle HTML strings
  19678. if ( typeof selector === "string" ) {
  19679. if ( selector[ 0 ] === "<" &&
  19680. selector[ selector.length - 1 ] === ">" &&
  19681. selector.length >= 3 ) {
  19682. // Assume that strings that start and end with <> are HTML and skip the regex check
  19683. match = [ null, selector, null ];
  19684. } else {
  19685. match = rquickExpr.exec( selector );
  19686. }
  19687. // Match html or make sure no context is specified for #id
  19688. if ( match && ( match[ 1 ] || !context ) ) {
  19689. // HANDLE: $(html) -> $(array)
  19690. if ( match[ 1 ] ) {
  19691. context = context instanceof jQuery ? context[ 0 ] : context;
  19692. // Option to run scripts is true for back-compat
  19693. // Intentionally let the error be thrown if parseHTML is not present
  19694. jQuery.merge( this, jQuery.parseHTML(
  19695. match[ 1 ],
  19696. context && context.nodeType ? context.ownerDocument || context : document,
  19697. true
  19698. ) );
  19699. // HANDLE: $(html, props)
  19700. if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
  19701. for ( match in context ) {
  19702. // Properties of context are called as methods if possible
  19703. if ( jQuery.isFunction( this[ match ] ) ) {
  19704. this[ match ]( context[ match ] );
  19705. // ...and otherwise set as attributes
  19706. } else {
  19707. this.attr( match, context[ match ] );
  19708. }
  19709. }
  19710. }
  19711. return this;
  19712. // HANDLE: $(#id)
  19713. } else {
  19714. elem = document.getElementById( match[ 2 ] );
  19715. // Support: Blackberry 4.6
  19716. // gEBID returns nodes no longer in the document (#6963)
  19717. if ( elem && elem.parentNode ) {
  19718. // Inject the element directly into the jQuery object
  19719. this.length = 1;
  19720. this[ 0 ] = elem;
  19721. }
  19722. this.context = document;
  19723. this.selector = selector;
  19724. return this;
  19725. }
  19726. // HANDLE: $(expr, $(...))
  19727. } else if ( !context || context.jquery ) {
  19728. return ( context || root ).find( selector );
  19729. // HANDLE: $(expr, context)
  19730. // (which is just equivalent to: $(context).find(expr)
  19731. } else {
  19732. return this.constructor( context ).find( selector );
  19733. }
  19734. // HANDLE: $(DOMElement)
  19735. } else if ( selector.nodeType ) {
  19736. this.context = this[ 0 ] = selector;
  19737. this.length = 1;
  19738. return this;
  19739. // HANDLE: $(function)
  19740. // Shortcut for document ready
  19741. } else if ( jQuery.isFunction( selector ) ) {
  19742. return root.ready !== undefined ?
  19743. root.ready( selector ) :
  19744. // Execute immediately if ready is not present
  19745. selector( jQuery );
  19746. }
  19747. if ( selector.selector !== undefined ) {
  19748. this.selector = selector.selector;
  19749. this.context = selector.context;
  19750. }
  19751. return jQuery.makeArray( selector, this );
  19752. };
  19753. // Give the init function the jQuery prototype for later instantiation
  19754. init.prototype = jQuery.fn;
  19755. // Initialize central reference
  19756. rootjQuery = jQuery( document );
  19757. var rparentsprev = /^(?:parents|prev(?:Until|All))/,
  19758. // Methods guaranteed to produce a unique set when starting from a unique set
  19759. guaranteedUnique = {
  19760. children: true,
  19761. contents: true,
  19762. next: true,
  19763. prev: true
  19764. };
  19765. jQuery.fn.extend( {
  19766. has: function( target ) {
  19767. var targets = jQuery( target, this ),
  19768. l = targets.length;
  19769. return this.filter( function() {
  19770. var i = 0;
  19771. for ( ; i < l; i++ ) {
  19772. if ( jQuery.contains( this, targets[ i ] ) ) {
  19773. return true;
  19774. }
  19775. }
  19776. } );
  19777. },
  19778. closest: function( selectors, context ) {
  19779. var cur,
  19780. i = 0,
  19781. l = this.length,
  19782. matched = [],
  19783. pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
  19784. jQuery( selectors, context || this.context ) :
  19785. 0;
  19786. for ( ; i < l; i++ ) {
  19787. for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
  19788. // Always skip document fragments
  19789. if ( cur.nodeType < 11 && ( pos ?
  19790. pos.index( cur ) > -1 :
  19791. // Don't pass non-elements to Sizzle
  19792. cur.nodeType === 1 &&
  19793. jQuery.find.matchesSelector( cur, selectors ) ) ) {
  19794. matched.push( cur );
  19795. break;
  19796. }
  19797. }
  19798. }
  19799. return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
  19800. },
  19801. // Determine the position of an element within the set
  19802. index: function( elem ) {
  19803. // No argument, return index in parent
  19804. if ( !elem ) {
  19805. return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
  19806. }
  19807. // Index in selector
  19808. if ( typeof elem === "string" ) {
  19809. return indexOf.call( jQuery( elem ), this[ 0 ] );
  19810. }
  19811. // Locate the position of the desired element
  19812. return indexOf.call( this,
  19813. // If it receives a jQuery object, the first element is used
  19814. elem.jquery ? elem[ 0 ] : elem
  19815. );
  19816. },
  19817. add: function( selector, context ) {
  19818. return this.pushStack(
  19819. jQuery.uniqueSort(
  19820. jQuery.merge( this.get(), jQuery( selector, context ) )
  19821. )
  19822. );
  19823. },
  19824. addBack: function( selector ) {
  19825. return this.add( selector == null ?
  19826. this.prevObject : this.prevObject.filter( selector )
  19827. );
  19828. }
  19829. } );
  19830. function sibling( cur, dir ) {
  19831. while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
  19832. return cur;
  19833. }
  19834. jQuery.each( {
  19835. parent: function( elem ) {
  19836. var parent = elem.parentNode;
  19837. return parent && parent.nodeType !== 11 ? parent : null;
  19838. },
  19839. parents: function( elem ) {
  19840. return dir( elem, "parentNode" );
  19841. },
  19842. parentsUntil: function( elem, i, until ) {
  19843. return dir( elem, "parentNode", until );
  19844. },
  19845. next: function( elem ) {
  19846. return sibling( elem, "nextSibling" );
  19847. },
  19848. prev: function( elem ) {
  19849. return sibling( elem, "previousSibling" );
  19850. },
  19851. nextAll: function( elem ) {
  19852. return dir( elem, "nextSibling" );
  19853. },
  19854. prevAll: function( elem ) {
  19855. return dir( elem, "previousSibling" );
  19856. },
  19857. nextUntil: function( elem, i, until ) {
  19858. return dir( elem, "nextSibling", until );
  19859. },
  19860. prevUntil: function( elem, i, until ) {
  19861. return dir( elem, "previousSibling", until );
  19862. },
  19863. siblings: function( elem ) {
  19864. return siblings( ( elem.parentNode || {} ).firstChild, elem );
  19865. },
  19866. children: function( elem ) {
  19867. return siblings( elem.firstChild );
  19868. },
  19869. contents: function( elem ) {
  19870. return elem.contentDocument || jQuery.merge( [], elem.childNodes );
  19871. }
  19872. }, function( name, fn ) {
  19873. jQuery.fn[ name ] = function( until, selector ) {
  19874. var matched = jQuery.map( this, fn, until );
  19875. if ( name.slice( -5 ) !== "Until" ) {
  19876. selector = until;
  19877. }
  19878. if ( selector && typeof selector === "string" ) {
  19879. matched = jQuery.filter( selector, matched );
  19880. }
  19881. if ( this.length > 1 ) {
  19882. // Remove duplicates
  19883. if ( !guaranteedUnique[ name ] ) {
  19884. jQuery.uniqueSort( matched );
  19885. }
  19886. // Reverse order for parents* and prev-derivatives
  19887. if ( rparentsprev.test( name ) ) {
  19888. matched.reverse();
  19889. }
  19890. }
  19891. return this.pushStack( matched );
  19892. };
  19893. } );
  19894. var rnotwhite = ( /\S+/g );
  19895. // Convert String-formatted options into Object-formatted ones
  19896. function createOptions( options ) {
  19897. var object = {};
  19898. jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
  19899. object[ flag ] = true;
  19900. } );
  19901. return object;
  19902. }
  19903. /*
  19904. * Create a callback list using the following parameters:
  19905. *
  19906. * options: an optional list of space-separated options that will change how
  19907. * the callback list behaves or a more traditional option object
  19908. *
  19909. * By default a callback list will act like an event callback list and can be
  19910. * "fired" multiple times.
  19911. *
  19912. * Possible options:
  19913. *
  19914. * once: will ensure the callback list can only be fired once (like a Deferred)
  19915. *
  19916. * memory: will keep track of previous values and will call any callback added
  19917. * after the list has been fired right away with the latest "memorized"
  19918. * values (like a Deferred)
  19919. *
  19920. * unique: will ensure a callback can only be added once (no duplicate in the list)
  19921. *
  19922. * stopOnFalse: interrupt callings when a callback returns false
  19923. *
  19924. */
  19925. jQuery.Callbacks = function( options ) {
  19926. // Convert options from String-formatted to Object-formatted if needed
  19927. // (we check in cache first)
  19928. options = typeof options === "string" ?
  19929. createOptions( options ) :
  19930. jQuery.extend( {}, options );
  19931. var // Flag to know if list is currently firing
  19932. firing,
  19933. // Last fire value for non-forgettable lists
  19934. memory,
  19935. // Flag to know if list was already fired
  19936. fired,
  19937. // Flag to prevent firing
  19938. locked,
  19939. // Actual callback list
  19940. list = [],
  19941. // Queue of execution data for repeatable lists
  19942. queue = [],
  19943. // Index of currently firing callback (modified by add/remove as needed)
  19944. firingIndex = -1,
  19945. // Fire callbacks
  19946. fire = function() {
  19947. // Enforce single-firing
  19948. locked = options.once;
  19949. // Execute callbacks for all pending executions,
  19950. // respecting firingIndex overrides and runtime changes
  19951. fired = firing = true;
  19952. for ( ; queue.length; firingIndex = -1 ) {
  19953. memory = queue.shift();
  19954. while ( ++firingIndex < list.length ) {
  19955. // Run callback and check for early termination
  19956. if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
  19957. options.stopOnFalse ) {
  19958. // Jump to end and forget the data so .add doesn't re-fire
  19959. firingIndex = list.length;
  19960. memory = false;
  19961. }
  19962. }
  19963. }
  19964. // Forget the data if we're done with it
  19965. if ( !options.memory ) {
  19966. memory = false;
  19967. }
  19968. firing = false;
  19969. // Clean up if we're done firing for good
  19970. if ( locked ) {
  19971. // Keep an empty list if we have data for future add calls
  19972. if ( memory ) {
  19973. list = [];
  19974. // Otherwise, this object is spent
  19975. } else {
  19976. list = "";
  19977. }
  19978. }
  19979. },
  19980. // Actual Callbacks object
  19981. self = {
  19982. // Add a callback or a collection of callbacks to the list
  19983. add: function() {
  19984. if ( list ) {
  19985. // If we have memory from a past run, we should fire after adding
  19986. if ( memory && !firing ) {
  19987. firingIndex = list.length - 1;
  19988. queue.push( memory );
  19989. }
  19990. ( function add( args ) {
  19991. jQuery.each( args, function( _, arg ) {
  19992. if ( jQuery.isFunction( arg ) ) {
  19993. if ( !options.unique || !self.has( arg ) ) {
  19994. list.push( arg );
  19995. }
  19996. } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
  19997. // Inspect recursively
  19998. add( arg );
  19999. }
  20000. } );
  20001. } )( arguments );
  20002. if ( memory && !firing ) {
  20003. fire();
  20004. }
  20005. }
  20006. return this;
  20007. },
  20008. // Remove a callback from the list
  20009. remove: function() {
  20010. jQuery.each( arguments, function( _, arg ) {
  20011. var index;
  20012. while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
  20013. list.splice( index, 1 );
  20014. // Handle firing indexes
  20015. if ( index <= firingIndex ) {
  20016. firingIndex--;
  20017. }
  20018. }
  20019. } );
  20020. return this;
  20021. },
  20022. // Check if a given callback is in the list.
  20023. // If no argument is given, return whether or not list has callbacks attached.
  20024. has: function( fn ) {
  20025. return fn ?
  20026. jQuery.inArray( fn, list ) > -1 :
  20027. list.length > 0;
  20028. },
  20029. // Remove all callbacks from the list
  20030. empty: function() {
  20031. if ( list ) {
  20032. list = [];
  20033. }
  20034. return this;
  20035. },
  20036. // Disable .fire and .add
  20037. // Abort any current/pending executions
  20038. // Clear all callbacks and values
  20039. disable: function() {
  20040. locked = queue = [];
  20041. list = memory = "";
  20042. return this;
  20043. },
  20044. disabled: function() {
  20045. return !list;
  20046. },
  20047. // Disable .fire
  20048. // Also disable .add unless we have memory (since it would have no effect)
  20049. // Abort any pending executions
  20050. lock: function() {
  20051. locked = queue = [];
  20052. if ( !memory ) {
  20053. list = memory = "";
  20054. }
  20055. return this;
  20056. },
  20057. locked: function() {
  20058. return !!locked;
  20059. },
  20060. // Call all callbacks with the given context and arguments
  20061. fireWith: function( context, args ) {
  20062. if ( !locked ) {
  20063. args = args || [];
  20064. args = [ context, args.slice ? args.slice() : args ];
  20065. queue.push( args );
  20066. if ( !firing ) {
  20067. fire();
  20068. }
  20069. }
  20070. return this;
  20071. },
  20072. // Call all the callbacks with the given arguments
  20073. fire: function() {
  20074. self.fireWith( this, arguments );
  20075. return this;
  20076. },
  20077. // To know if the callbacks have already been called at least once
  20078. fired: function() {
  20079. return !!fired;
  20080. }
  20081. };
  20082. return self;
  20083. };
  20084. jQuery.extend( {
  20085. Deferred: function( func ) {
  20086. var tuples = [
  20087. // action, add listener, listener list, final state
  20088. [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
  20089. [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
  20090. [ "notify", "progress", jQuery.Callbacks( "memory" ) ]
  20091. ],
  20092. state = "pending",
  20093. promise = {
  20094. state: function() {
  20095. return state;
  20096. },
  20097. always: function() {
  20098. deferred.done( arguments ).fail( arguments );
  20099. return this;
  20100. },
  20101. then: function( /* fnDone, fnFail, fnProgress */ ) {
  20102. var fns = arguments;
  20103. return jQuery.Deferred( function( newDefer ) {
  20104. jQuery.each( tuples, function( i, tuple ) {
  20105. var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
  20106. // deferred[ done | fail | progress ] for forwarding actions to newDefer
  20107. deferred[ tuple[ 1 ] ]( function() {
  20108. var returned = fn && fn.apply( this, arguments );
  20109. if ( returned && jQuery.isFunction( returned.promise ) ) {
  20110. returned.promise()
  20111. .progress( newDefer.notify )
  20112. .done( newDefer.resolve )
  20113. .fail( newDefer.reject );
  20114. } else {
  20115. newDefer[ tuple[ 0 ] + "With" ](
  20116. this === promise ? newDefer.promise() : this,
  20117. fn ? [ returned ] : arguments
  20118. );
  20119. }
  20120. } );
  20121. } );
  20122. fns = null;
  20123. } ).promise();
  20124. },
  20125. // Get a promise for this deferred
  20126. // If obj is provided, the promise aspect is added to the object
  20127. promise: function( obj ) {
  20128. return obj != null ? jQuery.extend( obj, promise ) : promise;
  20129. }
  20130. },
  20131. deferred = {};
  20132. // Keep pipe for back-compat
  20133. promise.pipe = promise.then;
  20134. // Add list-specific methods
  20135. jQuery.each( tuples, function( i, tuple ) {
  20136. var list = tuple[ 2 ],
  20137. stateString = tuple[ 3 ];
  20138. // promise[ done | fail | progress ] = list.add
  20139. promise[ tuple[ 1 ] ] = list.add;
  20140. // Handle state
  20141. if ( stateString ) {
  20142. list.add( function() {
  20143. // state = [ resolved | rejected ]
  20144. state = stateString;
  20145. // [ reject_list | resolve_list ].disable; progress_list.lock
  20146. }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
  20147. }
  20148. // deferred[ resolve | reject | notify ]
  20149. deferred[ tuple[ 0 ] ] = function() {
  20150. deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
  20151. return this;
  20152. };
  20153. deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
  20154. } );
  20155. // Make the deferred a promise
  20156. promise.promise( deferred );
  20157. // Call given func if any
  20158. if ( func ) {
  20159. func.call( deferred, deferred );
  20160. }
  20161. // All done!
  20162. return deferred;
  20163. },
  20164. // Deferred helper
  20165. when: function( subordinate /* , ..., subordinateN */ ) {
  20166. var i = 0,
  20167. resolveValues = slice.call( arguments ),
  20168. length = resolveValues.length,
  20169. // the count of uncompleted subordinates
  20170. remaining = length !== 1 ||
  20171. ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
  20172. // the master Deferred.
  20173. // If resolveValues consist of only a single Deferred, just use that.
  20174. deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
  20175. // Update function for both resolve and progress values
  20176. updateFunc = function( i, contexts, values ) {
  20177. return function( value ) {
  20178. contexts[ i ] = this;
  20179. values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
  20180. if ( values === progressValues ) {
  20181. deferred.notifyWith( contexts, values );
  20182. } else if ( !( --remaining ) ) {
  20183. deferred.resolveWith( contexts, values );
  20184. }
  20185. };
  20186. },
  20187. progressValues, progressContexts, resolveContexts;
  20188. // Add listeners to Deferred subordinates; treat others as resolved
  20189. if ( length > 1 ) {
  20190. progressValues = new Array( length );
  20191. progressContexts = new Array( length );
  20192. resolveContexts = new Array( length );
  20193. for ( ; i < length; i++ ) {
  20194. if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
  20195. resolveValues[ i ].promise()
  20196. .progress( updateFunc( i, progressContexts, progressValues ) )
  20197. .done( updateFunc( i, resolveContexts, resolveValues ) )
  20198. .fail( deferred.reject );
  20199. } else {
  20200. --remaining;
  20201. }
  20202. }
  20203. }
  20204. // If we're not waiting on anything, resolve the master
  20205. if ( !remaining ) {
  20206. deferred.resolveWith( resolveContexts, resolveValues );
  20207. }
  20208. return deferred.promise();
  20209. }
  20210. } );
  20211. // The deferred used on DOM ready
  20212. var readyList;
  20213. jQuery.fn.ready = function( fn ) {
  20214. // Add the callback
  20215. jQuery.ready.promise().done( fn );
  20216. return this;
  20217. };
  20218. jQuery.extend( {
  20219. // Is the DOM ready to be used? Set to true once it occurs.
  20220. isReady: false,
  20221. // A counter to track how many items to wait for before
  20222. // the ready event fires. See #6781
  20223. readyWait: 1,
  20224. // Hold (or release) the ready event
  20225. holdReady: function( hold ) {
  20226. if ( hold ) {
  20227. jQuery.readyWait++;
  20228. } else {
  20229. jQuery.ready( true );
  20230. }
  20231. },
  20232. // Handle when the DOM is ready
  20233. ready: function( wait ) {
  20234. // Abort if there are pending holds or we're already ready
  20235. if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
  20236. return;
  20237. }
  20238. // Remember that the DOM is ready
  20239. jQuery.isReady = true;
  20240. // If a normal DOM Ready event fired, decrement, and wait if need be
  20241. if ( wait !== true && --jQuery.readyWait > 0 ) {
  20242. return;
  20243. }
  20244. // If there are functions bound, to execute
  20245. readyList.resolveWith( document, [ jQuery ] );
  20246. // Trigger any bound ready events
  20247. if ( jQuery.fn.triggerHandler ) {
  20248. jQuery( document ).triggerHandler( "ready" );
  20249. jQuery( document ).off( "ready" );
  20250. }
  20251. }
  20252. } );
  20253. /**
  20254. * The ready event handler and self cleanup method
  20255. */
  20256. function completed() {
  20257. document.removeEventListener( "DOMContentLoaded", completed );
  20258. window.removeEventListener( "load", completed );
  20259. jQuery.ready();
  20260. }
  20261. jQuery.ready.promise = function( obj ) {
  20262. if ( !readyList ) {
  20263. readyList = jQuery.Deferred();
  20264. // Catch cases where $(document).ready() is called
  20265. // after the browser event has already occurred.
  20266. // Support: IE9-10 only
  20267. // Older IE sometimes signals "interactive" too soon
  20268. if ( document.readyState === "complete" ||
  20269. ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
  20270. // Handle it asynchronously to allow scripts the opportunity to delay ready
  20271. window.setTimeout( jQuery.ready );
  20272. } else {
  20273. // Use the handy event callback
  20274. document.addEventListener( "DOMContentLoaded", completed );
  20275. // A fallback to window.onload, that will always work
  20276. window.addEventListener( "load", completed );
  20277. }
  20278. }
  20279. return readyList.promise( obj );
  20280. };
  20281. // Kick off the DOM ready check even if the user does not
  20282. jQuery.ready.promise();
  20283. // Multifunctional method to get and set values of a collection
  20284. // The value/s can optionally be executed if it's a function
  20285. var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
  20286. var i = 0,
  20287. len = elems.length,
  20288. bulk = key == null;
  20289. // Sets many values
  20290. if ( jQuery.type( key ) === "object" ) {
  20291. chainable = true;
  20292. for ( i in key ) {
  20293. access( elems, fn, i, key[ i ], true, emptyGet, raw );
  20294. }
  20295. // Sets one value
  20296. } else if ( value !== undefined ) {
  20297. chainable = true;
  20298. if ( !jQuery.isFunction( value ) ) {
  20299. raw = true;
  20300. }
  20301. if ( bulk ) {
  20302. // Bulk operations run against the entire set
  20303. if ( raw ) {
  20304. fn.call( elems, value );
  20305. fn = null;
  20306. // ...except when executing function values
  20307. } else {
  20308. bulk = fn;
  20309. fn = function( elem, key, value ) {
  20310. return bulk.call( jQuery( elem ), value );
  20311. };
  20312. }
  20313. }
  20314. if ( fn ) {
  20315. for ( ; i < len; i++ ) {
  20316. fn(
  20317. elems[ i ], key, raw ?
  20318. value :
  20319. value.call( elems[ i ], i, fn( elems[ i ], key ) )
  20320. );
  20321. }
  20322. }
  20323. }
  20324. return chainable ?
  20325. elems :
  20326. // Gets
  20327. bulk ?
  20328. fn.call( elems ) :
  20329. len ? fn( elems[ 0 ], key ) : emptyGet;
  20330. };
  20331. var acceptData = function( owner ) {
  20332. // Accepts only:
  20333. // - Node
  20334. // - Node.ELEMENT_NODE
  20335. // - Node.DOCUMENT_NODE
  20336. // - Object
  20337. // - Any
  20338. /* jshint -W018 */
  20339. return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
  20340. };
  20341. function Data() {
  20342. this.expando = jQuery.expando + Data.uid++;
  20343. }
  20344. Data.uid = 1;
  20345. Data.prototype = {
  20346. register: function( owner, initial ) {
  20347. var value = initial || {};
  20348. // If it is a node unlikely to be stringify-ed or looped over
  20349. // use plain assignment
  20350. if ( owner.nodeType ) {
  20351. owner[ this.expando ] = value;
  20352. // Otherwise secure it in a non-enumerable, non-writable property
  20353. // configurability must be true to allow the property to be
  20354. // deleted with the delete operator
  20355. } else {
  20356. Object.defineProperty( owner, this.expando, {
  20357. value: value,
  20358. writable: true,
  20359. configurable: true
  20360. } );
  20361. }
  20362. return owner[ this.expando ];
  20363. },
  20364. cache: function( owner ) {
  20365. // We can accept data for non-element nodes in modern browsers,
  20366. // but we should not, see #8335.
  20367. // Always return an empty object.
  20368. if ( !acceptData( owner ) ) {
  20369. return {};
  20370. }
  20371. // Check if the owner object already has a cache
  20372. var value = owner[ this.expando ];
  20373. // If not, create one
  20374. if ( !value ) {
  20375. value = {};
  20376. // We can accept data for non-element nodes in modern browsers,
  20377. // but we should not, see #8335.
  20378. // Always return an empty object.
  20379. if ( acceptData( owner ) ) {
  20380. // If it is a node unlikely to be stringify-ed or looped over
  20381. // use plain assignment
  20382. if ( owner.nodeType ) {
  20383. owner[ this.expando ] = value;
  20384. // Otherwise secure it in a non-enumerable property
  20385. // configurable must be true to allow the property to be
  20386. // deleted when data is removed
  20387. } else {
  20388. Object.defineProperty( owner, this.expando, {
  20389. value: value,
  20390. configurable: true
  20391. } );
  20392. }
  20393. }
  20394. }
  20395. return value;
  20396. },
  20397. set: function( owner, data, value ) {
  20398. var prop,
  20399. cache = this.cache( owner );
  20400. // Handle: [ owner, key, value ] args
  20401. if ( typeof data === "string" ) {
  20402. cache[ data ] = value;
  20403. // Handle: [ owner, { properties } ] args
  20404. } else {
  20405. // Copy the properties one-by-one to the cache object
  20406. for ( prop in data ) {
  20407. cache[ prop ] = data[ prop ];
  20408. }
  20409. }
  20410. return cache;
  20411. },
  20412. get: function( owner, key ) {
  20413. return key === undefined ?
  20414. this.cache( owner ) :
  20415. owner[ this.expando ] && owner[ this.expando ][ key ];
  20416. },
  20417. access: function( owner, key, value ) {
  20418. var stored;
  20419. // In cases where either:
  20420. //
  20421. // 1. No key was specified
  20422. // 2. A string key was specified, but no value provided
  20423. //
  20424. // Take the "read" path and allow the get method to determine
  20425. // which value to return, respectively either:
  20426. //
  20427. // 1. The entire cache object
  20428. // 2. The data stored at the key
  20429. //
  20430. if ( key === undefined ||
  20431. ( ( key && typeof key === "string" ) && value === undefined ) ) {
  20432. stored = this.get( owner, key );
  20433. return stored !== undefined ?
  20434. stored : this.get( owner, jQuery.camelCase( key ) );
  20435. }
  20436. // When the key is not a string, or both a key and value
  20437. // are specified, set or extend (existing objects) with either:
  20438. //
  20439. // 1. An object of properties
  20440. // 2. A key and value
  20441. //
  20442. this.set( owner, key, value );
  20443. // Since the "set" path can have two possible entry points
  20444. // return the expected data based on which path was taken[*]
  20445. return value !== undefined ? value : key;
  20446. },
  20447. remove: function( owner, key ) {
  20448. var i, name, camel,
  20449. cache = owner[ this.expando ];
  20450. if ( cache === undefined ) {
  20451. return;
  20452. }
  20453. if ( key === undefined ) {
  20454. this.register( owner );
  20455. } else {
  20456. // Support array or space separated string of keys
  20457. if ( jQuery.isArray( key ) ) {
  20458. // If "name" is an array of keys...
  20459. // When data is initially created, via ("key", "val") signature,
  20460. // keys will be converted to camelCase.
  20461. // Since there is no way to tell _how_ a key was added, remove
  20462. // both plain key and camelCase key. #12786
  20463. // This will only penalize the array argument path.
  20464. name = key.concat( key.map( jQuery.camelCase ) );
  20465. } else {
  20466. camel = jQuery.camelCase( key );
  20467. // Try the string as a key before any manipulation
  20468. if ( key in cache ) {
  20469. name = [ key, camel ];
  20470. } else {
  20471. // If a key with the spaces exists, use it.
  20472. // Otherwise, create an array by matching non-whitespace
  20473. name = camel;
  20474. name = name in cache ?
  20475. [ name ] : ( name.match( rnotwhite ) || [] );
  20476. }
  20477. }
  20478. i = name.length;
  20479. while ( i-- ) {
  20480. delete cache[ name[ i ] ];
  20481. }
  20482. }
  20483. // Remove the expando if there's no more data
  20484. if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
  20485. // Support: Chrome <= 35-45+
  20486. // Webkit & Blink performance suffers when deleting properties
  20487. // from DOM nodes, so set to undefined instead
  20488. // https://code.google.com/p/chromium/issues/detail?id=378607
  20489. if ( owner.nodeType ) {
  20490. owner[ this.expando ] = undefined;
  20491. } else {
  20492. delete owner[ this.expando ];
  20493. }
  20494. }
  20495. },
  20496. hasData: function( owner ) {
  20497. var cache = owner[ this.expando ];
  20498. return cache !== undefined && !jQuery.isEmptyObject( cache );
  20499. }
  20500. };
  20501. var dataPriv = new Data();
  20502. var dataUser = new Data();
  20503. // Implementation Summary
  20504. //
  20505. // 1. Enforce API surface and semantic compatibility with 1.9.x branch
  20506. // 2. Improve the module's maintainability by reducing the storage
  20507. // paths to a single mechanism.
  20508. // 3. Use the same single mechanism to support "private" and "user" data.
  20509. // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
  20510. // 5. Avoid exposing implementation details on user objects (eg. expando properties)
  20511. // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
  20512. var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
  20513. rmultiDash = /[A-Z]/g;
  20514. function dataAttr( elem, key, data ) {
  20515. var name;
  20516. // If nothing was found internally, try to fetch any
  20517. // data from the HTML5 data-* attribute
  20518. if ( data === undefined && elem.nodeType === 1 ) {
  20519. name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
  20520. data = elem.getAttribute( name );
  20521. if ( typeof data === "string" ) {
  20522. try {
  20523. data = data === "true" ? true :
  20524. data === "false" ? false :
  20525. data === "null" ? null :
  20526. // Only convert to a number if it doesn't change the string
  20527. +data + "" === data ? +data :
  20528. rbrace.test( data ) ? jQuery.parseJSON( data ) :
  20529. data;
  20530. } catch ( e ) {}
  20531. // Make sure we set the data so it isn't changed later
  20532. dataUser.set( elem, key, data );
  20533. } else {
  20534. data = undefined;
  20535. }
  20536. }
  20537. return data;
  20538. }
  20539. jQuery.extend( {
  20540. hasData: function( elem ) {
  20541. return dataUser.hasData( elem ) || dataPriv.hasData( elem );
  20542. },
  20543. data: function( elem, name, data ) {
  20544. return dataUser.access( elem, name, data );
  20545. },
  20546. removeData: function( elem, name ) {
  20547. dataUser.remove( elem, name );
  20548. },
  20549. // TODO: Now that all calls to _data and _removeData have been replaced
  20550. // with direct calls to dataPriv methods, these can be deprecated.
  20551. _data: function( elem, name, data ) {
  20552. return dataPriv.access( elem, name, data );
  20553. },
  20554. _removeData: function( elem, name ) {
  20555. dataPriv.remove( elem, name );
  20556. }
  20557. } );
  20558. jQuery.fn.extend( {
  20559. data: function( key, value ) {
  20560. var i, name, data,
  20561. elem = this[ 0 ],
  20562. attrs = elem && elem.attributes;
  20563. // Gets all values
  20564. if ( key === undefined ) {
  20565. if ( this.length ) {
  20566. data = dataUser.get( elem );
  20567. if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
  20568. i = attrs.length;
  20569. while ( i-- ) {
  20570. // Support: IE11+
  20571. // The attrs elements can be null (#14894)
  20572. if ( attrs[ i ] ) {
  20573. name = attrs[ i ].name;
  20574. if ( name.indexOf( "data-" ) === 0 ) {
  20575. name = jQuery.camelCase( name.slice( 5 ) );
  20576. dataAttr( elem, name, data[ name ] );
  20577. }
  20578. }
  20579. }
  20580. dataPriv.set( elem, "hasDataAttrs", true );
  20581. }
  20582. }
  20583. return data;
  20584. }
  20585. // Sets multiple values
  20586. if ( typeof key === "object" ) {
  20587. return this.each( function() {
  20588. dataUser.set( this, key );
  20589. } );
  20590. }
  20591. return access( this, function( value ) {
  20592. var data, camelKey;
  20593. // The calling jQuery object (element matches) is not empty
  20594. // (and therefore has an element appears at this[ 0 ]) and the
  20595. // `value` parameter was not undefined. An empty jQuery object
  20596. // will result in `undefined` for elem = this[ 0 ] which will
  20597. // throw an exception if an attempt to read a data cache is made.
  20598. if ( elem && value === undefined ) {
  20599. // Attempt to get data from the cache
  20600. // with the key as-is
  20601. data = dataUser.get( elem, key ) ||
  20602. // Try to find dashed key if it exists (gh-2779)
  20603. // This is for 2.2.x only
  20604. dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() );
  20605. if ( data !== undefined ) {
  20606. return data;
  20607. }
  20608. camelKey = jQuery.camelCase( key );
  20609. // Attempt to get data from the cache
  20610. // with the key camelized
  20611. data = dataUser.get( elem, camelKey );
  20612. if ( data !== undefined ) {
  20613. return data;
  20614. }
  20615. // Attempt to "discover" the data in
  20616. // HTML5 custom data-* attrs
  20617. data = dataAttr( elem, camelKey, undefined );
  20618. if ( data !== undefined ) {
  20619. return data;
  20620. }
  20621. // We tried really hard, but the data doesn't exist.
  20622. return;
  20623. }
  20624. // Set the data...
  20625. camelKey = jQuery.camelCase( key );
  20626. this.each( function() {
  20627. // First, attempt to store a copy or reference of any
  20628. // data that might've been store with a camelCased key.
  20629. var data = dataUser.get( this, camelKey );
  20630. // For HTML5 data-* attribute interop, we have to
  20631. // store property names with dashes in a camelCase form.
  20632. // This might not apply to all properties...*
  20633. dataUser.set( this, camelKey, value );
  20634. // *... In the case of properties that might _actually_
  20635. // have dashes, we need to also store a copy of that
  20636. // unchanged property.
  20637. if ( key.indexOf( "-" ) > -1 && data !== undefined ) {
  20638. dataUser.set( this, key, value );
  20639. }
  20640. } );
  20641. }, null, value, arguments.length > 1, null, true );
  20642. },
  20643. removeData: function( key ) {
  20644. return this.each( function() {
  20645. dataUser.remove( this, key );
  20646. } );
  20647. }
  20648. } );
  20649. jQuery.extend( {
  20650. queue: function( elem, type, data ) {
  20651. var queue;
  20652. if ( elem ) {
  20653. type = ( type || "fx" ) + "queue";
  20654. queue = dataPriv.get( elem, type );
  20655. // Speed up dequeue by getting out quickly if this is just a lookup
  20656. if ( data ) {
  20657. if ( !queue || jQuery.isArray( data ) ) {
  20658. queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
  20659. } else {
  20660. queue.push( data );
  20661. }
  20662. }
  20663. return queue || [];
  20664. }
  20665. },
  20666. dequeue: function( elem, type ) {
  20667. type = type || "fx";
  20668. var queue = jQuery.queue( elem, type ),
  20669. startLength = queue.length,
  20670. fn = queue.shift(),
  20671. hooks = jQuery._queueHooks( elem, type ),
  20672. next = function() {
  20673. jQuery.dequeue( elem, type );
  20674. };
  20675. // If the fx queue is dequeued, always remove the progress sentinel
  20676. if ( fn === "inprogress" ) {
  20677. fn = queue.shift();
  20678. startLength--;
  20679. }
  20680. if ( fn ) {
  20681. // Add a progress sentinel to prevent the fx queue from being
  20682. // automatically dequeued
  20683. if ( type === "fx" ) {
  20684. queue.unshift( "inprogress" );
  20685. }
  20686. // Clear up the last queue stop function
  20687. delete hooks.stop;
  20688. fn.call( elem, next, hooks );
  20689. }
  20690. if ( !startLength && hooks ) {
  20691. hooks.empty.fire();
  20692. }
  20693. },
  20694. // Not public - generate a queueHooks object, or return the current one
  20695. _queueHooks: function( elem, type ) {
  20696. var key = type + "queueHooks";
  20697. return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
  20698. empty: jQuery.Callbacks( "once memory" ).add( function() {
  20699. dataPriv.remove( elem, [ type + "queue", key ] );
  20700. } )
  20701. } );
  20702. }
  20703. } );
  20704. jQuery.fn.extend( {
  20705. queue: function( type, data ) {
  20706. var setter = 2;
  20707. if ( typeof type !== "string" ) {
  20708. data = type;
  20709. type = "fx";
  20710. setter--;
  20711. }
  20712. if ( arguments.length < setter ) {
  20713. return jQuery.queue( this[ 0 ], type );
  20714. }
  20715. return data === undefined ?
  20716. this :
  20717. this.each( function() {
  20718. var queue = jQuery.queue( this, type, data );
  20719. // Ensure a hooks for this queue
  20720. jQuery._queueHooks( this, type );
  20721. if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
  20722. jQuery.dequeue( this, type );
  20723. }
  20724. } );
  20725. },
  20726. dequeue: function( type ) {
  20727. return this.each( function() {
  20728. jQuery.dequeue( this, type );
  20729. } );
  20730. },
  20731. clearQueue: function( type ) {
  20732. return this.queue( type || "fx", [] );
  20733. },
  20734. // Get a promise resolved when queues of a certain type
  20735. // are emptied (fx is the type by default)
  20736. promise: function( type, obj ) {
  20737. var tmp,
  20738. count = 1,
  20739. defer = jQuery.Deferred(),
  20740. elements = this,
  20741. i = this.length,
  20742. resolve = function() {
  20743. if ( !( --count ) ) {
  20744. defer.resolveWith( elements, [ elements ] );
  20745. }
  20746. };
  20747. if ( typeof type !== "string" ) {
  20748. obj = type;
  20749. type = undefined;
  20750. }
  20751. type = type || "fx";
  20752. while ( i-- ) {
  20753. tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
  20754. if ( tmp && tmp.empty ) {
  20755. count++;
  20756. tmp.empty.add( resolve );
  20757. }
  20758. }
  20759. resolve();
  20760. return defer.promise( obj );
  20761. }
  20762. } );
  20763. var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
  20764. var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
  20765. var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
  20766. var isHidden = function( elem, el ) {
  20767. // isHidden might be called from jQuery#filter function;
  20768. // in that case, element will be second argument
  20769. elem = el || elem;
  20770. return jQuery.css( elem, "display" ) === "none" ||
  20771. !jQuery.contains( elem.ownerDocument, elem );
  20772. };
  20773. function adjustCSS( elem, prop, valueParts, tween ) {
  20774. var adjusted,
  20775. scale = 1,
  20776. maxIterations = 20,
  20777. currentValue = tween ?
  20778. function() { return tween.cur(); } :
  20779. function() { return jQuery.css( elem, prop, "" ); },
  20780. initial = currentValue(),
  20781. unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
  20782. // Starting value computation is required for potential unit mismatches
  20783. initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
  20784. rcssNum.exec( jQuery.css( elem, prop ) );
  20785. if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
  20786. // Trust units reported by jQuery.css
  20787. unit = unit || initialInUnit[ 3 ];
  20788. // Make sure we update the tween properties later on
  20789. valueParts = valueParts || [];
  20790. // Iteratively approximate from a nonzero starting point
  20791. initialInUnit = +initial || 1;
  20792. do {
  20793. // If previous iteration zeroed out, double until we get *something*.
  20794. // Use string for doubling so we don't accidentally see scale as unchanged below
  20795. scale = scale || ".5";
  20796. // Adjust and apply
  20797. initialInUnit = initialInUnit / scale;
  20798. jQuery.style( elem, prop, initialInUnit + unit );
  20799. // Update scale, tolerating zero or NaN from tween.cur()
  20800. // Break the loop if scale is unchanged or perfect, or if we've just had enough.
  20801. } while (
  20802. scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
  20803. );
  20804. }
  20805. if ( valueParts ) {
  20806. initialInUnit = +initialInUnit || +initial || 0;
  20807. // Apply relative offset (+=/-=) if specified
  20808. adjusted = valueParts[ 1 ] ?
  20809. initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
  20810. +valueParts[ 2 ];
  20811. if ( tween ) {
  20812. tween.unit = unit;
  20813. tween.start = initialInUnit;
  20814. tween.end = adjusted;
  20815. }
  20816. }
  20817. return adjusted;
  20818. }
  20819. var rcheckableType = ( /^(?:checkbox|radio)$/i );
  20820. var rtagName = ( /<([\w:-]+)/ );
  20821. var rscriptType = ( /^$|\/(?:java|ecma)script/i );
  20822. // We have to close these tags to support XHTML (#13200)
  20823. var wrapMap = {
  20824. // Support: IE9
  20825. option: [ 1, "<select multiple='multiple'>", "</select>" ],
  20826. // XHTML parsers do not magically insert elements in the
  20827. // same way that tag soup parsers do. So we cannot shorten
  20828. // this by omitting <tbody> or other required elements.
  20829. thead: [ 1, "<table>", "</table>" ],
  20830. col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
  20831. tr: [ 2, "<table><tbody>", "</tbody></table>" ],
  20832. td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
  20833. _default: [ 0, "", "" ]
  20834. };
  20835. // Support: IE9
  20836. wrapMap.optgroup = wrapMap.option;
  20837. wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
  20838. wrapMap.th = wrapMap.td;
  20839. function getAll( context, tag ) {
  20840. // Support: IE9-11+
  20841. // Use typeof to avoid zero-argument method invocation on host objects (#15151)
  20842. var ret = typeof context.getElementsByTagName !== "undefined" ?
  20843. context.getElementsByTagName( tag || "*" ) :
  20844. typeof context.querySelectorAll !== "undefined" ?
  20845. context.querySelectorAll( tag || "*" ) :
  20846. [];
  20847. return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
  20848. jQuery.merge( [ context ], ret ) :
  20849. ret;
  20850. }
  20851. // Mark scripts as having already been evaluated
  20852. function setGlobalEval( elems, refElements ) {
  20853. var i = 0,
  20854. l = elems.length;
  20855. for ( ; i < l; i++ ) {
  20856. dataPriv.set(
  20857. elems[ i ],
  20858. "globalEval",
  20859. !refElements || dataPriv.get( refElements[ i ], "globalEval" )
  20860. );
  20861. }
  20862. }
  20863. var rhtml = /<|&#?\w+;/;
  20864. function buildFragment( elems, context, scripts, selection, ignored ) {
  20865. var elem, tmp, tag, wrap, contains, j,
  20866. fragment = context.createDocumentFragment(),
  20867. nodes = [],
  20868. i = 0,
  20869. l = elems.length;
  20870. for ( ; i < l; i++ ) {
  20871. elem = elems[ i ];
  20872. if ( elem || elem === 0 ) {
  20873. // Add nodes directly
  20874. if ( jQuery.type( elem ) === "object" ) {
  20875. // Support: Android<4.1, PhantomJS<2
  20876. // push.apply(_, arraylike) throws on ancient WebKit
  20877. jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
  20878. // Convert non-html into a text node
  20879. } else if ( !rhtml.test( elem ) ) {
  20880. nodes.push( context.createTextNode( elem ) );
  20881. // Convert html into DOM nodes
  20882. } else {
  20883. tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
  20884. // Deserialize a standard representation
  20885. tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
  20886. wrap = wrapMap[ tag ] || wrapMap._default;
  20887. tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
  20888. // Descend through wrappers to the right content
  20889. j = wrap[ 0 ];
  20890. while ( j-- ) {
  20891. tmp = tmp.lastChild;
  20892. }
  20893. // Support: Android<4.1, PhantomJS<2
  20894. // push.apply(_, arraylike) throws on ancient WebKit
  20895. jQuery.merge( nodes, tmp.childNodes );
  20896. // Remember the top-level container
  20897. tmp = fragment.firstChild;
  20898. // Ensure the created nodes are orphaned (#12392)
  20899. tmp.textContent = "";
  20900. }
  20901. }
  20902. }
  20903. // Remove wrapper from fragment
  20904. fragment.textContent = "";
  20905. i = 0;
  20906. while ( ( elem = nodes[ i++ ] ) ) {
  20907. // Skip elements already in the context collection (trac-4087)
  20908. if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
  20909. if ( ignored ) {
  20910. ignored.push( elem );
  20911. }
  20912. continue;
  20913. }
  20914. contains = jQuery.contains( elem.ownerDocument, elem );
  20915. // Append to fragment
  20916. tmp = getAll( fragment.appendChild( elem ), "script" );
  20917. // Preserve script evaluation history
  20918. if ( contains ) {
  20919. setGlobalEval( tmp );
  20920. }
  20921. // Capture executables
  20922. if ( scripts ) {
  20923. j = 0;
  20924. while ( ( elem = tmp[ j++ ] ) ) {
  20925. if ( rscriptType.test( elem.type || "" ) ) {
  20926. scripts.push( elem );
  20927. }
  20928. }
  20929. }
  20930. }
  20931. return fragment;
  20932. }
  20933. ( function() {
  20934. var fragment = document.createDocumentFragment(),
  20935. div = fragment.appendChild( document.createElement( "div" ) ),
  20936. input = document.createElement( "input" );
  20937. // Support: Android 4.0-4.3, Safari<=5.1
  20938. // Check state lost if the name is set (#11217)
  20939. // Support: Windows Web Apps (WWA)
  20940. // `name` and `type` must use .setAttribute for WWA (#14901)
  20941. input.setAttribute( "type", "radio" );
  20942. input.setAttribute( "checked", "checked" );
  20943. input.setAttribute( "name", "t" );
  20944. div.appendChild( input );
  20945. // Support: Safari<=5.1, Android<4.2
  20946. // Older WebKit doesn't clone checked state correctly in fragments
  20947. support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
  20948. // Support: IE<=11+
  20949. // Make sure textarea (and checkbox) defaultValue is properly cloned
  20950. div.innerHTML = "<textarea>x</textarea>";
  20951. support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
  20952. } )();
  20953. var
  20954. rkeyEvent = /^key/,
  20955. rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
  20956. rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
  20957. function returnTrue() {
  20958. return true;
  20959. }
  20960. function returnFalse() {
  20961. return false;
  20962. }
  20963. // Support: IE9
  20964. // See #13393 for more info
  20965. function safeActiveElement() {
  20966. try {
  20967. return document.activeElement;
  20968. } catch ( err ) { }
  20969. }
  20970. function on( elem, types, selector, data, fn, one ) {
  20971. var origFn, type;
  20972. // Types can be a map of types/handlers
  20973. if ( typeof types === "object" ) {
  20974. // ( types-Object, selector, data )
  20975. if ( typeof selector !== "string" ) {
  20976. // ( types-Object, data )
  20977. data = data || selector;
  20978. selector = undefined;
  20979. }
  20980. for ( type in types ) {
  20981. on( elem, type, selector, data, types[ type ], one );
  20982. }
  20983. return elem;
  20984. }
  20985. if ( data == null && fn == null ) {
  20986. // ( types, fn )
  20987. fn = selector;
  20988. data = selector = undefined;
  20989. } else if ( fn == null ) {
  20990. if ( typeof selector === "string" ) {
  20991. // ( types, selector, fn )
  20992. fn = data;
  20993. data = undefined;
  20994. } else {
  20995. // ( types, data, fn )
  20996. fn = data;
  20997. data = selector;
  20998. selector = undefined;
  20999. }
  21000. }
  21001. if ( fn === false ) {
  21002. fn = returnFalse;
  21003. } else if ( !fn ) {
  21004. return elem;
  21005. }
  21006. if ( one === 1 ) {
  21007. origFn = fn;
  21008. fn = function( event ) {
  21009. // Can use an empty set, since event contains the info
  21010. jQuery().off( event );
  21011. return origFn.apply( this, arguments );
  21012. };
  21013. // Use same guid so caller can remove using origFn
  21014. fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
  21015. }
  21016. return elem.each( function() {
  21017. jQuery.event.add( this, types, fn, data, selector );
  21018. } );
  21019. }
  21020. /*
  21021. * Helper functions for managing events -- not part of the public interface.
  21022. * Props to Dean Edwards' addEvent library for many of the ideas.
  21023. */
  21024. jQuery.event = {
  21025. global: {},
  21026. add: function( elem, types, handler, data, selector ) {
  21027. var handleObjIn, eventHandle, tmp,
  21028. events, t, handleObj,
  21029. special, handlers, type, namespaces, origType,
  21030. elemData = dataPriv.get( elem );
  21031. // Don't attach events to noData or text/comment nodes (but allow plain objects)
  21032. if ( !elemData ) {
  21033. return;
  21034. }
  21035. // Caller can pass in an object of custom data in lieu of the handler
  21036. if ( handler.handler ) {
  21037. handleObjIn = handler;
  21038. handler = handleObjIn.handler;
  21039. selector = handleObjIn.selector;
  21040. }
  21041. // Make sure that the handler has a unique ID, used to find/remove it later
  21042. if ( !handler.guid ) {
  21043. handler.guid = jQuery.guid++;
  21044. }
  21045. // Init the element's event structure and main handler, if this is the first
  21046. if ( !( events = elemData.events ) ) {
  21047. events = elemData.events = {};
  21048. }
  21049. if ( !( eventHandle = elemData.handle ) ) {
  21050. eventHandle = elemData.handle = function( e ) {
  21051. // Discard the second event of a jQuery.event.trigger() and
  21052. // when an event is called after a page has unloaded
  21053. return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
  21054. jQuery.event.dispatch.apply( elem, arguments ) : undefined;
  21055. };
  21056. }
  21057. // Handle multiple events separated by a space
  21058. types = ( types || "" ).match( rnotwhite ) || [ "" ];
  21059. t = types.length;
  21060. while ( t-- ) {
  21061. tmp = rtypenamespace.exec( types[ t ] ) || [];
  21062. type = origType = tmp[ 1 ];
  21063. namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
  21064. // There *must* be a type, no attaching namespace-only handlers
  21065. if ( !type ) {
  21066. continue;
  21067. }
  21068. // If event changes its type, use the special event handlers for the changed type
  21069. special = jQuery.event.special[ type ] || {};
  21070. // If selector defined, determine special event api type, otherwise given type
  21071. type = ( selector ? special.delegateType : special.bindType ) || type;
  21072. // Update special based on newly reset type
  21073. special = jQuery.event.special[ type ] || {};
  21074. // handleObj is passed to all event handlers
  21075. handleObj = jQuery.extend( {
  21076. type: type,
  21077. origType: origType,
  21078. data: data,
  21079. handler: handler,
  21080. guid: handler.guid,
  21081. selector: selector,
  21082. needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
  21083. namespace: namespaces.join( "." )
  21084. }, handleObjIn );
  21085. // Init the event handler queue if we're the first
  21086. if ( !( handlers = events[ type ] ) ) {
  21087. handlers = events[ type ] = [];
  21088. handlers.delegateCount = 0;
  21089. // Only use addEventListener if the special events handler returns false
  21090. if ( !special.setup ||
  21091. special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
  21092. if ( elem.addEventListener ) {
  21093. elem.addEventListener( type, eventHandle );
  21094. }
  21095. }
  21096. }
  21097. if ( special.add ) {
  21098. special.add.call( elem, handleObj );
  21099. if ( !handleObj.handler.guid ) {
  21100. handleObj.handler.guid = handler.guid;
  21101. }
  21102. }
  21103. // Add to the element's handler list, delegates in front
  21104. if ( selector ) {
  21105. handlers.splice( handlers.delegateCount++, 0, handleObj );
  21106. } else {
  21107. handlers.push( handleObj );
  21108. }
  21109. // Keep track of which events have ever been used, for event optimization
  21110. jQuery.event.global[ type ] = true;
  21111. }
  21112. },
  21113. // Detach an event or set of events from an element
  21114. remove: function( elem, types, handler, selector, mappedTypes ) {
  21115. var j, origCount, tmp,
  21116. events, t, handleObj,
  21117. special, handlers, type, namespaces, origType,
  21118. elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
  21119. if ( !elemData || !( events = elemData.events ) ) {
  21120. return;
  21121. }
  21122. // Once for each type.namespace in types; type may be omitted
  21123. types = ( types || "" ).match( rnotwhite ) || [ "" ];
  21124. t = types.length;
  21125. while ( t-- ) {
  21126. tmp = rtypenamespace.exec( types[ t ] ) || [];
  21127. type = origType = tmp[ 1 ];
  21128. namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
  21129. // Unbind all events (on this namespace, if provided) for the element
  21130. if ( !type ) {
  21131. for ( type in events ) {
  21132. jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
  21133. }
  21134. continue;
  21135. }
  21136. special = jQuery.event.special[ type ] || {};
  21137. type = ( selector ? special.delegateType : special.bindType ) || type;
  21138. handlers = events[ type ] || [];
  21139. tmp = tmp[ 2 ] &&
  21140. new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
  21141. // Remove matching events
  21142. origCount = j = handlers.length;
  21143. while ( j-- ) {
  21144. handleObj = handlers[ j ];
  21145. if ( ( mappedTypes || origType === handleObj.origType ) &&
  21146. ( !handler || handler.guid === handleObj.guid ) &&
  21147. ( !tmp || tmp.test( handleObj.namespace ) ) &&
  21148. ( !selector || selector === handleObj.selector ||
  21149. selector === "**" && handleObj.selector ) ) {
  21150. handlers.splice( j, 1 );
  21151. if ( handleObj.selector ) {
  21152. handlers.delegateCount--;
  21153. }
  21154. if ( special.remove ) {
  21155. special.remove.call( elem, handleObj );
  21156. }
  21157. }
  21158. }
  21159. // Remove generic event handler if we removed something and no more handlers exist
  21160. // (avoids potential for endless recursion during removal of special event handlers)
  21161. if ( origCount && !handlers.length ) {
  21162. if ( !special.teardown ||
  21163. special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
  21164. jQuery.removeEvent( elem, type, elemData.handle );
  21165. }
  21166. delete events[ type ];
  21167. }
  21168. }
  21169. // Remove data and the expando if it's no longer used
  21170. if ( jQuery.isEmptyObject( events ) ) {
  21171. dataPriv.remove( elem, "handle events" );
  21172. }
  21173. },
  21174. dispatch: function( event ) {
  21175. // Make a writable jQuery.Event from the native event object
  21176. event = jQuery.event.fix( event );
  21177. var i, j, ret, matched, handleObj,
  21178. handlerQueue = [],
  21179. args = slice.call( arguments ),
  21180. handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
  21181. special = jQuery.event.special[ event.type ] || {};
  21182. // Use the fix-ed jQuery.Event rather than the (read-only) native event
  21183. args[ 0 ] = event;
  21184. event.delegateTarget = this;
  21185. // Call the preDispatch hook for the mapped type, and let it bail if desired
  21186. if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
  21187. return;
  21188. }
  21189. // Determine handlers
  21190. handlerQueue = jQuery.event.handlers.call( this, event, handlers );
  21191. // Run delegates first; they may want to stop propagation beneath us
  21192. i = 0;
  21193. while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
  21194. event.currentTarget = matched.elem;
  21195. j = 0;
  21196. while ( ( handleObj = matched.handlers[ j++ ] ) &&
  21197. !event.isImmediatePropagationStopped() ) {
  21198. // Triggered event must either 1) have no namespace, or 2) have namespace(s)
  21199. // a subset or equal to those in the bound event (both can have no namespace).
  21200. if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
  21201. event.handleObj = handleObj;
  21202. event.data = handleObj.data;
  21203. ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
  21204. handleObj.handler ).apply( matched.elem, args );
  21205. if ( ret !== undefined ) {
  21206. if ( ( event.result = ret ) === false ) {
  21207. event.preventDefault();
  21208. event.stopPropagation();
  21209. }
  21210. }
  21211. }
  21212. }
  21213. }
  21214. // Call the postDispatch hook for the mapped type
  21215. if ( special.postDispatch ) {
  21216. special.postDispatch.call( this, event );
  21217. }
  21218. return event.result;
  21219. },
  21220. handlers: function( event, handlers ) {
  21221. var i, matches, sel, handleObj,
  21222. handlerQueue = [],
  21223. delegateCount = handlers.delegateCount,
  21224. cur = event.target;
  21225. // Support (at least): Chrome, IE9
  21226. // Find delegate handlers
  21227. // Black-hole SVG <use> instance trees (#13180)
  21228. //
  21229. // Support: Firefox<=42+
  21230. // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
  21231. if ( delegateCount && cur.nodeType &&
  21232. ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
  21233. for ( ; cur !== this; cur = cur.parentNode || this ) {
  21234. // Don't check non-elements (#13208)
  21235. // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
  21236. if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
  21237. matches = [];
  21238. for ( i = 0; i < delegateCount; i++ ) {
  21239. handleObj = handlers[ i ];
  21240. // Don't conflict with Object.prototype properties (#13203)
  21241. sel = handleObj.selector + " ";
  21242. if ( matches[ sel ] === undefined ) {
  21243. matches[ sel ] = handleObj.needsContext ?
  21244. jQuery( sel, this ).index( cur ) > -1 :
  21245. jQuery.find( sel, this, null, [ cur ] ).length;
  21246. }
  21247. if ( matches[ sel ] ) {
  21248. matches.push( handleObj );
  21249. }
  21250. }
  21251. if ( matches.length ) {
  21252. handlerQueue.push( { elem: cur, handlers: matches } );
  21253. }
  21254. }
  21255. }
  21256. }
  21257. // Add the remaining (directly-bound) handlers
  21258. if ( delegateCount < handlers.length ) {
  21259. handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
  21260. }
  21261. return handlerQueue;
  21262. },
  21263. // Includes some event props shared by KeyEvent and MouseEvent
  21264. props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
  21265. "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
  21266. fixHooks: {},
  21267. keyHooks: {
  21268. props: "char charCode key keyCode".split( " " ),
  21269. filter: function( event, original ) {
  21270. // Add which for key events
  21271. if ( event.which == null ) {
  21272. event.which = original.charCode != null ? original.charCode : original.keyCode;
  21273. }
  21274. return event;
  21275. }
  21276. },
  21277. mouseHooks: {
  21278. props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " +
  21279. "screenX screenY toElement" ).split( " " ),
  21280. filter: function( event, original ) {
  21281. var eventDoc, doc, body,
  21282. button = original.button;
  21283. // Calculate pageX/Y if missing and clientX/Y available
  21284. if ( event.pageX == null && original.clientX != null ) {
  21285. eventDoc = event.target.ownerDocument || document;
  21286. doc = eventDoc.documentElement;
  21287. body = eventDoc.body;
  21288. event.pageX = original.clientX +
  21289. ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
  21290. ( doc && doc.clientLeft || body && body.clientLeft || 0 );
  21291. event.pageY = original.clientY +
  21292. ( doc && doc.scrollTop || body && body.scrollTop || 0 ) -
  21293. ( doc && doc.clientTop || body && body.clientTop || 0 );
  21294. }
  21295. // Add which for click: 1 === left; 2 === middle; 3 === right
  21296. // Note: button is not normalized, so don't use it
  21297. if ( !event.which && button !== undefined ) {
  21298. event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
  21299. }
  21300. return event;
  21301. }
  21302. },
  21303. fix: function( event ) {
  21304. if ( event[ jQuery.expando ] ) {
  21305. return event;
  21306. }
  21307. // Create a writable copy of the event object and normalize some properties
  21308. var i, prop, copy,
  21309. type = event.type,
  21310. originalEvent = event,
  21311. fixHook = this.fixHooks[ type ];
  21312. if ( !fixHook ) {
  21313. this.fixHooks[ type ] = fixHook =
  21314. rmouseEvent.test( type ) ? this.mouseHooks :
  21315. rkeyEvent.test( type ) ? this.keyHooks :
  21316. {};
  21317. }
  21318. copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
  21319. event = new jQuery.Event( originalEvent );
  21320. i = copy.length;
  21321. while ( i-- ) {
  21322. prop = copy[ i ];
  21323. event[ prop ] = originalEvent[ prop ];
  21324. }
  21325. // Support: Cordova 2.5 (WebKit) (#13255)
  21326. // All events should have a target; Cordova deviceready doesn't
  21327. if ( !event.target ) {
  21328. event.target = document;
  21329. }
  21330. // Support: Safari 6.0+, Chrome<28
  21331. // Target should not be a text node (#504, #13143)
  21332. if ( event.target.nodeType === 3 ) {
  21333. event.target = event.target.parentNode;
  21334. }
  21335. return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
  21336. },
  21337. special: {
  21338. load: {
  21339. // Prevent triggered image.load events from bubbling to window.load
  21340. noBubble: true
  21341. },
  21342. focus: {
  21343. // Fire native event if possible so blur/focus sequence is correct
  21344. trigger: function() {
  21345. if ( this !== safeActiveElement() && this.focus ) {
  21346. this.focus();
  21347. return false;
  21348. }
  21349. },
  21350. delegateType: "focusin"
  21351. },
  21352. blur: {
  21353. trigger: function() {
  21354. if ( this === safeActiveElement() && this.blur ) {
  21355. this.blur();
  21356. return false;
  21357. }
  21358. },
  21359. delegateType: "focusout"
  21360. },
  21361. click: {
  21362. // For checkbox, fire native event so checked state will be right
  21363. trigger: function() {
  21364. if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
  21365. this.click();
  21366. return false;
  21367. }
  21368. },
  21369. // For cross-browser consistency, don't fire native .click() on links
  21370. _default: function( event ) {
  21371. return jQuery.nodeName( event.target, "a" );
  21372. }
  21373. },
  21374. beforeunload: {
  21375. postDispatch: function( event ) {
  21376. // Support: Firefox 20+
  21377. // Firefox doesn't alert if the returnValue field is not set.
  21378. if ( event.result !== undefined && event.originalEvent ) {
  21379. event.originalEvent.returnValue = event.result;
  21380. }
  21381. }
  21382. }
  21383. }
  21384. };
  21385. jQuery.removeEvent = function( elem, type, handle ) {
  21386. // This "if" is needed for plain objects
  21387. if ( elem.removeEventListener ) {
  21388. elem.removeEventListener( type, handle );
  21389. }
  21390. };
  21391. jQuery.Event = function( src, props ) {
  21392. // Allow instantiation without the 'new' keyword
  21393. if ( !( this instanceof jQuery.Event ) ) {
  21394. return new jQuery.Event( src, props );
  21395. }
  21396. // Event object
  21397. if ( src && src.type ) {
  21398. this.originalEvent = src;
  21399. this.type = src.type;
  21400. // Events bubbling up the document may have been marked as prevented
  21401. // by a handler lower down the tree; reflect the correct value.
  21402. this.isDefaultPrevented = src.defaultPrevented ||
  21403. src.defaultPrevented === undefined &&
  21404. // Support: Android<4.0
  21405. src.returnValue === false ?
  21406. returnTrue :
  21407. returnFalse;
  21408. // Event type
  21409. } else {
  21410. this.type = src;
  21411. }
  21412. // Put explicitly provided properties onto the event object
  21413. if ( props ) {
  21414. jQuery.extend( this, props );
  21415. }
  21416. // Create a timestamp if incoming event doesn't have one
  21417. this.timeStamp = src && src.timeStamp || jQuery.now();
  21418. // Mark it as fixed
  21419. this[ jQuery.expando ] = true;
  21420. };
  21421. // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
  21422. // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
  21423. jQuery.Event.prototype = {
  21424. constructor: jQuery.Event,
  21425. isDefaultPrevented: returnFalse,
  21426. isPropagationStopped: returnFalse,
  21427. isImmediatePropagationStopped: returnFalse,
  21428. preventDefault: function() {
  21429. var e = this.originalEvent;
  21430. this.isDefaultPrevented = returnTrue;
  21431. if ( e ) {
  21432. e.preventDefault();
  21433. }
  21434. },
  21435. stopPropagation: function() {
  21436. var e = this.originalEvent;
  21437. this.isPropagationStopped = returnTrue;
  21438. if ( e ) {
  21439. e.stopPropagation();
  21440. }
  21441. },
  21442. stopImmediatePropagation: function() {
  21443. var e = this.originalEvent;
  21444. this.isImmediatePropagationStopped = returnTrue;
  21445. if ( e ) {
  21446. e.stopImmediatePropagation();
  21447. }
  21448. this.stopPropagation();
  21449. }
  21450. };
  21451. // Create mouseenter/leave events using mouseover/out and event-time checks
  21452. // so that event delegation works in jQuery.
  21453. // Do the same for pointerenter/pointerleave and pointerover/pointerout
  21454. //
  21455. // Support: Safari 7 only
  21456. // Safari sends mouseenter too often; see:
  21457. // https://code.google.com/p/chromium/issues/detail?id=470258
  21458. // for the description of the bug (it existed in older Chrome versions as well).
  21459. jQuery.each( {
  21460. mouseenter: "mouseover",
  21461. mouseleave: "mouseout",
  21462. pointerenter: "pointerover",
  21463. pointerleave: "pointerout"
  21464. }, function( orig, fix ) {
  21465. jQuery.event.special[ orig ] = {
  21466. delegateType: fix,
  21467. bindType: fix,
  21468. handle: function( event ) {
  21469. var ret,
  21470. target = this,
  21471. related = event.relatedTarget,
  21472. handleObj = event.handleObj;
  21473. // For mouseenter/leave call the handler if related is outside the target.
  21474. // NB: No relatedTarget if the mouse left/entered the browser window
  21475. if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
  21476. event.type = handleObj.origType;
  21477. ret = handleObj.handler.apply( this, arguments );
  21478. event.type = fix;
  21479. }
  21480. return ret;
  21481. }
  21482. };
  21483. } );
  21484. jQuery.fn.extend( {
  21485. on: function( types, selector, data, fn ) {
  21486. return on( this, types, selector, data, fn );
  21487. },
  21488. one: function( types, selector, data, fn ) {
  21489. return on( this, types, selector, data, fn, 1 );
  21490. },
  21491. off: function( types, selector, fn ) {
  21492. var handleObj, type;
  21493. if ( types && types.preventDefault && types.handleObj ) {
  21494. // ( event ) dispatched jQuery.Event
  21495. handleObj = types.handleObj;
  21496. jQuery( types.delegateTarget ).off(
  21497. handleObj.namespace ?
  21498. handleObj.origType + "." + handleObj.namespace :
  21499. handleObj.origType,
  21500. handleObj.selector,
  21501. handleObj.handler
  21502. );
  21503. return this;
  21504. }
  21505. if ( typeof types === "object" ) {
  21506. // ( types-object [, selector] )
  21507. for ( type in types ) {
  21508. this.off( type, selector, types[ type ] );
  21509. }
  21510. return this;
  21511. }
  21512. if ( selector === false || typeof selector === "function" ) {
  21513. // ( types [, fn] )
  21514. fn = selector;
  21515. selector = undefined;
  21516. }
  21517. if ( fn === false ) {
  21518. fn = returnFalse;
  21519. }
  21520. return this.each( function() {
  21521. jQuery.event.remove( this, types, fn, selector );
  21522. } );
  21523. }
  21524. } );
  21525. var
  21526. rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
  21527. // Support: IE 10-11, Edge 10240+
  21528. // In IE/Edge using regex groups here causes severe slowdowns.
  21529. // See https://connect.microsoft.com/IE/feedback/details/1736512/
  21530. rnoInnerhtml = /<script|<style|<link/i,
  21531. // checked="checked" or checked
  21532. rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
  21533. rscriptTypeMasked = /^true\/(.*)/,
  21534. rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
  21535. // Manipulating tables requires a tbody
  21536. function manipulationTarget( elem, content ) {
  21537. return jQuery.nodeName( elem, "table" ) &&
  21538. jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
  21539. elem.getElementsByTagName( "tbody" )[ 0 ] ||
  21540. elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
  21541. elem;
  21542. }
  21543. // Replace/restore the type attribute of script elements for safe DOM manipulation
  21544. function disableScript( elem ) {
  21545. elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
  21546. return elem;
  21547. }
  21548. function restoreScript( elem ) {
  21549. var match = rscriptTypeMasked.exec( elem.type );
  21550. if ( match ) {
  21551. elem.type = match[ 1 ];
  21552. } else {
  21553. elem.removeAttribute( "type" );
  21554. }
  21555. return elem;
  21556. }
  21557. function cloneCopyEvent( src, dest ) {
  21558. var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
  21559. if ( dest.nodeType !== 1 ) {
  21560. return;
  21561. }
  21562. // 1. Copy private data: events, handlers, etc.
  21563. if ( dataPriv.hasData( src ) ) {
  21564. pdataOld = dataPriv.access( src );
  21565. pdataCur = dataPriv.set( dest, pdataOld );
  21566. events = pdataOld.events;
  21567. if ( events ) {
  21568. delete pdataCur.handle;
  21569. pdataCur.events = {};
  21570. for ( type in events ) {
  21571. for ( i = 0, l = events[ type ].length; i < l; i++ ) {
  21572. jQuery.event.add( dest, type, events[ type ][ i ] );
  21573. }
  21574. }
  21575. }
  21576. }
  21577. // 2. Copy user data
  21578. if ( dataUser.hasData( src ) ) {
  21579. udataOld = dataUser.access( src );
  21580. udataCur = jQuery.extend( {}, udataOld );
  21581. dataUser.set( dest, udataCur );
  21582. }
  21583. }
  21584. // Fix IE bugs, see support tests
  21585. function fixInput( src, dest ) {
  21586. var nodeName = dest.nodeName.toLowerCase();
  21587. // Fails to persist the checked state of a cloned checkbox or radio button.
  21588. if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
  21589. dest.checked = src.checked;
  21590. // Fails to return the selected option to the default selected state when cloning options
  21591. } else if ( nodeName === "input" || nodeName === "textarea" ) {
  21592. dest.defaultValue = src.defaultValue;
  21593. }
  21594. }
  21595. function domManip( collection, args, callback, ignored ) {
  21596. // Flatten any nested arrays
  21597. args = concat.apply( [], args );
  21598. var fragment, first, scripts, hasScripts, node, doc,
  21599. i = 0,
  21600. l = collection.length,
  21601. iNoClone = l - 1,
  21602. value = args[ 0 ],
  21603. isFunction = jQuery.isFunction( value );
  21604. // We can't cloneNode fragments that contain checked, in WebKit
  21605. if ( isFunction ||
  21606. ( l > 1 && typeof value === "string" &&
  21607. !support.checkClone && rchecked.test( value ) ) ) {
  21608. return collection.each( function( index ) {
  21609. var self = collection.eq( index );
  21610. if ( isFunction ) {
  21611. args[ 0 ] = value.call( this, index, self.html() );
  21612. }
  21613. domManip( self, args, callback, ignored );
  21614. } );
  21615. }
  21616. if ( l ) {
  21617. fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
  21618. first = fragment.firstChild;
  21619. if ( fragment.childNodes.length === 1 ) {
  21620. fragment = first;
  21621. }
  21622. // Require either new content or an interest in ignored elements to invoke the callback
  21623. if ( first || ignored ) {
  21624. scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
  21625. hasScripts = scripts.length;
  21626. // Use the original fragment for the last item
  21627. // instead of the first because it can end up
  21628. // being emptied incorrectly in certain situations (#8070).
  21629. for ( ; i < l; i++ ) {
  21630. node = fragment;
  21631. if ( i !== iNoClone ) {
  21632. node = jQuery.clone( node, true, true );
  21633. // Keep references to cloned scripts for later restoration
  21634. if ( hasScripts ) {
  21635. // Support: Android<4.1, PhantomJS<2
  21636. // push.apply(_, arraylike) throws on ancient WebKit
  21637. jQuery.merge( scripts, getAll( node, "script" ) );
  21638. }
  21639. }
  21640. callback.call( collection[ i ], node, i );
  21641. }
  21642. if ( hasScripts ) {
  21643. doc = scripts[ scripts.length - 1 ].ownerDocument;
  21644. // Reenable scripts
  21645. jQuery.map( scripts, restoreScript );
  21646. // Evaluate executable scripts on first document insertion
  21647. for ( i = 0; i < hasScripts; i++ ) {
  21648. node = scripts[ i ];
  21649. if ( rscriptType.test( node.type || "" ) &&
  21650. !dataPriv.access( node, "globalEval" ) &&
  21651. jQuery.contains( doc, node ) ) {
  21652. if ( node.src ) {
  21653. // Optional AJAX dependency, but won't run scripts if not present
  21654. if ( jQuery._evalUrl ) {
  21655. jQuery._evalUrl( node.src );
  21656. }
  21657. } else {
  21658. jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
  21659. }
  21660. }
  21661. }
  21662. }
  21663. }
  21664. }
  21665. return collection;
  21666. }
  21667. function remove( elem, selector, keepData ) {
  21668. var node,
  21669. nodes = selector ? jQuery.filter( selector, elem ) : elem,
  21670. i = 0;
  21671. for ( ; ( node = nodes[ i ] ) != null; i++ ) {
  21672. if ( !keepData && node.nodeType === 1 ) {
  21673. jQuery.cleanData( getAll( node ) );
  21674. }
  21675. if ( node.parentNode ) {
  21676. if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
  21677. setGlobalEval( getAll( node, "script" ) );
  21678. }
  21679. node.parentNode.removeChild( node );
  21680. }
  21681. }
  21682. return elem;
  21683. }
  21684. jQuery.extend( {
  21685. htmlPrefilter: function( html ) {
  21686. return html.replace( rxhtmlTag, "<$1></$2>" );
  21687. },
  21688. clone: function( elem, dataAndEvents, deepDataAndEvents ) {
  21689. var i, l, srcElements, destElements,
  21690. clone = elem.cloneNode( true ),
  21691. inPage = jQuery.contains( elem.ownerDocument, elem );
  21692. // Fix IE cloning issues
  21693. if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
  21694. !jQuery.isXMLDoc( elem ) ) {
  21695. // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
  21696. destElements = getAll( clone );
  21697. srcElements = getAll( elem );
  21698. for ( i = 0, l = srcElements.length; i < l; i++ ) {
  21699. fixInput( srcElements[ i ], destElements[ i ] );
  21700. }
  21701. }
  21702. // Copy the events from the original to the clone
  21703. if ( dataAndEvents ) {
  21704. if ( deepDataAndEvents ) {
  21705. srcElements = srcElements || getAll( elem );
  21706. destElements = destElements || getAll( clone );
  21707. for ( i = 0, l = srcElements.length; i < l; i++ ) {
  21708. cloneCopyEvent( srcElements[ i ], destElements[ i ] );
  21709. }
  21710. } else {
  21711. cloneCopyEvent( elem, clone );
  21712. }
  21713. }
  21714. // Preserve script evaluation history
  21715. destElements = getAll( clone, "script" );
  21716. if ( destElements.length > 0 ) {
  21717. setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
  21718. }
  21719. // Return the cloned set
  21720. return clone;
  21721. },
  21722. cleanData: function( elems ) {
  21723. var data, elem, type,
  21724. special = jQuery.event.special,
  21725. i = 0;
  21726. for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
  21727. if ( acceptData( elem ) ) {
  21728. if ( ( data = elem[ dataPriv.expando ] ) ) {
  21729. if ( data.events ) {
  21730. for ( type in data.events ) {
  21731. if ( special[ type ] ) {
  21732. jQuery.event.remove( elem, type );
  21733. // This is a shortcut to avoid jQuery.event.remove's overhead
  21734. } else {
  21735. jQuery.removeEvent( elem, type, data.handle );
  21736. }
  21737. }
  21738. }
  21739. // Support: Chrome <= 35-45+
  21740. // Assign undefined instead of using delete, see Data#remove
  21741. elem[ dataPriv.expando ] = undefined;
  21742. }
  21743. if ( elem[ dataUser.expando ] ) {
  21744. // Support: Chrome <= 35-45+
  21745. // Assign undefined instead of using delete, see Data#remove
  21746. elem[ dataUser.expando ] = undefined;
  21747. }
  21748. }
  21749. }
  21750. }
  21751. } );
  21752. jQuery.fn.extend( {
  21753. // Keep domManip exposed until 3.0 (gh-2225)
  21754. domManip: domManip,
  21755. detach: function( selector ) {
  21756. return remove( this, selector, true );
  21757. },
  21758. remove: function( selector ) {
  21759. return remove( this, selector );
  21760. },
  21761. text: function( value ) {
  21762. return access( this, function( value ) {
  21763. return value === undefined ?
  21764. jQuery.text( this ) :
  21765. this.empty().each( function() {
  21766. if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  21767. this.textContent = value;
  21768. }
  21769. } );
  21770. }, null, value, arguments.length );
  21771. },
  21772. append: function() {
  21773. return domManip( this, arguments, function( elem ) {
  21774. if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  21775. var target = manipulationTarget( this, elem );
  21776. target.appendChild( elem );
  21777. }
  21778. } );
  21779. },
  21780. prepend: function() {
  21781. return domManip( this, arguments, function( elem ) {
  21782. if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  21783. var target = manipulationTarget( this, elem );
  21784. target.insertBefore( elem, target.firstChild );
  21785. }
  21786. } );
  21787. },
  21788. before: function() {
  21789. return domManip( this, arguments, function( elem ) {
  21790. if ( this.parentNode ) {
  21791. this.parentNode.insertBefore( elem, this );
  21792. }
  21793. } );
  21794. },
  21795. after: function() {
  21796. return domManip( this, arguments, function( elem ) {
  21797. if ( this.parentNode ) {
  21798. this.parentNode.insertBefore( elem, this.nextSibling );
  21799. }
  21800. } );
  21801. },
  21802. empty: function() {
  21803. var elem,
  21804. i = 0;
  21805. for ( ; ( elem = this[ i ] ) != null; i++ ) {
  21806. if ( elem.nodeType === 1 ) {
  21807. // Prevent memory leaks
  21808. jQuery.cleanData( getAll( elem, false ) );
  21809. // Remove any remaining nodes
  21810. elem.textContent = "";
  21811. }
  21812. }
  21813. return this;
  21814. },
  21815. clone: function( dataAndEvents, deepDataAndEvents ) {
  21816. dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
  21817. deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
  21818. return this.map( function() {
  21819. return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
  21820. } );
  21821. },
  21822. html: function( value ) {
  21823. return access( this, function( value ) {
  21824. var elem = this[ 0 ] || {},
  21825. i = 0,
  21826. l = this.length;
  21827. if ( value === undefined && elem.nodeType === 1 ) {
  21828. return elem.innerHTML;
  21829. }
  21830. // See if we can take a shortcut and just use innerHTML
  21831. if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
  21832. !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
  21833. value = jQuery.htmlPrefilter( value );
  21834. try {
  21835. for ( ; i < l; i++ ) {
  21836. elem = this[ i ] || {};
  21837. // Remove element nodes and prevent memory leaks
  21838. if ( elem.nodeType === 1 ) {
  21839. jQuery.cleanData( getAll( elem, false ) );
  21840. elem.innerHTML = value;
  21841. }
  21842. }
  21843. elem = 0;
  21844. // If using innerHTML throws an exception, use the fallback method
  21845. } catch ( e ) {}
  21846. }
  21847. if ( elem ) {
  21848. this.empty().append( value );
  21849. }
  21850. }, null, value, arguments.length );
  21851. },
  21852. replaceWith: function() {
  21853. var ignored = [];
  21854. // Make the changes, replacing each non-ignored context element with the new content
  21855. return domManip( this, arguments, function( elem ) {
  21856. var parent = this.parentNode;
  21857. if ( jQuery.inArray( this, ignored ) < 0 ) {
  21858. jQuery.cleanData( getAll( this ) );
  21859. if ( parent ) {
  21860. parent.replaceChild( elem, this );
  21861. }
  21862. }
  21863. // Force callback invocation
  21864. }, ignored );
  21865. }
  21866. } );
  21867. jQuery.each( {
  21868. appendTo: "append",
  21869. prependTo: "prepend",
  21870. insertBefore: "before",
  21871. insertAfter: "after",
  21872. replaceAll: "replaceWith"
  21873. }, function( name, original ) {
  21874. jQuery.fn[ name ] = function( selector ) {
  21875. var elems,
  21876. ret = [],
  21877. insert = jQuery( selector ),
  21878. last = insert.length - 1,
  21879. i = 0;
  21880. for ( ; i <= last; i++ ) {
  21881. elems = i === last ? this : this.clone( true );
  21882. jQuery( insert[ i ] )[ original ]( elems );
  21883. // Support: QtWebKit
  21884. // .get() because push.apply(_, arraylike) throws
  21885. push.apply( ret, elems.get() );
  21886. }
  21887. return this.pushStack( ret );
  21888. };
  21889. } );
  21890. var iframe,
  21891. elemdisplay = {
  21892. // Support: Firefox
  21893. // We have to pre-define these values for FF (#10227)
  21894. HTML: "block",
  21895. BODY: "block"
  21896. };
  21897. /**
  21898. * Retrieve the actual display of a element
  21899. * @param {String} name nodeName of the element
  21900. * @param {Object} doc Document object
  21901. */
  21902. // Called only from within defaultDisplay
  21903. function actualDisplay( name, doc ) {
  21904. var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
  21905. display = jQuery.css( elem[ 0 ], "display" );
  21906. // We don't have any data stored on the element,
  21907. // so use "detach" method as fast way to get rid of the element
  21908. elem.detach();
  21909. return display;
  21910. }
  21911. /**
  21912. * Try to determine the default display value of an element
  21913. * @param {String} nodeName
  21914. */
  21915. function defaultDisplay( nodeName ) {
  21916. var doc = document,
  21917. display = elemdisplay[ nodeName ];
  21918. if ( !display ) {
  21919. display = actualDisplay( nodeName, doc );
  21920. // If the simple way fails, read from inside an iframe
  21921. if ( display === "none" || !display ) {
  21922. // Use the already-created iframe if possible
  21923. iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
  21924. .appendTo( doc.documentElement );
  21925. // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
  21926. doc = iframe[ 0 ].contentDocument;
  21927. // Support: IE
  21928. doc.write();
  21929. doc.close();
  21930. display = actualDisplay( nodeName, doc );
  21931. iframe.detach();
  21932. }
  21933. // Store the correct default display
  21934. elemdisplay[ nodeName ] = display;
  21935. }
  21936. return display;
  21937. }
  21938. var rmargin = ( /^margin/ );
  21939. var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
  21940. var getStyles = function( elem ) {
  21941. // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
  21942. // IE throws on elements created in popups
  21943. // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
  21944. var view = elem.ownerDocument.defaultView;
  21945. if ( !view || !view.opener ) {
  21946. view = window;
  21947. }
  21948. return view.getComputedStyle( elem );
  21949. };
  21950. var swap = function( elem, options, callback, args ) {
  21951. var ret, name,
  21952. old = {};
  21953. // Remember the old values, and insert the new ones
  21954. for ( name in options ) {
  21955. old[ name ] = elem.style[ name ];
  21956. elem.style[ name ] = options[ name ];
  21957. }
  21958. ret = callback.apply( elem, args || [] );
  21959. // Revert the old values
  21960. for ( name in options ) {
  21961. elem.style[ name ] = old[ name ];
  21962. }
  21963. return ret;
  21964. };
  21965. var documentElement = document.documentElement;
  21966. ( function() {
  21967. var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
  21968. container = document.createElement( "div" ),
  21969. div = document.createElement( "div" );
  21970. // Finish early in limited (non-browser) environments
  21971. if ( !div.style ) {
  21972. return;
  21973. }
  21974. // Support: IE9-11+
  21975. // Style of cloned element affects source element cloned (#8908)
  21976. div.style.backgroundClip = "content-box";
  21977. div.cloneNode( true ).style.backgroundClip = "";
  21978. support.clearCloneStyle = div.style.backgroundClip === "content-box";
  21979. container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
  21980. "padding:0;margin-top:1px;position:absolute";
  21981. container.appendChild( div );
  21982. // Executing both pixelPosition & boxSizingReliable tests require only one layout
  21983. // so they're executed at the same time to save the second computation.
  21984. function computeStyleTests() {
  21985. div.style.cssText =
  21986. // Support: Firefox<29, Android 2.3
  21987. // Vendor-prefix box-sizing
  21988. "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" +
  21989. "position:relative;display:block;" +
  21990. "margin:auto;border:1px;padding:1px;" +
  21991. "top:1%;width:50%";
  21992. div.innerHTML = "";
  21993. documentElement.appendChild( container );
  21994. var divStyle = window.getComputedStyle( div );
  21995. pixelPositionVal = divStyle.top !== "1%";
  21996. reliableMarginLeftVal = divStyle.marginLeft === "2px";
  21997. boxSizingReliableVal = divStyle.width === "4px";
  21998. // Support: Android 4.0 - 4.3 only
  21999. // Some styles come back with percentage values, even though they shouldn't
  22000. div.style.marginRight = "50%";
  22001. pixelMarginRightVal = divStyle.marginRight === "4px";
  22002. documentElement.removeChild( container );
  22003. }
  22004. jQuery.extend( support, {
  22005. pixelPosition: function() {
  22006. // This test is executed only once but we still do memoizing
  22007. // since we can use the boxSizingReliable pre-computing.
  22008. // No need to check if the test was already performed, though.
  22009. computeStyleTests();
  22010. return pixelPositionVal;
  22011. },
  22012. boxSizingReliable: function() {
  22013. if ( boxSizingReliableVal == null ) {
  22014. computeStyleTests();
  22015. }
  22016. return boxSizingReliableVal;
  22017. },
  22018. pixelMarginRight: function() {
  22019. // Support: Android 4.0-4.3
  22020. // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
  22021. // since that compresses better and they're computed together anyway.
  22022. if ( boxSizingReliableVal == null ) {
  22023. computeStyleTests();
  22024. }
  22025. return pixelMarginRightVal;
  22026. },
  22027. reliableMarginLeft: function() {
  22028. // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
  22029. if ( boxSizingReliableVal == null ) {
  22030. computeStyleTests();
  22031. }
  22032. return reliableMarginLeftVal;
  22033. },
  22034. reliableMarginRight: function() {
  22035. // Support: Android 2.3
  22036. // Check if div with explicit width and no margin-right incorrectly
  22037. // gets computed margin-right based on width of container. (#3333)
  22038. // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
  22039. // This support function is only executed once so no memoizing is needed.
  22040. var ret,
  22041. marginDiv = div.appendChild( document.createElement( "div" ) );
  22042. // Reset CSS: box-sizing; display; margin; border; padding
  22043. marginDiv.style.cssText = div.style.cssText =
  22044. // Support: Android 2.3
  22045. // Vendor-prefix box-sizing
  22046. "-webkit-box-sizing:content-box;box-sizing:content-box;" +
  22047. "display:block;margin:0;border:0;padding:0";
  22048. marginDiv.style.marginRight = marginDiv.style.width = "0";
  22049. div.style.width = "1px";
  22050. documentElement.appendChild( container );
  22051. ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );
  22052. documentElement.removeChild( container );
  22053. div.removeChild( marginDiv );
  22054. return ret;
  22055. }
  22056. } );
  22057. } )();
  22058. function curCSS( elem, name, computed ) {
  22059. var width, minWidth, maxWidth, ret,
  22060. style = elem.style;
  22061. computed = computed || getStyles( elem );
  22062. ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
  22063. // Support: Opera 12.1x only
  22064. // Fall back to style even without computed
  22065. // computed is undefined for elems on document fragments
  22066. if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
  22067. ret = jQuery.style( elem, name );
  22068. }
  22069. // Support: IE9
  22070. // getPropertyValue is only needed for .css('filter') (#12537)
  22071. if ( computed ) {
  22072. // A tribute to the "awesome hack by Dean Edwards"
  22073. // Android Browser returns percentage for some values,
  22074. // but width seems to be reliably pixels.
  22075. // This is against the CSSOM draft spec:
  22076. // http://dev.w3.org/csswg/cssom/#resolved-values
  22077. if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
  22078. // Remember the original values
  22079. width = style.width;
  22080. minWidth = style.minWidth;
  22081. maxWidth = style.maxWidth;
  22082. // Put in the new values to get a computed value out
  22083. style.minWidth = style.maxWidth = style.width = ret;
  22084. ret = computed.width;
  22085. // Revert the changed values
  22086. style.width = width;
  22087. style.minWidth = minWidth;
  22088. style.maxWidth = maxWidth;
  22089. }
  22090. }
  22091. return ret !== undefined ?
  22092. // Support: IE9-11+
  22093. // IE returns zIndex value as an integer.
  22094. ret + "" :
  22095. ret;
  22096. }
  22097. function addGetHookIf( conditionFn, hookFn ) {
  22098. // Define the hook, we'll check on the first run if it's really needed.
  22099. return {
  22100. get: function() {
  22101. if ( conditionFn() ) {
  22102. // Hook not needed (or it's not possible to use it due
  22103. // to missing dependency), remove it.
  22104. delete this.get;
  22105. return;
  22106. }
  22107. // Hook needed; redefine it so that the support test is not executed again.
  22108. return ( this.get = hookFn ).apply( this, arguments );
  22109. }
  22110. };
  22111. }
  22112. var
  22113. // Swappable if display is none or starts with table
  22114. // except "table", "table-cell", or "table-caption"
  22115. // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
  22116. rdisplayswap = /^(none|table(?!-c[ea]).+)/,
  22117. cssShow = { position: "absolute", visibility: "hidden", display: "block" },
  22118. cssNormalTransform = {
  22119. letterSpacing: "0",
  22120. fontWeight: "400"
  22121. },
  22122. cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
  22123. emptyStyle = document.createElement( "div" ).style;
  22124. // Return a css property mapped to a potentially vendor prefixed property
  22125. function vendorPropName( name ) {
  22126. // Shortcut for names that are not vendor prefixed
  22127. if ( name in emptyStyle ) {
  22128. return name;
  22129. }
  22130. // Check for vendor prefixed names
  22131. var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
  22132. i = cssPrefixes.length;
  22133. while ( i-- ) {
  22134. name = cssPrefixes[ i ] + capName;
  22135. if ( name in emptyStyle ) {
  22136. return name;
  22137. }
  22138. }
  22139. }
  22140. function setPositiveNumber( elem, value, subtract ) {
  22141. // Any relative (+/-) values have already been
  22142. // normalized at this point
  22143. var matches = rcssNum.exec( value );
  22144. return matches ?
  22145. // Guard against undefined "subtract", e.g., when used as in cssHooks
  22146. Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
  22147. value;
  22148. }
  22149. function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  22150. var i = extra === ( isBorderBox ? "border" : "content" ) ?
  22151. // If we already have the right measurement, avoid augmentation
  22152. 4 :
  22153. // Otherwise initialize for horizontal or vertical properties
  22154. name === "width" ? 1 : 0,
  22155. val = 0;
  22156. for ( ; i < 4; i += 2 ) {
  22157. // Both box models exclude margin, so add it if we want it
  22158. if ( extra === "margin" ) {
  22159. val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
  22160. }
  22161. if ( isBorderBox ) {
  22162. // border-box includes padding, so remove it if we want content
  22163. if ( extra === "content" ) {
  22164. val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
  22165. }
  22166. // At this point, extra isn't border nor margin, so remove border
  22167. if ( extra !== "margin" ) {
  22168. val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
  22169. }
  22170. } else {
  22171. // At this point, extra isn't content, so add padding
  22172. val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
  22173. // At this point, extra isn't content nor padding, so add border
  22174. if ( extra !== "padding" ) {
  22175. val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
  22176. }
  22177. }
  22178. }
  22179. return val;
  22180. }
  22181. function getWidthOrHeight( elem, name, extra ) {
  22182. // Start with offset property, which is equivalent to the border-box value
  22183. var valueIsBorderBox = true,
  22184. val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
  22185. styles = getStyles( elem ),
  22186. isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
  22187. // Support: IE11 only
  22188. // In IE 11 fullscreen elements inside of an iframe have
  22189. // 100x too small dimensions (gh-1764).
  22190. if ( document.msFullscreenElement && window.top !== window ) {
  22191. // Support: IE11 only
  22192. // Running getBoundingClientRect on a disconnected node
  22193. // in IE throws an error.
  22194. if ( elem.getClientRects().length ) {
  22195. val = Math.round( elem.getBoundingClientRect()[ name ] * 100 );
  22196. }
  22197. }
  22198. // Some non-html elements return undefined for offsetWidth, so check for null/undefined
  22199. // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
  22200. // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
  22201. if ( val <= 0 || val == null ) {
  22202. // Fall back to computed then uncomputed css if necessary
  22203. val = curCSS( elem, name, styles );
  22204. if ( val < 0 || val == null ) {
  22205. val = elem.style[ name ];
  22206. }
  22207. // Computed unit is not pixels. Stop here and return.
  22208. if ( rnumnonpx.test( val ) ) {
  22209. return val;
  22210. }
  22211. // Check for style in case a browser which returns unreliable values
  22212. // for getComputedStyle silently falls back to the reliable elem.style
  22213. valueIsBorderBox = isBorderBox &&
  22214. ( support.boxSizingReliable() || val === elem.style[ name ] );
  22215. // Normalize "", auto, and prepare for extra
  22216. val = parseFloat( val ) || 0;
  22217. }
  22218. // Use the active box-sizing model to add/subtract irrelevant styles
  22219. return ( val +
  22220. augmentWidthOrHeight(
  22221. elem,
  22222. name,
  22223. extra || ( isBorderBox ? "border" : "content" ),
  22224. valueIsBorderBox,
  22225. styles
  22226. )
  22227. ) + "px";
  22228. }
  22229. function showHide( elements, show ) {
  22230. var display, elem, hidden,
  22231. values = [],
  22232. index = 0,
  22233. length = elements.length;
  22234. for ( ; index < length; index++ ) {
  22235. elem = elements[ index ];
  22236. if ( !elem.style ) {
  22237. continue;
  22238. }
  22239. values[ index ] = dataPriv.get( elem, "olddisplay" );
  22240. display = elem.style.display;
  22241. if ( show ) {
  22242. // Reset the inline display of this element to learn if it is
  22243. // being hidden by cascaded rules or not
  22244. if ( !values[ index ] && display === "none" ) {
  22245. elem.style.display = "";
  22246. }
  22247. // Set elements which have been overridden with display: none
  22248. // in a stylesheet to whatever the default browser style is
  22249. // for such an element
  22250. if ( elem.style.display === "" && isHidden( elem ) ) {
  22251. values[ index ] = dataPriv.access(
  22252. elem,
  22253. "olddisplay",
  22254. defaultDisplay( elem.nodeName )
  22255. );
  22256. }
  22257. } else {
  22258. hidden = isHidden( elem );
  22259. if ( display !== "none" || !hidden ) {
  22260. dataPriv.set(
  22261. elem,
  22262. "olddisplay",
  22263. hidden ? display : jQuery.css( elem, "display" )
  22264. );
  22265. }
  22266. }
  22267. }
  22268. // Set the display of most of the elements in a second loop
  22269. // to avoid the constant reflow
  22270. for ( index = 0; index < length; index++ ) {
  22271. elem = elements[ index ];
  22272. if ( !elem.style ) {
  22273. continue;
  22274. }
  22275. if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
  22276. elem.style.display = show ? values[ index ] || "" : "none";
  22277. }
  22278. }
  22279. return elements;
  22280. }
  22281. jQuery.extend( {
  22282. // Add in style property hooks for overriding the default
  22283. // behavior of getting and setting a style property
  22284. cssHooks: {
  22285. opacity: {
  22286. get: function( elem, computed ) {
  22287. if ( computed ) {
  22288. // We should always get a number back from opacity
  22289. var ret = curCSS( elem, "opacity" );
  22290. return ret === "" ? "1" : ret;
  22291. }
  22292. }
  22293. }
  22294. },
  22295. // Don't automatically add "px" to these possibly-unitless properties
  22296. cssNumber: {
  22297. "animationIterationCount": true,
  22298. "columnCount": true,
  22299. "fillOpacity": true,
  22300. "flexGrow": true,
  22301. "flexShrink": true,
  22302. "fontWeight": true,
  22303. "lineHeight": true,
  22304. "opacity": true,
  22305. "order": true,
  22306. "orphans": true,
  22307. "widows": true,
  22308. "zIndex": true,
  22309. "zoom": true
  22310. },
  22311. // Add in properties whose names you wish to fix before
  22312. // setting or getting the value
  22313. cssProps: {
  22314. "float": "cssFloat"
  22315. },
  22316. // Get and set the style property on a DOM Node
  22317. style: function( elem, name, value, extra ) {
  22318. // Don't set styles on text and comment nodes
  22319. if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
  22320. return;
  22321. }
  22322. // Make sure that we're working with the right name
  22323. var ret, type, hooks,
  22324. origName = jQuery.camelCase( name ),
  22325. style = elem.style;
  22326. name = jQuery.cssProps[ origName ] ||
  22327. ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
  22328. // Gets hook for the prefixed version, then unprefixed version
  22329. hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
  22330. // Check if we're setting a value
  22331. if ( value !== undefined ) {
  22332. type = typeof value;
  22333. // Convert "+=" or "-=" to relative numbers (#7345)
  22334. if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
  22335. value = adjustCSS( elem, name, ret );
  22336. // Fixes bug #9237
  22337. type = "number";
  22338. }
  22339. // Make sure that null and NaN values aren't set (#7116)
  22340. if ( value == null || value !== value ) {
  22341. return;
  22342. }
  22343. // If a number was passed in, add the unit (except for certain CSS properties)
  22344. if ( type === "number" ) {
  22345. value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
  22346. }
  22347. // Support: IE9-11+
  22348. // background-* props affect original clone's values
  22349. if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
  22350. style[ name ] = "inherit";
  22351. }
  22352. // If a hook was provided, use that value, otherwise just set the specified value
  22353. if ( !hooks || !( "set" in hooks ) ||
  22354. ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
  22355. style[ name ] = value;
  22356. }
  22357. } else {
  22358. // If a hook was provided get the non-computed value from there
  22359. if ( hooks && "get" in hooks &&
  22360. ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
  22361. return ret;
  22362. }
  22363. // Otherwise just get the value from the style object
  22364. return style[ name ];
  22365. }
  22366. },
  22367. css: function( elem, name, extra, styles ) {
  22368. var val, num, hooks,
  22369. origName = jQuery.camelCase( name );
  22370. // Make sure that we're working with the right name
  22371. name = jQuery.cssProps[ origName ] ||
  22372. ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
  22373. // Try prefixed name followed by the unprefixed name
  22374. hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
  22375. // If a hook was provided get the computed value from there
  22376. if ( hooks && "get" in hooks ) {
  22377. val = hooks.get( elem, true, extra );
  22378. }
  22379. // Otherwise, if a way to get the computed value exists, use that
  22380. if ( val === undefined ) {
  22381. val = curCSS( elem, name, styles );
  22382. }
  22383. // Convert "normal" to computed value
  22384. if ( val === "normal" && name in cssNormalTransform ) {
  22385. val = cssNormalTransform[ name ];
  22386. }
  22387. // Make numeric if forced or a qualifier was provided and val looks numeric
  22388. if ( extra === "" || extra ) {
  22389. num = parseFloat( val );
  22390. return extra === true || isFinite( num ) ? num || 0 : val;
  22391. }
  22392. return val;
  22393. }
  22394. } );
  22395. jQuery.each( [ "height", "width" ], function( i, name ) {
  22396. jQuery.cssHooks[ name ] = {
  22397. get: function( elem, computed, extra ) {
  22398. if ( computed ) {
  22399. // Certain elements can have dimension info if we invisibly show them
  22400. // but it must have a current display style that would benefit
  22401. return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
  22402. elem.offsetWidth === 0 ?
  22403. swap( elem, cssShow, function() {
  22404. return getWidthOrHeight( elem, name, extra );
  22405. } ) :
  22406. getWidthOrHeight( elem, name, extra );
  22407. }
  22408. },
  22409. set: function( elem, value, extra ) {
  22410. var matches,
  22411. styles = extra && getStyles( elem ),
  22412. subtract = extra && augmentWidthOrHeight(
  22413. elem,
  22414. name,
  22415. extra,
  22416. jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
  22417. styles
  22418. );
  22419. // Convert to pixels if value adjustment is needed
  22420. if ( subtract && ( matches = rcssNum.exec( value ) ) &&
  22421. ( matches[ 3 ] || "px" ) !== "px" ) {
  22422. elem.style[ name ] = value;
  22423. value = jQuery.css( elem, name );
  22424. }
  22425. return setPositiveNumber( elem, value, subtract );
  22426. }
  22427. };
  22428. } );
  22429. jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
  22430. function( elem, computed ) {
  22431. if ( computed ) {
  22432. return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
  22433. elem.getBoundingClientRect().left -
  22434. swap( elem, { marginLeft: 0 }, function() {
  22435. return elem.getBoundingClientRect().left;
  22436. } )
  22437. ) + "px";
  22438. }
  22439. }
  22440. );
  22441. // Support: Android 2.3
  22442. jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
  22443. function( elem, computed ) {
  22444. if ( computed ) {
  22445. return swap( elem, { "display": "inline-block" },
  22446. curCSS, [ elem, "marginRight" ] );
  22447. }
  22448. }
  22449. );
  22450. // These hooks are used by animate to expand properties
  22451. jQuery.each( {
  22452. margin: "",
  22453. padding: "",
  22454. border: "Width"
  22455. }, function( prefix, suffix ) {
  22456. jQuery.cssHooks[ prefix + suffix ] = {
  22457. expand: function( value ) {
  22458. var i = 0,
  22459. expanded = {},
  22460. // Assumes a single number if not a string
  22461. parts = typeof value === "string" ? value.split( " " ) : [ value ];
  22462. for ( ; i < 4; i++ ) {
  22463. expanded[ prefix + cssExpand[ i ] + suffix ] =
  22464. parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
  22465. }
  22466. return expanded;
  22467. }
  22468. };
  22469. if ( !rmargin.test( prefix ) ) {
  22470. jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
  22471. }
  22472. } );
  22473. jQuery.fn.extend( {
  22474. css: function( name, value ) {
  22475. return access( this, function( elem, name, value ) {
  22476. var styles, len,
  22477. map = {},
  22478. i = 0;
  22479. if ( jQuery.isArray( name ) ) {
  22480. styles = getStyles( elem );
  22481. len = name.length;
  22482. for ( ; i < len; i++ ) {
  22483. map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
  22484. }
  22485. return map;
  22486. }
  22487. return value !== undefined ?
  22488. jQuery.style( elem, name, value ) :
  22489. jQuery.css( elem, name );
  22490. }, name, value, arguments.length > 1 );
  22491. },
  22492. show: function() {
  22493. return showHide( this, true );
  22494. },
  22495. hide: function() {
  22496. return showHide( this );
  22497. },
  22498. toggle: function( state ) {
  22499. if ( typeof state === "boolean" ) {
  22500. return state ? this.show() : this.hide();
  22501. }
  22502. return this.each( function() {
  22503. if ( isHidden( this ) ) {
  22504. jQuery( this ).show();
  22505. } else {
  22506. jQuery( this ).hide();
  22507. }
  22508. } );
  22509. }
  22510. } );
  22511. function Tween( elem, options, prop, end, easing ) {
  22512. return new Tween.prototype.init( elem, options, prop, end, easing );
  22513. }
  22514. jQuery.Tween = Tween;
  22515. Tween.prototype = {
  22516. constructor: Tween,
  22517. init: function( elem, options, prop, end, easing, unit ) {
  22518. this.elem = elem;
  22519. this.prop = prop;
  22520. this.easing = easing || jQuery.easing._default;
  22521. this.options = options;
  22522. this.start = this.now = this.cur();
  22523. this.end = end;
  22524. this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
  22525. },
  22526. cur: function() {
  22527. var hooks = Tween.propHooks[ this.prop ];
  22528. return hooks && hooks.get ?
  22529. hooks.get( this ) :
  22530. Tween.propHooks._default.get( this );
  22531. },
  22532. run: function( percent ) {
  22533. var eased,
  22534. hooks = Tween.propHooks[ this.prop ];
  22535. if ( this.options.duration ) {
  22536. this.pos = eased = jQuery.easing[ this.easing ](
  22537. percent, this.options.duration * percent, 0, 1, this.options.duration
  22538. );
  22539. } else {
  22540. this.pos = eased = percent;
  22541. }
  22542. this.now = ( this.end - this.start ) * eased + this.start;
  22543. if ( this.options.step ) {
  22544. this.options.step.call( this.elem, this.now, this );
  22545. }
  22546. if ( hooks && hooks.set ) {
  22547. hooks.set( this );
  22548. } else {
  22549. Tween.propHooks._default.set( this );
  22550. }
  22551. return this;
  22552. }
  22553. };
  22554. Tween.prototype.init.prototype = Tween.prototype;
  22555. Tween.propHooks = {
  22556. _default: {
  22557. get: function( tween ) {
  22558. var result;
  22559. // Use a property on the element directly when it is not a DOM element,
  22560. // or when there is no matching style property that exists.
  22561. if ( tween.elem.nodeType !== 1 ||
  22562. tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
  22563. return tween.elem[ tween.prop ];
  22564. }
  22565. // Passing an empty string as a 3rd parameter to .css will automatically
  22566. // attempt a parseFloat and fallback to a string if the parse fails.
  22567. // Simple values such as "10px" are parsed to Float;
  22568. // complex values such as "rotate(1rad)" are returned as-is.
  22569. result = jQuery.css( tween.elem, tween.prop, "" );
  22570. // Empty strings, null, undefined and "auto" are converted to 0.
  22571. return !result || result === "auto" ? 0 : result;
  22572. },
  22573. set: function( tween ) {
  22574. // Use step hook for back compat.
  22575. // Use cssHook if its there.
  22576. // Use .style if available and use plain properties where available.
  22577. if ( jQuery.fx.step[ tween.prop ] ) {
  22578. jQuery.fx.step[ tween.prop ]( tween );
  22579. } else if ( tween.elem.nodeType === 1 &&
  22580. ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
  22581. jQuery.cssHooks[ tween.prop ] ) ) {
  22582. jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
  22583. } else {
  22584. tween.elem[ tween.prop ] = tween.now;
  22585. }
  22586. }
  22587. }
  22588. };
  22589. // Support: IE9
  22590. // Panic based approach to setting things on disconnected nodes
  22591. Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
  22592. set: function( tween ) {
  22593. if ( tween.elem.nodeType && tween.elem.parentNode ) {
  22594. tween.elem[ tween.prop ] = tween.now;
  22595. }
  22596. }
  22597. };
  22598. jQuery.easing = {
  22599. linear: function( p ) {
  22600. return p;
  22601. },
  22602. swing: function( p ) {
  22603. return 0.5 - Math.cos( p * Math.PI ) / 2;
  22604. },
  22605. _default: "swing"
  22606. };
  22607. jQuery.fx = Tween.prototype.init;
  22608. // Back Compat <1.8 extension point
  22609. jQuery.fx.step = {};
  22610. var
  22611. fxNow, timerId,
  22612. rfxtypes = /^(?:toggle|show|hide)$/,
  22613. rrun = /queueHooks$/;
  22614. // Animations created synchronously will run synchronously
  22615. function createFxNow() {
  22616. window.setTimeout( function() {
  22617. fxNow = undefined;
  22618. } );
  22619. return ( fxNow = jQuery.now() );
  22620. }
  22621. // Generate parameters to create a standard animation
  22622. function genFx( type, includeWidth ) {
  22623. var which,
  22624. i = 0,
  22625. attrs = { height: type };
  22626. // If we include width, step value is 1 to do all cssExpand values,
  22627. // otherwise step value is 2 to skip over Left and Right
  22628. includeWidth = includeWidth ? 1 : 0;
  22629. for ( ; i < 4 ; i += 2 - includeWidth ) {
  22630. which = cssExpand[ i ];
  22631. attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
  22632. }
  22633. if ( includeWidth ) {
  22634. attrs.opacity = attrs.width = type;
  22635. }
  22636. return attrs;
  22637. }
  22638. function createTween( value, prop, animation ) {
  22639. var tween,
  22640. collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
  22641. index = 0,
  22642. length = collection.length;
  22643. for ( ; index < length; index++ ) {
  22644. if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
  22645. // We're done with this property
  22646. return tween;
  22647. }
  22648. }
  22649. }
  22650. function defaultPrefilter( elem, props, opts ) {
  22651. /* jshint validthis: true */
  22652. var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
  22653. anim = this,
  22654. orig = {},
  22655. style = elem.style,
  22656. hidden = elem.nodeType && isHidden( elem ),
  22657. dataShow = dataPriv.get( elem, "fxshow" );
  22658. // Handle queue: false promises
  22659. if ( !opts.queue ) {
  22660. hooks = jQuery._queueHooks( elem, "fx" );
  22661. if ( hooks.unqueued == null ) {
  22662. hooks.unqueued = 0;
  22663. oldfire = hooks.empty.fire;
  22664. hooks.empty.fire = function() {
  22665. if ( !hooks.unqueued ) {
  22666. oldfire();
  22667. }
  22668. };
  22669. }
  22670. hooks.unqueued++;
  22671. anim.always( function() {
  22672. // Ensure the complete handler is called before this completes
  22673. anim.always( function() {
  22674. hooks.unqueued--;
  22675. if ( !jQuery.queue( elem, "fx" ).length ) {
  22676. hooks.empty.fire();
  22677. }
  22678. } );
  22679. } );
  22680. }
  22681. // Height/width overflow pass
  22682. if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
  22683. // Make sure that nothing sneaks out
  22684. // Record all 3 overflow attributes because IE9-10 do not
  22685. // change the overflow attribute when overflowX and
  22686. // overflowY are set to the same value
  22687. opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
  22688. // Set display property to inline-block for height/width
  22689. // animations on inline elements that are having width/height animated
  22690. display = jQuery.css( elem, "display" );
  22691. // Test default display if display is currently "none"
  22692. checkDisplay = display === "none" ?
  22693. dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
  22694. if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
  22695. style.display = "inline-block";
  22696. }
  22697. }
  22698. if ( opts.overflow ) {
  22699. style.overflow = "hidden";
  22700. anim.always( function() {
  22701. style.overflow = opts.overflow[ 0 ];
  22702. style.overflowX = opts.overflow[ 1 ];
  22703. style.overflowY = opts.overflow[ 2 ];
  22704. } );
  22705. }
  22706. // show/hide pass
  22707. for ( prop in props ) {
  22708. value = props[ prop ];
  22709. if ( rfxtypes.exec( value ) ) {
  22710. delete props[ prop ];
  22711. toggle = toggle || value === "toggle";
  22712. if ( value === ( hidden ? "hide" : "show" ) ) {
  22713. // If there is dataShow left over from a stopped hide or show
  22714. // and we are going to proceed with show, we should pretend to be hidden
  22715. if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
  22716. hidden = true;
  22717. } else {
  22718. continue;
  22719. }
  22720. }
  22721. orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
  22722. // Any non-fx value stops us from restoring the original display value
  22723. } else {
  22724. display = undefined;
  22725. }
  22726. }
  22727. if ( !jQuery.isEmptyObject( orig ) ) {
  22728. if ( dataShow ) {
  22729. if ( "hidden" in dataShow ) {
  22730. hidden = dataShow.hidden;
  22731. }
  22732. } else {
  22733. dataShow = dataPriv.access( elem, "fxshow", {} );
  22734. }
  22735. // Store state if its toggle - enables .stop().toggle() to "reverse"
  22736. if ( toggle ) {
  22737. dataShow.hidden = !hidden;
  22738. }
  22739. if ( hidden ) {
  22740. jQuery( elem ).show();
  22741. } else {
  22742. anim.done( function() {
  22743. jQuery( elem ).hide();
  22744. } );
  22745. }
  22746. anim.done( function() {
  22747. var prop;
  22748. dataPriv.remove( elem, "fxshow" );
  22749. for ( prop in orig ) {
  22750. jQuery.style( elem, prop, orig[ prop ] );
  22751. }
  22752. } );
  22753. for ( prop in orig ) {
  22754. tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
  22755. if ( !( prop in dataShow ) ) {
  22756. dataShow[ prop ] = tween.start;
  22757. if ( hidden ) {
  22758. tween.end = tween.start;
  22759. tween.start = prop === "width" || prop === "height" ? 1 : 0;
  22760. }
  22761. }
  22762. }
  22763. // If this is a noop like .hide().hide(), restore an overwritten display value
  22764. } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
  22765. style.display = display;
  22766. }
  22767. }
  22768. function propFilter( props, specialEasing ) {
  22769. var index, name, easing, value, hooks;
  22770. // camelCase, specialEasing and expand cssHook pass
  22771. for ( index in props ) {
  22772. name = jQuery.camelCase( index );
  22773. easing = specialEasing[ name ];
  22774. value = props[ index ];
  22775. if ( jQuery.isArray( value ) ) {
  22776. easing = value[ 1 ];
  22777. value = props[ index ] = value[ 0 ];
  22778. }
  22779. if ( index !== name ) {
  22780. props[ name ] = value;
  22781. delete props[ index ];
  22782. }
  22783. hooks = jQuery.cssHooks[ name ];
  22784. if ( hooks && "expand" in hooks ) {
  22785. value = hooks.expand( value );
  22786. delete props[ name ];
  22787. // Not quite $.extend, this won't overwrite existing keys.
  22788. // Reusing 'index' because we have the correct "name"
  22789. for ( index in value ) {
  22790. if ( !( index in props ) ) {
  22791. props[ index ] = value[ index ];
  22792. specialEasing[ index ] = easing;
  22793. }
  22794. }
  22795. } else {
  22796. specialEasing[ name ] = easing;
  22797. }
  22798. }
  22799. }
  22800. function Animation( elem, properties, options ) {
  22801. var result,
  22802. stopped,
  22803. index = 0,
  22804. length = Animation.prefilters.length,
  22805. deferred = jQuery.Deferred().always( function() {
  22806. // Don't match elem in the :animated selector
  22807. delete tick.elem;
  22808. } ),
  22809. tick = function() {
  22810. if ( stopped ) {
  22811. return false;
  22812. }
  22813. var currentTime = fxNow || createFxNow(),
  22814. remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
  22815. // Support: Android 2.3
  22816. // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
  22817. temp = remaining / animation.duration || 0,
  22818. percent = 1 - temp,
  22819. index = 0,
  22820. length = animation.tweens.length;
  22821. for ( ; index < length ; index++ ) {
  22822. animation.tweens[ index ].run( percent );
  22823. }
  22824. deferred.notifyWith( elem, [ animation, percent, remaining ] );
  22825. if ( percent < 1 && length ) {
  22826. return remaining;
  22827. } else {
  22828. deferred.resolveWith( elem, [ animation ] );
  22829. return false;
  22830. }
  22831. },
  22832. animation = deferred.promise( {
  22833. elem: elem,
  22834. props: jQuery.extend( {}, properties ),
  22835. opts: jQuery.extend( true, {
  22836. specialEasing: {},
  22837. easing: jQuery.easing._default
  22838. }, options ),
  22839. originalProperties: properties,
  22840. originalOptions: options,
  22841. startTime: fxNow || createFxNow(),
  22842. duration: options.duration,
  22843. tweens: [],
  22844. createTween: function( prop, end ) {
  22845. var tween = jQuery.Tween( elem, animation.opts, prop, end,
  22846. animation.opts.specialEasing[ prop ] || animation.opts.easing );
  22847. animation.tweens.push( tween );
  22848. return tween;
  22849. },
  22850. stop: function( gotoEnd ) {
  22851. var index = 0,
  22852. // If we are going to the end, we want to run all the tweens
  22853. // otherwise we skip this part
  22854. length = gotoEnd ? animation.tweens.length : 0;
  22855. if ( stopped ) {
  22856. return this;
  22857. }
  22858. stopped = true;
  22859. for ( ; index < length ; index++ ) {
  22860. animation.tweens[ index ].run( 1 );
  22861. }
  22862. // Resolve when we played the last frame; otherwise, reject
  22863. if ( gotoEnd ) {
  22864. deferred.notifyWith( elem, [ animation, 1, 0 ] );
  22865. deferred.resolveWith( elem, [ animation, gotoEnd ] );
  22866. } else {
  22867. deferred.rejectWith( elem, [ animation, gotoEnd ] );
  22868. }
  22869. return this;
  22870. }
  22871. } ),
  22872. props = animation.props;
  22873. propFilter( props, animation.opts.specialEasing );
  22874. for ( ; index < length ; index++ ) {
  22875. result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
  22876. if ( result ) {
  22877. if ( jQuery.isFunction( result.stop ) ) {
  22878. jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
  22879. jQuery.proxy( result.stop, result );
  22880. }
  22881. return result;
  22882. }
  22883. }
  22884. jQuery.map( props, createTween, animation );
  22885. if ( jQuery.isFunction( animation.opts.start ) ) {
  22886. animation.opts.start.call( elem, animation );
  22887. }
  22888. jQuery.fx.timer(
  22889. jQuery.extend( tick, {
  22890. elem: elem,
  22891. anim: animation,
  22892. queue: animation.opts.queue
  22893. } )
  22894. );
  22895. // attach callbacks from options
  22896. return animation.progress( animation.opts.progress )
  22897. .done( animation.opts.done, animation.opts.complete )
  22898. .fail( animation.opts.fail )
  22899. .always( animation.opts.always );
  22900. }
  22901. jQuery.Animation = jQuery.extend( Animation, {
  22902. tweeners: {
  22903. "*": [ function( prop, value ) {
  22904. var tween = this.createTween( prop, value );
  22905. adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
  22906. return tween;
  22907. } ]
  22908. },
  22909. tweener: function( props, callback ) {
  22910. if ( jQuery.isFunction( props ) ) {
  22911. callback = props;
  22912. props = [ "*" ];
  22913. } else {
  22914. props = props.match( rnotwhite );
  22915. }
  22916. var prop,
  22917. index = 0,
  22918. length = props.length;
  22919. for ( ; index < length ; index++ ) {
  22920. prop = props[ index ];
  22921. Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
  22922. Animation.tweeners[ prop ].unshift( callback );
  22923. }
  22924. },
  22925. prefilters: [ defaultPrefilter ],
  22926. prefilter: function( callback, prepend ) {
  22927. if ( prepend ) {
  22928. Animation.prefilters.unshift( callback );
  22929. } else {
  22930. Animation.prefilters.push( callback );
  22931. }
  22932. }
  22933. } );
  22934. jQuery.speed = function( speed, easing, fn ) {
  22935. var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
  22936. complete: fn || !fn && easing ||
  22937. jQuery.isFunction( speed ) && speed,
  22938. duration: speed,
  22939. easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
  22940. };
  22941. opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ?
  22942. opt.duration : opt.duration in jQuery.fx.speeds ?
  22943. jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
  22944. // Normalize opt.queue - true/undefined/null -> "fx"
  22945. if ( opt.queue == null || opt.queue === true ) {
  22946. opt.queue = "fx";
  22947. }
  22948. // Queueing
  22949. opt.old = opt.complete;
  22950. opt.complete = function() {
  22951. if ( jQuery.isFunction( opt.old ) ) {
  22952. opt.old.call( this );
  22953. }
  22954. if ( opt.queue ) {
  22955. jQuery.dequeue( this, opt.queue );
  22956. }
  22957. };
  22958. return opt;
  22959. };
  22960. jQuery.fn.extend( {
  22961. fadeTo: function( speed, to, easing, callback ) {
  22962. // Show any hidden elements after setting opacity to 0
  22963. return this.filter( isHidden ).css( "opacity", 0 ).show()
  22964. // Animate to the value specified
  22965. .end().animate( { opacity: to }, speed, easing, callback );
  22966. },
  22967. animate: function( prop, speed, easing, callback ) {
  22968. var empty = jQuery.isEmptyObject( prop ),
  22969. optall = jQuery.speed( speed, easing, callback ),
  22970. doAnimation = function() {
  22971. // Operate on a copy of prop so per-property easing won't be lost
  22972. var anim = Animation( this, jQuery.extend( {}, prop ), optall );
  22973. // Empty animations, or finishing resolves immediately
  22974. if ( empty || dataPriv.get( this, "finish" ) ) {
  22975. anim.stop( true );
  22976. }
  22977. };
  22978. doAnimation.finish = doAnimation;
  22979. return empty || optall.queue === false ?
  22980. this.each( doAnimation ) :
  22981. this.queue( optall.queue, doAnimation );
  22982. },
  22983. stop: function( type, clearQueue, gotoEnd ) {
  22984. var stopQueue = function( hooks ) {
  22985. var stop = hooks.stop;
  22986. delete hooks.stop;
  22987. stop( gotoEnd );
  22988. };
  22989. if ( typeof type !== "string" ) {
  22990. gotoEnd = clearQueue;
  22991. clearQueue = type;
  22992. type = undefined;
  22993. }
  22994. if ( clearQueue && type !== false ) {
  22995. this.queue( type || "fx", [] );
  22996. }
  22997. return this.each( function() {
  22998. var dequeue = true,
  22999. index = type != null && type + "queueHooks",
  23000. timers = jQuery.timers,
  23001. data = dataPriv.get( this );
  23002. if ( index ) {
  23003. if ( data[ index ] && data[ index ].stop ) {
  23004. stopQueue( data[ index ] );
  23005. }
  23006. } else {
  23007. for ( index in data ) {
  23008. if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
  23009. stopQueue( data[ index ] );
  23010. }
  23011. }
  23012. }
  23013. for ( index = timers.length; index--; ) {
  23014. if ( timers[ index ].elem === this &&
  23015. ( type == null || timers[ index ].queue === type ) ) {
  23016. timers[ index ].anim.stop( gotoEnd );
  23017. dequeue = false;
  23018. timers.splice( index, 1 );
  23019. }
  23020. }
  23021. // Start the next in the queue if the last step wasn't forced.
  23022. // Timers currently will call their complete callbacks, which
  23023. // will dequeue but only if they were gotoEnd.
  23024. if ( dequeue || !gotoEnd ) {
  23025. jQuery.dequeue( this, type );
  23026. }
  23027. } );
  23028. },
  23029. finish: function( type ) {
  23030. if ( type !== false ) {
  23031. type = type || "fx";
  23032. }
  23033. return this.each( function() {
  23034. var index,
  23035. data = dataPriv.get( this ),
  23036. queue = data[ type + "queue" ],
  23037. hooks = data[ type + "queueHooks" ],
  23038. timers = jQuery.timers,
  23039. length = queue ? queue.length : 0;
  23040. // Enable finishing flag on private data
  23041. data.finish = true;
  23042. // Empty the queue first
  23043. jQuery.queue( this, type, [] );
  23044. if ( hooks && hooks.stop ) {
  23045. hooks.stop.call( this, true );
  23046. }
  23047. // Look for any active animations, and finish them
  23048. for ( index = timers.length; index--; ) {
  23049. if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
  23050. timers[ index ].anim.stop( true );
  23051. timers.splice( index, 1 );
  23052. }
  23053. }
  23054. // Look for any animations in the old queue and finish them
  23055. for ( index = 0; index < length; index++ ) {
  23056. if ( queue[ index ] && queue[ index ].finish ) {
  23057. queue[ index ].finish.call( this );
  23058. }
  23059. }
  23060. // Turn off finishing flag
  23061. delete data.finish;
  23062. } );
  23063. }
  23064. } );
  23065. jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
  23066. var cssFn = jQuery.fn[ name ];
  23067. jQuery.fn[ name ] = function( speed, easing, callback ) {
  23068. return speed == null || typeof speed === "boolean" ?
  23069. cssFn.apply( this, arguments ) :
  23070. this.animate( genFx( name, true ), speed, easing, callback );
  23071. };
  23072. } );
  23073. // Generate shortcuts for custom animations
  23074. jQuery.each( {
  23075. slideDown: genFx( "show" ),
  23076. slideUp: genFx( "hide" ),
  23077. slideToggle: genFx( "toggle" ),
  23078. fadeIn: { opacity: "show" },
  23079. fadeOut: { opacity: "hide" },
  23080. fadeToggle: { opacity: "toggle" }
  23081. }, function( name, props ) {
  23082. jQuery.fn[ name ] = function( speed, easing, callback ) {
  23083. return this.animate( props, speed, easing, callback );
  23084. };
  23085. } );
  23086. jQuery.timers = [];
  23087. jQuery.fx.tick = function() {
  23088. var timer,
  23089. i = 0,
  23090. timers = jQuery.timers;
  23091. fxNow = jQuery.now();
  23092. for ( ; i < timers.length; i++ ) {
  23093. timer = timers[ i ];
  23094. // Checks the timer has not already been removed
  23095. if ( !timer() && timers[ i ] === timer ) {
  23096. timers.splice( i--, 1 );
  23097. }
  23098. }
  23099. if ( !timers.length ) {
  23100. jQuery.fx.stop();
  23101. }
  23102. fxNow = undefined;
  23103. };
  23104. jQuery.fx.timer = function( timer ) {
  23105. jQuery.timers.push( timer );
  23106. if ( timer() ) {
  23107. jQuery.fx.start();
  23108. } else {
  23109. jQuery.timers.pop();
  23110. }
  23111. };
  23112. jQuery.fx.interval = 13;
  23113. jQuery.fx.start = function() {
  23114. if ( !timerId ) {
  23115. timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
  23116. }
  23117. };
  23118. jQuery.fx.stop = function() {
  23119. window.clearInterval( timerId );
  23120. timerId = null;
  23121. };
  23122. jQuery.fx.speeds = {
  23123. slow: 600,
  23124. fast: 200,
  23125. // Default speed
  23126. _default: 400
  23127. };
  23128. // Based off of the plugin by Clint Helfers, with permission.
  23129. // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
  23130. jQuery.fn.delay = function( time, type ) {
  23131. time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
  23132. type = type || "fx";
  23133. return this.queue( type, function( next, hooks ) {
  23134. var timeout = window.setTimeout( next, time );
  23135. hooks.stop = function() {
  23136. window.clearTimeout( timeout );
  23137. };
  23138. } );
  23139. };
  23140. ( function() {
  23141. var input = document.createElement( "input" ),
  23142. select = document.createElement( "select" ),
  23143. opt = select.appendChild( document.createElement( "option" ) );
  23144. input.type = "checkbox";
  23145. // Support: iOS<=5.1, Android<=4.2+
  23146. // Default value for a checkbox should be "on"
  23147. support.checkOn = input.value !== "";
  23148. // Support: IE<=11+
  23149. // Must access selectedIndex to make default options select
  23150. support.optSelected = opt.selected;
  23151. // Support: Android<=2.3
  23152. // Options inside disabled selects are incorrectly marked as disabled
  23153. select.disabled = true;
  23154. support.optDisabled = !opt.disabled;
  23155. // Support: IE<=11+
  23156. // An input loses its value after becoming a radio
  23157. input = document.createElement( "input" );
  23158. input.value = "t";
  23159. input.type = "radio";
  23160. support.radioValue = input.value === "t";
  23161. } )();
  23162. var boolHook,
  23163. attrHandle = jQuery.expr.attrHandle;
  23164. jQuery.fn.extend( {
  23165. attr: function( name, value ) {
  23166. return access( this, jQuery.attr, name, value, arguments.length > 1 );
  23167. },
  23168. removeAttr: function( name ) {
  23169. return this.each( function() {
  23170. jQuery.removeAttr( this, name );
  23171. } );
  23172. }
  23173. } );
  23174. jQuery.extend( {
  23175. attr: function( elem, name, value ) {
  23176. var ret, hooks,
  23177. nType = elem.nodeType;
  23178. // Don't get/set attributes on text, comment and attribute nodes
  23179. if ( nType === 3 || nType === 8 || nType === 2 ) {
  23180. return;
  23181. }
  23182. // Fallback to prop when attributes are not supported
  23183. if ( typeof elem.getAttribute === "undefined" ) {
  23184. return jQuery.prop( elem, name, value );
  23185. }
  23186. // All attributes are lowercase
  23187. // Grab necessary hook if one is defined
  23188. if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
  23189. name = name.toLowerCase();
  23190. hooks = jQuery.attrHooks[ name ] ||
  23191. ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
  23192. }
  23193. if ( value !== undefined ) {
  23194. if ( value === null ) {
  23195. jQuery.removeAttr( elem, name );
  23196. return;
  23197. }
  23198. if ( hooks && "set" in hooks &&
  23199. ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
  23200. return ret;
  23201. }
  23202. elem.setAttribute( name, value + "" );
  23203. return value;
  23204. }
  23205. if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
  23206. return ret;
  23207. }
  23208. ret = jQuery.find.attr( elem, name );
  23209. // Non-existent attributes return null, we normalize to undefined
  23210. return ret == null ? undefined : ret;
  23211. },
  23212. attrHooks: {
  23213. type: {
  23214. set: function( elem, value ) {
  23215. if ( !support.radioValue && value === "radio" &&
  23216. jQuery.nodeName( elem, "input" ) ) {
  23217. var val = elem.value;
  23218. elem.setAttribute( "type", value );
  23219. if ( val ) {
  23220. elem.value = val;
  23221. }
  23222. return value;
  23223. }
  23224. }
  23225. }
  23226. },
  23227. removeAttr: function( elem, value ) {
  23228. var name, propName,
  23229. i = 0,
  23230. attrNames = value && value.match( rnotwhite );
  23231. if ( attrNames && elem.nodeType === 1 ) {
  23232. while ( ( name = attrNames[ i++ ] ) ) {
  23233. propName = jQuery.propFix[ name ] || name;
  23234. // Boolean attributes get special treatment (#10870)
  23235. if ( jQuery.expr.match.bool.test( name ) ) {
  23236. // Set corresponding property to false
  23237. elem[ propName ] = false;
  23238. }
  23239. elem.removeAttribute( name );
  23240. }
  23241. }
  23242. }
  23243. } );
  23244. // Hooks for boolean attributes
  23245. boolHook = {
  23246. set: function( elem, value, name ) {
  23247. if ( value === false ) {
  23248. // Remove boolean attributes when set to false
  23249. jQuery.removeAttr( elem, name );
  23250. } else {
  23251. elem.setAttribute( name, name );
  23252. }
  23253. return name;
  23254. }
  23255. };
  23256. jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
  23257. var getter = attrHandle[ name ] || jQuery.find.attr;
  23258. attrHandle[ name ] = function( elem, name, isXML ) {
  23259. var ret, handle;
  23260. if ( !isXML ) {
  23261. // Avoid an infinite loop by temporarily removing this function from the getter
  23262. handle = attrHandle[ name ];
  23263. attrHandle[ name ] = ret;
  23264. ret = getter( elem, name, isXML ) != null ?
  23265. name.toLowerCase() :
  23266. null;
  23267. attrHandle[ name ] = handle;
  23268. }
  23269. return ret;
  23270. };
  23271. } );
  23272. var rfocusable = /^(?:input|select|textarea|button)$/i,
  23273. rclickable = /^(?:a|area)$/i;
  23274. jQuery.fn.extend( {
  23275. prop: function( name, value ) {
  23276. return access( this, jQuery.prop, name, value, arguments.length > 1 );
  23277. },
  23278. removeProp: function( name ) {
  23279. return this.each( function() {
  23280. delete this[ jQuery.propFix[ name ] || name ];
  23281. } );
  23282. }
  23283. } );
  23284. jQuery.extend( {
  23285. prop: function( elem, name, value ) {
  23286. var ret, hooks,
  23287. nType = elem.nodeType;
  23288. // Don't get/set properties on text, comment and attribute nodes
  23289. if ( nType === 3 || nType === 8 || nType === 2 ) {
  23290. return;
  23291. }
  23292. if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
  23293. // Fix name and attach hooks
  23294. name = jQuery.propFix[ name ] || name;
  23295. hooks = jQuery.propHooks[ name ];
  23296. }
  23297. if ( value !== undefined ) {
  23298. if ( hooks && "set" in hooks &&
  23299. ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
  23300. return ret;
  23301. }
  23302. return ( elem[ name ] = value );
  23303. }
  23304. if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
  23305. return ret;
  23306. }
  23307. return elem[ name ];
  23308. },
  23309. propHooks: {
  23310. tabIndex: {
  23311. get: function( elem ) {
  23312. // elem.tabIndex doesn't always return the
  23313. // correct value when it hasn't been explicitly set
  23314. // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
  23315. // Use proper attribute retrieval(#12072)
  23316. var tabindex = jQuery.find.attr( elem, "tabindex" );
  23317. return tabindex ?
  23318. parseInt( tabindex, 10 ) :
  23319. rfocusable.test( elem.nodeName ) ||
  23320. rclickable.test( elem.nodeName ) && elem.href ?
  23321. 0 :
  23322. -1;
  23323. }
  23324. }
  23325. },
  23326. propFix: {
  23327. "for": "htmlFor",
  23328. "class": "className"
  23329. }
  23330. } );
  23331. // Support: IE <=11 only
  23332. // Accessing the selectedIndex property
  23333. // forces the browser to respect setting selected
  23334. // on the option
  23335. // The getter ensures a default option is selected
  23336. // when in an optgroup
  23337. if ( !support.optSelected ) {
  23338. jQuery.propHooks.selected = {
  23339. get: function( elem ) {
  23340. var parent = elem.parentNode;
  23341. if ( parent && parent.parentNode ) {
  23342. parent.parentNode.selectedIndex;
  23343. }
  23344. return null;
  23345. },
  23346. set: function( elem ) {
  23347. var parent = elem.parentNode;
  23348. if ( parent ) {
  23349. parent.selectedIndex;
  23350. if ( parent.parentNode ) {
  23351. parent.parentNode.selectedIndex;
  23352. }
  23353. }
  23354. }
  23355. };
  23356. }
  23357. jQuery.each( [
  23358. "tabIndex",
  23359. "readOnly",
  23360. "maxLength",
  23361. "cellSpacing",
  23362. "cellPadding",
  23363. "rowSpan",
  23364. "colSpan",
  23365. "useMap",
  23366. "frameBorder",
  23367. "contentEditable"
  23368. ], function() {
  23369. jQuery.propFix[ this.toLowerCase() ] = this;
  23370. } );
  23371. var rclass = /[\t\r\n\f]/g;
  23372. function getClass( elem ) {
  23373. return elem.getAttribute && elem.getAttribute( "class" ) || "";
  23374. }
  23375. jQuery.fn.extend( {
  23376. addClass: function( value ) {
  23377. var classes, elem, cur, curValue, clazz, j, finalValue,
  23378. i = 0;
  23379. if ( jQuery.isFunction( value ) ) {
  23380. return this.each( function( j ) {
  23381. jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
  23382. } );
  23383. }
  23384. if ( typeof value === "string" && value ) {
  23385. classes = value.match( rnotwhite ) || [];
  23386. while ( ( elem = this[ i++ ] ) ) {
  23387. curValue = getClass( elem );
  23388. cur = elem.nodeType === 1 &&
  23389. ( " " + curValue + " " ).replace( rclass, " " );
  23390. if ( cur ) {
  23391. j = 0;
  23392. while ( ( clazz = classes[ j++ ] ) ) {
  23393. if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
  23394. cur += clazz + " ";
  23395. }
  23396. }
  23397. // Only assign if different to avoid unneeded rendering.
  23398. finalValue = jQuery.trim( cur );
  23399. if ( curValue !== finalValue ) {
  23400. elem.setAttribute( "class", finalValue );
  23401. }
  23402. }
  23403. }
  23404. }
  23405. return this;
  23406. },
  23407. removeClass: function( value ) {
  23408. var classes, elem, cur, curValue, clazz, j, finalValue,
  23409. i = 0;
  23410. if ( jQuery.isFunction( value ) ) {
  23411. return this.each( function( j ) {
  23412. jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
  23413. } );
  23414. }
  23415. if ( !arguments.length ) {
  23416. return this.attr( "class", "" );
  23417. }
  23418. if ( typeof value === "string" && value ) {
  23419. classes = value.match( rnotwhite ) || [];
  23420. while ( ( elem = this[ i++ ] ) ) {
  23421. curValue = getClass( elem );
  23422. // This expression is here for better compressibility (see addClass)
  23423. cur = elem.nodeType === 1 &&
  23424. ( " " + curValue + " " ).replace( rclass, " " );
  23425. if ( cur ) {
  23426. j = 0;
  23427. while ( ( clazz = classes[ j++ ] ) ) {
  23428. // Remove *all* instances
  23429. while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
  23430. cur = cur.replace( " " + clazz + " ", " " );
  23431. }
  23432. }
  23433. // Only assign if different to avoid unneeded rendering.
  23434. finalValue = jQuery.trim( cur );
  23435. if ( curValue !== finalValue ) {
  23436. elem.setAttribute( "class", finalValue );
  23437. }
  23438. }
  23439. }
  23440. }
  23441. return this;
  23442. },
  23443. toggleClass: function( value, stateVal ) {
  23444. var type = typeof value;
  23445. if ( typeof stateVal === "boolean" && type === "string" ) {
  23446. return stateVal ? this.addClass( value ) : this.removeClass( value );
  23447. }
  23448. if ( jQuery.isFunction( value ) ) {
  23449. return this.each( function( i ) {
  23450. jQuery( this ).toggleClass(
  23451. value.call( this, i, getClass( this ), stateVal ),
  23452. stateVal
  23453. );
  23454. } );
  23455. }
  23456. return this.each( function() {
  23457. var className, i, self, classNames;
  23458. if ( type === "string" ) {
  23459. // Toggle individual class names
  23460. i = 0;
  23461. self = jQuery( this );
  23462. classNames = value.match( rnotwhite ) || [];
  23463. while ( ( className = classNames[ i++ ] ) ) {
  23464. // Check each className given, space separated list
  23465. if ( self.hasClass( className ) ) {
  23466. self.removeClass( className );
  23467. } else {
  23468. self.addClass( className );
  23469. }
  23470. }
  23471. // Toggle whole class name
  23472. } else if ( value === undefined || type === "boolean" ) {
  23473. className = getClass( this );
  23474. if ( className ) {
  23475. // Store className if set
  23476. dataPriv.set( this, "__className__", className );
  23477. }
  23478. // If the element has a class name or if we're passed `false`,
  23479. // then remove the whole classname (if there was one, the above saved it).
  23480. // Otherwise bring back whatever was previously saved (if anything),
  23481. // falling back to the empty string if nothing was stored.
  23482. if ( this.setAttribute ) {
  23483. this.setAttribute( "class",
  23484. className || value === false ?
  23485. "" :
  23486. dataPriv.get( this, "__className__" ) || ""
  23487. );
  23488. }
  23489. }
  23490. } );
  23491. },
  23492. hasClass: function( selector ) {
  23493. var className, elem,
  23494. i = 0;
  23495. className = " " + selector + " ";
  23496. while ( ( elem = this[ i++ ] ) ) {
  23497. if ( elem.nodeType === 1 &&
  23498. ( " " + getClass( elem ) + " " ).replace( rclass, " " )
  23499. .indexOf( className ) > -1
  23500. ) {
  23501. return true;
  23502. }
  23503. }
  23504. return false;
  23505. }
  23506. } );
  23507. var rreturn = /\r/g,
  23508. rspaces = /[\x20\t\r\n\f]+/g;
  23509. jQuery.fn.extend( {
  23510. val: function( value ) {
  23511. var hooks, ret, isFunction,
  23512. elem = this[ 0 ];
  23513. if ( !arguments.length ) {
  23514. if ( elem ) {
  23515. hooks = jQuery.valHooks[ elem.type ] ||
  23516. jQuery.valHooks[ elem.nodeName.toLowerCase() ];
  23517. if ( hooks &&
  23518. "get" in hooks &&
  23519. ( ret = hooks.get( elem, "value" ) ) !== undefined
  23520. ) {
  23521. return ret;
  23522. }
  23523. ret = elem.value;
  23524. return typeof ret === "string" ?
  23525. // Handle most common string cases
  23526. ret.replace( rreturn, "" ) :
  23527. // Handle cases where value is null/undef or number
  23528. ret == null ? "" : ret;
  23529. }
  23530. return;
  23531. }
  23532. isFunction = jQuery.isFunction( value );
  23533. return this.each( function( i ) {
  23534. var val;
  23535. if ( this.nodeType !== 1 ) {
  23536. return;
  23537. }
  23538. if ( isFunction ) {
  23539. val = value.call( this, i, jQuery( this ).val() );
  23540. } else {
  23541. val = value;
  23542. }
  23543. // Treat null/undefined as ""; convert numbers to string
  23544. if ( val == null ) {
  23545. val = "";
  23546. } else if ( typeof val === "number" ) {
  23547. val += "";
  23548. } else if ( jQuery.isArray( val ) ) {
  23549. val = jQuery.map( val, function( value ) {
  23550. return value == null ? "" : value + "";
  23551. } );
  23552. }
  23553. hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
  23554. // If set returns undefined, fall back to normal setting
  23555. if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
  23556. this.value = val;
  23557. }
  23558. } );
  23559. }
  23560. } );
  23561. jQuery.extend( {
  23562. valHooks: {
  23563. option: {
  23564. get: function( elem ) {
  23565. var val = jQuery.find.attr( elem, "value" );
  23566. return val != null ?
  23567. val :
  23568. // Support: IE10-11+
  23569. // option.text throws exceptions (#14686, #14858)
  23570. // Strip and collapse whitespace
  23571. // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
  23572. jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
  23573. }
  23574. },
  23575. select: {
  23576. get: function( elem ) {
  23577. var value, option,
  23578. options = elem.options,
  23579. index = elem.selectedIndex,
  23580. one = elem.type === "select-one" || index < 0,
  23581. values = one ? null : [],
  23582. max = one ? index + 1 : options.length,
  23583. i = index < 0 ?
  23584. max :
  23585. one ? index : 0;
  23586. // Loop through all the selected options
  23587. for ( ; i < max; i++ ) {
  23588. option = options[ i ];
  23589. // IE8-9 doesn't update selected after form reset (#2551)
  23590. if ( ( option.selected || i === index ) &&
  23591. // Don't return options that are disabled or in a disabled optgroup
  23592. ( support.optDisabled ?
  23593. !option.disabled : option.getAttribute( "disabled" ) === null ) &&
  23594. ( !option.parentNode.disabled ||
  23595. !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
  23596. // Get the specific value for the option
  23597. value = jQuery( option ).val();
  23598. // We don't need an array for one selects
  23599. if ( one ) {
  23600. return value;
  23601. }
  23602. // Multi-Selects return an array
  23603. values.push( value );
  23604. }
  23605. }
  23606. return values;
  23607. },
  23608. set: function( elem, value ) {
  23609. var optionSet, option,
  23610. options = elem.options,
  23611. values = jQuery.makeArray( value ),
  23612. i = options.length;
  23613. while ( i-- ) {
  23614. option = options[ i ];
  23615. if ( option.selected =
  23616. jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
  23617. ) {
  23618. optionSet = true;
  23619. }
  23620. }
  23621. // Force browsers to behave consistently when non-matching value is set
  23622. if ( !optionSet ) {
  23623. elem.selectedIndex = -1;
  23624. }
  23625. return values;
  23626. }
  23627. }
  23628. }
  23629. } );
  23630. // Radios and checkboxes getter/setter
  23631. jQuery.each( [ "radio", "checkbox" ], function() {
  23632. jQuery.valHooks[ this ] = {
  23633. set: function( elem, value ) {
  23634. if ( jQuery.isArray( value ) ) {
  23635. return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
  23636. }
  23637. }
  23638. };
  23639. if ( !support.checkOn ) {
  23640. jQuery.valHooks[ this ].get = function( elem ) {
  23641. return elem.getAttribute( "value" ) === null ? "on" : elem.value;
  23642. };
  23643. }
  23644. } );
  23645. // Return jQuery for attributes-only inclusion
  23646. var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
  23647. jQuery.extend( jQuery.event, {
  23648. trigger: function( event, data, elem, onlyHandlers ) {
  23649. var i, cur, tmp, bubbleType, ontype, handle, special,
  23650. eventPath = [ elem || document ],
  23651. type = hasOwn.call( event, "type" ) ? event.type : event,
  23652. namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
  23653. cur = tmp = elem = elem || document;
  23654. // Don't do events on text and comment nodes
  23655. if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
  23656. return;
  23657. }
  23658. // focus/blur morphs to focusin/out; ensure we're not firing them right now
  23659. if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
  23660. return;
  23661. }
  23662. if ( type.indexOf( "." ) > -1 ) {
  23663. // Namespaced trigger; create a regexp to match event type in handle()
  23664. namespaces = type.split( "." );
  23665. type = namespaces.shift();
  23666. namespaces.sort();
  23667. }
  23668. ontype = type.indexOf( ":" ) < 0 && "on" + type;
  23669. // Caller can pass in a jQuery.Event object, Object, or just an event type string
  23670. event = event[ jQuery.expando ] ?
  23671. event :
  23672. new jQuery.Event( type, typeof event === "object" && event );
  23673. // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
  23674. event.isTrigger = onlyHandlers ? 2 : 3;
  23675. event.namespace = namespaces.join( "." );
  23676. event.rnamespace = event.namespace ?
  23677. new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
  23678. null;
  23679. // Clean up the event in case it is being reused
  23680. event.result = undefined;
  23681. if ( !event.target ) {
  23682. event.target = elem;
  23683. }
  23684. // Clone any incoming data and prepend the event, creating the handler arg list
  23685. data = data == null ?
  23686. [ event ] :
  23687. jQuery.makeArray( data, [ event ] );
  23688. // Allow special events to draw outside the lines
  23689. special = jQuery.event.special[ type ] || {};
  23690. if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
  23691. return;
  23692. }
  23693. // Determine event propagation path in advance, per W3C events spec (#9951)
  23694. // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
  23695. if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
  23696. bubbleType = special.delegateType || type;
  23697. if ( !rfocusMorph.test( bubbleType + type ) ) {
  23698. cur = cur.parentNode;
  23699. }
  23700. for ( ; cur; cur = cur.parentNode ) {
  23701. eventPath.push( cur );
  23702. tmp = cur;
  23703. }
  23704. // Only add window if we got to document (e.g., not plain obj or detached DOM)
  23705. if ( tmp === ( elem.ownerDocument || document ) ) {
  23706. eventPath.push( tmp.defaultView || tmp.parentWindow || window );
  23707. }
  23708. }
  23709. // Fire handlers on the event path
  23710. i = 0;
  23711. while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
  23712. event.type = i > 1 ?
  23713. bubbleType :
  23714. special.bindType || type;
  23715. // jQuery handler
  23716. handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
  23717. dataPriv.get( cur, "handle" );
  23718. if ( handle ) {
  23719. handle.apply( cur, data );
  23720. }
  23721. // Native handler
  23722. handle = ontype && cur[ ontype ];
  23723. if ( handle && handle.apply && acceptData( cur ) ) {
  23724. event.result = handle.apply( cur, data );
  23725. if ( event.result === false ) {
  23726. event.preventDefault();
  23727. }
  23728. }
  23729. }
  23730. event.type = type;
  23731. // If nobody prevented the default action, do it now
  23732. if ( !onlyHandlers && !event.isDefaultPrevented() ) {
  23733. if ( ( !special._default ||
  23734. special._default.apply( eventPath.pop(), data ) === false ) &&
  23735. acceptData( elem ) ) {
  23736. // Call a native DOM method on the target with the same name name as the event.
  23737. // Don't do default actions on window, that's where global variables be (#6170)
  23738. if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
  23739. // Don't re-trigger an onFOO event when we call its FOO() method
  23740. tmp = elem[ ontype ];
  23741. if ( tmp ) {
  23742. elem[ ontype ] = null;
  23743. }
  23744. // Prevent re-triggering of the same event, since we already bubbled it above
  23745. jQuery.event.triggered = type;
  23746. elem[ type ]();
  23747. jQuery.event.triggered = undefined;
  23748. if ( tmp ) {
  23749. elem[ ontype ] = tmp;
  23750. }
  23751. }
  23752. }
  23753. }
  23754. return event.result;
  23755. },
  23756. // Piggyback on a donor event to simulate a different one
  23757. simulate: function( type, elem, event ) {
  23758. var e = jQuery.extend(
  23759. new jQuery.Event(),
  23760. event,
  23761. {
  23762. type: type,
  23763. isSimulated: true
  23764. // Previously, `originalEvent: {}` was set here, so stopPropagation call
  23765. // would not be triggered on donor event, since in our own
  23766. // jQuery.event.stopPropagation function we had a check for existence of
  23767. // originalEvent.stopPropagation method, so, consequently it would be a noop.
  23768. //
  23769. // But now, this "simulate" function is used only for events
  23770. // for which stopPropagation() is noop, so there is no need for that anymore.
  23771. //
  23772. // For the 1.x branch though, guard for "click" and "submit"
  23773. // events is still used, but was moved to jQuery.event.stopPropagation function
  23774. // because `originalEvent` should point to the original event for the constancy
  23775. // with other events and for more focused logic
  23776. }
  23777. );
  23778. jQuery.event.trigger( e, null, elem );
  23779. if ( e.isDefaultPrevented() ) {
  23780. event.preventDefault();
  23781. }
  23782. }
  23783. } );
  23784. jQuery.fn.extend( {
  23785. trigger: function( type, data ) {
  23786. return this.each( function() {
  23787. jQuery.event.trigger( type, data, this );
  23788. } );
  23789. },
  23790. triggerHandler: function( type, data ) {
  23791. var elem = this[ 0 ];
  23792. if ( elem ) {
  23793. return jQuery.event.trigger( type, data, elem, true );
  23794. }
  23795. }
  23796. } );
  23797. jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
  23798. "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
  23799. "change select submit keydown keypress keyup error contextmenu" ).split( " " ),
  23800. function( i, name ) {
  23801. // Handle event binding
  23802. jQuery.fn[ name ] = function( data, fn ) {
  23803. return arguments.length > 0 ?
  23804. this.on( name, null, data, fn ) :
  23805. this.trigger( name );
  23806. };
  23807. } );
  23808. jQuery.fn.extend( {
  23809. hover: function( fnOver, fnOut ) {
  23810. return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
  23811. }
  23812. } );
  23813. support.focusin = "onfocusin" in window;
  23814. // Support: Firefox
  23815. // Firefox doesn't have focus(in | out) events
  23816. // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
  23817. //
  23818. // Support: Chrome, Safari
  23819. // focus(in | out) events fire after focus & blur events,
  23820. // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
  23821. // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
  23822. if ( !support.focusin ) {
  23823. jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
  23824. // Attach a single capturing handler on the document while someone wants focusin/focusout
  23825. var handler = function( event ) {
  23826. jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
  23827. };
  23828. jQuery.event.special[ fix ] = {
  23829. setup: function() {
  23830. var doc = this.ownerDocument || this,
  23831. attaches = dataPriv.access( doc, fix );
  23832. if ( !attaches ) {
  23833. doc.addEventListener( orig, handler, true );
  23834. }
  23835. dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
  23836. },
  23837. teardown: function() {
  23838. var doc = this.ownerDocument || this,
  23839. attaches = dataPriv.access( doc, fix ) - 1;
  23840. if ( !attaches ) {
  23841. doc.removeEventListener( orig, handler, true );
  23842. dataPriv.remove( doc, fix );
  23843. } else {
  23844. dataPriv.access( doc, fix, attaches );
  23845. }
  23846. }
  23847. };
  23848. } );
  23849. }
  23850. var location = window.location;
  23851. var nonce = jQuery.now();
  23852. var rquery = ( /\?/ );
  23853. // Support: Android 2.3
  23854. // Workaround failure to string-cast null input
  23855. jQuery.parseJSON = function( data ) {
  23856. return JSON.parse( data + "" );
  23857. };
  23858. // Cross-browser xml parsing
  23859. jQuery.parseXML = function( data ) {
  23860. var xml;
  23861. if ( !data || typeof data !== "string" ) {
  23862. return null;
  23863. }
  23864. // Support: IE9
  23865. try {
  23866. xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
  23867. } catch ( e ) {
  23868. xml = undefined;
  23869. }
  23870. if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
  23871. jQuery.error( "Invalid XML: " + data );
  23872. }
  23873. return xml;
  23874. };
  23875. var
  23876. rhash = /#.*$/,
  23877. rts = /([?&])_=[^&]*/,
  23878. rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
  23879. // #7653, #8125, #8152: local protocol detection
  23880. rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
  23881. rnoContent = /^(?:GET|HEAD)$/,
  23882. rprotocol = /^\/\//,
  23883. /* Prefilters
  23884. * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
  23885. * 2) These are called:
  23886. * - BEFORE asking for a transport
  23887. * - AFTER param serialization (s.data is a string if s.processData is true)
  23888. * 3) key is the dataType
  23889. * 4) the catchall symbol "*" can be used
  23890. * 5) execution will start with transport dataType and THEN continue down to "*" if needed
  23891. */
  23892. prefilters = {},
  23893. /* Transports bindings
  23894. * 1) key is the dataType
  23895. * 2) the catchall symbol "*" can be used
  23896. * 3) selection will start with transport dataType and THEN go to "*" if needed
  23897. */
  23898. transports = {},
  23899. // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
  23900. allTypes = "*/".concat( "*" ),
  23901. // Anchor tag for parsing the document origin
  23902. originAnchor = document.createElement( "a" );
  23903. originAnchor.href = location.href;
  23904. // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
  23905. function addToPrefiltersOrTransports( structure ) {
  23906. // dataTypeExpression is optional and defaults to "*"
  23907. return function( dataTypeExpression, func ) {
  23908. if ( typeof dataTypeExpression !== "string" ) {
  23909. func = dataTypeExpression;
  23910. dataTypeExpression = "*";
  23911. }
  23912. var dataType,
  23913. i = 0,
  23914. dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
  23915. if ( jQuery.isFunction( func ) ) {
  23916. // For each dataType in the dataTypeExpression
  23917. while ( ( dataType = dataTypes[ i++ ] ) ) {
  23918. // Prepend if requested
  23919. if ( dataType[ 0 ] === "+" ) {
  23920. dataType = dataType.slice( 1 ) || "*";
  23921. ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
  23922. // Otherwise append
  23923. } else {
  23924. ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
  23925. }
  23926. }
  23927. }
  23928. };
  23929. }
  23930. // Base inspection function for prefilters and transports
  23931. function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
  23932. var inspected = {},
  23933. seekingTransport = ( structure === transports );
  23934. function inspect( dataType ) {
  23935. var selected;
  23936. inspected[ dataType ] = true;
  23937. jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
  23938. var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
  23939. if ( typeof dataTypeOrTransport === "string" &&
  23940. !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
  23941. options.dataTypes.unshift( dataTypeOrTransport );
  23942. inspect( dataTypeOrTransport );
  23943. return false;
  23944. } else if ( seekingTransport ) {
  23945. return !( selected = dataTypeOrTransport );
  23946. }
  23947. } );
  23948. return selected;
  23949. }
  23950. return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
  23951. }
  23952. // A special extend for ajax options
  23953. // that takes "flat" options (not to be deep extended)
  23954. // Fixes #9887
  23955. function ajaxExtend( target, src ) {
  23956. var key, deep,
  23957. flatOptions = jQuery.ajaxSettings.flatOptions || {};
  23958. for ( key in src ) {
  23959. if ( src[ key ] !== undefined ) {
  23960. ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
  23961. }
  23962. }
  23963. if ( deep ) {
  23964. jQuery.extend( true, target, deep );
  23965. }
  23966. return target;
  23967. }
  23968. /* Handles responses to an ajax request:
  23969. * - finds the right dataType (mediates between content-type and expected dataType)
  23970. * - returns the corresponding response
  23971. */
  23972. function ajaxHandleResponses( s, jqXHR, responses ) {
  23973. var ct, type, finalDataType, firstDataType,
  23974. contents = s.contents,
  23975. dataTypes = s.dataTypes;
  23976. // Remove auto dataType and get content-type in the process
  23977. while ( dataTypes[ 0 ] === "*" ) {
  23978. dataTypes.shift();
  23979. if ( ct === undefined ) {
  23980. ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
  23981. }
  23982. }
  23983. // Check if we're dealing with a known content-type
  23984. if ( ct ) {
  23985. for ( type in contents ) {
  23986. if ( contents[ type ] && contents[ type ].test( ct ) ) {
  23987. dataTypes.unshift( type );
  23988. break;
  23989. }
  23990. }
  23991. }
  23992. // Check to see if we have a response for the expected dataType
  23993. if ( dataTypes[ 0 ] in responses ) {
  23994. finalDataType = dataTypes[ 0 ];
  23995. } else {
  23996. // Try convertible dataTypes
  23997. for ( type in responses ) {
  23998. if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
  23999. finalDataType = type;
  24000. break;
  24001. }
  24002. if ( !firstDataType ) {
  24003. firstDataType = type;
  24004. }
  24005. }
  24006. // Or just use first one
  24007. finalDataType = finalDataType || firstDataType;
  24008. }
  24009. // If we found a dataType
  24010. // We add the dataType to the list if needed
  24011. // and return the corresponding response
  24012. if ( finalDataType ) {
  24013. if ( finalDataType !== dataTypes[ 0 ] ) {
  24014. dataTypes.unshift( finalDataType );
  24015. }
  24016. return responses[ finalDataType ];
  24017. }
  24018. }
  24019. /* Chain conversions given the request and the original response
  24020. * Also sets the responseXXX fields on the jqXHR instance
  24021. */
  24022. function ajaxConvert( s, response, jqXHR, isSuccess ) {
  24023. var conv2, current, conv, tmp, prev,
  24024. converters = {},
  24025. // Work with a copy of dataTypes in case we need to modify it for conversion
  24026. dataTypes = s.dataTypes.slice();
  24027. // Create converters map with lowercased keys
  24028. if ( dataTypes[ 1 ] ) {
  24029. for ( conv in s.converters ) {
  24030. converters[ conv.toLowerCase() ] = s.converters[ conv ];
  24031. }
  24032. }
  24033. current = dataTypes.shift();
  24034. // Convert to each sequential dataType
  24035. while ( current ) {
  24036. if ( s.responseFields[ current ] ) {
  24037. jqXHR[ s.responseFields[ current ] ] = response;
  24038. }
  24039. // Apply the dataFilter if provided
  24040. if ( !prev && isSuccess && s.dataFilter ) {
  24041. response = s.dataFilter( response, s.dataType );
  24042. }
  24043. prev = current;
  24044. current = dataTypes.shift();
  24045. if ( current ) {
  24046. // There's only work to do if current dataType is non-auto
  24047. if ( current === "*" ) {
  24048. current = prev;
  24049. // Convert response if prev dataType is non-auto and differs from current
  24050. } else if ( prev !== "*" && prev !== current ) {
  24051. // Seek a direct converter
  24052. conv = converters[ prev + " " + current ] || converters[ "* " + current ];
  24053. // If none found, seek a pair
  24054. if ( !conv ) {
  24055. for ( conv2 in converters ) {
  24056. // If conv2 outputs current
  24057. tmp = conv2.split( " " );
  24058. if ( tmp[ 1 ] === current ) {
  24059. // If prev can be converted to accepted input
  24060. conv = converters[ prev + " " + tmp[ 0 ] ] ||
  24061. converters[ "* " + tmp[ 0 ] ];
  24062. if ( conv ) {
  24063. // Condense equivalence converters
  24064. if ( conv === true ) {
  24065. conv = converters[ conv2 ];
  24066. // Otherwise, insert the intermediate dataType
  24067. } else if ( converters[ conv2 ] !== true ) {
  24068. current = tmp[ 0 ];
  24069. dataTypes.unshift( tmp[ 1 ] );
  24070. }
  24071. break;
  24072. }
  24073. }
  24074. }
  24075. }
  24076. // Apply converter (if not an equivalence)
  24077. if ( conv !== true ) {
  24078. // Unless errors are allowed to bubble, catch and return them
  24079. if ( conv && s.throws ) {
  24080. response = conv( response );
  24081. } else {
  24082. try {
  24083. response = conv( response );
  24084. } catch ( e ) {
  24085. return {
  24086. state: "parsererror",
  24087. error: conv ? e : "No conversion from " + prev + " to " + current
  24088. };
  24089. }
  24090. }
  24091. }
  24092. }
  24093. }
  24094. }
  24095. return { state: "success", data: response };
  24096. }
  24097. jQuery.extend( {
  24098. // Counter for holding the number of active queries
  24099. active: 0,
  24100. // Last-Modified header cache for next request
  24101. lastModified: {},
  24102. etag: {},
  24103. ajaxSettings: {
  24104. url: location.href,
  24105. type: "GET",
  24106. isLocal: rlocalProtocol.test( location.protocol ),
  24107. global: true,
  24108. processData: true,
  24109. async: true,
  24110. contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  24111. /*
  24112. timeout: 0,
  24113. data: null,
  24114. dataType: null,
  24115. username: null,
  24116. password: null,
  24117. cache: null,
  24118. throws: false,
  24119. traditional: false,
  24120. headers: {},
  24121. */
  24122. accepts: {
  24123. "*": allTypes,
  24124. text: "text/plain",
  24125. html: "text/html",
  24126. xml: "application/xml, text/xml",
  24127. json: "application/json, text/javascript"
  24128. },
  24129. contents: {
  24130. xml: /\bxml\b/,
  24131. html: /\bhtml/,
  24132. json: /\bjson\b/
  24133. },
  24134. responseFields: {
  24135. xml: "responseXML",
  24136. text: "responseText",
  24137. json: "responseJSON"
  24138. },
  24139. // Data converters
  24140. // Keys separate source (or catchall "*") and destination types with a single space
  24141. converters: {
  24142. // Convert anything to text
  24143. "* text": String,
  24144. // Text to html (true = no transformation)
  24145. "text html": true,
  24146. // Evaluate text as a json expression
  24147. "text json": jQuery.parseJSON,
  24148. // Parse text as xml
  24149. "text xml": jQuery.parseXML
  24150. },
  24151. // For options that shouldn't be deep extended:
  24152. // you can add your own custom options here if
  24153. // and when you create one that shouldn't be
  24154. // deep extended (see ajaxExtend)
  24155. flatOptions: {
  24156. url: true,
  24157. context: true
  24158. }
  24159. },
  24160. // Creates a full fledged settings object into target
  24161. // with both ajaxSettings and settings fields.
  24162. // If target is omitted, writes into ajaxSettings.
  24163. ajaxSetup: function( target, settings ) {
  24164. return settings ?
  24165. // Building a settings object
  24166. ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
  24167. // Extending ajaxSettings
  24168. ajaxExtend( jQuery.ajaxSettings, target );
  24169. },
  24170. ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
  24171. ajaxTransport: addToPrefiltersOrTransports( transports ),
  24172. // Main method
  24173. ajax: function( url, options ) {
  24174. // If url is an object, simulate pre-1.5 signature
  24175. if ( typeof url === "object" ) {
  24176. options = url;
  24177. url = undefined;
  24178. }
  24179. // Force options to be an object
  24180. options = options || {};
  24181. var transport,
  24182. // URL without anti-cache param
  24183. cacheURL,
  24184. // Response headers
  24185. responseHeadersString,
  24186. responseHeaders,
  24187. // timeout handle
  24188. timeoutTimer,
  24189. // Url cleanup var
  24190. urlAnchor,
  24191. // To know if global events are to be dispatched
  24192. fireGlobals,
  24193. // Loop variable
  24194. i,
  24195. // Create the final options object
  24196. s = jQuery.ajaxSetup( {}, options ),
  24197. // Callbacks context
  24198. callbackContext = s.context || s,
  24199. // Context for global events is callbackContext if it is a DOM node or jQuery collection
  24200. globalEventContext = s.context &&
  24201. ( callbackContext.nodeType || callbackContext.jquery ) ?
  24202. jQuery( callbackContext ) :
  24203. jQuery.event,
  24204. // Deferreds
  24205. deferred = jQuery.Deferred(),
  24206. completeDeferred = jQuery.Callbacks( "once memory" ),
  24207. // Status-dependent callbacks
  24208. statusCode = s.statusCode || {},
  24209. // Headers (they are sent all at once)
  24210. requestHeaders = {},
  24211. requestHeadersNames = {},
  24212. // The jqXHR state
  24213. state = 0,
  24214. // Default abort message
  24215. strAbort = "canceled",
  24216. // Fake xhr
  24217. jqXHR = {
  24218. readyState: 0,
  24219. // Builds headers hashtable if needed
  24220. getResponseHeader: function( key ) {
  24221. var match;
  24222. if ( state === 2 ) {
  24223. if ( !responseHeaders ) {
  24224. responseHeaders = {};
  24225. while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
  24226. responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
  24227. }
  24228. }
  24229. match = responseHeaders[ key.toLowerCase() ];
  24230. }
  24231. return match == null ? null : match;
  24232. },
  24233. // Raw string
  24234. getAllResponseHeaders: function() {
  24235. return state === 2 ? responseHeadersString : null;
  24236. },
  24237. // Caches the header
  24238. setRequestHeader: function( name, value ) {
  24239. var lname = name.toLowerCase();
  24240. if ( !state ) {
  24241. name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
  24242. requestHeaders[ name ] = value;
  24243. }
  24244. return this;
  24245. },
  24246. // Overrides response content-type header
  24247. overrideMimeType: function( type ) {
  24248. if ( !state ) {
  24249. s.mimeType = type;
  24250. }
  24251. return this;
  24252. },
  24253. // Status-dependent callbacks
  24254. statusCode: function( map ) {
  24255. var code;
  24256. if ( map ) {
  24257. if ( state < 2 ) {
  24258. for ( code in map ) {
  24259. // Lazy-add the new callback in a way that preserves old ones
  24260. statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
  24261. }
  24262. } else {
  24263. // Execute the appropriate callbacks
  24264. jqXHR.always( map[ jqXHR.status ] );
  24265. }
  24266. }
  24267. return this;
  24268. },
  24269. // Cancel the request
  24270. abort: function( statusText ) {
  24271. var finalText = statusText || strAbort;
  24272. if ( transport ) {
  24273. transport.abort( finalText );
  24274. }
  24275. done( 0, finalText );
  24276. return this;
  24277. }
  24278. };
  24279. // Attach deferreds
  24280. deferred.promise( jqXHR ).complete = completeDeferred.add;
  24281. jqXHR.success = jqXHR.done;
  24282. jqXHR.error = jqXHR.fail;
  24283. // Remove hash character (#7531: and string promotion)
  24284. // Add protocol if not provided (prefilters might expect it)
  24285. // Handle falsy url in the settings object (#10093: consistency with old signature)
  24286. // We also use the url parameter if available
  24287. s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" )
  24288. .replace( rprotocol, location.protocol + "//" );
  24289. // Alias method option to type as per ticket #12004
  24290. s.type = options.method || options.type || s.method || s.type;
  24291. // Extract dataTypes list
  24292. s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
  24293. // A cross-domain request is in order when the origin doesn't match the current origin.
  24294. if ( s.crossDomain == null ) {
  24295. urlAnchor = document.createElement( "a" );
  24296. // Support: IE8-11+
  24297. // IE throws exception if url is malformed, e.g. http://example.com:80x/
  24298. try {
  24299. urlAnchor.href = s.url;
  24300. // Support: IE8-11+
  24301. // Anchor's host property isn't correctly set when s.url is relative
  24302. urlAnchor.href = urlAnchor.href;
  24303. s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
  24304. urlAnchor.protocol + "//" + urlAnchor.host;
  24305. } catch ( e ) {
  24306. // If there is an error parsing the URL, assume it is crossDomain,
  24307. // it can be rejected by the transport if it is invalid
  24308. s.crossDomain = true;
  24309. }
  24310. }
  24311. // Convert data if not already a string
  24312. if ( s.data && s.processData && typeof s.data !== "string" ) {
  24313. s.data = jQuery.param( s.data, s.traditional );
  24314. }
  24315. // Apply prefilters
  24316. inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
  24317. // If request was aborted inside a prefilter, stop there
  24318. if ( state === 2 ) {
  24319. return jqXHR;
  24320. }
  24321. // We can fire global events as of now if asked to
  24322. // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
  24323. fireGlobals = jQuery.event && s.global;
  24324. // Watch for a new set of requests
  24325. if ( fireGlobals && jQuery.active++ === 0 ) {
  24326. jQuery.event.trigger( "ajaxStart" );
  24327. }
  24328. // Uppercase the type
  24329. s.type = s.type.toUpperCase();
  24330. // Determine if request has content
  24331. s.hasContent = !rnoContent.test( s.type );
  24332. // Save the URL in case we're toying with the If-Modified-Since
  24333. // and/or If-None-Match header later on
  24334. cacheURL = s.url;
  24335. // More options handling for requests with no content
  24336. if ( !s.hasContent ) {
  24337. // If data is available, append data to url
  24338. if ( s.data ) {
  24339. cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
  24340. // #9682: remove data so that it's not used in an eventual retry
  24341. delete s.data;
  24342. }
  24343. // Add anti-cache in url if needed
  24344. if ( s.cache === false ) {
  24345. s.url = rts.test( cacheURL ) ?
  24346. // If there is already a '_' parameter, set its value
  24347. cacheURL.replace( rts, "$1_=" + nonce++ ) :
  24348. // Otherwise add one to the end
  24349. cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
  24350. }
  24351. }
  24352. // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
  24353. if ( s.ifModified ) {
  24354. if ( jQuery.lastModified[ cacheURL ] ) {
  24355. jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
  24356. }
  24357. if ( jQuery.etag[ cacheURL ] ) {
  24358. jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
  24359. }
  24360. }
  24361. // Set the correct header, if data is being sent
  24362. if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
  24363. jqXHR.setRequestHeader( "Content-Type", s.contentType );
  24364. }
  24365. // Set the Accepts header for the server, depending on the dataType
  24366. jqXHR.setRequestHeader(
  24367. "Accept",
  24368. s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
  24369. s.accepts[ s.dataTypes[ 0 ] ] +
  24370. ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
  24371. s.accepts[ "*" ]
  24372. );
  24373. // Check for headers option
  24374. for ( i in s.headers ) {
  24375. jqXHR.setRequestHeader( i, s.headers[ i ] );
  24376. }
  24377. // Allow custom headers/mimetypes and early abort
  24378. if ( s.beforeSend &&
  24379. ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
  24380. // Abort if not done already and return
  24381. return jqXHR.abort();
  24382. }
  24383. // Aborting is no longer a cancellation
  24384. strAbort = "abort";
  24385. // Install callbacks on deferreds
  24386. for ( i in { success: 1, error: 1, complete: 1 } ) {
  24387. jqXHR[ i ]( s[ i ] );
  24388. }
  24389. // Get transport
  24390. transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
  24391. // If no transport, we auto-abort
  24392. if ( !transport ) {
  24393. done( -1, "No Transport" );
  24394. } else {
  24395. jqXHR.readyState = 1;
  24396. // Send global event
  24397. if ( fireGlobals ) {
  24398. globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
  24399. }
  24400. // If request was aborted inside ajaxSend, stop there
  24401. if ( state === 2 ) {
  24402. return jqXHR;
  24403. }
  24404. // Timeout
  24405. if ( s.async && s.timeout > 0 ) {
  24406. timeoutTimer = window.setTimeout( function() {
  24407. jqXHR.abort( "timeout" );
  24408. }, s.timeout );
  24409. }
  24410. try {
  24411. state = 1;
  24412. transport.send( requestHeaders, done );
  24413. } catch ( e ) {
  24414. // Propagate exception as error if not done
  24415. if ( state < 2 ) {
  24416. done( -1, e );
  24417. // Simply rethrow otherwise
  24418. } else {
  24419. throw e;
  24420. }
  24421. }
  24422. }
  24423. // Callback for when everything is done
  24424. function done( status, nativeStatusText, responses, headers ) {
  24425. var isSuccess, success, error, response, modified,
  24426. statusText = nativeStatusText;
  24427. // Called once
  24428. if ( state === 2 ) {
  24429. return;
  24430. }
  24431. // State is "done" now
  24432. state = 2;
  24433. // Clear timeout if it exists
  24434. if ( timeoutTimer ) {
  24435. window.clearTimeout( timeoutTimer );
  24436. }
  24437. // Dereference transport for early garbage collection
  24438. // (no matter how long the jqXHR object will be used)
  24439. transport = undefined;
  24440. // Cache response headers
  24441. responseHeadersString = headers || "";
  24442. // Set readyState
  24443. jqXHR.readyState = status > 0 ? 4 : 0;
  24444. // Determine if successful
  24445. isSuccess = status >= 200 && status < 300 || status === 304;
  24446. // Get response data
  24447. if ( responses ) {
  24448. response = ajaxHandleResponses( s, jqXHR, responses );
  24449. }
  24450. // Convert no matter what (that way responseXXX fields are always set)
  24451. response = ajaxConvert( s, response, jqXHR, isSuccess );
  24452. // If successful, handle type chaining
  24453. if ( isSuccess ) {
  24454. // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
  24455. if ( s.ifModified ) {
  24456. modified = jqXHR.getResponseHeader( "Last-Modified" );
  24457. if ( modified ) {
  24458. jQuery.lastModified[ cacheURL ] = modified;
  24459. }
  24460. modified = jqXHR.getResponseHeader( "etag" );
  24461. if ( modified ) {
  24462. jQuery.etag[ cacheURL ] = modified;
  24463. }
  24464. }
  24465. // if no content
  24466. if ( status === 204 || s.type === "HEAD" ) {
  24467. statusText = "nocontent";
  24468. // if not modified
  24469. } else if ( status === 304 ) {
  24470. statusText = "notmodified";
  24471. // If we have data, let's convert it
  24472. } else {
  24473. statusText = response.state;
  24474. success = response.data;
  24475. error = response.error;
  24476. isSuccess = !error;
  24477. }
  24478. } else {
  24479. // Extract error from statusText and normalize for non-aborts
  24480. error = statusText;
  24481. if ( status || !statusText ) {
  24482. statusText = "error";
  24483. if ( status < 0 ) {
  24484. status = 0;
  24485. }
  24486. }
  24487. }
  24488. // Set data for the fake xhr object
  24489. jqXHR.status = status;
  24490. jqXHR.statusText = ( nativeStatusText || statusText ) + "";
  24491. // Success/Error
  24492. if ( isSuccess ) {
  24493. deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
  24494. } else {
  24495. deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
  24496. }
  24497. // Status-dependent callbacks
  24498. jqXHR.statusCode( statusCode );
  24499. statusCode = undefined;
  24500. if ( fireGlobals ) {
  24501. globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
  24502. [ jqXHR, s, isSuccess ? success : error ] );
  24503. }
  24504. // Complete
  24505. completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
  24506. if ( fireGlobals ) {
  24507. globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
  24508. // Handle the global AJAX counter
  24509. if ( !( --jQuery.active ) ) {
  24510. jQuery.event.trigger( "ajaxStop" );
  24511. }
  24512. }
  24513. }
  24514. return jqXHR;
  24515. },
  24516. getJSON: function( url, data, callback ) {
  24517. return jQuery.get( url, data, callback, "json" );
  24518. },
  24519. getScript: function( url, callback ) {
  24520. return jQuery.get( url, undefined, callback, "script" );
  24521. }
  24522. } );
  24523. jQuery.each( [ "get", "post" ], function( i, method ) {
  24524. jQuery[ method ] = function( url, data, callback, type ) {
  24525. // Shift arguments if data argument was omitted
  24526. if ( jQuery.isFunction( data ) ) {
  24527. type = type || callback;
  24528. callback = data;
  24529. data = undefined;
  24530. }
  24531. // The url can be an options object (which then must have .url)
  24532. return jQuery.ajax( jQuery.extend( {
  24533. url: url,
  24534. type: method,
  24535. dataType: type,
  24536. data: data,
  24537. success: callback
  24538. }, jQuery.isPlainObject( url ) && url ) );
  24539. };
  24540. } );
  24541. jQuery._evalUrl = function( url ) {
  24542. return jQuery.ajax( {
  24543. url: url,
  24544. // Make this explicit, since user can override this through ajaxSetup (#11264)
  24545. type: "GET",
  24546. dataType: "script",
  24547. async: false,
  24548. global: false,
  24549. "throws": true
  24550. } );
  24551. };
  24552. jQuery.fn.extend( {
  24553. wrapAll: function( html ) {
  24554. var wrap;
  24555. if ( jQuery.isFunction( html ) ) {
  24556. return this.each( function( i ) {
  24557. jQuery( this ).wrapAll( html.call( this, i ) );
  24558. } );
  24559. }
  24560. if ( this[ 0 ] ) {
  24561. // The elements to wrap the target around
  24562. wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
  24563. if ( this[ 0 ].parentNode ) {
  24564. wrap.insertBefore( this[ 0 ] );
  24565. }
  24566. wrap.map( function() {
  24567. var elem = this;
  24568. while ( elem.firstElementChild ) {
  24569. elem = elem.firstElementChild;
  24570. }
  24571. return elem;
  24572. } ).append( this );
  24573. }
  24574. return this;
  24575. },
  24576. wrapInner: function( html ) {
  24577. if ( jQuery.isFunction( html ) ) {
  24578. return this.each( function( i ) {
  24579. jQuery( this ).wrapInner( html.call( this, i ) );
  24580. } );
  24581. }
  24582. return this.each( function() {
  24583. var self = jQuery( this ),
  24584. contents = self.contents();
  24585. if ( contents.length ) {
  24586. contents.wrapAll( html );
  24587. } else {
  24588. self.append( html );
  24589. }
  24590. } );
  24591. },
  24592. wrap: function( html ) {
  24593. var isFunction = jQuery.isFunction( html );
  24594. return this.each( function( i ) {
  24595. jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
  24596. } );
  24597. },
  24598. unwrap: function() {
  24599. return this.parent().each( function() {
  24600. if ( !jQuery.nodeName( this, "body" ) ) {
  24601. jQuery( this ).replaceWith( this.childNodes );
  24602. }
  24603. } ).end();
  24604. }
  24605. } );
  24606. jQuery.expr.filters.hidden = function( elem ) {
  24607. return !jQuery.expr.filters.visible( elem );
  24608. };
  24609. jQuery.expr.filters.visible = function( elem ) {
  24610. // Support: Opera <= 12.12
  24611. // Opera reports offsetWidths and offsetHeights less than zero on some elements
  24612. // Use OR instead of AND as the element is not visible if either is true
  24613. // See tickets #10406 and #13132
  24614. return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;
  24615. };
  24616. var r20 = /%20/g,
  24617. rbracket = /\[\]$/,
  24618. rCRLF = /\r?\n/g,
  24619. rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
  24620. rsubmittable = /^(?:input|select|textarea|keygen)/i;
  24621. function buildParams( prefix, obj, traditional, add ) {
  24622. var name;
  24623. if ( jQuery.isArray( obj ) ) {
  24624. // Serialize array item.
  24625. jQuery.each( obj, function( i, v ) {
  24626. if ( traditional || rbracket.test( prefix ) ) {
  24627. // Treat each array item as a scalar.
  24628. add( prefix, v );
  24629. } else {
  24630. // Item is non-scalar (array or object), encode its numeric index.
  24631. buildParams(
  24632. prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
  24633. v,
  24634. traditional,
  24635. add
  24636. );
  24637. }
  24638. } );
  24639. } else if ( !traditional && jQuery.type( obj ) === "object" ) {
  24640. // Serialize object item.
  24641. for ( name in obj ) {
  24642. buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
  24643. }
  24644. } else {
  24645. // Serialize scalar item.
  24646. add( prefix, obj );
  24647. }
  24648. }
  24649. // Serialize an array of form elements or a set of
  24650. // key/values into a query string
  24651. jQuery.param = function( a, traditional ) {
  24652. var prefix,
  24653. s = [],
  24654. add = function( key, value ) {
  24655. // If value is a function, invoke it and return its value
  24656. value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
  24657. s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
  24658. };
  24659. // Set traditional to true for jQuery <= 1.3.2 behavior.
  24660. if ( traditional === undefined ) {
  24661. traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
  24662. }
  24663. // If an array was passed in, assume that it is an array of form elements.
  24664. if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
  24665. // Serialize the form elements
  24666. jQuery.each( a, function() {
  24667. add( this.name, this.value );
  24668. } );
  24669. } else {
  24670. // If traditional, encode the "old" way (the way 1.3.2 or older
  24671. // did it), otherwise encode params recursively.
  24672. for ( prefix in a ) {
  24673. buildParams( prefix, a[ prefix ], traditional, add );
  24674. }
  24675. }
  24676. // Return the resulting serialization
  24677. return s.join( "&" ).replace( r20, "+" );
  24678. };
  24679. jQuery.fn.extend( {
  24680. serialize: function() {
  24681. return jQuery.param( this.serializeArray() );
  24682. },
  24683. serializeArray: function() {
  24684. return this.map( function() {
  24685. // Can add propHook for "elements" to filter or add form elements
  24686. var elements = jQuery.prop( this, "elements" );
  24687. return elements ? jQuery.makeArray( elements ) : this;
  24688. } )
  24689. .filter( function() {
  24690. var type = this.type;
  24691. // Use .is( ":disabled" ) so that fieldset[disabled] works
  24692. return this.name && !jQuery( this ).is( ":disabled" ) &&
  24693. rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
  24694. ( this.checked || !rcheckableType.test( type ) );
  24695. } )
  24696. .map( function( i, elem ) {
  24697. var val = jQuery( this ).val();
  24698. return val == null ?
  24699. null :
  24700. jQuery.isArray( val ) ?
  24701. jQuery.map( val, function( val ) {
  24702. return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
  24703. } ) :
  24704. { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
  24705. } ).get();
  24706. }
  24707. } );
  24708. jQuery.ajaxSettings.xhr = function() {
  24709. try {
  24710. return new window.XMLHttpRequest();
  24711. } catch ( e ) {}
  24712. };
  24713. var xhrSuccessStatus = {
  24714. // File protocol always yields status code 0, assume 200
  24715. 0: 200,
  24716. // Support: IE9
  24717. // #1450: sometimes IE returns 1223 when it should be 204
  24718. 1223: 204
  24719. },
  24720. xhrSupported = jQuery.ajaxSettings.xhr();
  24721. support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
  24722. support.ajax = xhrSupported = !!xhrSupported;
  24723. jQuery.ajaxTransport( function( options ) {
  24724. var callback, errorCallback;
  24725. // Cross domain only allowed if supported through XMLHttpRequest
  24726. if ( support.cors || xhrSupported && !options.crossDomain ) {
  24727. return {
  24728. send: function( headers, complete ) {
  24729. var i,
  24730. xhr = options.xhr();
  24731. xhr.open(
  24732. options.type,
  24733. options.url,
  24734. options.async,
  24735. options.username,
  24736. options.password
  24737. );
  24738. // Apply custom fields if provided
  24739. if ( options.xhrFields ) {
  24740. for ( i in options.xhrFields ) {
  24741. xhr[ i ] = options.xhrFields[ i ];
  24742. }
  24743. }
  24744. // Override mime type if needed
  24745. if ( options.mimeType && xhr.overrideMimeType ) {
  24746. xhr.overrideMimeType( options.mimeType );
  24747. }
  24748. // X-Requested-With header
  24749. // For cross-domain requests, seeing as conditions for a preflight are
  24750. // akin to a jigsaw puzzle, we simply never set it to be sure.
  24751. // (it can always be set on a per-request basis or even using ajaxSetup)
  24752. // For same-domain requests, won't change header if already provided.
  24753. if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
  24754. headers[ "X-Requested-With" ] = "XMLHttpRequest";
  24755. }
  24756. // Set headers
  24757. for ( i in headers ) {
  24758. xhr.setRequestHeader( i, headers[ i ] );
  24759. }
  24760. // Callback
  24761. callback = function( type ) {
  24762. return function() {
  24763. if ( callback ) {
  24764. callback = errorCallback = xhr.onload =
  24765. xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
  24766. if ( type === "abort" ) {
  24767. xhr.abort();
  24768. } else if ( type === "error" ) {
  24769. // Support: IE9
  24770. // On a manual native abort, IE9 throws
  24771. // errors on any property access that is not readyState
  24772. if ( typeof xhr.status !== "number" ) {
  24773. complete( 0, "error" );
  24774. } else {
  24775. complete(
  24776. // File: protocol always yields status 0; see #8605, #14207
  24777. xhr.status,
  24778. xhr.statusText
  24779. );
  24780. }
  24781. } else {
  24782. complete(
  24783. xhrSuccessStatus[ xhr.status ] || xhr.status,
  24784. xhr.statusText,
  24785. // Support: IE9 only
  24786. // IE9 has no XHR2 but throws on binary (trac-11426)
  24787. // For XHR2 non-text, let the caller handle it (gh-2498)
  24788. ( xhr.responseType || "text" ) !== "text" ||
  24789. typeof xhr.responseText !== "string" ?
  24790. { binary: xhr.response } :
  24791. { text: xhr.responseText },
  24792. xhr.getAllResponseHeaders()
  24793. );
  24794. }
  24795. }
  24796. };
  24797. };
  24798. // Listen to events
  24799. xhr.onload = callback();
  24800. errorCallback = xhr.onerror = callback( "error" );
  24801. // Support: IE9
  24802. // Use onreadystatechange to replace onabort
  24803. // to handle uncaught aborts
  24804. if ( xhr.onabort !== undefined ) {
  24805. xhr.onabort = errorCallback;
  24806. } else {
  24807. xhr.onreadystatechange = function() {
  24808. // Check readyState before timeout as it changes
  24809. if ( xhr.readyState === 4 ) {
  24810. // Allow onerror to be called first,
  24811. // but that will not handle a native abort
  24812. // Also, save errorCallback to a variable
  24813. // as xhr.onerror cannot be accessed
  24814. window.setTimeout( function() {
  24815. if ( callback ) {
  24816. errorCallback();
  24817. }
  24818. } );
  24819. }
  24820. };
  24821. }
  24822. // Create the abort callback
  24823. callback = callback( "abort" );
  24824. try {
  24825. // Do send the request (this may raise an exception)
  24826. xhr.send( options.hasContent && options.data || null );
  24827. } catch ( e ) {
  24828. // #14683: Only rethrow if this hasn't been notified as an error yet
  24829. if ( callback ) {
  24830. throw e;
  24831. }
  24832. }
  24833. },
  24834. abort: function() {
  24835. if ( callback ) {
  24836. callback();
  24837. }
  24838. }
  24839. };
  24840. }
  24841. } );
  24842. // Install script dataType
  24843. jQuery.ajaxSetup( {
  24844. accepts: {
  24845. script: "text/javascript, application/javascript, " +
  24846. "application/ecmascript, application/x-ecmascript"
  24847. },
  24848. contents: {
  24849. script: /\b(?:java|ecma)script\b/
  24850. },
  24851. converters: {
  24852. "text script": function( text ) {
  24853. jQuery.globalEval( text );
  24854. return text;
  24855. }
  24856. }
  24857. } );
  24858. // Handle cache's special case and crossDomain
  24859. jQuery.ajaxPrefilter( "script", function( s ) {
  24860. if ( s.cache === undefined ) {
  24861. s.cache = false;
  24862. }
  24863. if ( s.crossDomain ) {
  24864. s.type = "GET";
  24865. }
  24866. } );
  24867. // Bind script tag hack transport
  24868. jQuery.ajaxTransport( "script", function( s ) {
  24869. // This transport only deals with cross domain requests
  24870. if ( s.crossDomain ) {
  24871. var script, callback;
  24872. return {
  24873. send: function( _, complete ) {
  24874. script = jQuery( "<script>" ).prop( {
  24875. charset: s.scriptCharset,
  24876. src: s.url
  24877. } ).on(
  24878. "load error",
  24879. callback = function( evt ) {
  24880. script.remove();
  24881. callback = null;
  24882. if ( evt ) {
  24883. complete( evt.type === "error" ? 404 : 200, evt.type );
  24884. }
  24885. }
  24886. );
  24887. // Use native DOM manipulation to avoid our domManip AJAX trickery
  24888. document.head.appendChild( script[ 0 ] );
  24889. },
  24890. abort: function() {
  24891. if ( callback ) {
  24892. callback();
  24893. }
  24894. }
  24895. };
  24896. }
  24897. } );
  24898. var oldCallbacks = [],
  24899. rjsonp = /(=)\?(?=&|$)|\?\?/;
  24900. // Default jsonp settings
  24901. jQuery.ajaxSetup( {
  24902. jsonp: "callback",
  24903. jsonpCallback: function() {
  24904. var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
  24905. this[ callback ] = true;
  24906. return callback;
  24907. }
  24908. } );
  24909. // Detect, normalize options and install callbacks for jsonp requests
  24910. jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
  24911. var callbackName, overwritten, responseContainer,
  24912. jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
  24913. "url" :
  24914. typeof s.data === "string" &&
  24915. ( s.contentType || "" )
  24916. .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
  24917. rjsonp.test( s.data ) && "data"
  24918. );
  24919. // Handle iff the expected data type is "jsonp" or we have a parameter to set
  24920. if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
  24921. // Get callback name, remembering preexisting value associated with it
  24922. callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
  24923. s.jsonpCallback() :
  24924. s.jsonpCallback;
  24925. // Insert callback into url or form data
  24926. if ( jsonProp ) {
  24927. s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
  24928. } else if ( s.jsonp !== false ) {
  24929. s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
  24930. }
  24931. // Use data converter to retrieve json after script execution
  24932. s.converters[ "script json" ] = function() {
  24933. if ( !responseContainer ) {
  24934. jQuery.error( callbackName + " was not called" );
  24935. }
  24936. return responseContainer[ 0 ];
  24937. };
  24938. // Force json dataType
  24939. s.dataTypes[ 0 ] = "json";
  24940. // Install callback
  24941. overwritten = window[ callbackName ];
  24942. window[ callbackName ] = function() {
  24943. responseContainer = arguments;
  24944. };
  24945. // Clean-up function (fires after converters)
  24946. jqXHR.always( function() {
  24947. // If previous value didn't exist - remove it
  24948. if ( overwritten === undefined ) {
  24949. jQuery( window ).removeProp( callbackName );
  24950. // Otherwise restore preexisting value
  24951. } else {
  24952. window[ callbackName ] = overwritten;
  24953. }
  24954. // Save back as free
  24955. if ( s[ callbackName ] ) {
  24956. // Make sure that re-using the options doesn't screw things around
  24957. s.jsonpCallback = originalSettings.jsonpCallback;
  24958. // Save the callback name for future use
  24959. oldCallbacks.push( callbackName );
  24960. }
  24961. // Call if it was a function and we have a response
  24962. if ( responseContainer && jQuery.isFunction( overwritten ) ) {
  24963. overwritten( responseContainer[ 0 ] );
  24964. }
  24965. responseContainer = overwritten = undefined;
  24966. } );
  24967. // Delegate to script
  24968. return "script";
  24969. }
  24970. } );
  24971. // Argument "data" should be string of html
  24972. // context (optional): If specified, the fragment will be created in this context,
  24973. // defaults to document
  24974. // keepScripts (optional): If true, will include scripts passed in the html string
  24975. jQuery.parseHTML = function( data, context, keepScripts ) {
  24976. if ( !data || typeof data !== "string" ) {
  24977. return null;
  24978. }
  24979. if ( typeof context === "boolean" ) {
  24980. keepScripts = context;
  24981. context = false;
  24982. }
  24983. context = context || document;
  24984. var parsed = rsingleTag.exec( data ),
  24985. scripts = !keepScripts && [];
  24986. // Single tag
  24987. if ( parsed ) {
  24988. return [ context.createElement( parsed[ 1 ] ) ];
  24989. }
  24990. parsed = buildFragment( [ data ], context, scripts );
  24991. if ( scripts && scripts.length ) {
  24992. jQuery( scripts ).remove();
  24993. }
  24994. return jQuery.merge( [], parsed.childNodes );
  24995. };
  24996. // Keep a copy of the old load method
  24997. var _load = jQuery.fn.load;
  24998. /**
  24999. * Load a url into a page
  25000. */
  25001. jQuery.fn.load = function( url, params, callback ) {
  25002. if ( typeof url !== "string" && _load ) {
  25003. return _load.apply( this, arguments );
  25004. }
  25005. var selector, type, response,
  25006. self = this,
  25007. off = url.indexOf( " " );
  25008. if ( off > -1 ) {
  25009. selector = jQuery.trim( url.slice( off ) );
  25010. url = url.slice( 0, off );
  25011. }
  25012. // If it's a function
  25013. if ( jQuery.isFunction( params ) ) {
  25014. // We assume that it's the callback
  25015. callback = params;
  25016. params = undefined;
  25017. // Otherwise, build a param string
  25018. } else if ( params && typeof params === "object" ) {
  25019. type = "POST";
  25020. }
  25021. // If we have elements to modify, make the request
  25022. if ( self.length > 0 ) {
  25023. jQuery.ajax( {
  25024. url: url,
  25025. // If "type" variable is undefined, then "GET" method will be used.
  25026. // Make value of this field explicit since
  25027. // user can override it through ajaxSetup method
  25028. type: type || "GET",
  25029. dataType: "html",
  25030. data: params
  25031. } ).done( function( responseText ) {
  25032. // Save response for use in complete callback
  25033. response = arguments;
  25034. self.html( selector ?
  25035. // If a selector was specified, locate the right elements in a dummy div
  25036. // Exclude scripts to avoid IE 'Permission Denied' errors
  25037. jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
  25038. // Otherwise use the full result
  25039. responseText );
  25040. // If the request succeeds, this function gets "data", "status", "jqXHR"
  25041. // but they are ignored because response was set above.
  25042. // If it fails, this function gets "jqXHR", "status", "error"
  25043. } ).always( callback && function( jqXHR, status ) {
  25044. self.each( function() {
  25045. callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
  25046. } );
  25047. } );
  25048. }
  25049. return this;
  25050. };
  25051. // Attach a bunch of functions for handling common AJAX events
  25052. jQuery.each( [
  25053. "ajaxStart",
  25054. "ajaxStop",
  25055. "ajaxComplete",
  25056. "ajaxError",
  25057. "ajaxSuccess",
  25058. "ajaxSend"
  25059. ], function( i, type ) {
  25060. jQuery.fn[ type ] = function( fn ) {
  25061. return this.on( type, fn );
  25062. };
  25063. } );
  25064. jQuery.expr.filters.animated = function( elem ) {
  25065. return jQuery.grep( jQuery.timers, function( fn ) {
  25066. return elem === fn.elem;
  25067. } ).length;
  25068. };
  25069. /**
  25070. * Gets a window from an element
  25071. */
  25072. function getWindow( elem ) {
  25073. return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
  25074. }
  25075. jQuery.offset = {
  25076. setOffset: function( elem, options, i ) {
  25077. var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
  25078. position = jQuery.css( elem, "position" ),
  25079. curElem = jQuery( elem ),
  25080. props = {};
  25081. // Set position first, in-case top/left are set even on static elem
  25082. if ( position === "static" ) {
  25083. elem.style.position = "relative";
  25084. }
  25085. curOffset = curElem.offset();
  25086. curCSSTop = jQuery.css( elem, "top" );
  25087. curCSSLeft = jQuery.css( elem, "left" );
  25088. calculatePosition = ( position === "absolute" || position === "fixed" ) &&
  25089. ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
  25090. // Need to be able to calculate position if either
  25091. // top or left is auto and position is either absolute or fixed
  25092. if ( calculatePosition ) {
  25093. curPosition = curElem.position();
  25094. curTop = curPosition.top;
  25095. curLeft = curPosition.left;
  25096. } else {
  25097. curTop = parseFloat( curCSSTop ) || 0;
  25098. curLeft = parseFloat( curCSSLeft ) || 0;
  25099. }
  25100. if ( jQuery.isFunction( options ) ) {
  25101. // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
  25102. options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
  25103. }
  25104. if ( options.top != null ) {
  25105. props.top = ( options.top - curOffset.top ) + curTop;
  25106. }
  25107. if ( options.left != null ) {
  25108. props.left = ( options.left - curOffset.left ) + curLeft;
  25109. }
  25110. if ( "using" in options ) {
  25111. options.using.call( elem, props );
  25112. } else {
  25113. curElem.css( props );
  25114. }
  25115. }
  25116. };
  25117. jQuery.fn.extend( {
  25118. offset: function( options ) {
  25119. if ( arguments.length ) {
  25120. return options === undefined ?
  25121. this :
  25122. this.each( function( i ) {
  25123. jQuery.offset.setOffset( this, options, i );
  25124. } );
  25125. }
  25126. var docElem, win,
  25127. elem = this[ 0 ],
  25128. box = { top: 0, left: 0 },
  25129. doc = elem && elem.ownerDocument;
  25130. if ( !doc ) {
  25131. return;
  25132. }
  25133. docElem = doc.documentElement;
  25134. // Make sure it's not a disconnected DOM node
  25135. if ( !jQuery.contains( docElem, elem ) ) {
  25136. return box;
  25137. }
  25138. box = elem.getBoundingClientRect();
  25139. win = getWindow( doc );
  25140. return {
  25141. top: box.top + win.pageYOffset - docElem.clientTop,
  25142. left: box.left + win.pageXOffset - docElem.clientLeft
  25143. };
  25144. },
  25145. position: function() {
  25146. if ( !this[ 0 ] ) {
  25147. return;
  25148. }
  25149. var offsetParent, offset,
  25150. elem = this[ 0 ],
  25151. parentOffset = { top: 0, left: 0 };
  25152. // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
  25153. // because it is its only offset parent
  25154. if ( jQuery.css( elem, "position" ) === "fixed" ) {
  25155. // Assume getBoundingClientRect is there when computed position is fixed
  25156. offset = elem.getBoundingClientRect();
  25157. } else {
  25158. // Get *real* offsetParent
  25159. offsetParent = this.offsetParent();
  25160. // Get correct offsets
  25161. offset = this.offset();
  25162. if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
  25163. parentOffset = offsetParent.offset();
  25164. }
  25165. // Add offsetParent borders
  25166. parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
  25167. parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
  25168. }
  25169. // Subtract parent offsets and element margins
  25170. return {
  25171. top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
  25172. left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
  25173. };
  25174. },
  25175. // This method will return documentElement in the following cases:
  25176. // 1) For the element inside the iframe without offsetParent, this method will return
  25177. // documentElement of the parent window
  25178. // 2) For the hidden or detached element
  25179. // 3) For body or html element, i.e. in case of the html node - it will return itself
  25180. //
  25181. // but those exceptions were never presented as a real life use-cases
  25182. // and might be considered as more preferable results.
  25183. //
  25184. // This logic, however, is not guaranteed and can change at any point in the future
  25185. offsetParent: function() {
  25186. return this.map( function() {
  25187. var offsetParent = this.offsetParent;
  25188. while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
  25189. offsetParent = offsetParent.offsetParent;
  25190. }
  25191. return offsetParent || documentElement;
  25192. } );
  25193. }
  25194. } );
  25195. // Create scrollLeft and scrollTop methods
  25196. jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
  25197. var top = "pageYOffset" === prop;
  25198. jQuery.fn[ method ] = function( val ) {
  25199. return access( this, function( elem, method, val ) {
  25200. var win = getWindow( elem );
  25201. if ( val === undefined ) {
  25202. return win ? win[ prop ] : elem[ method ];
  25203. }
  25204. if ( win ) {
  25205. win.scrollTo(
  25206. !top ? val : win.pageXOffset,
  25207. top ? val : win.pageYOffset
  25208. );
  25209. } else {
  25210. elem[ method ] = val;
  25211. }
  25212. }, method, val, arguments.length );
  25213. };
  25214. } );
  25215. // Support: Safari<7-8+, Chrome<37-44+
  25216. // Add the top/left cssHooks using jQuery.fn.position
  25217. // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
  25218. // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
  25219. // getComputedStyle returns percent when specified for top/left/bottom/right;
  25220. // rather than make the css module depend on the offset module, just check for it here
  25221. jQuery.each( [ "top", "left" ], function( i, prop ) {
  25222. jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
  25223. function( elem, computed ) {
  25224. if ( computed ) {
  25225. computed = curCSS( elem, prop );
  25226. // If curCSS returns percentage, fallback to offset
  25227. return rnumnonpx.test( computed ) ?
  25228. jQuery( elem ).position()[ prop ] + "px" :
  25229. computed;
  25230. }
  25231. }
  25232. );
  25233. } );
  25234. // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
  25235. jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
  25236. jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
  25237. function( defaultExtra, funcName ) {
  25238. // Margin is only for outerHeight, outerWidth
  25239. jQuery.fn[ funcName ] = function( margin, value ) {
  25240. var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
  25241. extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
  25242. return access( this, function( elem, type, value ) {
  25243. var doc;
  25244. if ( jQuery.isWindow( elem ) ) {
  25245. // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
  25246. // isn't a whole lot we can do. See pull request at this URL for discussion:
  25247. // https://github.com/jquery/jquery/pull/764
  25248. return elem.document.documentElement[ "client" + name ];
  25249. }
  25250. // Get document width or height
  25251. if ( elem.nodeType === 9 ) {
  25252. doc = elem.documentElement;
  25253. // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
  25254. // whichever is greatest
  25255. return Math.max(
  25256. elem.body[ "scroll" + name ], doc[ "scroll" + name ],
  25257. elem.body[ "offset" + name ], doc[ "offset" + name ],
  25258. doc[ "client" + name ]
  25259. );
  25260. }
  25261. return value === undefined ?
  25262. // Get width or height on the element, requesting but not forcing parseFloat
  25263. jQuery.css( elem, type, extra ) :
  25264. // Set width or height on the element
  25265. jQuery.style( elem, type, value, extra );
  25266. }, type, chainable ? margin : undefined, chainable, null );
  25267. };
  25268. } );
  25269. } );
  25270. jQuery.fn.extend( {
  25271. bind: function( types, data, fn ) {
  25272. return this.on( types, null, data, fn );
  25273. },
  25274. unbind: function( types, fn ) {
  25275. return this.off( types, null, fn );
  25276. },
  25277. delegate: function( selector, types, data, fn ) {
  25278. return this.on( types, selector, data, fn );
  25279. },
  25280. undelegate: function( selector, types, fn ) {
  25281. // ( namespace ) or ( selector, types [, fn] )
  25282. return arguments.length === 1 ?
  25283. this.off( selector, "**" ) :
  25284. this.off( types, selector || "**", fn );
  25285. },
  25286. size: function() {
  25287. return this.length;
  25288. }
  25289. } );
  25290. jQuery.fn.andSelf = jQuery.fn.addBack;
  25291. // Register as a named AMD module, since jQuery can be concatenated with other
  25292. // files that may use define, but not via a proper concatenation script that
  25293. // understands anonymous AMD modules. A named AMD is safest and most robust
  25294. // way to register. Lowercase jquery is used because AMD module names are
  25295. // derived from file names, and jQuery is normally delivered in a lowercase
  25296. // file name. Do this after creating the global so that if an AMD module wants
  25297. // to call noConflict to hide this version of jQuery, it will work.
  25298. // Note that for maximum portability, libraries that are not jQuery should
  25299. // declare themselves as anonymous modules, and avoid setting a global if an
  25300. // AMD loader is present. jQuery is a special case. For more information, see
  25301. // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
  25302. if ( true ) {
  25303. !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
  25304. return jQuery;
  25305. }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  25306. }
  25307. var
  25308. // Map over jQuery in case of overwrite
  25309. _jQuery = window.jQuery,
  25310. // Map over the $ in case of overwrite
  25311. _$ = window.$;
  25312. jQuery.noConflict = function( deep ) {
  25313. if ( window.$ === jQuery ) {
  25314. window.$ = _$;
  25315. }
  25316. if ( deep && window.jQuery === jQuery ) {
  25317. window.jQuery = _jQuery;
  25318. }
  25319. return jQuery;
  25320. };
  25321. // Expose jQuery and $ identifiers, even in AMD
  25322. // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
  25323. // and CommonJS for browser emulators (#13566)
  25324. if ( !noGlobal ) {
  25325. window.jQuery = window.$ = jQuery;
  25326. }
  25327. return jQuery;
  25328. }));
  25329. /***/ },
  25330. /* 163 */
  25331. /***/ function(module, exports, __webpack_require__) {
  25332. var React = __webpack_require__(1);
  25333. var ReactDOM = __webpack_require__(158);
  25334. var SimpleMDEReact = __webpack_require__(160);
  25335. module.exports = React.createClass({
  25336. displayName: 'exports',
  25337. getMarkdownOptions() {
  25338. return {
  25339. autofocus: false,
  25340. spellChecker: true,
  25341. initialValue: this.props.value
  25342. };
  25343. },
  25344. render() {
  25345. return React.createElement(SimpleMDEReact, {
  25346. onChange: this.props.handleEditorChange,
  25347. options: this.getMarkdownOptions(),
  25348. value: this.props.value
  25349. });
  25350. }
  25351. });
  25352. /***/ }
  25353. /******/ ]);