123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589 |
- * jQuery JavaScript Library v1.11.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-05-01T17:42Z
- */
- (function( global, factory ) {
- if ( typeof module === "object" && typeof module.exports === "object" ) {
-
-
-
-
-
-
-
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
- }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
- var deletedIds = [];
- var slice = deletedIds.slice;
- var concat = deletedIds.concat;
- var push = deletedIds.push;
- var indexOf = deletedIds.indexOf;
- var class2type = {};
- var toString = class2type.toString;
- var hasOwn = class2type.hasOwnProperty;
- var support = {};
- var
- version = "1.11.1",
-
- jQuery = function( selector, context ) {
-
-
- return new jQuery.fn.init( selector, context );
- },
-
-
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
- jQuery.fn = jQuery.prototype = {
-
- jquery: version,
- constructor: jQuery,
-
- selector: "",
-
- length: 0,
- toArray: function() {
- return slice.call( this );
- },
-
-
- get: function( num ) {
- return num != null ?
-
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- slice.call( this );
- },
-
-
- pushStack: function( elems ) {
-
- var ret = jQuery.merge( this.constructor(), elems );
-
- ret.prevObject = this;
- ret.context = this.context;
-
- return ret;
- },
-
-
-
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
- first: function() {
- return this.eq( 0 );
- },
- last: function() {
- return this.eq( -1 );
- },
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
-
- push: push,
- sort: deletedIds.sort,
- splice: deletedIds.splice
- };
- jQuery.extend = jQuery.fn.extend = function() {
- var src, copyIsArray, copy, name, options, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- if ( typeof target === "boolean" ) {
- deep = target;
-
- target = arguments[ i ] || {};
- i++;
- }
-
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- if ( i === length ) {
- target = this;
- i--;
- }
- for ( ; i < length; i++ ) {
-
- if ( (options = arguments[ i ]) != null ) {
-
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- if ( target === copy ) {
- continue;
- }
-
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- return target;
- };
- jQuery.extend({
-
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- isReady: true,
- error: function( msg ) {
- throw new Error( msg );
- },
- noop: function() {},
-
-
-
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
- isWindow: function( obj ) {
-
- return obj != null && obj == obj.window;
- },
- isNumeric: function( obj ) {
-
-
-
- return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
- },
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
- isPlainObject: function( obj ) {
- var key;
-
-
-
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
- try {
-
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
-
- return false;
- }
-
-
- if ( support.ownLast ) {
- for ( key in obj ) {
- return hasOwn.call( obj, key );
- }
- }
-
-
- for ( key in obj ) {}
- return key === undefined || hasOwn.call( obj, key );
- },
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call(obj) ] || "object" :
- typeof obj;
- },
-
-
-
- globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
-
-
-
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
-
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- each: function( obj, callback, args ) {
- var value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
- if ( value === false ) {
- break;
- }
- }
- }
-
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
- if ( value === false ) {
- break;
- }
- }
- }
- }
- return obj;
- },
-
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- makeArray: function( arr, results ) {
- var ret = results || [];
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
- return ret;
- },
- inArray: function( elem, arr, i ) {
- var len;
- if ( arr ) {
- if ( indexOf ) {
- return indexOf.call( arr, elem, i );
- }
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
- for ( ; i < len; i++ ) {
-
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
- return -1;
- },
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
- while ( j < len ) {
- first[ i++ ] = second[ j++ ];
- }
-
-
- if ( len !== len ) {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
- first.length = i;
- return first;
- },
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
-
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
- return matches;
- },
-
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- return concat.apply( [], ret );
- },
-
- guid: 1,
-
-
- proxy: function( fn, context ) {
- var args, proxy, tmp;
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
-
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
- return proxy;
- },
- now: function() {
- return +( new Date() );
- },
-
-
- support: support
- });
- jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
- });
- function isArraylike( obj ) {
- var length = obj.length,
- type = jQuery.type( obj );
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
- }
- var Sizzle =
- * Sizzle CSS Selector Engine v1.10.19
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-04-18
- */
- (function( window ) {
- var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- expando = "sizzle" + -(new Date()),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- strundefined = typeof undefined,
- MAX_NEGATIVE = 1 << 31,
-
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
-
- indexOf = arr.indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-
- whitespace = "[\\x20\\t\\r\\n\\f]",
-
- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
-
-
- identifier = characterEncoding.replace( "w", "w#" ),
-
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
-
- "*([*^$|!~]?=)" + whitespace +
-
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
- pseudos = ":(" + characterEncoding + ")(?:\\((" +
-
-
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-
- ".*" +
- ")\\)|)",
-
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-
-
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
- rnative = /^[^{]+\{\s*\[native \w/,
-
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
-
-
-
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
-
- String.fromCharCode( high + 0x10000 ) :
-
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- };
- try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
-
-
- arr[ preferredDoc.childNodes.length ].nodeType;
- } catch ( e ) {
- push = { apply: arr.length ?
-
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
-
- function( target, els ) {
- var j = target.length,
- i = 0;
-
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
- }
- function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
-
- i, groups, old, nid, newContext, newSelector;
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
- context = context || document;
- results = results || [];
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
- }
- if ( documentIsHTML && !seed ) {
-
- if ( (match = rquickExpr.exec( selector )) ) {
-
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
-
-
- if ( elem && elem.parentNode ) {
-
-
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
-
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- nid = old = expando;
- newContext = context;
- newSelector = nodeType === 9 && selector;
-
-
-
-
- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
- newSelector = groups.join(",");
- }
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
- }
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
- function createCache() {
- var keys = [];
- function cache( key, value ) {
-
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
-
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
- }
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
- function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
- }
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
- function assert( fn ) {
- var div = document.createElement("div");
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
-
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
-
- div = null;
- }
- }
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
- function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = attrs.length;
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
- }
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
- function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- if ( diff ) {
- return diff;
- }
-
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
- return a ? 1 : -1;
- }
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
- function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
- }
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
- function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
- }
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
- function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
- }
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
- function testContext( context ) {
- return context && typeof context.getElementsByTagName !== strundefined && context;
- }
- support = Sizzle.support = {};
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
- isXML = Sizzle.isXML = function( elem ) {
-
-
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
- };
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
- setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare,
- doc = node ? node.ownerDocument || node : preferredDoc,
- parent = doc.defaultView;
-
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- document = doc;
- docElem = doc.documentElement;
-
- documentIsHTML = !isXML( doc );
-
-
-
-
- if ( parent && parent !== parent.top ) {
-
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", function() {
- setDocument();
- }, false );
- } else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", function() {
- setDocument();
- });
- }
- }
-
- ---------------------------------------------------------------------- */
-
-
- support.attributes = assert(function( div ) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- ---------------------------------------------------------------------- */
-
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
- div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
-
- div.firstChild.className = "i";
-
-
- return div.getElementsByClassName("i").length === 2;
- });
-
-
-
-
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
- });
-
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
- var m = context.getElementById( id );
-
-
- return m && m.parentNode ? [ m ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
-
-
- delete Expr.find["ID"];
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- results = context.getElementsByTagName( tag );
-
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
- return tmp;
- }
- return results;
- };
-
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- ---------------------------------------------------------------------- */
-
-
- rbuggyMatches = [];
-
-
-
-
-
- rbuggyQSA = [];
- if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
-
-
- assert(function( div ) {
-
-
-
-
-
- div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
-
-
-
-
- if ( div.querySelectorAll("[msallowclip^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
-
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
-
-
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
- assert(function( div ) {
-
-
- var input = doc.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "name", "D" );
-
-
- if ( div.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
-
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
- assert(function( div ) {
-
-
- support.disconnectedMatch = matches.call( div, "div" );
-
-
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
-
-
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- ---------------------------------------------------------------------- */
-
- sortOrder = hasCompare ?
- function( a, b ) {
-
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- 1;
-
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- return sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
- }
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
-
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
-
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- while ( ap[i] === bp[i] ) {
- i++;
- }
- return i ?
-
- siblingCheck( ap[i], bp[i] ) :
-
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
- return doc;
- };
- Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
- };
- Sizzle.matchesSelector = function( elem, expr ) {
-
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- expr = expr.replace( rattributeQuotes, "='$1']" );
- if ( support.matchesSelector && documentIsHTML &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
- try {
- var ret = matches.call( elem, expr );
-
- if ( ret || support.disconnectedMatch ||
-
-
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
- };
- Sizzle.contains = function( context, elem ) {
-
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
- };
- Sizzle.attr = function( elem, name ) {
-
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
- var fn = Expr.attrHandle[ name.toLowerCase() ],
-
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
- };
- Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
- };
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
- Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
-
- sortInput = null;
- return results;
- };
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
- getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
- if ( !nodeType ) {
-
- while ( (node = elem[i++]) ) {
-
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-
-
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
-
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
-
- return ret;
- };
- Expr = Sizzle.selectors = {
-
- cacheLength: 50,
- createPseudo: markFunction,
- match: matchExpr,
- attrHandle: {},
- find: {},
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
- return match.slice( 0, 4 );
- },
- "CHILD": function( match ) {
-
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
- if ( match[1].slice( 0, 3 ) === "nth" ) {
-
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
-
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
- return match;
- },
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- } else if ( unquoted && rpseudo.test( unquoted ) &&
-
- (excess = tokenize( unquoted, true )) &&
-
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- return match.slice( 0, 3 );
- }
- },
- filter: {
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
- });
- },
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
- result += "";
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
- return first === 1 && last === 0 ?
-
- function( elem ) {
- return !!elem.parentNode;
- } :
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
- if ( parent ) {
-
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
-
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- if ( forward && useCache ) {
-
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- } else {
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
-
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
- "PSEUDO": function( pseudo, argument ) {
-
-
-
-
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
-
-
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
- return fn;
- }
- },
- pseudos: {
-
- "not": markFunction(function( selector ) {
-
-
-
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
-
-
-
-
-
-
- "lang": markFunction( function( lang ) {
-
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
- "root": function( elem ) {
- return elem === docElem;
- },
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
- "checked": function( elem ) {
-
-
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
- "selected": function( elem ) {
-
-
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
- return elem.selected === true;
- },
-
- "empty": function( elem ) {
-
-
-
-
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
-
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
- };
- Expr.pseudos["nth"] = Expr.pseudos["eq"];
- for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
- }
- for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
- }
- function setFilters() {}
- setFilters.prototype = Expr.filters = Expr.pseudos;
- Expr.setFilters = new setFilters();
- tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
- while ( soFar ) {
-
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
-
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
- matched = false;
-
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
-
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
- if ( !matched ) {
- break;
- }
- }
-
-
-
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
-
- tokenCache( selector, groups ).slice( 0 );
- };
- function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
- }
- function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
- return combinator.first ?
-
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- function( elem, context, xml ) {
- var oldCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (oldCache = outerCache[ dir ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
-
- outerCache[ dir ] = newCache;
-
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
- }
- function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
- }
- function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
- }
- function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
- return newUnmatched;
- }
- function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
- matcherOut = matcher ?
-
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- [] :
-
- results :
- matcherIn;
-
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
-
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
-
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
- }
- function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- if ( matcher[ expando ] ) {
-
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
-
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
- return elementMatcher( matchers );
- }
- function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
-
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
-
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
- if ( outermost ) {
- outermostContext = context !== document && context;
- }
-
-
-
-
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- if ( bySet ) {
-
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
- if ( seed ) {
-
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- setMatched = condense( setMatched );
- }
-
- push.apply( results, setMatched );
-
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
- Sizzle.uniqueSort( results );
- }
- }
-
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
- return unmatched;
- };
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
- }
- compile = Sizzle.compile = function( selector, match ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
- if ( !cached ) {
-
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- cached.selector = selector;
- }
- return cached;
- };
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
- select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
- results = results || [];
-
- if ( match.length === 1 ) {
-
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- } else if ( compiled ) {
- context = context.parentNode;
- }
- selector = selector.slice( tokens.shift().value.length );
- }
-
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
-
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
- break;
- }
- }
- }
- }
-
-
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
- };
- support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
- support.detectDuplicates = !!hasDuplicate;
- setDocument();
- support.sortDetached = assert(function( div1 ) {
-
- return div1.compareDocumentPosition( document.createElement("div") ) & 1;
- });
- if ( !assert(function( div ) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild.getAttribute("href") === "#" ;
- }) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
- }
- if ( !support.attributes || !assert(function( div ) {
- div.innerHTML = "<input/>";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
- }) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
- }
- if ( !assert(function( div ) {
- return div.getAttribute("disabled") == null;
- }) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
- }
- return Sizzle;
- })( window );
- jQuery.find = Sizzle;
- jQuery.expr = Sizzle.selectors;
- jQuery.expr[":"] = jQuery.expr.pseudos;
- jQuery.unique = Sizzle.uniqueSort;
- jQuery.text = Sizzle.getText;
- jQuery.isXMLDoc = Sizzle.isXML;
- jQuery.contains = Sizzle.contains;
- var rneedsContext = jQuery.expr.match.needsContext;
- var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
- var risSimple = /^.[^:#\[\.,]*$/;
- function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
-
- return !!qualifier.call( elem, i, elem ) !== not;
- });
- }
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- });
- }
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
- qualifier = jQuery.filter( qualifier, elements );
- }
- return jQuery.grep( elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
- });
- }
- jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- }));
- };
- jQuery.fn.extend({
- find: function( selector ) {
- var i,
- ret = [],
- self = this,
- len = self.length;
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector || [], false) );
- },
- not: function( selector ) {
- return this.pushStack( winnow(this, selector || [], true) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
-
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
- });
- var rootjQuery,
-
- document = window.document,
-
-
-
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
- init = jQuery.fn.init = function( selector, context ) {
- var match, elem;
-
- if ( !selector ) {
- return this;
- }
-
- if ( typeof selector === "string" ) {
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-
- match = [ null, selector, null ];
- } else {
- match = rquickExpr.exec( selector );
- }
-
- if ( match && (match[1] || !context) ) {
-
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
-
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
-
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
- return this;
-
- } else {
- elem = document.getElementById( match[2] );
-
-
- if ( elem && elem.parentNode ) {
-
-
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- this.length = 1;
- this[0] = elem;
- }
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
-
- } else {
- return this.constructor( context ).find( selector );
- }
-
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
-
- } else if ( jQuery.isFunction( selector ) ) {
- return typeof rootjQuery.ready !== "undefined" ?
- rootjQuery.ready( selector ) :
-
- selector( jQuery );
- }
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
- return jQuery.makeArray( selector, this );
- };
- init.prototype = jQuery.fn;
- rootjQuery = jQuery( document );
- var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
- jQuery.extend({
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
- sibling: function( n, elem ) {
- var r = [];
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
- return r;
- }
- });
- jQuery.fn.extend({
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
- return this.filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
- for ( ; i < l; i++ ) {
- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
-
- if ( cur.nodeType < 11 && (pos ?
- pos.index(cur) > -1 :
-
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector(cur, selectors)) ) {
- matched.push( cur );
- break;
- }
- }
- }
- return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
- },
-
-
- index: function( elem ) {
-
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- return jQuery.inArray(
-
- elem.jquery ? elem[0] : elem, this );
- },
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.unique(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
- });
- function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
- return cur;
- }
- jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
- }, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
- if ( this.length > 1 ) {
-
- if ( !guaranteedUnique[ name ] ) {
- ret = jQuery.unique( ret );
- }
-
- if ( rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
- }
- return this.pushStack( ret );
- };
- });
- var rnotwhite = (/\S+/g);
- var optionsCache = {};
- function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
- }
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
- jQuery.Callbacks = function( options ) {
-
-
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
- var
- firing,
-
- memory,
-
- fired,
-
- firingLength,
-
- firingIndex,
-
- firingStart,
-
- list = [],
-
- stack = !options.once && [],
-
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false;
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
-
- self = {
-
- add: function() {
- if ( list ) {
-
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
-
- add( arg );
- }
- });
- })( arguments );
-
-
- if ( firing ) {
- firingLength = list.length;
-
-
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
-
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
-
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
-
-
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
-
- empty: function() {
- list = [];
- firingLength = 0;
- return this;
- },
-
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
-
- disabled: function() {
- return !list;
- },
-
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
-
- locked: function() {
- return !stack;
- },
-
- fireWith: function( context, args ) {
- if ( list && ( !fired || stack ) ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
-
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
-
- fired: function() {
- return !!fired;
- }
- };
- return self;
- };
- jQuery.extend({
- Deferred: function( func ) {
- var tuples = [
-
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- fns = null;
- }).promise();
- },
-
-
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- promise.pipe = promise.then;
-
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- promise[ tuple[1] ] = list.add;
-
- if ( stateString ) {
- list.add(function() {
-
- state = stateString;
-
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- promise.promise( deferred );
-
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- return deferred;
- },
-
- when: function( subordinate ) {
- var i = 0,
- resolveValues = slice.call( arguments ),
- length = resolveValues.length,
-
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( values === progressValues ) {
- deferred.notifyWith( contexts, values );
- } else if ( !(--remaining) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
- progressValues, progressContexts, resolveContexts;
-
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
- return deferred.promise();
- }
- });
- var readyList;
- jQuery.fn.ready = function( fn ) {
-
- jQuery.ready.promise().done( fn );
- return this;
- };
- jQuery.extend({
-
- isReady: false,
-
-
- readyWait: 1,
-
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- ready: function( wait ) {
-
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- if ( !document.body ) {
- return setTimeout( jQuery.ready );
- }
-
- jQuery.isReady = true;
-
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- readyList.resolveWith( document, [ jQuery ] );
-
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- jQuery( document ).off( "ready" );
- }
- }
- });
- * Clean-up method for dom ready events
- */
- function detach() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
- } else {
- document.detachEvent( "onreadystatechange", completed );
- window.detachEvent( "onload", completed );
- }
- }
- * The ready event handler and self cleanup method
- */
- function completed() {
-
- if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
- detach();
- jQuery.ready();
- }
- }
- jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
- readyList = jQuery.Deferred();
-
-
-
- if ( document.readyState === "complete" ) {
-
- setTimeout( jQuery.ready );
-
- } else if ( document.addEventListener ) {
-
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- window.addEventListener( "load", completed, false );
-
- } else {
-
- document.attachEvent( "onreadystatechange", completed );
-
- window.attachEvent( "onload", completed );
-
-
- var top = false;
- try {
- top = window.frameElement == null && document.documentElement;
- } catch(e) {}
- if ( top && top.doScroll ) {
- (function doScrollCheck() {
- if ( !jQuery.isReady ) {
- try {
-
-
- top.doScroll("left");
- } catch(e) {
- return setTimeout( doScrollCheck, 50 );
- }
-
- detach();
-
- jQuery.ready();
- }
- })();
- }
- }
- }
- return readyList.promise( obj );
- };
- var strundefined = typeof undefined;
- var i;
- for ( i in jQuery( support ) ) {
- break;
- }
- support.ownLast = i !== "0";
- support.inlineBlockNeedsLayout = false;
- jQuery(function() {
-
- var val, div, body, container;
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
-
- return;
- }
-
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
- if ( typeof div.style.zoom !== strundefined ) {
-
-
-
-
- div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
- support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
- if ( val ) {
-
-
-
- body.style.zoom = 1;
- }
- }
- body.removeChild( container );
- });
- (function() {
- var div = document.createElement( "div" );
-
- if (support.deleteExpando == null) {
-
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
-
- div = null;
- })();
- * Determines whether an object can have data
- */
- jQuery.acceptData = function( elem ) {
- var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
- nodeType = +elem.nodeType || 1;
-
- return nodeType !== 1 && nodeType !== 9 ?
- false :
-
- !noData || noData !== true && elem.getAttribute("classid") === noData;
- };
- var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /([A-Z])/g;
- function dataAttr( elem, key, data ) {
-
-
- if ( data === undefined && elem.nodeType === 1 ) {
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
- data = elem.getAttribute( name );
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
-
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- jQuery.data( elem, key, data );
- } else {
- data = undefined;
- }
- }
- return data;
- }
- function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
- return true;
- }
- function internalData( elem, name, data, pvt ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
- var ret, thisCache,
- internalKey = jQuery.expando,
-
-
- isNode = elem.nodeType,
-
-
- cache = isNode ? jQuery.cache : elem,
-
-
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
-
- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
- return;
- }
- if ( !id ) {
-
-
- if ( isNode ) {
- id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
- if ( !cache[ id ] ) {
-
-
- cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
- }
-
-
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
- thisCache = cache[ id ];
-
-
-
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
- thisCache = thisCache.data;
- }
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
-
- if ( typeof name === "string" ) {
-
- ret = thisCache[ name ];
-
- if ( ret == null ) {
-
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
- return ret;
- }
- function internalRemoveData( elem, name, pvt ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
- var thisCache, i,
- isNode = elem.nodeType,
-
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-
- if ( !cache[ id ] ) {
- return;
- }
- if ( name ) {
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
- if ( thisCache ) {
-
- if ( !jQuery.isArray( name ) ) {
-
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split(" ");
- }
- }
- } else {
-
-
-
-
-
-
- name = name.concat( jQuery.map( name, jQuery.camelCase ) );
- }
- i = name.length;
- while ( i-- ) {
- delete thisCache[ name[i] ];
- }
-
-
- if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
- return;
- }
- }
- }
-
- if ( !pvt ) {
- delete cache[ id ].data;
-
-
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
-
- } else if ( support.deleteExpando || cache != cache.window ) {
-
- delete cache[ id ];
-
- } else {
- cache[ id ] = null;
- }
- }
- jQuery.extend({
- cache: {},
-
-
- noData: {
- "applet ": true,
- "embed ": true,
-
- "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- },
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
- data: function( elem, name, data ) {
- return internalData( elem, name, data );
- },
- removeData: function( elem, name ) {
- return internalRemoveData( elem, name );
- },
-
- _data: function( elem, name, data ) {
- return internalData( elem, name, data, true );
- },
- _removeData: function( elem, name ) {
- return internalRemoveData( elem, name, true );
- }
- });
- jQuery.fn.extend({
- data: function( key, value ) {
- var i, name, data,
- elem = this[0],
- attrs = elem && elem.attributes;
-
-
-
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
-
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice(5) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
- return data;
- }
-
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
- return arguments.length > 1 ?
-
- this.each(function() {
- jQuery.data( this, key, value );
- }) :
-
-
- elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
- },
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
- });
- jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- if ( data ) {
- if ( !queue || jQuery.isArray(data) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
- dequeue: function( elem, type ) {
- type = type || "fx";
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
- if ( fn ) {
-
-
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- jQuery._removeData( elem, type + "queue" );
- jQuery._removeData( elem, key );
- })
- });
- }
- });
- jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- jQuery._queueHooks( this, type );
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
-
-
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
- while ( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
- });
- var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
- var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
- var isHidden = function( elem, el ) {
-
-
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
- };
- var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- length = elems.length,
- bulk = key == null;
-
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- } else if ( value !== undefined ) {
- chainable = true;
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
- if ( bulk ) {
-
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
- if ( fn ) {
- for ( ; i < length; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
- return chainable ?
- elems :
-
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
- };
- var rcheckableType = (/^(?:checkbox|radio)$/i);
- (function() {
-
- var input = document.createElement( "input" ),
- div = document.createElement( "div" ),
- fragment = document.createDocumentFragment();
-
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
- support.leadingWhitespace = div.firstChild.nodeType === 3;
-
-
- support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
-
- support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
-
- support.html5Clone =
- document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
-
- input.type = "checkbox";
- input.checked = true;
- fragment.appendChild( input );
- support.appendChecked = input.checked;
-
-
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
- fragment.appendChild( div );
- div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
-
-
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-
-
- support.noCloneEvent = true;
- if ( div.attachEvent ) {
- div.attachEvent( "onclick", function() {
- support.noCloneEvent = false;
- });
- div.cloneNode( true ).click();
- }
-
- if (support.deleteExpando == null) {
-
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
- })();
- (function() {
- var i, eventName,
- div = document.createElement( "div" );
-
- for ( i in { submit: true, change: true, focusin: true }) {
- eventName = "on" + i;
- if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
-
- div.setAttribute( eventName, "t" );
- support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
- }
- }
-
- div = null;
- })();
- var rformElems = /^(?:input|select|textarea)$/i,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
- function returnTrue() {
- return true;
- }
- function returnFalse() {
- return false;
- }
- function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
- }
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
- jQuery.event = {
- global: {},
- add: function( elem, types, handler, data, selector ) {
- var tmp, events, t, handleObjIn,
- special, eventHandle, handleObj,
- handlers, type, namespaces, origType,
- elemData = jQuery._data( elem );
-
- if ( !elemData ) {
- return;
- }
-
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
-
-
- return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
-
- eventHandle.elem = elem;
- }
-
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- if ( !type ) {
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
-
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- special = jQuery.event.special[ type ] || {};
-
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
- if ( special.add ) {
- special.add.call( elem, handleObj );
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- jQuery.event.global[ type ] = true;
- }
-
- elem = null;
- },
-
- remove: function( elem, types, handler, selector, mappedTypes ) {
- var j, handleObj, tmp,
- origCount, t, events,
- special, handlers, type,
- namespaces, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
-
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
- delete events[ type ];
- }
- }
-
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
-
- jQuery._removeData( elem, "events" );
- }
- },
- trigger: function( event, data, elem, onlyHandlers ) {
- var handle, ontype, cur,
- bubbleType, special, tmp, i,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
- cur = tmp = elem = elem || document;
-
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
- if ( type.indexOf(".") >= 0 ) {
-
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
-
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
- jQuery.acceptData( elem ) ) {
-
-
-
- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
- tmp = elem[ ontype ];
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- jQuery.event.triggered = type;
- try {
- elem[ type ]();
- } catch ( e ) {
-
-
- }
- jQuery.event.triggered = undefined;
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
- return event.result;
- },
- dispatch: function( event ) {
-
- event = jQuery.event.fix( event );
- var i, ret, handleObj, matched, j,
- handlerQueue = [],
- args = slice.call( arguments ),
- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- args[0] = event;
- event.delegateTarget = this;
-
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
-
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
- event.handleObj = handleObj;
- event.data = handleObj.data;
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
- return event.result;
- },
- handlers: function( event, handlers ) {
- var sel, handleObj, matches, i,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
-
-
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- for ( ; cur != this; cur = cur.parentNode || this ) {
-
-
-
- if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- sel = handleObj.selector + " ";
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
- return handlerQueue;
- },
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
- event = new jQuery.Event( originalEvent );
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
-
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
-
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
-
- event.metaKey = !!event.metaKey;
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
- fixHooks: {},
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
- return event;
- }
- },
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var body, eventDoc, doc,
- button = original.button,
- fromElement = original.fromElement;
-
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
-
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
- return event;
- }
- },
- special: {
- load: {
-
- noBubble: true
- },
- focus: {
-
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- try {
- this.focus();
- return false;
- } catch ( e ) {
-
-
-
- }
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
-
- trigger: function() {
- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
- this.click();
- return false;
- }
- },
-
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
- beforeunload: {
- postDispatch: function( event ) {
-
-
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
- simulate: function( type, elem, event, bubble ) {
-
-
-
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
- };
- jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
- if ( elem.detachEvent ) {
-
-
- if ( typeof elem[ name ] === strundefined ) {
- elem[ name ] = null;
- }
- elem.detachEvent( name, handle );
- }
- };
- jQuery.Event = function( src, props ) {
-
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
-
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
-
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- } else {
- this.type = src;
- }
-
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- this[ jQuery.expando ] = true;
- };
- jQuery.Event.prototype = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
- preventDefault: function() {
- var e = this.originalEvent;
- this.isDefaultPrevented = returnTrue;
- if ( !e ) {
- return;
- }
-
- if ( e.preventDefault ) {
- e.preventDefault();
-
-
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
- this.isPropagationStopped = returnTrue;
- if ( !e ) {
- return;
- }
-
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
-
-
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
- this.isImmediatePropagationStopped = returnTrue;
- if ( e && e.stopImmediatePropagation ) {
- e.stopImmediatePropagation();
- }
- this.stopPropagation();
- }
- };
- jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
- }, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
-
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
- });
- if ( !support.submitBubbles ) {
- jQuery.event.special.submit = {
- setup: function() {
-
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !jQuery._data( form, "submitBubbles" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- jQuery._data( form, "submitBubbles", true );
- }
- });
-
- },
- postDispatch: function( event ) {
-
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
- teardown: function() {
-
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- jQuery.event.remove( this, "._submit" );
- }
- };
- }
- if ( !support.changeBubbles ) {
- jQuery.event.special.change = {
- setup: function() {
- if ( rformElems.test( this.nodeName ) ) {
-
-
-
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- }
-
- jQuery.event.simulate( "change", this, event, true );
- });
- }
- return false;
- }
-
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- jQuery._data( elem, "changeBubbles", true );
- }
- });
- },
- handle: function( event ) {
- var elem = event.target;
-
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
- teardown: function() {
- jQuery.event.remove( this, "._change" );
- return !rformElems.test( this.nodeName );
- }
- };
- }
- if ( !support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix );
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix ) - 1;
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- jQuery._removeData( doc, fix );
- } else {
- jQuery._data( doc, fix, attaches );
- }
- }
- };
- });
- }
- jQuery.fn.extend({
- on: function( types, selector, data, fn, one ) {
- var type, origFn;
-
- if ( typeof types === "object" ) {
-
- if ( typeof selector !== "string" ) {
-
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
- if ( data == null && fn == null ) {
-
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
-
- fn = data;
- data = undefined;
- } else {
-
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
-
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
-
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
-
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
-
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
-
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
- });
- function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
- }
- var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
-
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- area: [ 1, "<map>", "</map>" ],
- param: [ 1, "<object>", "</object>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-
- _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
- },
- safeFragment = createSafeFragment( document ),
- fragmentDiv = safeFragment.appendChild( document.createElement("div") );
- wrapMap.optgroup = wrapMap.option;
- wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
- wrapMap.th = wrapMap.td;
- function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
- undefined;
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
- }
- function fixDefaultChecked( elem ) {
- if ( rcheckableType.test( elem.type ) ) {
- elem.defaultChecked = elem.checked;
- }
- }
- function manipulationTarget( elem, content ) {
- return jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
- elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
- elem;
- }
- function disableScript( elem ) {
- elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
- return elem;
- }
- function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
- if ( match ) {
- elem.type = match[1];
- } else {
- elem.removeAttribute("type");
- }
- return elem;
- }
- function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; (elem = elems[i]) != null; i++ ) {
- jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
- }
- }
- function cloneCopyEvent( src, dest ) {
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
- if ( events ) {
- delete curData.handle;
- curData.events = {};
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
- }
- function fixCloneNodeIssues( src, dest ) {
- var nodeName, e, data;
-
- if ( dest.nodeType !== 1 ) {
- return;
- }
- nodeName = dest.nodeName.toLowerCase();
-
- if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
- data = jQuery._data( dest );
- for ( e in data.events ) {
- jQuery.removeEvent( dest, e, data.handle );
- }
-
- dest.removeAttribute( jQuery.expando );
- }
-
- if ( nodeName === "script" && dest.text !== src.text ) {
- disableScript( dest ).text = src.text;
- restoreScript( dest );
-
-
- } else if ( nodeName === "object" ) {
- if ( dest.parentNode ) {
- dest.outerHTML = src.outerHTML;
- }
-
-
-
-
- if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
- dest.innerHTML = src.innerHTML;
- }
- } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-
-
-
- dest.defaultChecked = dest.checked = src.checked;
-
-
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
-
- } else if ( nodeName === "option" ) {
- dest.defaultSelected = dest.selected = src.defaultSelected;
-
-
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
- }
- jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var destElements, node, clone, i, srcElements,
- inPage = jQuery.contains( elem.ownerDocument, elem );
- if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
- clone = elem.cloneNode( true );
-
- } else {
- fragmentDiv.innerHTML = elem.outerHTML;
- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
- }
- if ( (!support.noCloneEvent || !support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- for ( i = 0; (node = srcElements[i]) != null; ++i ) {
-
- if ( destElements[i] ) {
- fixCloneNodeIssues( node, destElements[i] );
- }
- }
- }
-
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
- for ( i = 0; (node = srcElements[i]) != null; i++ ) {
- cloneCopyEvent( node, destElements[i] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
- destElements = srcElements = node = null;
-
- return clone;
- },
- buildFragment: function( elems, context, scripts, selection ) {
- var j, elem, contains,
- tmp, tag, tbody, wrap,
- l = elems.length,
-
- safe = createSafeFragment( context ),
- nodes = [],
- i = 0;
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
- if ( elem || elem === 0 ) {
-
- if ( jQuery.type( elem ) === "object" ) {
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- } else {
- tmp = tmp || safe.appendChild( context.createElement("div") );
-
- tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
- j = wrap[0];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
- }
-
- if ( !support.tbody ) {
-
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- wrap[1] === "<table>" && !rtbody.test( elem ) ?
- tmp :
- 0;
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
- elem.removeChild( tbody );
- }
- }
- }
- jQuery.merge( nodes, tmp.childNodes );
-
- tmp.textContent = "";
-
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- tmp = safe.lastChild;
- }
- }
- }
-
- if ( tmp ) {
- safe.removeChild( tmp );
- }
-
-
- if ( !support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
- }
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
-
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
- tmp = null;
- return safe;
- },
- cleanData: function( elems, acceptData ) {
- var elem, type, id, data,
- i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
- deleteExpando = support.deleteExpando,
- special = jQuery.event.special;
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( acceptData || jQuery.acceptData( elem ) ) {
- id = elem[ internalKey ];
- data = id && cache[ id ];
- if ( data ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- if ( cache[ id ] ) {
- delete cache[ id ];
-
-
-
- if ( deleteExpando ) {
- delete elem[ internalKey ];
- } else if ( typeof elem.removeAttribute !== strundefined ) {
- elem.removeAttribute( internalKey );
- } else {
- elem[ internalKey ] = null;
- }
- deletedIds.push( id );
- }
- }
- }
- }
- }
- });
- jQuery.fn.extend({
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
- append: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- });
- },
- prepend: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- });
- },
- before: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
- after: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
- remove: function( selector, keepData ) {
- var elem,
- elems = selector ? jQuery.filter( selector, this ) : this,
- i = 0;
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
- return this;
- },
- empty: function() {
- var elem,
- i = 0;
- for ( ; (elem = this[i]) != null; i++ ) {
-
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- }
-
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
-
-
- if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
- elem.options.length = 0;
- }
- }
- return this;
- },
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
- return this.map(function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- undefined;
- }
-
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( support.htmlSerialize || !rnoshimcache.test( value ) ) &&
- ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
- value = value.replace( rxhtmlTag, "<$1></$2>" );
- try {
- for (; i < l; i++ ) {
-
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
- elem = 0;
-
- } catch(e) {}
- }
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
- replaceWith: function() {
- var arg = arguments[ 0 ];
-
- this.domManip( arguments, function( elem ) {
- arg = this.parentNode;
- jQuery.cleanData( getAll( this ) );
- if ( arg ) {
- arg.replaceChild( elem, this );
- }
- });
-
- return arg && (arg.length || arg.nodeType) ? this : this.remove();
- },
- detach: function( selector ) {
- return this.remove( selector, true );
- },
- domManip: function( args, callback ) {
-
- args = concat.apply( [], args );
- var first, node, hasScripts,
- scripts, doc, fragment,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[0],
- isFunction = jQuery.isFunction( value );
-
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[0] = value.call( this, index, self.html() );
- }
- self.domManip( args, callback );
- });
- }
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
- first = fragment.firstChild;
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
- if ( first ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
-
- for ( ; i < l; i++ ) {
- node = fragment;
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- if ( hasScripts ) {
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
- callback.call( this[i], node, i );
- }
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- jQuery.map( scripts, restoreScript );
-
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
- if ( node.src ) {
-
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
- }
- }
- }
- }
-
- fragment = first = null;
- }
- }
- return this;
- }
- });
- jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
- }, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- i = 0,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1;
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone(true);
- jQuery( insert[i] )[ original ]( elems );
-
- push.apply( ret, elems.get() );
- }
- return this.pushStack( ret );
- };
- });
- var iframe,
- elemdisplay = {};
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
- function actualDisplay( name, doc ) {
- var style,
- elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
- display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
-
- style.display : jQuery.css( elem[ 0 ], "display" );
-
-
- elem.detach();
- return display;
- }
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
- function defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- if ( display === "none" || !display ) {
-
- iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
-
- doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
-
- doc.write();
- doc.close();
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- elemdisplay[ nodeName ] = display;
- }
- return display;
- }
- (function() {
- var shrinkWrapBlocksVal;
- support.shrinkWrapBlocks = function() {
- if ( shrinkWrapBlocksVal != null ) {
- return shrinkWrapBlocksVal;
- }
-
- shrinkWrapBlocksVal = false;
-
- var div, body, container;
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
-
- return;
- }
-
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
-
- if ( typeof div.style.zoom !== strundefined ) {
-
- div.style.cssText =
-
-
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;" +
- "padding:1px;width:1px;zoom:1";
- div.appendChild( document.createElement( "div" ) ).style.width = "5px";
- shrinkWrapBlocksVal = div.offsetWidth !== 3;
- }
- body.removeChild( container );
- return shrinkWrapBlocksVal;
- };
- })();
- var rmargin = (/^margin/);
- var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
- var getStyles, curCSS,
- rposition = /^(top|right|bottom|left)$/;
- if ( window.getComputedStyle ) {
- getStyles = function( elem ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
- };
- curCSS = function( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
- computed = computed || getStyles( elem );
-
- ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
- if ( computed ) {
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
-
-
-
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
-
- return ret === undefined ?
- ret :
- ret + "";
- };
- } else if ( document.documentElement.currentStyle ) {
- getStyles = function( elem ) {
- return elem.currentStyle;
- };
- curCSS = function( elem, name, computed ) {
- var left, rs, rsLeft, ret,
- style = elem.style;
- computed = computed || getStyles( elem );
- ret = computed ? computed[ name ] : undefined;
-
-
- if ( ret == null && style && style[ name ] ) {
- ret = style[ name ];
- }
-
-
-
-
-
-
- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
- left = style.left;
- rs = elem.runtimeStyle;
- rsLeft = rs && rs.left;
-
- if ( rsLeft ) {
- rs.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- style.left = left;
- if ( rsLeft ) {
- rs.left = rsLeft;
- }
- }
-
-
- return ret === undefined ?
- ret :
- ret + "" || "auto";
- };
- }
- function addGetHookIf( conditionFn, hookFn ) {
-
- return {
- get: function() {
- var condition = conditionFn();
- if ( condition == null ) {
-
-
- return;
- }
- if ( condition ) {
-
-
-
- delete this.get;
- return;
- }
-
- return (this.get = hookFn).apply( this, arguments );
- }
- };
- }
- (function() {
-
- var div, style, a, pixelPositionVal, boxSizingReliableVal,
- reliableHiddenOffsetsVal, reliableMarginRightVal;
-
- div = document.createElement( "div" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName( "a" )[ 0 ];
- style = a && a.style;
-
- if ( !style ) {
- return;
- }
- style.cssText = "float:left;opacity:.5";
-
-
- support.opacity = style.opacity === "0.5";
-
-
- support.cssFloat = !!style.cssFloat;
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-
- support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
- style.WebkitBoxSizing === "";
- jQuery.extend(support, {
- reliableHiddenOffsets: function() {
- if ( reliableHiddenOffsetsVal == null ) {
- computeStyleTests();
- }
- return reliableHiddenOffsetsVal;
- },
- boxSizingReliable: function() {
- if ( boxSizingReliableVal == null ) {
- computeStyleTests();
- }
- return boxSizingReliableVal;
- },
- pixelPosition: function() {
- if ( pixelPositionVal == null ) {
- computeStyleTests();
- }
- return pixelPositionVal;
- },
-
- reliableMarginRight: function() {
- if ( reliableMarginRightVal == null ) {
- computeStyleTests();
- }
- return reliableMarginRightVal;
- }
- });
- function computeStyleTests() {
-
- var div, body, container, contents;
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
-
- return;
- }
-
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
- div.style.cssText =
-
-
- "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
- "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
- "border:1px;padding:1px;width:4px;position:absolute";
-
-
- pixelPositionVal = boxSizingReliableVal = false;
- reliableMarginRightVal = true;
-
- if ( window.getComputedStyle ) {
- pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
- boxSizingReliableVal =
- ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
-
-
-
- contents = div.appendChild( document.createElement( "div" ) );
-
- contents.style.cssText = div.style.cssText =
-
-
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
- contents.style.marginRight = contents.style.width = "0";
- div.style.width = "1px";
- reliableMarginRightVal =
- !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
- }
-
-
-
-
-
-
-
- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
- contents = div.getElementsByTagName( "td" );
- contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- if ( reliableHiddenOffsetsVal ) {
- contents[ 0 ].style.display = "";
- contents[ 1 ].style.display = "none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- }
- body.removeChild( container );
- }
- })();
- jQuery.swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
- ret = callback.apply( elem, args || [] );
-
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
- return ret;
- };
- var
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity\s*=\s*([^)]*)/,
-
-
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
- function vendorPropName( style, name ) {
-
- if ( name in style ) {
- return name;
- }
-
- var capName = name.charAt(0).toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
- return origName;
- }
- function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- values[ index ] = jQuery._data( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
-
-
- if ( !values[ index ] && display === "none" ) {
- elem.style.display = "";
- }
-
-
-
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- } else {
- hidden = isHidden( elem );
- if ( display && display !== "none" || !hidden ) {
- jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
- }
- }
- }
-
-
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
- return elements;
- }
- function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
-
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
- }
- function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
-
- 4 :
-
- name === "width" ? 1 : 0,
- val = 0;
- for ( ; i < 4; i += 2 ) {
-
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
- if ( isBorderBox ) {
-
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
-
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
- return val;
- }
- function getWidthOrHeight( elem, name, extra ) {
-
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-
-
- if ( val <= 0 || val == null ) {
-
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
-
- valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- val = parseFloat( val ) || 0;
- }
-
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
- }
- jQuery.extend({
-
-
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
-
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
-
- cssProps: {
-
- "float": support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- style: function( elem, name, value, extra ) {
-
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
-
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- if ( value !== undefined ) {
- type = typeof value;
-
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
-
- type = "number";
- }
-
- if ( value == null || value !== value ) {
- return;
- }
-
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
-
- if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
- style[ name ] = "inherit";
- }
-
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
-
- try {
- style[ name ] = value;
- } catch(e) {}
- }
- } else {
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- return style[ name ];
- }
- },
- css: function( elem, name, extra, styles ) {
- var num, val, hooks,
- origName = jQuery.camelCase( name );
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
-
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- }
- });
- jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
-
-
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
- });
- if ( !support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
-
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
- computed ? "1" : "";
- },
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
-
- style.zoom = 1;
-
-
- if ( ( value >= 1 || value === "" ) &&
- jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
- style.removeAttribute ) {
-
-
-
- style.removeAttribute( "filter" );
-
- if ( value === "" || currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
- }
- jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
- function( elem, computed ) {
- if ( computed ) {
-
-
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
- );
- jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
- }, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- parts = typeof value === "string" ? value.split(" ") : [ value ];
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
- return expanded;
- }
- };
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
- });
- jQuery.fn.extend({
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
- return map;
- }
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
- return this.each(function() {
- if ( isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
- });
- function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
- }
- jQuery.Tween = Tween;
- Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
- };
- Tween.prototype.init.prototype = Tween.prototype;
- Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
-
-
-
- result = jQuery.css( tween.elem, tween.prop, "" );
-
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
-
-
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
- };
- Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- };
- jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- }
- };
- jQuery.fx = Tween.prototype.init;
- jQuery.fx.step = {};
- var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value ),
- target = tween.cur(),
- parts = rfxnum.exec( value ),
- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
- rfxnum.exec( jQuery.css( tween.elem, prop ) ),
- scale = 1,
- maxIterations = 20;
- if ( start && start[ 3 ] !== unit ) {
-
- unit = unit || start[ 3 ];
-
- parts = parts || [];
-
- start = +target || 1;
- do {
-
-
- scale = scale || ".5";
-
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
-
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- if ( parts ) {
- start = tween.start = +start || +target || 0;
- tween.unit = unit;
-
- tween.end = parts[ 1 ] ?
- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
- +parts[ 2 ];
- }
- return tween;
- } ]
- };
- function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
- }
- function genFx( type, includeWidth ) {
- var which,
- attrs = { height: type },
- i = 0;
-
-
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
- return attrs;
- }
- function createTween( value, prop, animation ) {
- var tween,
- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
- return tween;
- }
- }
- }
- function defaultPrefilter( elem, props, opts ) {
-
- var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden( elem ),
- dataShow = jQuery._data( elem, "fxshow" );
-
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
- anim.always(function() {
-
-
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
-
-
-
-
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-
- display = jQuery.css( elem, "display" );
-
- checkDisplay = display === "none" ?
- jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
- if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
-
- if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
- style.display = "inline-block";
- } else {
- style.zoom = 1;
- }
- }
- }
- if ( opts.overflow ) {
- style.overflow = "hidden";
- if ( !support.shrinkWrapBlocks() ) {
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
- }
-
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
- } else {
- display = undefined;
- }
- }
- if ( !jQuery.isEmptyObject( orig ) ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = jQuery._data( elem, "fxshow", {} );
- }
-
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
- jQuery._removeData( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( prop in orig ) {
- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
-
- } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
- style.display = display;
- }
- }
- function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
-
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
- }
- function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
-
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
-
-
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
-
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
- propFilter( props, animation.opts.specialEasing );
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
- jQuery.map( props, createTween, animation );
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
- }
- jQuery.Animation = jQuery.extend( Animation, {
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
- var prop,
- index = 0,
- length = props.length;
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
- });
- jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- opt.old = opt.complete;
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
- return opt;
- };
- jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
-
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- if ( empty || jQuery._data( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = jQuery._data( this );
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
-
-
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = jQuery._data( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- data.finish = true;
-
- jQuery.queue( this, type, [] );
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- delete data.finish;
- });
- }
- });
- jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
- });
- jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
- }, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
- });
- jQuery.timers = [];
- jQuery.fx.tick = function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
- fxNow = jQuery.now();
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
-
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
- };
- jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
- };
- jQuery.fx.interval = 13;
- jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
- };
- jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
- };
- jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
-
- _default: 400
- };
- jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
- };
- (function() {
-
- var input, div, select, a, opt;
-
- div = document.createElement( "div" );
- div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName("a")[ 0 ];
-
- select = document.createElement("select");
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName("input")[ 0 ];
- a.style.cssText = "top:1px";
-
- support.getSetAttribute = div.className !== "t";
-
-
- support.style = /top/.test( a.getAttribute("style") );
-
-
- support.hrefNormalized = a.getAttribute("href") === "/a";
-
- support.checkOn = !!input.value;
-
-
- support.optSelected = opt.selected;
-
- support.enctype = !!document.createElement("form").enctype;
-
-
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
-
- input = document.createElement( "input" );
- input.setAttribute( "value", "" );
- support.input = input.getAttribute( "value" ) === "";
-
- input.value = "t";
- input.setAttribute( "type", "radio" );
- support.radioValue = input.value === "t";
- })();
- var rreturn = /\r/g;
- jQuery.fn.extend({
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
- ret = elem.value;
- return typeof ret === "string" ?
-
- ret.replace(rreturn, "") :
-
- ret == null ? "" : ret;
- }
- return;
- }
- isFunction = jQuery.isFunction( value );
- return this.each(function( i ) {
- var val;
- if ( this.nodeType !== 1 ) {
- return;
- }
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- });
- }
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
- });
- jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
-
-
- jQuery.trim( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- if ( ( option.selected || i === index ) &&
-
- ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- value = jQuery( option ).val();
-
- if ( one ) {
- return value;
- }
-
- values.push( value );
- }
- }
- return values;
- },
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
- while ( i-- ) {
- option = options[ i ];
- if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
-
-
-
- try {
- option.selected = optionSet = true;
- } catch ( _ ) {
-
- option.scrollHeight;
- }
- } else {
- option.selected = false;
- }
- }
-
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return options;
- }
- }
- }
- });
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
-
-
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
- });
- var nodeHook, boolHook,
- attrHandle = jQuery.expr.attrHandle,
- ruseDefault = /^(?:checked|selected)$/i,
- getSetAttribute = support.getSetAttribute,
- getSetInput = support.input;
- jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- }
- });
- jQuery.extend({
- attr: function( elem, name, value ) {
- var hooks, ret,
- nType = elem.nodeType;
-
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( typeof elem.getAttribute === strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
-
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
- }
- if ( value !== undefined ) {
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
- } else {
- ret = jQuery.find.attr( elem, name );
-
- return ret == null ?
- undefined :
- ret;
- }
- },
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( rnotwhite );
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- if ( jQuery.expr.match.bool.test( name ) ) {
-
- if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- elem[ propName ] = false;
-
-
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] =
- elem[ propName ] = false;
- }
-
- } else {
- jQuery.attr( elem, name, "" );
- }
- elem.removeAttribute( getSetAttribute ? name : propName );
- }
- }
- },
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-
-
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- }
- });
- boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
-
- jQuery.removeAttr( elem, name );
- } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-
- elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
- }
- return name;
- }
- };
- jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = attrHandle[ name ] || jQuery.find.attr;
- attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
- function( elem, name, isXML ) {
- var ret, handle;
- if ( !isXML ) {
-
- handle = attrHandle[ name ];
- attrHandle[ name ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- name.toLowerCase() :
- null;
- attrHandle[ name ] = handle;
- }
- return ret;
- } :
- function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem[ jQuery.camelCase( "default-" + name ) ] ?
- name.toLowerCase() :
- null;
- }
- };
- });
- if ( !getSetInput || !getSetAttribute ) {
- jQuery.attrHooks.value = {
- set: function( elem, value, name ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
-
- elem.defaultValue = value;
- } else {
-
- return nodeHook && nodeHook.set( elem, value, name );
- }
- }
- };
- }
- if ( !getSetAttribute ) {
-
-
- nodeHook = {
- set: function( elem, value, name ) {
-
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- elem.setAttributeNode(
- (ret = elem.ownerDocument.createAttribute( name ))
- );
- }
- ret.value = value += "";
-
- if ( name === "value" || value === elem.getAttribute( name ) ) {
- return value;
- }
- }
- };
-
- attrHandle.id = attrHandle.name = attrHandle.coords =
- function( elem, name, isXML ) {
- var ret;
- if ( !isXML ) {
- return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
- ret.value :
- null;
- }
- };
-
- jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret = elem.getAttributeNode( name );
- if ( ret && ret.specified ) {
- return ret.value;
- }
- },
- set: nodeHook.set
- };
-
-
- jQuery.attrHooks.contenteditable = {
- set: function( elem, value, name ) {
- nodeHook.set( elem, value === "" ? false : value, name );
- }
- };
-
-
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- };
- });
- }
- if ( !support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
-
-
-
- return elem.style.cssText || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = value + "" );
- }
- };
- }
- var rfocusable = /^(?:input|select|textarea|button|object)$/i,
- rclickable = /^(?:a|area)$/i;
- jQuery.fn.extend({
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
-
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- }
- });
- jQuery.extend({
- propFix: {
- "for": "htmlFor",
- "class": "className"
- },
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
- if ( notxml ) {
-
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
- if ( value !== undefined ) {
- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
- ret :
- ( elem[ name ] = value );
- } else {
- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
- ret :
- elem[ name ];
- }
- },
- propHooks: {
- tabIndex: {
- get: function( elem ) {
-
-
-
- var tabindex = jQuery.find.attr( elem, "tabindex" );
- return tabindex ?
- parseInt( tabindex, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- -1;
- }
- }
- }
- });
- if ( !support.hrefNormalized ) {
-
- jQuery.each([ "href", "src" ], function( i, name ) {
- jQuery.propHooks[ name ] = {
- get: function( elem ) {
- return elem.getAttribute( name, 4 );
- }
- };
- });
- }
- if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
-
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- };
- }
- jQuery.each([
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
- ], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
- });
- if ( !support.enctype ) {
- jQuery.propFix.enctype = "encoding";
- }
- var rclass = /[\t\r\n\f]/g;
- jQuery.fn.extend({
- addClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = typeof value === "string" && value;
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
-
- classes = ( value || "" ).match( rnotwhite ) || [];
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- finalValue = jQuery.trim( cur );
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
- return this;
- },
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = arguments.length === 0 || typeof value === "string" && value;
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( rnotwhite ) || [];
- for ( ; i < len; i++ ) {
- elem = this[ i ];
-
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
-
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- finalValue = value ? jQuery.trim( cur ) : "";
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
- return this;
- },
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
- return this.each(function() {
- if ( type === "string" ) {
-
- var className,
- i = 0,
- self = jQuery( this ),
- classNames = value.match( rnotwhite ) || [];
- while ( (className = classNames[ i++ ]) ) {
-
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- } else if ( type === strundefined || type === "boolean" ) {
- if ( this.className ) {
-
- jQuery._data( this, "__className__", this.className );
- }
-
-
-
-
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
- return false;
- }
- });
- jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
- });
- jQuery.fn.extend({
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
-
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- }
- });
- var nonce = jQuery.now();
- var rquery = (/\?/);
- var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
- jQuery.parseJSON = function( data ) {
-
- if ( window.JSON && window.JSON.parse ) {
-
-
- return window.JSON.parse( data + "" );
- }
- var requireNonComma,
- depth = null,
- str = jQuery.trim( data + "" );
-
-
- return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
-
- if ( requireNonComma && comma ) {
- depth = 0;
- }
-
- if ( depth === 0 ) {
- return token;
- }
-
- requireNonComma = open || comma;
-
-
-
-
- depth += !close - !open;
-
- return "";
- }) ) ?
- ( Function( "return " + str ) )() :
- jQuery.error( "Invalid JSON: " + data );
- };
- jQuery.parseXML = function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- try {
- if ( window.DOMParser ) {
- tmp = new DOMParser();
- xml = tmp.parseFromString( data, "text/xml" );
- } else {
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- };
- var
-
- ajaxLocParts,
- ajaxLocation,
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
-
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- allTypes = "*/".concat("*");
- try {
- ajaxLocation = location.href;
- } catch( e ) {
-
-
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
- }
- ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
- function addToPrefiltersOrTransports( structure ) {
-
- return function( dataTypeExpression, func ) {
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
- if ( jQuery.isFunction( func ) ) {
-
- while ( (dataType = dataTypes[i++]) ) {
-
- if ( dataType.charAt( 0 ) === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
- }
- function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
- var inspected = {},
- seekingTransport = ( structure === transports );
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
- }
- function ajaxExtend( target, src ) {
- var deep, key,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
- return target;
- }
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
- function ajaxHandleResponses( s, jqXHR, responses ) {
- var firstDataType, ct, finalDataType, type,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
-
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
-
- finalDataType = finalDataType || firstDataType;
- }
-
-
-
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
- }
- * Also sets the responseXXX fields on the jqXHR instance
- */
- function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
-
- dataTypes = s.dataTypes.slice();
-
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
- current = dataTypes.shift();
-
- while ( current ) {
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
- prev = current;
- current = dataTypes.shift();
- if ( current ) {
-
- if ( current === "*" ) {
- current = prev;
-
- } else if ( prev !== "*" && prev !== current ) {
-
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
-
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- if ( conv !== true ) {
-
- if ( conv && s[ "throws" ] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
- }
- }
- return { state: "success", data: response };
- }
- jQuery.extend({
-
- active: 0,
-
- lastModified: {},
- etag: {},
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
-
- converters: {
-
- "* text": String,
-
- "text html": true,
-
- "text json": jQuery.parseJSON,
-
- "text xml": jQuery.parseXML
- },
-
-
-
-
- flatOptions: {
- url: true,
- context: true
- }
- },
-
-
-
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- ajaxExtend( jQuery.ajaxSettings, target );
- },
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- ajax: function( url, options ) {
-
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- options = options || {};
- var
- parts,
-
- i,
-
- cacheURL,
-
- responseHeadersString,
-
- timeoutTimer,
-
- fireGlobals,
- transport,
-
- responseHeaders,
-
- s = jQuery.ajaxSetup( {}, options ),
-
- callbackContext = s.context || s,
-
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
-
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
-
- statusCode = s.statusCode || {},
-
- requestHeaders = {},
- requestHeadersNames = {},
-
- state = 0,
-
- strAbort = "canceled",
-
- jqXHR = {
- readyState: 0,
-
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
-
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
-
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
-
-
-
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- s.type = options.method || options.type || s.method || s.type;
-
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
- );
- }
-
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- if ( state === 2 ) {
- return jqXHR;
- }
-
- fireGlobals = s.global;
-
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- s.type = s.type.toUpperCase();
-
- s.hasContent = !rnoContent.test( s.type );
-
-
- cacheURL = s.url;
-
- if ( !s.hasContent ) {
-
- if ( s.data ) {
- cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
-
- delete s.data;
- }
-
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
- cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
- }
- }
-
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-
- return jqXHR.abort();
- }
-
- strAbort = "abort";
-
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
-
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
-
- if ( state < 2 ) {
- done( -1, e );
-
- } else {
- throw e;
- }
- }
- }
-
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- if ( state === 2 ) {
- return;
- }
-
- state = 2;
-
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
-
- transport = undefined;
-
- responseHeadersString = headers || "";
-
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- if ( isSuccess ) {
-
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
-
-
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
- return jqXHR;
- },
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
- });
- jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
-
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
- });
- jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
- });
- jQuery._evalUrl = function( url ) {
- return jQuery.ajax({
- url: url,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
- };
- jQuery.fn.extend({
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
- if ( this[0] ) {
-
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
- wrap.map(function() {
- var elem = this;
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
- return elem;
- }).append( this );
- }
- return this;
- },
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
- if ( contents.length ) {
- contents.wrapAll( html );
- } else {
- self.append( html );
- }
- });
- },
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- }
- });
- jQuery.expr.filters.hidden = function( elem ) {
-
-
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
- (!support.reliableHiddenOffsets() &&
- ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
- };
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
- var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
- function buildParams( prefix, obj, traditional, add ) {
- var name;
- if ( jQuery.isArray( obj ) ) {
-
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
-
- add( prefix, v );
- } else {
-
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
- } else {
-
- add( prefix, obj );
- }
- }
- jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
-
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
- } else {
-
-
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- return s.join( "&" ).replace( r20, "+" );
- };
- jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function() {
-
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function() {
- var type = this.type;
-
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- })
- .map(function( i, elem ) {
- var val = jQuery( this ).val();
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
- });
- jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
-
- function() {
-
- return !this.isLocal &&
-
-
-
-
-
-
- /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
- createStandardXHR() || createActiveXHR();
- } :
-
- createStandardXHR;
- var xhrId = 0,
- xhrCallbacks = {},
- xhrSupported = jQuery.ajaxSettings.xhr();
- if ( window.ActiveXObject ) {
- jQuery( window ).on( "unload", function() {
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( undefined, true );
- }
- });
- }
- support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
- xhrSupported = support.ajax = !!xhrSupported;
- if ( xhrSupported ) {
- jQuery.ajaxTransport(function( options ) {
-
- if ( !options.crossDomain || support.cors ) {
- var callback;
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr(),
- id = ++xhrId;
-
- xhr.open( options.type, options.url, options.async, options.username, options.password );
-
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
-
-
-
-
- if ( !options.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- for ( i in headers ) {
-
-
-
-
-
-
- if ( headers[ i ] !== undefined ) {
- xhr.setRequestHeader( i, headers[ i ] + "" );
- }
- }
-
-
-
- xhr.send( ( options.hasContent && options.data ) || null );
-
- callback = function( _, isAbort ) {
- var status, statusText, responses;
-
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- delete xhrCallbacks[ id ];
- callback = undefined;
- xhr.onreadystatechange = jQuery.noop;
-
- if ( isAbort ) {
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- responses = {};
- status = xhr.status;
-
-
-
- if ( typeof xhr.responseText === "string" ) {
- responses.text = xhr.responseText;
- }
-
-
- try {
- statusText = xhr.statusText;
- } catch( e ) {
-
- statusText = "";
- }
-
-
-
-
- if ( !status && options.isLocal && !options.crossDomain ) {
- status = responses.text ? 200 : 404;
-
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
-
- if ( responses ) {
- complete( status, statusText, responses, xhr.getAllResponseHeaders() );
- }
- };
- if ( !options.async ) {
-
- callback();
- } else if ( xhr.readyState === 4 ) {
-
-
- setTimeout( callback );
- } else {
-
- xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
- }
- },
- abort: function() {
- if ( callback ) {
- callback( undefined, true );
- }
- }
- };
- }
- });
- }
- function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
- }
- function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
- }
- jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
- });
- jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
- });
- jQuery.ajaxTransport( "script", function(s) {
-
- if ( s.crossDomain ) {
- var script,
- head = document.head || jQuery("head")[0] || document.documentElement;
- return {
- send: function( _, callback ) {
- script = document.createElement("script");
- script.async = true;
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
- script.src = s.url;
-
- script.onload = script.onreadystatechange = function( _, isAbort ) {
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- script.onload = script.onreadystatechange = null;
-
- if ( script.parentNode ) {
- script.parentNode.removeChild( script );
- }
-
- script = null;
-
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
-
-
- head.insertBefore( script, head.firstChild );
- },
- abort: function() {
- if ( script ) {
- script.onload( undefined, true );
- }
- }
- };
- }
- });
- var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
- jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
- });
- jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
- );
-
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- s.dataTypes[ 0 ] = "json";
-
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- jqXHR.always(function() {
-
- window[ callbackName ] = overwritten;
-
- if ( s[ callbackName ] ) {
-
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- oldCallbacks.push( callbackName );
- }
-
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
- responseContainer = overwritten = undefined;
- });
-
- return "script";
- }
- });
- jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
- parsed = jQuery.buildFragment( [ data ], context, scripts );
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
- return jQuery.merge( [], parsed.childNodes );
- };
- var _load = jQuery.fn.load;
- * Load a url into a page
- */
- jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
- var selector, response, type,
- self = this,
- off = url.indexOf(" ");
- if ( off >= 0 ) {
- selector = jQuery.trim( url.slice( off, url.length ) );
- url = url.slice( 0, off );
- }
-
- if ( jQuery.isFunction( params ) ) {
-
- callback = params;
- params = undefined;
-
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- if ( self.length > 0 ) {
- jQuery.ajax({
- url: url,
-
- type: type,
- dataType: "html",
- data: params
- }).done(function( responseText ) {
-
- response = arguments;
- self.html( selector ?
-
-
- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- responseText );
- }).complete( callback && function( jqXHR, status ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- });
- }
- return this;
- };
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
- var docElem = window.document.documentElement;
- * Gets a window from an element
- */
- function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
- }
- jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
-
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
- };
- jQuery.fn.extend({
- offset: function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
- var docElem, win,
- box = { top: 0, left: 0 },
- elem = this[ 0 ],
- doc = elem && elem.ownerDocument;
- if ( !doc ) {
- return;
- }
- docElem = doc.documentElement;
-
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
-
- if ( typeof elem.getBoundingClientRect !== strundefined ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- return {
- top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
- left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
- };
- },
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
- var offsetParent, offset,
- parentOffset = { top: 0, left: 0 },
- elem = this[ 0 ];
-
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
- offset = elem.getBoundingClientRect();
- } else {
-
- offsetParent = this.offsetParent();
-
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
- }
-
-
-
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
- };
- },
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || docElem;
- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent || docElem;
- });
- }
- });
- jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = /Y/.test( prop );
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
- var win = getWindow( elem );
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- win.document.documentElement[ method ] :
- elem[ method ];
- }
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
- });
- jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
-
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
- });
- jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
-
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
- return access( this, function( elem, type, value ) {
- var doc;
- if ( jQuery.isWindow( elem ) ) {
-
-
-
- return elem.document.documentElement[ "client" + name ];
- }
-
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
-
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
- return value === undefined ?
-
- jQuery.css( elem, type, extra ) :
-
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
- });
- jQuery.fn.size = function() {
- return this.length;
- };
- jQuery.fn.andSelf = jQuery.fn.addBack;
- if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- });
- }
- var
-
- _jQuery = window.jQuery,
-
- _$ = window.$;
- jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
- return jQuery;
- };
- if ( typeof noGlobal === strundefined ) {
- window.jQuery = window.$ = jQuery;
- }
- return jQuery;
- }));
- (function($, undefined) {
- * Unobtrusive scripting adapter for jQuery
- * https://github.com/rails/jquery-ujs
- *
- * Requires jQuery 1.8.0 or later.
- *
- * Released under the MIT license
- *
- */
-
-
- if ( $.rails !== undefined ) {
- $.error('jquery-ujs has already been loaded!');
- }
-
- var rails;
- var $document = $(document);
- $.rails = rails = {
-
- linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with], a[data-disable]',
-
- buttonClickSelector: 'button[data-remote]:not(form button), button[data-confirm]:not(form button)',
-
- inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',
-
- formSubmitSelector: 'form',
-
- formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',
-
- disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',
-
- enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',
-
- requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])',
-
- fileInputSelector: 'input[type=file]',
-
- linkDisableSelector: 'a[data-disable-with], a[data-disable]',
-
- buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]',
-
- CSRFProtection: function(xhr) {
- var token = $('meta[name="csrf-token"]').attr('content');
- if (token) xhr.setRequestHeader('X-CSRF-Token', token);
- },
-
- refreshCSRFTokens: function(){
- var csrfToken = $('meta[name=csrf-token]').attr('content');
- var csrfParam = $('meta[name=csrf-param]').attr('content');
- $('form input[name="' + csrfParam + '"]').val(csrfToken);
- },
-
- fire: function(obj, name, data) {
- var event = $.Event(name);
- obj.trigger(event, data);
- return event.result !== false;
- },
-
- confirm: function(message) {
- return confirm(message);
- },
-
- ajax: function(options) {
- return $.ajax(options);
- },
-
- href: function(element) {
- return element.attr('href');
- },
-
- handleRemote: function(element) {
- var method, url, data, elCrossDomain, crossDomain, withCredentials, dataType, options;
- if (rails.fire(element, 'ajax:before')) {
- elCrossDomain = element.data('cross-domain');
- crossDomain = elCrossDomain === undefined ? null : elCrossDomain;
- withCredentials = element.data('with-credentials') || null;
- dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType);
- if (element.is('form')) {
- method = element.attr('method');
- url = element.attr('action');
- data = element.serializeArray();
-
- var button = element.data('ujs:submit-button');
- if (button) {
- data.push(button);
- element.data('ujs:submit-button', null);
- }
- } else if (element.is(rails.inputChangeSelector)) {
- method = element.data('method');
- url = element.data('url');
- data = element.serialize();
- if (element.data('params')) data = data + "&" + element.data('params');
- } else if (element.is(rails.buttonClickSelector)) {
- method = element.data('method') || 'get';
- url = element.data('url');
- data = element.serialize();
- if (element.data('params')) data = data + "&" + element.data('params');
- } else {
- method = element.data('method');
- url = rails.href(element);
- data = element.data('params') || null;
- }
- options = {
- type: method || 'GET', data: data, dataType: dataType,
-
- beforeSend: function(xhr, settings) {
- if (settings.dataType === undefined) {
- xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);
- }
- if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) {
- element.trigger('ajax:send', xhr);
- } else {
- return false;
- }
- },
- success: function(data, status, xhr) {
- element.trigger('ajax:success', [data, status, xhr]);
- },
- complete: function(xhr, status) {
- element.trigger('ajax:complete', [xhr, status]);
- },
- error: function(xhr, status, error) {
- element.trigger('ajax:error', [xhr, status, error]);
- },
- crossDomain: crossDomain
- };
-
-
- if (withCredentials) {
- options.xhrFields = {
- withCredentials: withCredentials
- };
- }
-
- if (url) { options.url = url; }
- return rails.ajax(options);
- } else {
- return false;
- }
- },
-
-
- handleMethod: function(link) {
- var href = rails.href(link),
- method = link.data('method'),
- target = link.attr('target'),
- csrfToken = $('meta[name=csrf-token]').attr('content'),
- csrfParam = $('meta[name=csrf-param]').attr('content'),
- form = $('<form method="post" action="' + href + '"></form>'),
- metadataInput = '<input name="_method" value="' + method + '" type="hidden" />';
- if (csrfParam !== undefined && csrfToken !== undefined) {
- metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
- }
- if (target) { form.attr('target', target); }
- form.hide().append(metadataInput).appendTo('body');
- form.submit();
- },
-
-
-
- formElements: function(form, selector) {
- return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector);
- },
-
- - Caches element value in 'ujs:enable-with' data store
- - Replaces element text with value of 'data-disable-with' attribute
- - Sets disabled property to true
- */
- disableFormElements: function(form) {
- rails.formElements(form, rails.disableSelector).each(function() {
- rails.disableFormElement($(this));
- });
- },
- disableFormElement: function(element) {
- var method, replacement;
- method = element.is('button') ? 'html' : 'val';
- replacement = element.data('disable-with');
- element.data('ujs:enable-with', element[method]());
- if (replacement !== undefined) {
- element[method](replacement);
- }
- element.prop('disabled', true);
- },
-
- - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)
- - Sets disabled property to false
- */
- enableFormElements: function(form) {
- rails.formElements(form, rails.enableSelector).each(function() {
- rails.enableFormElement($(this));
- });
- },
- enableFormElement: function(element) {
- var method = element.is('button') ? 'html' : 'val';
- if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with'));
- element.prop('disabled', false);
- },
-
- - Fires `confirm` event
- - Shows the confirmation dialog
- - Fires the `confirm:complete` event
- Returns `true` if no function stops the chain and user chose yes; `false` otherwise.
- Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.
- Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function
- return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.
- */
- allowAction: function(element) {
- var message = element.data('confirm'),
- answer = false, callback;
- if (!message) { return true; }
- if (rails.fire(element, 'confirm')) {
- answer = rails.confirm(message);
- callback = rails.fire(element, 'confirm:complete', [answer]);
- }
- return answer && callback;
- },
-
- blankInputs: function(form, specifiedSelector, nonBlank) {
- var inputs = $(), input, valueToCheck,
- selector = specifiedSelector || 'input,textarea',
- allInputs = form.find(selector);
- allInputs.each(function() {
- input = $(this);
- valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : input.val();
-
- if (!valueToCheck === !nonBlank) {
-
- if (input.is('input[type=radio]') && allInputs.filter('input[type=radio]:checked[name="' + input.attr('name') + '"]').length) {
- return true;
- }
- inputs = inputs.add(input);
- }
- });
- return inputs.length ? inputs : false;
- },
-
- nonBlankInputs: function(form, specifiedSelector) {
- return rails.blankInputs(form, specifiedSelector, true);
- },
-
- stopEverything: function(e) {
- $(e.target).trigger('ujs:everythingStopped');
- e.stopImmediatePropagation();
- return false;
- },
-
-
- disableElement: function(element) {
- var replacement = element.data('disable-with');
- element.data('ujs:enable-with', element.html());
- if (replacement !== undefined) {
- element.html(replacement);
- }
- element.bind('click.railsDisable', function(e) {
- return rails.stopEverything(e);
- });
- },
-
- enableElement: function(element) {
- if (element.data('ujs:enable-with') !== undefined) {
- element.html(element.data('ujs:enable-with'));
- element.removeData('ujs:enable-with');
- }
- element.unbind('click.railsDisable');
- }
- };
- if (rails.fire($document, 'rails:attachBindings')) {
- $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});
- $document.delegate(rails.linkDisableSelector, 'ajax:complete', function() {
- rails.enableElement($(this));
- });
- $document.delegate(rails.buttonDisableSelector, 'ajax:complete', function() {
- rails.enableFormElement($(this));
- });
- $document.delegate(rails.linkClickSelector, 'click.rails', function(e) {
- var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey;
- if (!rails.allowAction(link)) return rails.stopEverything(e);
- if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);
- if (link.data('remote') !== undefined) {
- if (metaClick && (!method || method === 'GET') && !data) { return true; }
- var handleRemote = rails.handleRemote(link);
-
- if (handleRemote === false) {
- rails.enableElement(link);
- } else {
- handleRemote.error( function() { rails.enableElement(link); } );
- }
- return false;
- } else if (link.data('method')) {
- rails.handleMethod(link);
- return false;
- }
- });
- $document.delegate(rails.buttonClickSelector, 'click.rails', function(e) {
- var button = $(this);
- if (!rails.allowAction(button)) return rails.stopEverything(e);
- if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);
- var handleRemote = rails.handleRemote(button);
-
- if (handleRemote === false) {
- rails.enableFormElement(button);
- } else {
- handleRemote.error( function() { rails.enableFormElement(button); } );
- }
- return false;
- });
- $document.delegate(rails.inputChangeSelector, 'change.rails', function(e) {
- var link = $(this);
- if (!rails.allowAction(link)) return rails.stopEverything(e);
- rails.handleRemote(link);
- return false;
- });
- $document.delegate(rails.formSubmitSelector, 'submit.rails', function(e) {
- var form = $(this),
- remote = form.data('remote') !== undefined,
- blankRequiredInputs,
- nonBlankFileInputs;
- if (!rails.allowAction(form)) return rails.stopEverything(e);
-
- if (form.attr('novalidate') == undefined) {
- blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector);
- if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {
- return rails.stopEverything(e);
- }
- }
- if (remote) {
- nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);
- if (nonBlankFileInputs) {
-
-
- setTimeout(function(){ rails.disableFormElements(form); }, 13);
- var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);
-
- if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); }
- return aborted;
- }
- rails.handleRemote(form);
- return false;
- } else {
-
- setTimeout(function(){ rails.disableFormElements(form); }, 13);
- }
- });
- $document.delegate(rails.formInputClickSelector, 'click.rails', function(event) {
- var button = $(this);
- if (!rails.allowAction(button)) return rails.stopEverything(event);
-
- var name = button.attr('name'),
- data = name ? {name:name, value:button.val()} : null;
- button.closest('form').data('ujs:submit-button', data);
- });
- $document.delegate(rails.formSubmitSelector, 'ajax:send.rails', function(event) {
- if (this == event.target) rails.disableFormElements($(this));
- });
- $document.delegate(rails.formSubmitSelector, 'ajax:complete.rails', function(event) {
- if (this == event.target) rails.enableFormElements($(this));
- });
- $(function(){
- rails.refreshCSRFTokens();
- });
- }
- })( jQuery );
- * bootstrap-transition.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#transitions
- * ===================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
- !function ($) {
- "use strict";
-
- * ======================================================= */
- $(function () {
- $.support.transition = (function () {
- var transitionEnd = (function () {
- var el = document.createElement('bootstrap')
- , transEndEventNames = {
- 'WebkitTransition' : 'webkitTransitionEnd'
- , 'MozTransition' : 'transitionend'
- , 'OTransition' : 'oTransitionEnd otransitionend'
- , 'transition' : 'transitionend'
- }
- , name
- for (name in transEndEventNames){
- if (el.style[name] !== undefined) {
- return transEndEventNames[name]
- }
- }
- }())
- return transitionEnd && {
- end: transitionEnd
- }
- })()
- })
- }(window.jQuery);
- * bootstrap-alert.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#alerts
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
- !function ($) {
- "use strict";
-
- * ====================== */
- var dismiss = '[data-dismiss="alert"]'
- , Alert = function (el) {
- $(el).on('click', dismiss, this.close)
- }
- Alert.prototype.close = function (e) {
- var $this = $(this)
- , selector = $this.attr('data-target')
- , $parent
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '')
- }
- $parent = $(selector)
- e && e.preventDefault()
- $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
- $parent.trigger(e = $.Event('close'))
- if (e.isDefaultPrevented()) return
- $parent.removeClass('in')
- function removeElement() {
- $parent
- .trigger('closed')
- .remove()
- }
- $.support.transition && $parent.hasClass('fade') ?
- $parent.on($.support.transition.end, removeElement) :
- removeElement()
- }
-
- * ======================= */
- var old = $.fn.alert
- $.fn.alert = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('alert')
- if (!data) $this.data('alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
- $.fn.alert.Constructor = Alert
-
- * ================= */
- $.fn.alert.noConflict = function () {
- $.fn.alert = old
- return this
- }
-
- * ============== */
- $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
- }(window.jQuery);
- * bootstrap-modal.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#modals
- * =========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
- !function ($) {
- "use strict";
-
- * ====================== */
- var Modal = function (element, options) {
- this.options = options
- this.$element = $(element)
- .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
- this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
- }
- Modal.prototype = {
- constructor: Modal
- , toggle: function () {
- return this[!this.isShown ? 'show' : 'hide']()
- }
- , show: function () {
- var that = this
- , e = $.Event('show')
- this.$element.trigger(e)
- if (this.isShown || e.isDefaultPrevented()) return
- this.isShown = true
- this.escape()
- this.backdrop(function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
- if (!that.$element.parent().length) {
- that.$element.appendTo(document.body)
- }
- that.$element.show()
- if (transition) {
- that.$element[0].offsetWidth
- }
- that.$element
- .addClass('in')
- .attr('aria-hidden', false)
- that.enforceFocus()
- transition ?
- that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
- that.$element.focus().trigger('shown')
- })
- }
- , hide: function (e) {
- e && e.preventDefault()
- var that = this
- e = $.Event('hide')
- this.$element.trigger(e)
- if (!this.isShown || e.isDefaultPrevented()) return
- this.isShown = false
- this.escape()
- $(document).off('focusin.modal')
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
- $.support.transition && this.$element.hasClass('fade') ?
- this.hideWithTransition() :
- this.hideModal()
- }
- , enforceFocus: function () {
- var that = this
- $(document).on('focusin.modal', function (e) {
- if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
- that.$element.focus()
- }
- })
- }
- , escape: function () {
- var that = this
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keyup.dismiss.modal', function ( e ) {
- e.which == 27 && that.hide()
- })
- } else if (!this.isShown) {
- this.$element.off('keyup.dismiss.modal')
- }
- }
- , hideWithTransition: function () {
- var that = this
- , timeout = setTimeout(function () {
- that.$element.off($.support.transition.end)
- that.hideModal()
- }, 500)
- this.$element.one($.support.transition.end, function () {
- clearTimeout(timeout)
- that.hideModal()
- })
- }
- , hideModal: function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- that.removeBackdrop()
- that.$element.trigger('hidden')
- })
- }
- , removeBackdrop: function () {
- this.$backdrop && this.$backdrop.remove()
- this.$backdrop = null
- }
- , backdrop: function (callback) {
- var that = this
- , animate = this.$element.hasClass('fade') ? 'fade' : ''
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .appendTo(document.body)
- this.$backdrop.click(
- this.options.backdrop == 'static' ?
- $.proxy(this.$element[0].focus, this.$element[0])
- : $.proxy(this.hide, this)
- )
- if (doAnimate) this.$backdrop[0].offsetWidth
- this.$backdrop.addClass('in')
- if (!callback) return
- doAnimate ?
- this.$backdrop.one($.support.transition.end, callback) :
- callback()
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
- $.support.transition && this.$element.hasClass('fade')?
- this.$backdrop.one($.support.transition.end, callback) :
- callback()
- } else if (callback) {
- callback()
- }
- }
- }
-
- * ======================= */
- var old = $.fn.modal
- $.fn.modal = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('modal')
- , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
- if (!data) $this.data('modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option]()
- else if (options.show) data.show()
- })
- }
- $.fn.modal.defaults = {
- backdrop: true
- , keyboard: true
- , show: true
- }
- $.fn.modal.Constructor = Modal
-
- * ================= */
- $.fn.modal.noConflict = function () {
- $.fn.modal = old
- return this
- }
-
- * ============== */
- $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
- var $this = $(this)
- , href = $this.attr('href')
- , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, '')))
- , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
- e.preventDefault()
- $target
- .modal(option)
- .one('hide', function () {
- $this.focus()
- })
- })
- }(window.jQuery);
- * bootstrap-dropdown.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
- !function ($) {
- "use strict";
-
- * ========================= */
- var toggle = '[data-toggle=dropdown]'
- , Dropdown = function (element) {
- var $el = $(element).on('click.dropdown.data-api', this.toggle)
- $('html').on('click.dropdown.data-api', function () {
- $el.parent().removeClass('open')
- })
- }
- Dropdown.prototype = {
- constructor: Dropdown
- , toggle: function (e) {
- var $this = $(this)
- , $parent
- , isActive
- if ($this.is('.disabled, :disabled')) return
- $parent = getParent($this)
- isActive = $parent.hasClass('open')
- clearMenus()
- if (!isActive) {
- if ('ontouchstart' in document.documentElement) {
-
- $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
- }
- $parent.toggleClass('open')
- }
- $this.focus()
- return false
- }
- , keydown: function (e) {
- var $this
- , $items
- , $active
- , $parent
- , isActive
- , index
- if (!/(38|40|27)/.test(e.keyCode)) return
- $this = $(this)
- e.preventDefault()
- e.stopPropagation()
- if ($this.is('.disabled, :disabled')) return
- $parent = getParent($this)
- isActive = $parent.hasClass('open')
- if (!isActive || (isActive && e.keyCode == 27)) {
- if (e.which == 27) $parent.find(toggle).focus()
- return $this.click()
- }
- $items = $('[role=menu] li:not(.divider):visible a', $parent)
- if (!$items.length) return
- index = $items.index($items.filter(':focus'))
- if (e.keyCode == 38 && index > 0) index--
- if (e.keyCode == 40 && index < $items.length - 1) index++
- if (!~index) index = 0
- $items
- .eq(index)
- .focus()
- }
- }
- function clearMenus() {
- $('.dropdown-backdrop').remove()
- $(toggle).each(function () {
- getParent($(this)).removeClass('open')
- })
- }
- function getParent($this) {
- var selector = $this.attr('data-target')
- , $parent
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '')
- }
- $parent = selector && $(selector)
- if (!$parent || !$parent.length) $parent = $this.parent()
- return $parent
- }
-
- * ========================== */
- var old = $.fn.dropdown
- $.fn.dropdown = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('dropdown')
- if (!data) $this.data('dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
- $.fn.dropdown.Constructor = Dropdown
-
- * ==================== */
- $.fn.dropdown.noConflict = function () {
- $.fn.dropdown = old
- return this
- }
-
- * =================================== */
- $(document)
- .on('click.dropdown.data-api', clearMenus)
- .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
- .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
- .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
- }(window.jQuery);
- * bootstrap-scrollspy.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================== */
- !function ($) {
- "use strict";
-
- * ========================== */
- function ScrollSpy(element, options) {
- var process = $.proxy(this.process, this)
- , $element = $(element).is('body') ? $(window) : $(element)
- , href
- this.options = $.extend({}, $.fn.scrollspy.defaults, options)
- this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
- this.selector = (this.options.target
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, ''))
- || '') + ' .nav li > a'
- this.$body = $('body')
- this.refresh()
- this.process()
- }
- ScrollSpy.prototype = {
- constructor: ScrollSpy
- , refresh: function () {
- var self = this
- , $targets
- this.offsets = $([])
- this.targets = $([])
- $targets = this.$body
- .find(this.selector)
- .map(function () {
- var $el = $(this)
- , href = $el.data('target') || $el.attr('href')
- , $href = /^#\w/.test(href) && $(href)
- return ( $href
- && $href.length
- && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
- })
- .sort(function (a, b) { return a[0] - b[0] })
- .each(function () {
- self.offsets.push(this[0])
- self.targets.push(this[1])
- })
- }
- , process: function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
- , maxScroll = scrollHeight - this.$scrollElement.height()
- , offsets = this.offsets
- , targets = this.targets
- , activeTarget = this.activeTarget
- , i
- if (scrollTop >= maxScroll) {
- return activeTarget != (i = targets.last()[0])
- && this.activate ( i )
- }
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
- && this.activate( targets[i] )
- }
- }
- , activate: function (target) {
- var active
- , selector
- this.activeTarget = target
- $(this.selector)
- .parent('.active')
- .removeClass('active')
- selector = this.selector
- + '[data-target="' + target + '"],'
- + this.selector + '[href="' + target + '"]'
- active = $(selector)
- .parent('li')
- .addClass('active')
- if (active.parent('.dropdown-menu').length) {
- active = active.closest('li.dropdown').addClass('active')
- }
- active.trigger('activate')
- }
- }
-
- * =========================== */
- var old = $.fn.scrollspy
- $.fn.scrollspy = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('scrollspy')
- , options = typeof option == 'object' && option
- if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.scrollspy.Constructor = ScrollSpy
- $.fn.scrollspy.defaults = {
- offset: 10
- }
-
- * ===================== */
- $.fn.scrollspy.noConflict = function () {
- $.fn.scrollspy = old
- return this
- }
-
- * ================== */
- $(window).on('load', function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- $spy.scrollspy($spy.data())
- })
- })
- }(window.jQuery);
- * bootstrap-tab.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#tabs
- * ========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ======================================================== */
- !function ($) {
- "use strict";
-
- * ==================== */
- var Tab = function (element) {
- this.element = $(element)
- }
- Tab.prototype = {
- constructor: Tab
- , show: function () {
- var $this = this.element
- , $ul = $this.closest('ul:not(.dropdown-menu)')
- , selector = $this.attr('data-target')
- , previous
- , $target
- , e
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '')
- }
- if ( $this.parent('li').hasClass('active') ) return
- previous = $ul.find('.active:last a')[0]
- e = $.Event('show', {
- relatedTarget: previous
- })
- $this.trigger(e)
- if (e.isDefaultPrevented()) return
- $target = $(selector)
- this.activate($this.parent('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $this.trigger({
- type: 'shown'
- , relatedTarget: previous
- })
- })
- }
- , activate: function ( element, container, callback) {
- var $active = container.find('> .active')
- , transition = callback
- && $.support.transition
- && $active.hasClass('fade')
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
- element.addClass('active')
- if (transition) {
- element[0].offsetWidth
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
- if ( element.parent('.dropdown-menu') ) {
- element.closest('li.dropdown').addClass('active')
- }
- callback && callback()
- }
- transition ?
- $active.one($.support.transition.end, next) :
- next()
- $active.removeClass('in')
- }
- }
-
- * ===================== */
- var old = $.fn.tab
- $.fn.tab = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('tab')
- if (!data) $this.data('tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.tab.Constructor = Tab
-
- * =============== */
- $.fn.tab.noConflict = function () {
- $.fn.tab = old
- return this
- }
-
- * ============ */
- $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
- e.preventDefault()
- $(this).tab('show')
- })
- }(window.jQuery);
- * bootstrap-tooltip.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
- !function ($) {
- "use strict";
-
- * =============================== */
- var Tooltip = function (element, options) {
- this.init('tooltip', element, options)
- }
- Tooltip.prototype = {
- constructor: Tooltip
- , init: function (type, element, options) {
- var eventIn
- , eventOut
- , triggers
- , trigger
- , i
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.enabled = true
- triggers = this.options.trigger.split(' ')
- for (i = triggers.length; i--;) {
- trigger = triggers[i]
- if (trigger == 'click') {
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
- } else if (trigger != 'manual') {
- eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
- eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
- }
- }
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
- , getOptions: function (options) {
- options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay
- , hide: options.delay
- }
- }
- return options
- }
- , enter: function (e) {
- var defaults = $.fn[this.type].defaults
- , options = {}
- , self
- this._options && $.each(this._options, function (key, value) {
- if (defaults[key] != value) options[key] = value
- }, this)
- self = $(e.currentTarget)[this.type](options).data(this.type)
- if (!self.options.delay || !self.options.delay.show) return self.show()
- clearTimeout(this.timeout)
- self.hoverState = 'in'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'in') self.show()
- }, self.options.delay.show)
- }
- , leave: function (e) {
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
- if (this.timeout) clearTimeout(this.timeout)
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
- self.hoverState = 'out'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'out') self.hide()
- }, self.options.delay.hide)
- }
- , show: function () {
- var $tip
- , pos
- , actualWidth
- , actualHeight
- , placement
- , tp
- , e = $.Event('show')
- if (this.hasContent() && this.enabled) {
- this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
- $tip = this.tip()
- this.setContent()
- if (this.options.animation) {
- $tip.addClass('fade')
- }
- placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
- $tip
- .detach()
- .css({ top: 0, left: 0, display: 'block' })
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
- pos = this.getPosition()
- actualWidth = $tip[0].offsetWidth
- actualHeight = $tip[0].offsetHeight
- switch (placement) {
- case 'bottom':
- tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'top':
- tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'left':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
- break
- case 'right':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
- break
- }
- this.applyPlacement(tp, placement)
- this.$element.trigger('shown')
- }
- }
- , applyPlacement: function(offset, placement){
- var $tip = this.tip()
- , width = $tip[0].offsetWidth
- , height = $tip[0].offsetHeight
- , actualWidth
- , actualHeight
- , delta
- , replace
- $tip
- .offset(offset)
- .addClass(placement)
- .addClass('in')
- actualWidth = $tip[0].offsetWidth
- actualHeight = $tip[0].offsetHeight
- if (placement == 'top' && actualHeight != height) {
- offset.top = offset.top + height - actualHeight
- replace = true
- }
- if (placement == 'bottom' || placement == 'top') {
- delta = 0
- if (offset.left < 0){
- delta = offset.left * -2
- offset.left = 0
- $tip.offset(offset)
- actualWidth = $tip[0].offsetWidth
- actualHeight = $tip[0].offsetHeight
- }
- this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
- } else {
- this.replaceArrow(actualHeight - height, actualHeight, 'top')
- }
- if (replace) $tip.offset(offset)
- }
- , replaceArrow: function(delta, dimension, position){
- this
- .arrow()
- .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
- }
- , setContent: function () {
- var $tip = this.tip()
- , title = this.getTitle()
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
- , hide: function () {
- var that = this
- , $tip = this.tip()
- , e = $.Event('hide')
- this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
- $tip.removeClass('in')
- function removeWithAnimation() {
- var timeout = setTimeout(function () {
- $tip.off($.support.transition.end).detach()
- }, 500)
- $tip.one($.support.transition.end, function () {
- clearTimeout(timeout)
- $tip.detach()
- })
- }
- $.support.transition && this.$tip.hasClass('fade') ?
- removeWithAnimation() :
- $tip.detach()
- this.$element.trigger('hidden')
- return this
- }
- , fixTitle: function () {
- var $e = this.$element
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
- }
- }
- , hasContent: function () {
- return this.getTitle()
- }
- , getPosition: function () {
- var el = this.$element[0]
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
- width: el.offsetWidth
- , height: el.offsetHeight
- }, this.$element.offset())
- }
- , getTitle: function () {
- var title
- , $e = this.$element
- , o = this.options
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
- return title
- }
- , tip: function () {
- return this.$tip = this.$tip || $(this.options.template)
- }
- , arrow: function(){
- return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
- }
- , validate: function () {
- if (!this.$element[0].parentNode) {
- this.hide()
- this.$element = null
- this.options = null
- }
- }
- , enable: function () {
- this.enabled = true
- }
- , disable: function () {
- this.enabled = false
- }
- , toggleEnabled: function () {
- this.enabled = !this.enabled
- }
- , toggle: function (e) {
- var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
- self.tip().hasClass('in') ? self.hide() : self.show()
- }
- , destroy: function () {
- this.hide().$element.off('.' + this.type).removeData(this.type)
- }
- }
-
- * ========================= */
- var old = $.fn.tooltip
- $.fn.tooltip = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('tooltip')
- , options = typeof option == 'object' && option
- if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.tooltip.Constructor = Tooltip
- $.fn.tooltip.defaults = {
- animation: true
- , placement: 'top'
- , selector: false
- , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
- , trigger: 'hover focus'
- , title: ''
- , delay: 0
- , html: false
- , container: false
- }
-
- * =================== */
- $.fn.tooltip.noConflict = function () {
- $.fn.tooltip = old
- return this
- }
- }(window.jQuery);
- * bootstrap-popover.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#popovers
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * =========================================================== */
- !function ($) {
- "use strict";
-
- * =============================== */
- var Popover = function (element, options) {
- this.init('popover', element, options)
- }
-
- ========================================== */
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
- constructor: Popover
- , setContent: function () {
- var $tip = this.tip()
- , title = this.getTitle()
- , content = this.getContent()
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
- $tip.removeClass('fade top bottom left right in')
- }
- , hasContent: function () {
- return this.getTitle() || this.getContent()
- }
- , getContent: function () {
- var content
- , $e = this.$element
- , o = this.options
- content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
- || $e.attr('data-content')
- return content
- }
- , tip: function () {
- if (!this.$tip) {
- this.$tip = $(this.options.template)
- }
- return this.$tip
- }
- , destroy: function () {
- this.hide().$element.off('.' + this.type).removeData(this.type)
- }
- })
-
- * ======================= */
- var old = $.fn.popover
- $.fn.popover = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('popover')
- , options = typeof option == 'object' && option
- if (!data) $this.data('popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.popover.Constructor = Popover
- $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
- placement: 'right'
- , trigger: 'click'
- , content: ''
- , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
- })
-
- * =================== */
- $.fn.popover.noConflict = function () {
- $.fn.popover = old
- return this
- }
- }(window.jQuery);
- * bootstrap-button.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#buttons
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
- !function ($) {
- "use strict";
-
- * ============================== */
- var Button = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.button.defaults, options)
- }
- Button.prototype.setState = function (state) {
- var d = 'disabled'
- , $el = this.$element
- , data = $el.data()
- , val = $el.is('input') ? 'val' : 'html'
- state = state + 'Text'
- data.resetText || $el.data('resetText', $el[val]())
- $el[val](data[state] || this.options[state])
-
- setTimeout(function () {
- state == 'loadingText' ?
- $el.addClass(d).attr(d, d) :
- $el.removeClass(d).removeAttr(d)
- }, 0)
- }
- Button.prototype.toggle = function () {
- var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
- $parent && $parent
- .find('.active')
- .removeClass('active')
- this.$element.toggleClass('active')
- }
-
- * ======================== */
- var old = $.fn.button
- $.fn.button = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('button')
- , options = typeof option == 'object' && option
- if (!data) $this.data('button', (data = new Button(this, options)))
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
- $.fn.button.defaults = {
- loadingText: 'loading...'
- }
- $.fn.button.Constructor = Button
-
- * ================== */
- $.fn.button.noConflict = function () {
- $.fn.button = old
- return this
- }
-
- * =============== */
- $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- $btn.button('toggle')
- })
- }(window.jQuery);
- * bootstrap-collapse.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#collapse
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
- !function ($) {
- "use strict";
-
- * ================================ */
- var Collapse = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.collapse.defaults, options)
- if (this.options.parent) {
- this.$parent = $(this.options.parent)
- }
- this.options.toggle && this.toggle()
- }
- Collapse.prototype = {
- constructor: Collapse
- , dimension: function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
- , show: function () {
- var dimension
- , scroll
- , actives
- , hasData
- if (this.transitioning || this.$element.hasClass('in')) return
- dimension = this.dimension()
- scroll = $.camelCase(['scroll', dimension].join('-'))
- actives = this.$parent && this.$parent.find('> .accordion-group > .in')
- if (actives && actives.length) {
- hasData = actives.data('collapse')
- if (hasData && hasData.transitioning) return
- actives.collapse('hide')
- hasData || actives.data('collapse', null)
- }
- this.$element[dimension](0)
- this.transition('addClass', $.Event('show'), 'shown')
- $.support.transition && this.$element[dimension](this.$element[0][scroll])
- }
- , hide: function () {
- var dimension
- if (this.transitioning || !this.$element.hasClass('in')) return
- dimension = this.dimension()
- this.reset(this.$element[dimension]())
- this.transition('removeClass', $.Event('hide'), 'hidden')
- this.$element[dimension](0)
- }
- , reset: function (size) {
- var dimension = this.dimension()
- this.$element
- .removeClass('collapse')
- [dimension](size || 'auto')
- [0].offsetWidth
- this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
- return this
- }
- , transition: function (method, startEvent, completeEvent) {
- var that = this
- , complete = function () {
- if (startEvent.type == 'show') that.reset()
- that.transitioning = 0
- that.$element.trigger(completeEvent)
- }
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
- this.transitioning = 1
- this.$element[method]('in')
- $.support.transition && this.$element.hasClass('collapse') ?
- this.$element.one($.support.transition.end, complete) :
- complete()
- }
- , toggle: function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
- }
-
- * ========================== */
- var old = $.fn.collapse
- $.fn.collapse = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('collapse')
- , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
- if (!data) $this.data('collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.collapse.defaults = {
- toggle: true
- }
- $.fn.collapse.Constructor = Collapse
-
- * ==================== */
- $.fn.collapse.noConflict = function () {
- $.fn.collapse = old
- return this
- }
-
- * ================= */
- $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
- var $this = $(this), href
- , target = $this.attr('data-target')
- || e.preventDefault()
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
- $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
- $(target).collapse(option)
- })
- }(window.jQuery);
- * bootstrap-carousel.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#carousel
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
- !function ($) {
- "use strict";
-
- * ========================= */
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.$indicators = this.$element.find('.carousel-indicators')
- this.options = options
- this.options.pause == 'hover' && this.$element
- .on('mouseenter', $.proxy(this.pause, this))
- .on('mouseleave', $.proxy(this.cycle, this))
- }
- Carousel.prototype = {
- cycle: function (e) {
- if (!e) this.paused = false
- if (this.interval) clearInterval(this.interval);
- this.options.interval
- && !this.paused
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
- return this
- }
- , getActiveIndex: function () {
- this.$active = this.$element.find('.item.active')
- this.$items = this.$active.parent().children()
- return this.$items.index(this.$active)
- }
- , to: function (pos) {
- var activeIndex = this.getActiveIndex()
- , that = this
- if (pos > (this.$items.length - 1) || pos < 0) return
- if (this.sliding) {
- return this.$element.one('slid', function () {
- that.to(pos)
- })
- }
- if (activeIndex == pos) {
- return this.pause().cycle()
- }
- return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
- }
- , pause: function (e) {
- if (!e) this.paused = true
- if (this.$element.find('.next, .prev').length && $.support.transition.end) {
- this.$element.trigger($.support.transition.end)
- this.cycle(true)
- }
- clearInterval(this.interval)
- this.interval = null
- return this
- }
- , next: function () {
- if (this.sliding) return
- return this.slide('next')
- }
- , prev: function () {
- if (this.sliding) return
- return this.slide('prev')
- }
- , slide: function (type, next) {
- var $active = this.$element.find('.item.active')
- , $next = next || $active[type]()
- , isCycling = this.interval
- , direction = type == 'next' ? 'left' : 'right'
- , fallback = type == 'next' ? 'first' : 'last'
- , that = this
- , e
- this.sliding = true
- isCycling && this.pause()
- $next = $next.length ? $next : this.$element.find('.item')[fallback]()
- e = $.Event('slide', {
- relatedTarget: $next[0]
- , direction: direction
- })
- if ($next.hasClass('active')) return
- if (this.$indicators.length) {
- this.$indicators.find('.active').removeClass('active')
- this.$element.one('slid', function () {
- var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
- $nextIndicator && $nextIndicator.addClass('active')
- })
- }
- if ($.support.transition && this.$element.hasClass('slide')) {
- this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
- $next.addClass(type)
- $next[0].offsetWidth
- $active.addClass(direction)
- $next.addClass(direction)
- this.$element.one($.support.transition.end, function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () { that.$element.trigger('slid') }, 0)
- })
- } else {
- this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger('slid')
- }
- isCycling && this.cycle()
- return this
- }
- }
-
- * ========================== */
- var old = $.fn.carousel
- $.fn.carousel = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('carousel')
- , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
- , action = typeof option == 'string' ? option : options.slide
- if (!data) $this.data('carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (action) data[action]()
- else if (options.interval) data.pause().cycle()
- })
- }
- $.fn.carousel.defaults = {
- interval: 5000
- , pause: 'hover'
- }
- $.fn.carousel.Constructor = Carousel
-
- * ==================== */
- $.fn.carousel.noConflict = function () {
- $.fn.carousel = old
- return this
- }
-
- * ================= */
- $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
- var $this = $(this), href
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, ''))
- , options = $.extend({}, $target.data(), $this.data())
- , slideIndex
- $target.carousel(options)
- if (slideIndex = $this.attr('data-slide-to')) {
- $target.data('carousel').pause().to(slideIndex).cycle()
- }
- e.preventDefault()
- })
- }(window.jQuery);
- * bootstrap-typeahead.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
- !function($){
- "use strict";
-
- * ================================= */
- var Typeahead = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.typeahead.defaults, options)
- this.matcher = this.options.matcher || this.matcher
- this.sorter = this.options.sorter || this.sorter
- this.highlighter = this.options.highlighter || this.highlighter
- this.updater = this.options.updater || this.updater
- this.source = this.options.source
- this.$menu = $(this.options.menu)
- this.shown = false
- this.listen()
- }
- Typeahead.prototype = {
- constructor: Typeahead
- , select: function () {
- var val = this.$menu.find('.active').attr('data-value')
- this.$element
- .val(this.updater(val))
- .change()
- return this.hide()
- }
- , updater: function (item) {
- return item
- }
- , show: function () {
- var pos = $.extend({}, this.$element.position(), {
- height: this.$element[0].offsetHeight
- })
- this.$menu
- .insertAfter(this.$element)
- .css({
- top: pos.top + pos.height
- , left: pos.left
- })
- .show()
- this.shown = true
- return this
- }
- , hide: function () {
- this.$menu.hide()
- this.shown = false
- return this
- }
- , lookup: function (event) {
- var items
- this.query = this.$element.val()
- if (!this.query || this.query.length < this.options.minLength) {
- return this.shown ? this.hide() : this
- }
- items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
- return items ? this.process(items) : this
- }
- , process: function (items) {
- var that = this
- items = $.grep(items, function (item) {
- return that.matcher(item)
- })
- items = this.sorter(items)
- if (!items.length) {
- return this.shown ? this.hide() : this
- }
- return this.render(items.slice(0, this.options.items)).show()
- }
- , matcher: function (item) {
- return ~item.toLowerCase().indexOf(this.query.toLowerCase())
- }
- , sorter: function (items) {
- var beginswith = []
- , caseSensitive = []
- , caseInsensitive = []
- , item
- while (item = items.shift()) {
- if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
- else if (~item.indexOf(this.query)) caseSensitive.push(item)
- else caseInsensitive.push(item)
- }
- return beginswith.concat(caseSensitive, caseInsensitive)
- }
- , highlighter: function (item) {
- var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
- return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
- return '<strong>' + match + '</strong>'
- })
- }
- , render: function (items) {
- var that = this
- items = $(items).map(function (i, item) {
- i = $(that.options.item).attr('data-value', item)
- i.find('a').html(that.highlighter(item))
- return i[0]
- })
- items.first().addClass('active')
- this.$menu.html(items)
- return this
- }
- , next: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , next = active.next()
- if (!next.length) {
- next = $(this.$menu.find('li')[0])
- }
- next.addClass('active')
- }
- , prev: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , prev = active.prev()
- if (!prev.length) {
- prev = this.$menu.find('li').last()
- }
- prev.addClass('active')
- }
- , listen: function () {
- this.$element
- .on('focus', $.proxy(this.focus, this))
- .on('blur', $.proxy(this.blur, this))
- .on('keypress', $.proxy(this.keypress, this))
- .on('keyup', $.proxy(this.keyup, this))
- if (this.eventSupported('keydown')) {
- this.$element.on('keydown', $.proxy(this.keydown, this))
- }
- this.$menu
- .on('click', $.proxy(this.click, this))
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
- .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
- }
- , eventSupported: function(eventName) {
- var isSupported = eventName in this.$element
- if (!isSupported) {
- this.$element.setAttribute(eventName, 'return;')
- isSupported = typeof this.$element[eventName] === 'function'
- }
- return isSupported
- }
- , move: function (e) {
- if (!this.shown) return
- switch(e.keyCode) {
- case 9:
- case 13:
- case 27:
- e.preventDefault()
- break
- case 38:
- e.preventDefault()
- this.prev()
- break
- case 40:
- e.preventDefault()
- this.next()
- break
- }
- e.stopPropagation()
- }
- , keydown: function (e) {
- this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
- this.move(e)
- }
- , keypress: function (e) {
- if (this.suppressKeyPressRepeat) return
- this.move(e)
- }
- , keyup: function (e) {
- switch(e.keyCode) {
- case 40:
- case 38:
- case 16:
- case 17:
- case 18:
- break
- case 9:
- case 13:
- if (!this.shown) return
- this.select()
- break
- case 27:
- if (!this.shown) return
- this.hide()
- break
- default:
- this.lookup()
- }
- e.stopPropagation()
- e.preventDefault()
- }
- , focus: function (e) {
- this.focused = true
- }
- , blur: function (e) {
- this.focused = false
- if (!this.mousedover && this.shown) this.hide()
- }
- , click: function (e) {
- e.stopPropagation()
- e.preventDefault()
- this.select()
- this.$element.focus()
- }
- , mouseenter: function (e) {
- this.mousedover = true
- this.$menu.find('.active').removeClass('active')
- $(e.currentTarget).addClass('active')
- }
- , mouseleave: function (e) {
- this.mousedover = false
- if (!this.focused && this.shown) this.hide()
- }
- }
-
- * =========================== */
- var old = $.fn.typeahead
- $.fn.typeahead = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('typeahead')
- , options = typeof option == 'object' && option
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.typeahead.defaults = {
- source: []
- , items: 8
- , menu: '<ul class="typeahead dropdown-menu"></ul>'
- , item: '<li><a href="#"></a></li>'
- , minLength: 1
- }
- $.fn.typeahead.Constructor = Typeahead
-
- * =================== */
- $.fn.typeahead.noConflict = function () {
- $.fn.typeahead = old
- return this
- }
-
- * ================== */
- $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
- var $this = $(this)
- if ($this.data('typeahead')) return
- $this.typeahead($this.data())
- })
- }(window.jQuery);
- * bootstrap-affix.js v2.3.2
- * http://twitter.github.com/bootstrap/javascript.html#affix
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
- !function ($) {
- "use strict";
-
- * ====================== */
- var Affix = function (element, options) {
- this.options = $.extend({}, $.fn.affix.defaults, options)
- this.$window = $(window)
- .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
- .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
- this.$element = $(element)
- this.checkPosition()
- }
- Affix.prototype.checkPosition = function () {
- if (!this.$element.is(':visible')) return
- var scrollHeight = $(document).height()
- , scrollTop = this.$window.scrollTop()
- , position = this.$element.offset()
- , offset = this.options.offset
- , offsetBottom = offset.bottom
- , offsetTop = offset.top
- , reset = 'affix affix-top affix-bottom'
- , affix
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
- if (typeof offsetTop == 'function') offsetTop = offset.top()
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
- affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
- false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
- 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
- 'top' : false
- if (this.affixed === affix) return
- this.affixed = affix
- this.unpin = affix == 'bottom' ? position.top - scrollTop : null
- this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
- }
-
- * ======================= */
- var old = $.fn.affix
- $.fn.affix = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('affix')
- , options = typeof option == 'object' && option
- if (!data) $this.data('affix', (data = new Affix(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.affix.Constructor = Affix
- $.fn.affix.defaults = {
- offset: 0
- }
-
- * ================= */
- $.fn.affix.noConflict = function () {
- $.fn.affix = old
- return this
- }
-
- * ============== */
- $(window).on('load', function () {
- $('[data-spy="affix"]').each(function () {
- var $spy = $(this)
- , data = $spy.data()
- data.offset = data.offset || {}
- data.offsetBottom && (data.offset.bottom = data.offsetBottom)
- data.offsetTop && (data.offset.top = data.offsetTop)
- $spy.affix(data)
- })
- })
- }(window.jQuery);
- * bootstrap-switch - v3.1.0
- * http://www.bootstrap-switch.org
- * ========================================================================
- * Copyright 2012-2013 Mattia Larentis
- *
- * ========================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================================
- */
- (function() {
- var __slice = [].slice;
- (function($, window) {
- "use strict";
- var BootstrapSwitch;
- BootstrapSwitch = (function() {
- function BootstrapSwitch(element, options) {
- if (options == null) {
- options = {};
- }
- this.$element = $(element);
- this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, {
- state: this.$element.is(":checked"),
- size: this.$element.data("size"),
- animate: this.$element.data("animate"),
- disabled: this.$element.is(":disabled"),
- readonly: this.$element.is("[readonly]"),
- indeterminate: this.$element.data("indeterminate"),
- inverse: this.$element.data("inverse"),
- radioAllOff: this.$element.data("radio-all-off"),
- onColor: this.$element.data("on-color"),
- offColor: this.$element.data("off-color"),
- onText: this.$element.data("on-text"),
- offText: this.$element.data("off-text"),
- labelText: this.$element.data("label-text"),
- baseClass: this.$element.data("base-class"),
- wrapperClass: this.$element.data("wrapper-class")
- }, options);
- this.$wrapper = $("<div>", {
- "class": (function(_this) {
- return function() {
- var classes;
- classes = ["" + _this.options.baseClass].concat(_this._getClasses(_this.options.wrapperClass));
- classes.push(_this.options.state ? "" + _this.options.baseClass + "-on" : "" + _this.options.baseClass + "-off");
- if (_this.options.size != null) {
- classes.push("" + _this.options.baseClass + "-" + _this.options.size);
- }
- if (_this.options.animate) {
- classes.push("" + _this.options.baseClass + "-animate");
- }
- if (_this.options.disabled) {
- classes.push("" + _this.options.baseClass + "-disabled");
- }
- if (_this.options.readonly) {
- classes.push("" + _this.options.baseClass + "-readonly");
- }
- if (_this.options.indeterminate) {
- classes.push("" + _this.options.baseClass + "-indeterminate");
- }
- if (_this.options.inverse) {
- classes.push("" + _this.options.baseClass + "-inverse");
- }
- if (_this.$element.attr("id")) {
- classes.push("" + _this.options.baseClass + "-id-" + (_this.$element.attr("id")));
- }
- return classes.join(" ");
- };
- })(this)()
- });
- this.$container = $("<div>", {
- "class": "" + this.options.baseClass + "-container"
- });
- this.$on = $("<span>", {
- html: this.options.onText,
- "class": "" + this.options.baseClass + "-handle-on " + this.options.baseClass + "-" + this.options.onColor
- });
- this.$off = $("<span>", {
- html: this.options.offText,
- "class": "" + this.options.baseClass + "-handle-off " + this.options.baseClass + "-" + this.options.offColor
- });
- this.$label = $("<label>", {
- html: this.options.labelText,
- "class": "" + this.options.baseClass + "-label"
- });
- if (this.options.indeterminate) {
- this.$element.prop("indeterminate", true);
- }
- this.$element.on("init.bootstrapSwitch", (function(_this) {
- return function() {
- return _this.options.onInit.apply(element, arguments);
- };
- })(this));
- this.$element.on("switchChange.bootstrapSwitch", (function(_this) {
- return function() {
- return _this.options.onSwitchChange.apply(element, arguments);
- };
- })(this));
- this.$container = this.$element.wrap(this.$container).parent();
- this.$wrapper = this.$container.wrap(this.$wrapper).parent();
- this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off).trigger("init.bootstrapSwitch");
- this._elementHandlers();
- this._handleHandlers();
- this._labelHandlers();
- this._formHandler();
- }
- BootstrapSwitch.prototype._constructor = BootstrapSwitch;
- BootstrapSwitch.prototype.state = function(value, skip) {
- if (typeof value === "undefined") {
- return this.options.state;
- }
- if (this.options.disabled || this.options.readonly) {
- return this.$element;
- }
- if (this.options.state && !this.options.radioAllOff && this.$element.is(':radio')) {
- return this.$element;
- }
- if (this.options.indeterminate) {
- this.indeterminate(false);
- value = true;
- } else {
- value = !!value;
- }
- this.$element.prop("checked", value).trigger("change.bootstrapSwitch", skip);
- return this.$element;
- };
- BootstrapSwitch.prototype.toggleState = function(skip) {
- if (this.options.disabled || this.options.readonly) {
- return this.$element;
- }
- if (this.options.indeterminate) {
- this.indeterminate(false);
- return this.state(true);
- } else {
- return this.$element.prop("checked", !this.options.state).trigger("change.bootstrapSwitch", skip);
- }
- };
- BootstrapSwitch.prototype.size = function(value) {
- if (typeof value === "undefined") {
- return this.options.size;
- }
- if (this.options.size != null) {
- this.$wrapper.removeClass("" + this.options.baseClass + "-" + this.options.size);
- }
- if (value) {
- this.$wrapper.addClass("" + this.options.baseClass + "-" + value);
- }
- this.options.size = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.animate = function(value) {
- if (typeof value === "undefined") {
- return this.options.animate;
- }
- value = !!value;
- this.$wrapper[value ? "addClass" : "removeClass"]("" + this.options.baseClass + "-animate");
- this.options.animate = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.toggleAnimate = function() {
- this.$wrapper.toggleClass("" + this.options.baseClass + "-animate");
- this.options.animate = !this.options.animate;
- return this.$element;
- };
- BootstrapSwitch.prototype.disabled = function(value) {
- if (typeof value === "undefined") {
- return this.options.disabled;
- }
- value = !!value;
- this.$wrapper[value ? "addClass" : "removeClass"]("" + this.options.baseClass + "-disabled");
- this.$element.prop("disabled", value);
- this.options.disabled = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.toggleDisabled = function() {
- this.$element.prop("disabled", !this.options.disabled);
- this.$wrapper.toggleClass("" + this.options.baseClass + "-disabled");
- this.options.disabled = !this.options.disabled;
- return this.$element;
- };
- BootstrapSwitch.prototype.readonly = function(value) {
- if (typeof value === "undefined") {
- return this.options.readonly;
- }
- value = !!value;
- this.$wrapper[value ? "addClass" : "removeClass"]("" + this.options.baseClass + "-readonly");
- this.$element.prop("readonly", value);
- this.options.readonly = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.toggleReadonly = function() {
- this.$element.prop("readonly", !this.options.readonly);
- this.$wrapper.toggleClass("" + this.options.baseClass + "-readonly");
- this.options.readonly = !this.options.readonly;
- return this.$element;
- };
- BootstrapSwitch.prototype.indeterminate = function(value) {
- if (typeof value === "undefined") {
- return this.options.indeterminate;
- }
- value = !!value;
- this.$wrapper[value ? "addClass" : "removeClass"]("" + this.options.baseClass + "-indeterminate");
- this.$element.prop("indeterminate", value);
- this.options.indeterminate = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.toggleIndeterminate = function() {
- this.$element.prop("indeterminate", !this.options.indeterminate);
- this.$wrapper.toggleClass("" + this.options.baseClass + "-indeterminate");
- this.options.indeterminate = !this.options.indeterminate;
- return this.$element;
- };
- BootstrapSwitch.prototype.inverse = function(value) {
- var $off, $on;
- if (typeof value === "undefined") {
- return this.options.inverse;
- }
- value = !!value;
- this.$wrapper[value ? "addClass" : "removeClass"]("" + this.options.baseClass + "-inverse");
- $on = this.$on.clone(true);
- $off = this.$off.clone(true);
- this.$on.replaceWith($off);
- this.$off.replaceWith($on);
- this.$on = $off;
- this.$off = $on;
- this.options.inverse = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.toggleInverse = function() {
- var $off, $on;
- this.$wrapper.toggleClass("" + this.options.baseClass + "-inverse");
- $on = this.$on.clone(true);
- $off = this.$off.clone(true);
- this.$on.replaceWith($off);
- this.$off.replaceWith($on);
- this.$on = $off;
- this.$off = $on;
- this.options.inverse = !this.options.inverse;
- return this.$element;
- };
- BootstrapSwitch.prototype.onColor = function(value) {
- var color;
- color = this.options.onColor;
- if (typeof value === "undefined") {
- return color;
- }
- if (color != null) {
- this.$on.removeClass("" + this.options.baseClass + "-" + color);
- }
- this.$on.addClass("" + this.options.baseClass + "-" + value);
- this.options.onColor = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.offColor = function(value) {
- var color;
- color = this.options.offColor;
- if (typeof value === "undefined") {
- return color;
- }
- if (color != null) {
- this.$off.removeClass("" + this.options.baseClass + "-" + color);
- }
- this.$off.addClass("" + this.options.baseClass + "-" + value);
- this.options.offColor = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.onText = function(value) {
- if (typeof value === "undefined") {
- return this.options.onText;
- }
- this.$on.html(value);
- this.options.onText = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.offText = function(value) {
- if (typeof value === "undefined") {
- return this.options.offText;
- }
- this.$off.html(value);
- this.options.offText = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.labelText = function(value) {
- if (typeof value === "undefined") {
- return this.options.labelText;
- }
- this.$label.html(value);
- this.options.labelText = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.baseClass = function(value) {
- return this.options.baseClass;
- };
- BootstrapSwitch.prototype.wrapperClass = function(value) {
- if (typeof value === "undefined") {
- return this.options.wrapperClass;
- }
- if (!value) {
- value = $.fn.bootstrapSwitch.defaults.wrapperClass;
- }
- this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(" "));
- this.$wrapper.addClass(this._getClasses(value).join(" "));
- this.options.wrapperClass = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.radioAllOff = function(value) {
- if (typeof value === "undefined") {
- return this.options.radioAllOff;
- }
- this.options.radioAllOff = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.onInit = function(value) {
- if (typeof value === "undefined") {
- return this.options.onInit;
- }
- if (!value) {
- value = $.fn.bootstrapSwitch.defaults.onInit;
- }
- this.options.onInit = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.onSwitchChange = function(value) {
- if (typeof value === "undefined") {
- return this.options.onSwitchChange;
- }
- if (!value) {
- value = $.fn.bootstrapSwitch.defaults.onSwitchChange;
- }
- this.options.onSwitchChange = value;
- return this.$element;
- };
- BootstrapSwitch.prototype.destroy = function() {
- var $form;
- $form = this.$element.closest("form");
- if ($form.length) {
- $form.off("reset.bootstrapSwitch").removeData("bootstrap-switch");
- }
- this.$container.children().not(this.$element).remove();
- this.$element.unwrap().unwrap().off(".bootstrapSwitch").removeData("bootstrap-switch");
- return this.$element;
- };
- BootstrapSwitch.prototype._elementHandlers = function() {
- return this.$element.on({
- "change.bootstrapSwitch": (function(_this) {
- return function(e, skip) {
- var checked;
- e.preventDefault();
- e.stopImmediatePropagation();
- checked = _this.$element.is(":checked");
- if (checked === _this.options.state) {
- return;
- }
- _this.options.state = checked;
- _this.$wrapper.removeClass(checked ? "" + _this.options.baseClass + "-off" : "" + _this.options.baseClass + "-on").addClass(checked ? "" + _this.options.baseClass + "-on" : "" + _this.options.baseClass + "-off");
- if (!skip) {
- if (_this.$element.is(":radio")) {
- $("[name='" + (_this.$element.attr('name')) + "']").not(_this.$element).prop("checked", false).trigger("change.bootstrapSwitch", true);
- }
- return _this.$element.trigger("switchChange.bootstrapSwitch", [checked]);
- }
- };
- })(this),
- "focus.bootstrapSwitch": (function(_this) {
- return function(e) {
- e.preventDefault();
- return _this.$wrapper.addClass("" + _this.options.baseClass + "-focused");
- };
- })(this),
- "blur.bootstrapSwitch": (function(_this) {
- return function(e) {
- e.preventDefault();
- return _this.$wrapper.removeClass("" + _this.options.baseClass + "-focused");
- };
- })(this),
- "keydown.bootstrapSwitch": (function(_this) {
- return function(e) {
- if (!e.which || _this.options.disabled || _this.options.readonly) {
- return;
- }
- switch (e.which) {
- case 37:
- e.preventDefault();
- e.stopImmediatePropagation();
- return _this.state(false);
- case 39:
- e.preventDefault();
- e.stopImmediatePropagation();
- return _this.state(true);
- }
- };
- })(this)
- });
- };
- BootstrapSwitch.prototype._handleHandlers = function() {
- this.$on.on("click.bootstrapSwitch", (function(_this) {
- return function(e) {
- _this.state(false);
- return _this.$element.trigger("focus.bootstrapSwitch");
- };
- })(this));
- return this.$off.on("click.bootstrapSwitch", (function(_this) {
- return function(e) {
- _this.state(true);
- return _this.$element.trigger("focus.bootstrapSwitch");
- };
- })(this));
- };
- BootstrapSwitch.prototype._labelHandlers = function() {
- return this.$label.on({
- "mousemove.bootstrapSwitch touchmove.bootstrapSwitch": (function(_this) {
- return function(e) {
- var left, pageX, percent, right;
- if (!_this.isLabelDragging) {
- return;
- }
- e.preventDefault();
- _this.isLabelDragged = true;
- pageX = e.pageX || e.originalEvent.touches[0].pageX;
- percent = ((pageX - _this.$wrapper.offset().left) / _this.$wrapper.width()) * 100;
- left = 25;
- right = 75;
- if (_this.options.animate) {
- _this.$wrapper.removeClass("" + _this.options.baseClass + "-animate");
- }
- if (percent < left) {
- percent = left;
- } else if (percent > right) {
- percent = right;
- }
- _this.$container.css("margin-left", "" + (percent - right) + "%");
- return _this.$element.trigger("focus.bootstrapSwitch");
- };
- })(this),
- "mousedown.bootstrapSwitch touchstart.bootstrapSwitch": (function(_this) {
- return function(e) {
- if (_this.isLabelDragging || _this.options.disabled || _this.options.readonly) {
- return;
- }
- e.preventDefault();
- _this.isLabelDragging = true;
- return _this.$element.trigger("focus.bootstrapSwitch");
- };
- })(this),
- "mouseup.bootstrapSwitch touchend.bootstrapSwitch": (function(_this) {
- return function(e) {
- var state;
- if (!_this.isLabelDragging) {
- return;
- }
- e.preventDefault();
- if (_this.isLabelDragged) {
- state = parseInt(_this.$container.css("margin-left"), 10) > -(_this.$container.width() / 6);
- _this.isLabelDragged = false;
- _this.state(_this.options.inverse ? !state : state);
- if (_this.options.animate) {
- _this.$wrapper.addClass("" + _this.options.baseClass + "-animate");
- }
- _this.$container.css("margin-left", "");
- } else {
- _this.state(!_this.options.state);
- }
- return _this.isLabelDragging = false;
- };
- })(this),
- "mouseleave.bootstrapSwitch": (function(_this) {
- return function(e) {
- return _this.$label.trigger("mouseup.bootstrapSwitch");
- };
- })(this)
- });
- };
- BootstrapSwitch.prototype._formHandler = function() {
- var $form;
- $form = this.$element.closest("form");
- if ($form.data("bootstrap-switch")) {
- return;
- }
- return $form.on("reset.bootstrapSwitch", function() {
- return window.setTimeout(function() {
- return $form.find("input").filter(function() {
- return $(this).data("bootstrap-switch");
- }).each(function() {
- return $(this).bootstrapSwitch("state", this.checked);
- });
- }, 1);
- }).data("bootstrap-switch", true);
- };
- BootstrapSwitch.prototype._getClasses = function(classes) {
- var c, cls, _i, _len;
- if (!$.isArray(classes)) {
- return ["" + this.options.baseClass + "-" + classes];
- }
- cls = [];
- for (_i = 0, _len = classes.length; _i < _len; _i++) {
- c = classes[_i];
- cls.push("" + this.options.baseClass + "-" + c);
- }
- return cls;
- };
- return BootstrapSwitch;
- })();
- $.fn.bootstrapSwitch = function() {
- var args, option, ret;
- option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
- ret = this;
- this.each(function() {
- var $this, data;
- $this = $(this);
- data = $this.data("bootstrap-switch");
- if (!data) {
- $this.data("bootstrap-switch", data = new BootstrapSwitch(this, option));
- }
- if (typeof option === "string") {
- return ret = data[option].apply(data, args);
- }
- });
- return ret;
- };
- $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;
- return $.fn.bootstrapSwitch.defaults = {
- state: true,
- size: null,
- animate: true,
- disabled: false,
- readonly: false,
- indeterminate: false,
- inverse: false,
- radioAllOff: false,
- onColor: "primary",
- offColor: "default",
- onText: "ON",
- offText: "OFF",
- labelText: " ",
- baseClass: "bootstrap-switch",
- wrapperClass: "wrapper",
- onInit: function() {},
- onSwitchChange: function() {}
- };
- })(window.jQuery, window);
- }).call(this);
- * bootstrap-typeahead.js v2.3.1-j6
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
- !function($){
- "use strict";
-
- * ================================= */
- var Typeahead = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.typeahead.defaults, options)
- if (this.options.target) this.$target = $(this.options.target)
- this.matcher = this.options.matcher || this.matcher
- this.sorter = this.options.sorter || this.sorter
- this.highlighter = this.options.highlighter || this.highlighter
- this.updater = this.options.updater || this.updater
- this.source = this.options.source
- this.strict = this.options.strict
- this.$menu = $(this.options.menu)
- this.shown = false
- if (typeof this.source == 'string') {
- this.url = this.source
- this.source = this.searchAjax
- }
-
- if (element.nodeName == 'SELECT') this.replaceSelect()
- this.text = this.$element.val()
-
- this.$element
- .attr('data-text', this.value)
- .attr('autocomplete', "off")
-
- if (typeof this.$target != 'undefined') this.$element.attr('data-value', this.$target.val())
- else if (typeof this.$element.attr('data-value') == 'undefined') this.$element.attr('data-value', this.strict ? '' : this.value)
-
- this.$menu.css('min-width', this.$element.width() + 12)
- this.listen()
- }
- Typeahead.prototype = {
- constructor: Typeahead
- , replaceSelect: function () {
- this.$target = this.$element
- this.$element = $('<input type="text" />')
-
- this.source = {}
- this.strict = true
-
- var options = this.$target.find('option')
- var $option;
- for (var i=0; i<options.length; i++) {
- $option = $(options[i]);
- if ($option.val() === '') {
- this.$element.attr('placeholder', $option.html());
- continue;
- }
-
- this.source[$option.val()] = $option.html()
- if (this.$target.val() == $option.val()) this.$element.val($option.html())
- }
-
- var attr = this.$target[0].attributes
- for (i=0; i<attr.length; i++) {
- if (attr[i].nodeName != 'type' && attr[i].nodeName != 'name' && attr[i].nodeName != 'id' && attr[i].nodeName != 'data-provide' && !attr[i].nodeName.match(/^on/)) {
- this.$element.attr(attr[i].nodeName, attr[i].nodeValue)
- }
- }
- this.$element.insertAfter(this.$target)
- if (this.$target.attr('autofocus')) this.$element.trigger('focus').select()
- this.$target.attr('autofocus', false)
- this.$target.hide()
- }
-
- , destroyReplacement: function () {
-
- if (typeof this.$target != 'undefined' && this.$target[0].nodeName == 'SELECT') {
- this.$element.replaceWith('');
- }
- }
-
- , select: function () {
- var li = this.$menu.find('.active')
- , val = li.attr('data-value')
- , text = li.find('.item-text').length > 0 ? li.find('.item-text').text() : li.text()
- val = this.updater(val, 'value')
- text = this.updater(text, 'text')
- this.$element
- .val(text)
- .attr('data-value', val)
-
- this.text = text
-
- if (typeof this.$target != 'undefined') {
- this.$target
- .val(val)
- .trigger('change')
- }
-
- this.$element.trigger('change')
-
- return this.hide()
- }
- , updater: function (text, type) {
- return text
- }
- , show: function () {
- var pos = $.extend({}, this.$element.position(), {
- height: this.$element[0].offsetHeight
- })
- this.$menu
- .insertAfter(this.$element)
- .css({
- top: pos.top + pos.height
- , left: pos.left
- })
- .show()
- this.shown = true
- return this
- }
- , hide: function () {
- this.$menu.hide()
- this.shown = false
- return this
- }
- , lookup: function (event) {
- var items
- this.query = this.$element.val()
- if (!this.query || this.query.length < this.options.minLength) {
- return this.shown ? this.hide() : this
- }
- items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
-
- return items ? this.process(items) : this
- }
- , process: function (items) {
- return $.isArray(items) ? this.processArray(items) : this.processObject(items)
- }
-
- , processArray: function (items) {
- var that = this
- items = $.grep(items, function (item) {
- return that.matcher(item)
- })
- items = this.sorter(items)
- if (!items.length) {
- return this.shown ? this.hide() : this
- }
- return this.render(items.slice(0, this.options.items)).show()
- }
- , processObject: function (itemsIn) {
- var that = this
- , items = {}
- , i = 0
- $.each(itemsIn, function (key, item) {
- if (that.matcher(item)) items[key] = item
- })
- items = this.sorter(items)
- if ($.isEmptyObject(items)) {
- return this.shown ? this.hide() : this
- }
-
- $.each(items, function(key, item) {
- if (i++ >= that.options.items) delete items[key]
- })
-
- return this.render(items).show()
- }
- , searchAjax: function (query, process) {
- var that = this
-
- if (this.ajaxTimeout) clearTimeout(this.ajaxTimeout)
- this.ajaxTimeout = setTimeout(function () {
- if (that.ajaxTimeout) clearTimeout(that.ajaxTimeout)
- if (query === "") {
- that.hide()
- return
- }
- $.get(that.url, {'q': query, 'limit': that.options.items }, function (items) {
- if (typeof items == 'string') items = JSON.parse(items)
- process(items)
- })
- }, this.options.ajaxdelay)
- }
-
- , matcher: function (item) {
- return ~item.toLowerCase().indexOf(this.query.toLowerCase())
- }
- , sorter: function (items) {
- return $.isArray(items) ? this.sortArray(items) : this.sortObject(items)
- }
- , sortArray: function (items) {
- var beginswith = []
- , caseSensitive = []
- , caseInsensitive = []
- , item
- while (item = items.shift()) {
- if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
- else if (~item.indexOf(this.query)) caseSensitive.push(item)
- else caseInsensitive.push(item)
- }
- return beginswith.concat(caseSensitive, caseInsensitive)
- }
- , sortObject: function (items) {
- var sorted = {}
- , key;
-
- for (key in items) {
- if (!items[key].toLowerCase().indexOf(this.query.toLowerCase())) {
- sorted[key] = items[key];
- delete items[key]
- }
- }
-
- for (key in items) {
- if (~items[key].indexOf(this.query)) {
- sorted[key] = items[key];
- delete items[key]
- }
- }
- for (key in items) {
- sorted[key] = items[key]
- }
- return sorted
- }
- , highlighter: function (item) {
- var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
- return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
- return '<strong>' + match + '</strong>'
- })
- }
- , render: function (items) {
- var that = this
- , list = $([])
-
- $.map(items, function (item, value) {
- if (list.length >= that.options.items) return
-
- var li
- , a
-
- if ($.isArray(items)) value = item
-
- li = $(that.options.item)
- a = li.find('a').length ? li.find('a') : li
- a.html(that.highlighter(item))
-
- li.attr('data-value', value)
- if (li.find('a').length === 0) li.addClass('dropdown-header')
-
- list.push(li[0])
- })
- list.not('.dropdown-header').first().addClass('active')
-
- this.$menu.html(list)
-
- return this
- }
-
- , next: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , next = active.nextAll('li:not(.dropdown-header)').first()
- if (!next.length) {
- next = $(this.$menu.find('li:not(.dropdown-header)')[0])
- }
- next.addClass('active')
- }
- , prev: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , prev = active.prevAll('li:not(.dropdown-header)').first()
- if (!prev.length) {
- prev = this.$menu.find('li:not(.dropdown-header)').last()
- }
- prev.addClass('active')
- }
- , listen: function () {
- this.$element
- .on('focus', $.proxy(this.focus, this))
- .on('blur', $.proxy(this.blur, this))
- .on('change', $.proxy(this.change, this))
- .on('keypress', $.proxy(this.keypress, this))
- .on('keyup', $.proxy(this.keyup, this))
- if (this.eventSupported('keydown')) {
- this.$element.on('keydown', $.proxy(this.keydown, this))
- }
- this.$menu
- .on('click', $.proxy(this.click, this))
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
- .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
-
- $(window).on('unload', $.proxy(this.destroyReplacement, this))
- }
- , eventSupported: function(eventName) {
- var isSupported = eventName in this.$element
- if (!isSupported) {
- this.$element.setAttribute(eventName, 'return;')
- isSupported = typeof this.$element[eventName] === 'function'
- }
- return isSupported
- }
- , move: function (e) {
- if (!this.shown) return
- switch(e.keyCode) {
- case 9:
- case 13:
- case 27:
- e.preventDefault()
- break
- case 38:
- e.preventDefault()
- this.prev()
- break
-
- case 40:
- e.preventDefault()
- this.next()
- break
- }
- e.stopPropagation()
- }
- , keydown: function (e) {
- this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
- this.move(e)
- }
- , keypress: function (e) {
- if (this.suppressKeyPressRepeat) return
- this.move(e)
- }
- , keyup: function (e) {
- switch(e.keyCode) {
- case 40:
- case 38:
- case 16:
- case 17:
- case 18:
- break
- case 9:
- case 13:
- if (!this.shown) return
- this.select()
- break
- case 27:
- if (!this.shown) return
- this.hide()
- break
- default:
- this.lookup()
- }
- e.stopPropagation()
- e.preventDefault()
- }
- , change: function (e) {
- var value
-
- if (this.$element.val() != this.text) {
- value = this.$element.val() === '' || this.strict ? '' : this.$element.val()
-
- this.$element.val(value)
- this.$element.attr('data-value', value)
- this.text = value
- if (typeof this.$target != 'undefined') this.$target.val(value)
- }
- }
- , focus: function (e) {
- this.focused = true
- }
-
- , blur: function (e) {
- this.focused = false
- if (!this.mousedover && this.shown) this.hide()
- }
- , click: function (e) {
- e.stopPropagation()
- e.preventDefault()
- this.select()
- this.$element.focus()
- }
- , mouseenter: function (e) {
- this.mousedover = true
- this.$menu.find('.active').removeClass('active')
- $(e.currentTarget).addClass('active')
- }
- , mouseleave: function (e) {
- this.mousedover = false
- if (!this.focused && this.shown) this.hide()
- }
- }
-
- * =========================== */
- var old = $.fn.typeahead
- $.fn.typeahead = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('typeahead')
- , options = typeof option == 'object' && option
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
- $.fn.typeahead.defaults = {
- source: []
- , items: 8
- , menu: '<ul class="typeahead dropdown-menu"></ul>'
- , item: '<li><a href="#"></a></li>'
- , ajaxdelay: 400
- , minLength: 1
- }
- $.fn.typeahead.Constructor = Typeahead
-
- * =================== */
- $.fn.typeahead.noConflict = function () {
- $.fn.typeahead = old
- return this
- }
-
- * ================== */
- $(document)
- .off('focus.typeahead.data-api')
- .on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
- var $this = $(this)
- if ($this.data('typeahead')) return
- if ($this.is('select')) $this.attr('autofocus', true)
- e.preventDefault()
- $this.typeahead($this.data())
- })
- }(window.jQuery);
- * bootstrap-inputmask.js j2
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
- * Based on Masked Input plugin by Josh Bush (digitalbush.com)
- * ===========================================================
- * Copyright 2012 Jasny BV, Netherlands.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
- !function ($) {
- "use strict";
- var isIphone = (window.orientation !== undefined),
- isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1
-
- * ================================= */
- var Inputmask = function (element, options) {
- if (isAndroid) return
-
- this.$element = $(element)
- this.options = $.extend({}, $.fn.inputmask.defaults, options)
- this.mask = String(options.mask)
-
- this.init()
- this.listen()
-
- this.checkVal()
- }
- Inputmask.prototype = {
-
- init: function() {
- var defs = this.options.definitions
- var len = this.mask.length
- this.tests = []
- this.partialPosition = this.mask.length
- this.firstNonMaskPos = null
- $.each(this.mask.split(""), $.proxy(function(i, c) {
- if (c == '?') {
- len--
- this.partialPosition = i
- } else if (defs[c]) {
- this.tests.push(new RegExp(defs[c]))
- if(this.firstNonMaskPos === null)
- this.firstNonMaskPos = this.tests.length - 1
- } else {
- this.tests.push(null)
- }
- }, this))
- this.buffer = $.map(this.mask.split(""), $.proxy(function(c, i) {
- if (c != '?') return defs[c] ? this.options.placeholder : c
- }, this))
-
- this.focusText = this.$element.val()
- this.$element.data("rawMaskFn", $.proxy(function() {
- return $.map(this.buffer, function(c, i) {
- return this.tests[i] && c != this.options.placeholder ? c : null
- }).join('')
- }, this))
- },
-
- listen: function() {
- if (this.$element.attr("readonly")) return
- var pasteEventName = (navigator.userAgent.match(/msie/i) ? 'paste' : 'input') + ".mask"
- this.$element
- .on("unmask", $.proxy(this.unmask, this))
-
- .on("focus.mask", $.proxy(this.focusEvent, this))
- .on("blur.mask", $.proxy(this.blurEvent, this))
-
- .on("keydown.mask", $.proxy(this.keydownEvent, this))
- .on("keypress.mask", $.proxy(this.keypressEvent, this))
- .on(pasteEventName, $.proxy(this.pasteEvent, this))
- },
-
- caret: function(begin, end) {
- if (this.$element.length === 0) return
- if (typeof begin == 'number') {
- end = (typeof end == 'number') ? end : begin
- return this.$element.each(function() {
- if (this.setSelectionRange) {
- this.setSelectionRange(begin, end)
- } else if (this.createTextRange) {
- var range = this.createTextRange()
- range.collapse(true)
- range.moveEnd('character', end)
- range.moveStart('character', begin)
- range.select()
- }
- })
- } else {
- if (this.$element[0].setSelectionRange) {
- begin = this.$element[0].selectionStart
- end = this.$element[0].selectionEnd
- } else if (document.selection && document.selection.createRange) {
- var range = document.selection.createRange()
- begin = 0 - range.duplicate().moveStart('character', -100000)
- end = begin + range.text.length
- }
- return {
- begin: begin,
- end: end
- }
- }
- },
-
- seekNext: function(pos) {
- var len = this.mask.length
- while (++pos <= len && !this.tests[pos]);
-
- return pos
- },
-
- seekPrev: function(pos) {
- while (--pos >= 0 && !this.tests[pos]);
-
- return pos
- },
- shiftL: function(begin,end) {
- var len = this.mask.length
-
- if(begin<0) return
-
- for (var i = begin,j = this.seekNext(end); i < len; i++) {
- if (this.tests[i]) {
- if (j < len && this.tests[i].test(this.buffer[j])) {
- this.buffer[i] = this.buffer[j]
- this.buffer[j] = this.options.placeholder
- } else
- break
- j = this.seekNext(j)
- }
- }
- this.writeBuffer()
- this.caret(Math.max(this.firstNonMaskPos, begin))
- },
- shiftR: function(pos) {
- var len = this.mask.length
-
- for (var i = pos, c = this.options.placeholder; i < len; i++) {
- if (this.tests[i]) {
- var j = this.seekNext(i)
- var t = this.buffer[i]
- this.buffer[i] = c
- if (j < len && this.tests[j].test(t))
- c = t
- else
- break
- }
- }
- },
- unmask: function() {
- this.$element
- .unbind(".mask")
- .removeData("inputmask")
- },
-
- focusEvent: function() {
- this.focusText = this.$element.val()
- var len = this.mask.length
- var pos = this.checkVal()
- this.writeBuffer()
- var that = this
- var moveCaret = function() {
- if (pos == len)
- that.caret(0, pos)
- else
- that.caret(pos)
- }
- if ($.browser.msie)
- moveCaret()
- else
- setTimeout(moveCaret, 0)
- },
-
- blurEvent: function() {
- this.checkVal()
- if (this.$element.val() != this.focusText)
- this.$element.trigger('change')
- },
-
- keydownEvent: function(e) {
- var k=e.which
-
- if (k == 8 || k == 46 || (isIphone && k == 127)) {
- var pos = this.caret(),
- begin = pos.begin,
- end = pos.end
-
- if (end-begin === 0) {
- begin = k!=46 ? this.seekPrev(begin) : (end=this.seekNext(begin-1))
- end = k==46 ? this.seekNext(end) : end
- }
- this.clearBuffer(begin, end)
- this.shiftL(begin,end-1)
- return false
- } else if (k == 27) {
- this.$element.val(this.focusText)
- this.caret(0, this.checkVal())
- return false
- }
- },
- keypressEvent: function(e) {
- var len = this.mask.length
-
- var k = e.which,
- pos = this.caret()
- if (e.ctrlKey || e.altKey || e.metaKey || k<32) {
- return true
- } else if (k) {
- if (pos.end - pos.begin !== 0) {
- this.clearBuffer(pos.begin, pos.end)
- this.shiftL(pos.begin, pos.end-1)
- }
- var p = this.seekNext(pos.begin - 1)
- if (p < len) {
- var c = String.fromCharCode(k)
- if (this.tests[p].test(c)) {
- this.shiftR(p)
- this.buffer[p] = c
- this.writeBuffer()
- var next = this.seekNext(p)
- this.caret(next)
- }
- }
- return false
- }
- },
- pasteEvent: function() {
- var that = this
-
- setTimeout(function() {
- that.caret(that.checkVal(true))
- }, 0)
- },
-
- clearBuffer: function(start, end) {
- var len = this.mask.length
-
- for (var i = start; i < end && i < len; i++) {
- if (this.tests[i])
- this.buffer[i] = this.options.placeholder
- }
- },
- writeBuffer: function() {
- return this.$element.val(this.buffer.join('')).val()
- },
- checkVal: function(allow) {
- var len = this.mask.length
-
- var test = this.$element.val()
- var lastMatch = -1
-
- for (var i = 0, pos = 0; i < len; i++) {
- if (this.tests[i]) {
- this.buffer[i] = this.options.placeholder
- while (pos++ < test.length) {
- var c = test.charAt(pos - 1)
- if (this.tests[i].test(c)) {
- this.buffer[i] = c
- lastMatch = i
- break
- }
- }
- if (pos > test.length)
- break
- } else if (this.buffer[i] == test.charAt(pos) && i != this.partialPosition) {
- pos++
- lastMatch = i
- }
- }
- if (!allow && lastMatch + 1 < this.partialPosition) {
- this.$element.val("")
- this.clearBuffer(0, len)
- } else if (allow || lastMatch + 1 >= this.partialPosition) {
- this.writeBuffer()
- if (!allow) this.$element.val(this.$element.val().substring(0, lastMatch + 1))
- }
- return (this.partialPosition ? i : this.firstNonMaskPos)
- }
- }
-
- /* INPUTMASK PLUGIN DEFINITION
- * =========================== */
- $.fn.inputmask = function (options) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('inputmask')
- if (!data) $this.data('inputmask', (data = new Inputmask(this, options)))
- })
- }
- $.fn.inputmask.defaults = {
- mask: "",
- placeholder: "_",
- definitions: {
- '9': "[0-9]",
- 'a': "[A-Za-z]",
- '?': "[A-Za-z0-9]",
- '*': "."
- }
- }
- $.fn.inputmask.Constructor = Inputmask
- /* INPUTMASK DATA-API
- * ================== */
- $(document).on('focus.inputmask.data-api', '[data-mask]', function (e) {
- var $this = $(this)
- if ($this.data('inputmask')) return
- e.preventDefault()
- $this.inputmask($this.data())
- })
- }(window.jQuery);
- /* ============================================================
- * bootstrap-rowlink.js j1
- * http://jasny.github.com/bootstrap/javascript.html#rowlink
- * ============================================================
- * Copyright 2012 Jasny BV, Netherlands.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
- !function ($) {
-
- "use strict"; // jshint ;_;
- var Rowlink = function (element, options) {
- options = $.extend({}, $.fn.rowlink.defaults, options)
- var tr = element.nodeName.toLowerCase() == 'tr' ? $(element) : $(element).find('tr:has(td)')
-
- tr.each(function() {
- var link = $(this).find(options.target).first()
- if (!link.length) return
-
- var href = link.attr('href')
- $(this).find('td').not('.nolink').click(function() {
- window.location = href;
- })
- $(this).addClass('rowlink')
- link.replaceWith(link.html())
- })
- }
-
- /* ROWLINK PLUGIN DEFINITION
- * =========================== */
- $.fn.rowlink = function (options) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('rowlink')
- if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
- })
- }
- $.fn.rowlink.defaults = {
- target: "a"
- }
- $.fn.rowlink.Constructor = Rowlink
- /* ROWLINK DATA-API
- * ================== */
- $(function () {
- $('[data-provide="rowlink"],[data-provides="rowlink"]').each(function () {
- $(this).rowlink($(this).data())
- })
- })
-
- }(window.jQuery);
- /* ===========================================================
- * bootstrap-fileupload.js j2
- * http://jasny.github.com/bootstrap/javascript.html#fileupload
- * ===========================================================
- * Copyright 2012 Jasny BV, Netherlands.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
- !function ($) {
- "use strict"; // jshint ;_
- /* FILEUPLOAD PUBLIC CLASS DEFINITION
- * ================================= */
- var Fileupload = function (element, options) {
- this.$element = $(element)
- this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file")
-
- this.$input = this.$element.find(':file')
- if (this.$input.length === 0) return
- this.name = this.$input.attr('name') || options.name
- this.$hidden = this.$element.find('input[type=hidden][name="'+this.name+'"]')
- if (this.$hidden.length === 0) {
- this.$hidden = $('<input type="hidden" />')
- this.$element.prepend(this.$hidden)
- }
- this.$preview = this.$element.find('.fileupload-preview')
- var height = this.$preview.css('height')
- if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
- this.original = {
- 'exists': this.$element.hasClass('fileupload-exists'),
- 'preview': this.$preview.html(),
- 'hiddenVal': this.$hidden.val()
- }
-
- this.$remove = this.$element.find('[data-dismiss="fileupload"]')
- this.$element.find('[data-trigger="fileupload"]').on('click.fileupload', $.proxy(this.trigger, this))
- this.listen()
- }
-
- Fileupload.prototype = {
-
- listen: function() {
- this.$input.on('change.fileupload', $.proxy(this.change, this))
- $(this.$input[0].form).on('reset.fileupload', $.proxy(this.reset, this))
- if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this))
- },
-
- change: function(e, invoked) {
- if (invoked === 'clear') return
-
- var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\/, '') } : null)
-
- if (!file) {
- this.clear()
- return
- }
-
- this.$hidden.val('')
- this.$hidden.attr('name', '')
- this.$input.attr('name', this.name)
- if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
- var reader = new FileReader()
- var preview = this.$preview
- var element = this.$element
- reader.onload = function(e) {
- preview.html('<img src="' + e.target.result + '" ' + (preview.css('max-height') != 'none' ? 'style="max-height: ' + preview.css('max-height') + ';"' : '') + ' />')
- element.addClass('fileupload-exists').removeClass('fileupload-new')
- }
- reader.readAsDataURL(file)
- } else {
- this.$preview.text(file.name)
- this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
- }
- },
- clear: function(e) {
- this.$hidden.val('')
- this.$hidden.attr('name', this.name)
- this.$input.attr('name', '')
- //ie8+ doesn't support changing the value of input with type=file so clone instead
- if (navigator.userAgent.match(/msie/i)){
- var inputClone = this.$input.clone(true);
- this.$input.after(inputClone);
- this.$input.remove();
- this.$input = inputClone;
- }else{
- this.$input.val('')
- }
- this.$preview.html('')
- this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
- if (e) {
- this.$input.trigger('change', [ 'clear' ])
- e.preventDefault()
- }
- },
-
- reset: function(e) {
- this.clear()
-
- this.$hidden.val(this.original.hiddenVal)
- this.$preview.html(this.original.preview)
-
- if (this.original.exists) this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
- else this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
- },
-
- trigger: function(e) {
- this.$input.trigger('click')
- e.preventDefault()
- }
- }
-
- /* FILEUPLOAD PLUGIN DEFINITION
- * =========================== */
- $.fn.fileupload = function (options) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('fileupload')
- if (!data) $this.data('fileupload', (data = new Fileupload(this, options)))
- if (typeof options == 'string') data[options]()
- })
- }
- $.fn.fileupload.Constructor = Fileupload
- /* FILEUPLOAD DATA-API
- * ================== */
- $(document).on('click.fileupload.data-api', '[data-provides="fileupload"]', function (e) {
- var $this = $(this)
- if ($this.data('fileupload')) return
- $this.fileupload($this.data())
-
- var $target = $(e.target).closest('[data-dismiss="fileupload"],[data-trigger="fileupload"]');
- if ($target.length > 0) {
- $target.trigger('click.fileupload')
- e.preventDefault()
- }
- })
- }(window.jQuery);
- /**
- * summernote.js
- * (c) 2013~ Alan Hong
- * summernote may be freely distributed under the MIT license./
- */
- (function($) { "use strict";
- /**
- * object which check platform/agent
- */
- var agent = {
- bMac: navigator.appVersion.indexOf('Mac') > -1,
- bMSIE: navigator.userAgent.indexOf('MSIE') > -1,
- bFF: navigator.userAgent.indexOf('Firefox') > -1
- };
-
- /**
- * func utils (for high-order func's arg)
- */
- var func = function() {
- var eq = function(elA) { return function(elB) { return elA === elB; }; };
- var eq2 = function(elA, elB) { return elA === elB; };
- var fail = function() { return false; };
- var not = function(f) { return function() { return !f.apply(f, arguments); }; };
- var self = function(a) { return a; };
- return { eq: eq, eq2: eq2, fail: fail, not: not, self: self };
- }();
-
- /**
- * list utils
- */
- var list = function() {
- var head = function(array) { return array[0]; };
- var last = function(array) { return array[array.length - 1]; };
- var initial = function(array) { return array.slice(0, array.length - 1); };
- var tail = function(array) { return array.slice(1); };
- /**
- * get sum from a list
- * @param {array} array - array
- * @param {function} fn - iterator
- */
- var sum = function(array, fn) {
- fn = fn || func.self;
- return array.reduce(function(memo, v) {
- return memo + fn(v);
- }, 0);
- };
- /**
- * returns a copy of the collection with array type.
- * @param {collection} collection - collection eg) node.childNodes, ...
- */
- var from = function(collection) {
- var result = [], idx = -1, length = collection.length;
- while (++idx < length) {
- result[idx] = collection[idx];
- }
- return result;
- };
-
- /**
- * cluster item by second function
- * @param {array} array - array
- * @param {function} fn - predicate function for cluster rule
- */
- var clusterBy = function(array, fn) {
- if (array.length === 0) { return []; }
- var aTail = tail(array);
- return aTail.reduce(function (memo, v) {
- var aLast = last(memo);
- if (fn(last(aLast), v)) {
- aLast[aLast.length] = v;
- } else {
- memo[memo.length] = [v];
- }
- return memo;
- }, [[head(array)]]);
- };
- /**
- * returns a copy of the array with all falsy values removed
- * @param {array} array - array
- * @param {function} fn - predicate function for cluster rule
- */
- var compact = function(array) {
- var aResult = [];
- for (var idx = 0, sz = array.length; idx < sz; idx ++) {
- if (array[idx]) { aResult.push(array[idx]); }
- }
- return aResult;
- };
- return { head: head, last: last, initial: initial, tail: tail,
- sum: sum, from: from, compact: compact, clusterBy: clusterBy };
- }();
- /**
- * aysnc functions which returns deferred object
- */
- var async = function() {
- /**
- * readFile
- * @param {file} file - file object
- */
- var readFile = function(file) {
- return $.Deferred(function(deferred) {
- var reader = new FileReader();
- reader.onload = function(e) { deferred.resolve(e.target.result); }
- reader.onerror = function(e) { deferred.reject(this); }
- reader.readAsDataURL(file);
- }).promise();
- };
- /**
- * loadImage
- * @param {string} sUrl
- */
- var loadImage = function(sUrl) {
- return $.Deferred(function(deferred) {
- var image = new Image();
- image.onload = loaded;
- image.onerror = errored; // URL returns 404, etc
- image.onabort = errored; // IE may call this if user clicks "Stop"
- image.src = sUrl;
-
- function loaded() {
- unbindEvents(); deferred.resolve(image);
- }
- function errored() {
- unbindEvents(); deferred.reject(image);
- }
- function unbindEvents() {
- image.onload = null;
- image.onerror = null;
- image.onabort = null;
- }
- }).promise();
- };
- return { readFile: readFile, loadImage: loadImage };
- }();
-
- /**
- * dom utils
- */
- var dom = function() {
- /**
- * returns predicate which judge whether nodeName is same
- */
- var makePredByNodeName = function(sNodeName) {
- // nodeName of element is always uppercase.
- return function(node) {
- return node && node.nodeName === sNodeName;
- };
- };
-
- var isPara = function(node) {
- return node && /^P|^LI|^H[1-7]/.test(node.nodeName);
- };
- var isList = function(node) {
- return node && /^UL|^OL/.test(node.nodeName);
- };
- var isEditable = function(node) {
- return node && $(node).hasClass('note-editable');
- };
- var isControlSizing = function(node) {
- return node && $(node).hasClass('note-control-sizing');
- };
- /**
- * find nearest ancestor predicate hit
- * @param {element} node
- * @param {function} pred - predicate function
- */
- var ancestor = function(node, pred) {
- while (node) {
- if (pred(node)) { return node; }
- node = node.parentNode;
- }
- return null;
- };
-
- /**
- * returns new array of ancestor nodes (until predicate hit).
- * @param {element} node
- * @param {function} [optional] pred - predicate function
- */
- var listAncestor = function(node, pred) {
- pred = pred || func.fail;
-
- var aAncestor = [];
- ancestor(node, function(el) {
- aAncestor.push(el);
- return pred(el);
- });
- return aAncestor;
- };
-
- /**
- * returns common ancestor node between two nodes.
- * @param {element} nodeA
- * @param {element} nodeB
- */
- var commonAncestor = function(nodeA, nodeB) {
- var aAncestor = listAncestor(nodeA);
- for (var n = nodeB; n; n = n.parentNode) {
- if ($.inArray(n, aAncestor) > -1) { return n; }
- }
- return null; // difference document area
- };
- /**
- * listing all Nodes between two nodes.
- * FIXME: nodeA and nodeB must be sorted, use comparePoints later.
- * @param {element} nodeA
- * @param {element} nodeB
- */
- var listBetween = function(nodeA, nodeB) {
- var aNode = [];
- var bStart = false, bEnd = false;
- var fnWalk = function(node) {
- if (!node) { return; } // traverse fisnish
- if (node === nodeA) { bStart = true; } // start point
- if (bStart && !bEnd) { aNode.push(node); } // between
- if (node === nodeB) { bEnd = true; return; } // end point
- for (var idx = 0, sz = node.childNodes.length; idx < sz; idx++) {
- fnWalk(node.childNodes[idx]);
- }
- };
- fnWalk(commonAncestor(nodeA, nodeB)); // DFS with commonAcestor.
- return aNode;
- };
- /**
- * listing all prevSiblings (until predicate hit).
- * @param {element} node
- * @param {function} [optional] pred - predicate function
- */
- var listPrev = function(node, pred) {
- pred = pred || func.fail;
- var aNext = [];
- while (node) {
- aNext.push(node);
- if (pred(node)) { break; }
- node = node.previousSibling;
- }
- return aNext;
- };
-
- /**
- * listing nextSiblings (until predicate hit).
- * @param {element} node
- * @param {function} pred [optional] - predicate function
- */
- var listNext = function(node, pred) {
- pred = pred || func.fail;
- var aNext = [];
- while (node) {
- aNext.push(node);
- if (pred(node)) { break; }
- node = node.nextSibling;
- }
- return aNext;
- };
-
- /**
- * insert node after preceding
- * @param {element} node
- * @param {element} preceding - predicate function
- */
- var insertAfter = function(node, preceding) {
- var next = preceding.nextSibling, parent = preceding.parentNode;
- if (next) {
- parent.insertBefore(node, next);
- } else {
- parent.appendChild(node);
- }
- return node;
- };
- /**
- * append children
- * @param {element} node
- * @param {collection} aChild
- */
- var appends = function(node, aChild) {
- $.each(aChild, function(idx, child) {
- node.appendChild(child);
- });
- return node;
- };
-
- var isText = makePredByNodeName('#text');
- /**
- * returns #text's text size or element's childNodes size
- * @param {element} node
- */
- var length = function(node) {
- if (isText(node)) { return node.nodeValue.length; }
- return node.childNodes.length;
- };
- /**
- * returns offset from parent.
- * @param {element} node
- */
- var position = function(node) {
- var offset = 0;
- while (node = node.previousSibling) { offset += 1; }
- return offset;
- };
- /**
- * return offsetPath(array of offset) from ancestor
- * @param {element} ancestor - ancestor node
- * @param {element} node
- */
- var makeOffsetPath = function(ancestor, node) {
- var aAncestor = list.initial(listAncestor(node, func.eq(ancestor)));
- return $.map(aAncestor, position).reverse();
- };
- /**
- * return element from offsetPath(array of offset)
- * @param {element} ancestor - ancestor node
- * @param {array} aOffset - offsetPath
- */
- var fromOffsetPath = function(ancestor, aOffset) {
- var current = ancestor;
- for (var i = 0, sz = aOffset.length; i < sz; i++) {
- current = current.childNodes[aOffset[i]];
- }
- return current;
- };
- /**
- * split element or #text
- * @param {element} node
- * @param {number} offset
- */
- var splitData = function(node, offset) {
- if (offset === 0) { return node; }
- if (offset >= length(node)) { return node.nextSibling; }
- // splitText
- if (isText(node)) { return node.splitText(offset); }
- // splitElement
- var child = node.childNodes[offset];
- node = insertAfter(node.cloneNode(false), node);
- return appends(node, listNext(child));
- };
-
- /**
- * split dom tree by boundaryPoint(pivot and offset)
- * @param {element} root
- * @param {element} pivot - this will be boundaryPoint's node
- * @param {number} offset - this will be boundaryPoint's offset
- */
- var split = function(root, pivot, offset) {
- var aAncestor = listAncestor(pivot, func.eq(root));
- if (aAncestor.length === 1) { return splitData(pivot, offset); }
- return aAncestor.reduce(function(node, parent) {
- var clone = parent.cloneNode(false);
- insertAfter(clone, parent);
- if (node === pivot) {
- node = splitData(node, offset);
- }
- appends(clone, listNext(node));
- return clone;
- });
- };
- /**
- * remove node, (bRemoveChild: remove child or not)
- * @param {element} node
- * @param {boolean} bRemoveChild
- */
- var remove = function(node, bRemoveChild) {
- if (!node || !node.parentNode) { return; }
- if (node.removeNode) { return node.removeNode(bRemoveChild); }
- var elParent = node.parentNode;
- if (!bRemoveChild) {
- var aNode = [];
- for (var i = 0, sz = node.childNodes.length; i < sz; i++) {
- aNode.push(node.childNodes[i]);
- }
- for (var i = 0, sz = aNode.length; i < sz; i++) {
- elParent.insertBefore(aNode[i], node);
- }
- }
- elParent.removeChild(node);
- };
- var unescape = function(str) {
- return $("<div/>").html(str).text();
- };
- var html = function($node) {
- return dom.isTextarea($node[0]) ? unescape($node.val()) : $node.html();
- };
-
- return {
- isText: isText,
- isPara: isPara, isList: isList,
- isEditable: isEditable, isControlSizing: isControlSizing,
- isAnchor: makePredByNodeName('A'),
- isDiv: makePredByNodeName('DIV'), isSpan: makePredByNodeName('SPAN'),
- isB: makePredByNodeName('B'), isU: makePredByNodeName('U'),
- isS: makePredByNodeName('S'), isI: makePredByNodeName('I'),
- isImg: makePredByNodeName('IMG'), isTextarea: makePredByNodeName('TEXTAREA'),
- ancestor: ancestor, listAncestor: listAncestor,
- listNext: listNext, listPrev: listPrev,
- commonAncestor: commonAncestor, listBetween: listBetween,
- insertAfter: insertAfter, position: position,
- makeOffsetPath: makeOffsetPath, fromOffsetPath: fromOffsetPath,
- split: split, remove: remove, html: html
- };
- }();
- /**
- * range module
- */
- var range = function() {
- var bW3CRangeSupport = !!document.createRange;
- // return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js
- var textRange2bp = function(textRange, bStart) {
- var elCont = textRange.parentElement(), nOffset;
- var tester = document.body.createTextRange(), elPrevCont;
- var aChild = list.from(elCont.childNodes);
- for (nOffset = 0; nOffset < aChild.length; nOffset++) {
- if (dom.isText(aChild[nOffset])) { continue; }
- tester.moveToElementText(aChild[nOffset]);
- if (tester.compareEndPoints('StartToStart', textRange) >= 0) { break; }
- elPrevCont = aChild[nOffset];
- }
- if (nOffset !== 0 && dom.isText(aChild[nOffset - 1])) {
- var textRangeStart = document.body.createTextRange(), elCurText = null;
- textRangeStart.moveToElementText(elPrevCont || elCont);
- textRangeStart.collapse(!elPrevCont);
- elCurText = elPrevCont ? elPrevCont.nextSibling : elCont.firstChild;
- var pointTester = textRange.duplicate();
- pointTester.setEndPoint('StartToStart', textRangeStart);
- var nTextCount = pointTester.text.replace(/[\r\n]/g, '').length;
- while (nTextCount > elCurText.nodeValue.length && elCurText.nextSibling) {
- nTextCount -= elCurText.nodeValue.length;
- elCurText = elCurText.nextSibling;
- }
- var sDummy = elCurText.nodeValue; //enforce IE to re-reference elCurText
- if (bStart && elCurText.nextSibling && dom.isText(elCurText.nextSibling) &&
- nTextCount == elCurText.nodeValue.length) {
- nTextCount -= elCurText.nodeValue.length;
- elCurText = elCurText.nextSibling;
- }
- elCont = elCurText;
- nOffset = nTextCount;
- }
- return {cont: elCont, offset: nOffset};
- };
- // return TextRange from boundary point (inspired by google closure-library)
- var bp2textRange = function(bp) {
- var textRangeInfo = function(elCont, nOffset) {
- var elNode, bCollapseToStart;
- if (dom.isText(elCont)) {
- var aPrevText = dom.listPrev(elCont, func.not(dom.isText));
- var elPrevCont = list.last(aPrevText).previousSibling;
- elNode = elPrevCont || elCont.parentNode;
- nOffset += list.sum(list.tail(aPrevText), dom.length);
- bCollapseToStart = !elPrevCont;
- } else {
- elNode = elCont.childNodes[nOffset] || elCont;
- if (dom.isText(elNode)) {
- return textRangeInfo(elNode, nOffset);
- }
- nOffset = 0;
- bCollapseToStart = false;
- }
- return {cont: elNode, collapseToStart: bCollapseToStart, offset: nOffset};
- };
- var textRange = document.body.createTextRange();
- var info = textRangeInfo(bp.cont, bp.offset);
- textRange.moveToElementText(info.cont);
- textRange.collapse(info.collapseToStart);
- textRange.moveStart('character', info.offset);
- return textRange;
- };
- // {startContainer, startOffset, endContainer, endOffset}
- var WrappedRange = function(sc, so, ec, eo) {
- this.sc = sc; this.so = so;
- this.ec = ec; this.eo = eo;
- // nativeRange: get nativeRange from sc, so, ec, eo
- var nativeRange = function() {
- if (bW3CRangeSupport) {
- var w3cRange = document.createRange();
- w3cRange.setStart(sc, so);
- w3cRange.setEnd(ec, eo);
- return w3cRange;
- } else {
- var textRange = bp2textRange({cont:sc, offset:so});
- textRange.setEndPoint('EndToEnd', bp2textRange({cont:ec, offset:eo}));
- return textRange;
- }
- };
- // select: update visible range
- this.select = function() {
- var nativeRng = nativeRange();
- if (bW3CRangeSupport) {
- var selection = document.getSelection();
- if (selection.rangeCount > 0) { selection.removeAllRanges(); }
- selection.addRange(nativeRng);
- } else {
- nativeRng.select();
- }
- };
- // listPara: listing paragraphs on range
- this.listPara = function() {
- var aNode = dom.listBetween(sc, ec);
- var aPara = list.compact($.map(aNode, function(node) {
- return dom.ancestor(node, dom.isPara);
- }));
- return $.map(list.clusterBy(aPara, func.eq2), list.head);
- };
- // makeIsOn: return isOn(pred) function
- var makeIsOn = function(pred) {
- return function() {
- var elAncestor = dom.ancestor(sc, pred);
- return elAncestor && (elAncestor === dom.ancestor(ec, pred));
- };
- };
- // isOnEditable: judge whether range is on editable or not
- this.isOnEditable = makeIsOn(dom.isEditable);
- // isOnList: judge whether range is on list node or not
- this.isOnList = makeIsOn(dom.isList);
- // isOnAnchor: judge whether range is on anchor node or not
- this.isOnAnchor = makeIsOn(dom.isAnchor);
- // isCollapsed: judge whether range was collapsed
- this.isCollapsed = function() { return sc === ec && so === eo; };
- // insertNode
- this.insertNode = function(node) {
- var nativeRng = nativeRange();
- if (bW3CRangeSupport) {
- nativeRng.insertNode(node);
- } else {
- nativeRng.pasteHTML(node.outerHTML); // NOTE: missing node reference.
- }
- };
- this.toString = function() {
- var nativeRng = nativeRange();
- return bW3CRangeSupport ? nativeRng.toString() : nativeRng.text;
- };
- //bookmark: offsetPath bookmark
- this.bookmark = function(elEditable) {
- return {
- s: { path: dom.makeOffsetPath(elEditable, sc), offset: so },
- e: { path: dom.makeOffsetPath(elEditable, ec), offset: eo }
- };
- };
- };
- return { // Range Object
- // create Range Object From arguments or Browser Selection
- create : function(sc, so, ec, eo) {
- if (arguments.length === 0) { // from Browser Selection
- if (bW3CRangeSupport) { // webkit, firefox
- var selection = document.getSelection();
- if (selection.rangeCount === 0) { return null; }
- var nativeRng = selection.getRangeAt(0);
- sc = nativeRng.startContainer, so = nativeRng.startOffset,
- ec = nativeRng.endContainer, eo = nativeRng.endOffset;
- } else { // IE8: TextRange
- var textRange = document.selection.createRange();
- var textRangeEnd = textRange.duplicate(); textRangeEnd.collapse(false);
- var textRangeStart = textRange; textRangeStart.collapse(true);
- var bpStart = textRange2bp(textRangeStart, true),
- bpEnd = textRange2bp(textRangeEnd, false);
- sc = bpStart.cont, so = bpStart.offset;
- ec = bpEnd.cont, eo = bpEnd.offset;
- }
- } else if (arguments.length === 2) { //collapsed
- ec = sc; eo = so;
- }
- return new WrappedRange(sc, so, ec, eo);
- },
- // createFromBookmark
- createFromBookmark : function(elEditable, bookmark) {
- var sc = dom.fromOffsetPath(elEditable, bookmark.s.path);
- var so = bookmark.s.offset;
- var ec = dom.fromOffsetPath(elEditable, bookmark.e.path);
- var eo = bookmark.e.offset;
- return new WrappedRange(sc, so, ec, eo);
- }
- };
- }();
-
- /**
- * Style
- */
- var Style = function() {
- // para level style
- this.stylePara = function(rng, oStyle) {
- var aPara = rng.listPara();
- $.each(aPara, function(idx, elPara) {
- $.each(oStyle, function(sKey, sValue) {
- elPara.style[sKey] = sValue;
- });
- });
- };
-
- // get current style, elTarget: target element on event.
- this.current = function(rng, elTarget) {
- var welCont = $(dom.isText(rng.sc) ? rng.sc.parentNode : rng.sc);
- var oStyle = welCont.css(['font-size', 'text-align',
- 'list-style-type', 'line-height']) || {};
- oStyle['font-size'] = parseInt(oStyle['font-size']);
- // document.queryCommandState for toggle state
- oStyle['font-bold'] = document.queryCommandState('bold') ? 'bold' : 'normal';
- oStyle['font-italic'] = document.queryCommandState('italic') ? 'italic' : 'normal';
- oStyle['font-underline'] = document.queryCommandState('underline') ? 'underline' : 'normal';
-
- // list-style-type to list-style(unordered, ordered)
- if (!rng.isOnList()) {
- oStyle['list-style'] = 'none';
- } else {
- var aOrderedType = ['circle', 'disc', 'disc-leading-zero', 'square'];
- var bUnordered = $.inArray(oStyle['list-style-type'], aOrderedType) > -1;
- oStyle['list-style'] = bUnordered ? 'unordered' : 'ordered';
- }
- var elPara = dom.ancestor(rng.sc, dom.isPara);
- if (elPara && elPara.style['line-height']) {
- oStyle['line-height'] = elPara.style.lineHeight;
- } else {
- var lineHeight = parseInt(oStyle['line-height']) / parseInt(oStyle['font-size']);
- oStyle['line-height'] = lineHeight.toFixed(1);
- }
- oStyle.image = dom.isImg(elTarget) && elTarget;
- oStyle.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);
- oStyle.aAncestor = dom.listAncestor(rng.sc, dom.isEditable);
- return oStyle;
- };
- };
- /**
- * History
- */
- var History = function() {
- var aUndo = [], aRedo = [];
- var makeSnap = function(welEditable) {
- var elEditable = welEditable[0], rng = range.create();
- return {
- contents: welEditable.html(), bookmark: rng.bookmark(elEditable),
- scrollTop: welEditable.scrollTop()
- };
- };
- var applySnap = function(welEditable, oSnap) {
- welEditable.html(oSnap.contents).scrollTop(oSnap.scrollTop);
- range.createFromBookmark(welEditable[0], oSnap.bookmark).select();
- };
- this.undo = function(welEditable) {
- var oSnap = makeSnap(welEditable);
- if (aUndo.length === 0) { return; }
- applySnap(welEditable, aUndo.pop()), aRedo.push(oSnap);
- };
- this.redo = function(welEditable) {
- var oSnap = makeSnap(welEditable);
- if (aRedo.length === 0) { return; }
- applySnap(welEditable, aRedo.pop()), aUndo.push(oSnap);
- };
- this.recordUndo = function(welEditable) {
- aRedo = [], aUndo.push(makeSnap(welEditable));
- };
- };
-
- /**
- * Editor
- */
- var Editor = function() {
- // save current range
- this.saveRange = function(welEditable) {
- welEditable.data('range', range.create());
- }
- // restore lately range
- this.restoreRange = function(welEditable) {
- var rng = welEditable.data('range');
- if (rng) { rng.select(); }
- }
- //currentStyle
- var style = new Style();
- this.currentStyle = function(elTarget) {
- var rng = range.create();
- return rng.isOnEditable() && style.current(rng, elTarget);
- };
- this.tab = function(welEditable) {
- recordUndo(welEditable);
- var rng = range.create();
- var sNbsp = new Array(welEditable.data('tabsize') + 1).join(' ');
- rng.insertNode($('<span id="noteTab">' + sNbsp + '</span>')[0]);
- var welTab = $('#noteTab').removeAttr('id');
- rng = range.create(welTab[0], 1);
- rng.select();
- dom.remove(welTab[0]);
- };
- // undo
- this.undo = function(welEditable) {
- welEditable.data('NoteHistory').undo(welEditable);
- };
- // redo
- this.redo = function(welEditable) {
- welEditable.data('NoteHistory').redo(welEditable);
- };
- // recordUndo
- var recordUndo = this.recordUndo = function(welEditable) {
- welEditable.data('NoteHistory').recordUndo(welEditable);
- };
- // native commands(with execCommand)
- var aCmd = ['bold', 'italic', 'underline', 'strikethrough',
- 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',
- 'insertOrderedList', 'insertUnorderedList',
- 'indent', 'outdent', 'formatBlock', 'removeFormat',
- 'backColor', 'foreColor', 'insertHorizontalRule'];
-
- for (var idx = 0, len=aCmd.length; idx < len; idx ++) {
- this[aCmd[idx]] = function(sCmd) {
- return function(welEditable, sValue) {
- recordUndo(welEditable);
- document.execCommand(sCmd, false, sValue);
- };
- }(aCmd[idx]);
- }
- this.insertImage = function(welEditable, sUrl) {
- async.loadImage(sUrl).done(function(image) {
- recordUndo(welEditable);
- var welImage = $('<img>').attr('src', sUrl);
- welImage.css('width', Math.min(welEditable.width(), image.width));
- range.create().insertNode(welImage[0]);
- }).fail(function(image) {
- var callbacks = welEditable.data('callbacks');
- if (callbacks.onImageUploadError) {
- callbacks.onImageUploadError();
- }
- });
- };
- this.formatBlock = function(welEditable, sValue) {
- recordUndo(welEditable);
- sValue = agent.bMSIE ? '<' + sValue + '>' : sValue;
- document.execCommand('FormatBlock', false, sValue);
- };
- this.fontSize = function(welEditable, sValue) {
- recordUndo(welEditable);
- document.execCommand('fontSize', false, 3);
- if (agent.bFF) {
- // firefox: <font size="3"> to <span style='font-size={sValue}px;'>, buggy
- welEditable.find('font[size=3]').removeAttr('size').css('font-size', sValue + 'px');
- } else {
- // chrome: <span style="font-size: medium"> to <span style='font-size={sValue}px;'>
- welEditable.find('span').filter(function() {
- return this.style.fontSize == 'medium';
- }).css('font-size', sValue + 'px');
- }
- };
-
- this.lineHeight = function(welEditable, sValue) {
- recordUndo(welEditable);
- style.stylePara(range.create(), {lineHeight: sValue});
- };
- this.unlink = function(welEditable) {
- var rng = range.create();
- if (rng.isOnAnchor()) {
- recordUndo(welEditable);
- var elAnchor = dom.ancestor(rng.sc, dom.isAnchor);
- rng = range.create(elAnchor, 0, elAnchor, 1);
- rng.select();
- document.execCommand('unlink');
- }
- };
- this.setLinkDialog = function(welEditable, fnShowDialog) {
- var rng = range.create();
- if (rng.isOnAnchor()) {
- var elAnchor = dom.ancestor(rng.sc, dom.isAnchor);
- rng = range.create(elAnchor, 0, elAnchor, 1);
- }
- fnShowDialog({
- range: rng,
- text: rng.toString(),
- url: rng.isOnAnchor() ? dom.ancestor(rng.sc, dom.isAnchor).href : ''
- }, function(sLinkUrl) {
- rng.select(); recordUndo(welEditable);
- var bProtocol = sLinkUrl.toLowerCase().indexOf('://') !== -1;
- var sLinkUrlWithProtocol = bProtocol ? sLinkUrl : 'http://' + sLinkUrl;
- //IE: createLink when range collapsed.
- if (agent.bMSIE && rng.isCollapsed()) {
- rng.insertNode($('<A id="linkAnchor">' + sLinkUrl + '</A>')[0]);
- var welAnchor = $('#linkAnchor').removeAttr('id')
- .attr('href', sLinkUrlWithProtocol);
- rng = range.create(welAnchor[0], 0, welAnchor[0], 1);
- rng.select();
- } else {
- document.execCommand('createlink', false, sLinkUrlWithProtocol);
- }
- });
- };
-
- this.color = function(welEditable, sObjColor) {
- var oColor = JSON.parse(sObjColor);
- var foreColor = oColor.foreColor, backColor = oColor.backColor;
- recordUndo(welEditable);
- if (foreColor) { document.execCommand('foreColor', false, foreColor); }
- if (backColor) { document.execCommand('backColor', false, backColor); }
- };
-
- this.insertTable = function(welEditable, sDim) {
- recordUndo(welEditable);
- var aDim = sDim.split('x');
- var nCol = aDim[0], nRow = aDim[1];
-
- var aTD = [], sTD;
- var sWhitespace = agent.bMSIE ? ' ' : '<br/>';
- for (var idxCol = 0; idxCol < nCol; idxCol++) {
- aTD.push('<td>' + sWhitespace + '</td>');
- }
- sTD = aTD.join('');
- var aTR = [], sTR;
- for (var idxRow = 0; idxRow < nRow; idxRow++) {
- aTR.push('<tr>' + sTD + '</tr>');
- }
- sTR = aTR.join('');
- var sTable = '<table class="table table-bordered">' + sTR + '</table>';
- range.create().insertNode($(sTable)[0]);
- };
- this.floatMe = function(welEditable, sValue, elTarget) {
- recordUndo(welEditable);
- elTarget.style.cssFloat = sValue;
- };
- this.resize = function(welEditable, sValue, elTarget) {
- recordUndo(welEditable);
- elTarget.style.width = welEditable.width() * sValue + 'px';
- elTarget.style.height = '';
- };
- this.resizeTo = function(pos, welTarget) {
- var newRatio = pos.y / pos.x;
- var ratio = welTarget.data('ratio');
- welTarget.css({
- width: ratio > newRatio ? pos.x : pos.y / ratio,
- height: ratio > newRatio ? pos.x * ratio : pos.y
- });
- };
- };
- /**
- * Toolbar
- */
- var Toolbar = function() {
- this.update = function(welToolbar, oStyle) {
- //handle selectbox for fontsize, lineHeight
- var checkDropdownMenu = function(welBtn, nValue) {
- welBtn.find('.dropdown-menu li a').each(function() {
- var bChecked = $(this).attr('data-value') == nValue;
- this.className = bChecked ? 'checked' : '';
- });
- };
-
- var welFontsize = welToolbar.find('.note-fontsize');
- welFontsize.find('.note-current-fontsize').html(oStyle['font-size']);
- checkDropdownMenu(welFontsize, parseFloat(oStyle['font-size']));
-
- var welLineHeight = welToolbar.find('.note-height');
- checkDropdownMenu(welLineHeight, parseFloat(oStyle['line-height']));
-
- //check button state
- var btnState = function(sSelector, pred) {
- var welBtn = welToolbar.find(sSelector);
- welBtn[pred() ? 'addClass' : 'removeClass']('active');
- };
- btnState('button[data-event="bold"]', function() {
- return oStyle['font-bold'] === 'bold';
- });
- btnState('button[data-event="italic"]', function() {
- return oStyle['font-italic'] === 'italic';
- });
- btnState('button[data-event="underline"]', function() {
- return oStyle['font-underline'] === 'underline';
- });
- btnState('button[data-event="justifyLeft"]', function() {
- return oStyle['text-align'] === 'left' || oStyle['text-align'] === 'start';
- });
- btnState('button[data-event="justifyCenter"]', function() {
- return oStyle['text-align'] === 'center';
- });
- btnState('button[data-event="justifyRight"]', function() {
- return oStyle['text-align'] === 'right';
- });
- btnState('button[data-event="justifyFull"]', function() {
- return oStyle['text-align'] === 'justify';
- });
- btnState('button[data-event="insertUnorderedList"]', function() {
- return oStyle['list-style'] === 'unordered';
- });
- btnState('button[data-event="insertOrderedList"]', function() {
- return oStyle['list-style'] === 'ordered';
- });
- };
-
- this.updateRecentColor = function(elBtn, sEvent, sValue) {
- var welColor = $(elBtn).closest('.note-color');
- var welRecentColor = welColor.find('.note-recent-color');
- var oColor = JSON.parse(welRecentColor.attr('data-value'));
- oColor[sEvent] = sValue;
- welRecentColor.attr('data-value', JSON.stringify(oColor));
- var sKey = sEvent === 'backColor' ? 'background-color' : 'color';
- welRecentColor.find('i').css(sKey, sValue);
- };
- this.updateFullscreen = function(welToolbar, bFullscreen) {
- var welBtn = welToolbar.find('button[data-event="fullscreen"]');
- welBtn[bFullscreen ? 'addClass' : 'removeClass']('active');
- };
- this.updateCodeview = function(welToolbar, bCodeview) {
- var welBtn = welToolbar.find('button[data-event="codeview"]');
- welBtn[bCodeview ? 'addClass' : 'removeClass']('active');
- };
- this.enable = function(welToolbar) {
- welToolbar.find('button').not('button[data-event="codeview"]').removeClass('disabled');
- };
- this.disable = function(welToolbar) {
- welToolbar.find('button').not('button[data-event="codeview"]').addClass('disabled');
- };
- };
-
- /**
- * Popover (http://getbootstrap.com/javascript/#popovers)
- */
- var Popover = function() {
- var showPopover = function(welPopover, elPlaceholder) {
- var welPlaceHolder = $(elPlaceholder);
- var pos = welPlaceHolder.position(), height = welPlaceHolder.height();
- welPopover.css({
- display: 'block',
- left: pos.left,
- top: pos.top + height
- });
- };
- this.update = function(welPopover, oStyle) {
- var welLinkPopover = welPopover.find('.note-link-popover'),
- welImagePopover = welPopover.find('.note-image-popover');
- if (oStyle.anchor) {
- var welAnchor = welLinkPopover.find('a');
- welAnchor.attr('href', oStyle.anchor.href).html(oStyle.anchor.href);
- showPopover(welLinkPopover, oStyle.anchor);
- } else {
- welLinkPopover.hide();
- }
- if (oStyle.image) {
- showPopover(welImagePopover, oStyle.image);
- } else {
- welImagePopover.hide();
- }
- };
-
- this.hide = function(welPopover) {
- welPopover.children().hide();
- };
- };
- /**
- * Handle
- */
- var Handle = function() {
- this.update = function(welHandle, oStyle) {
- var welSelection = welHandle.find('.note-control-selection');
- if (oStyle.image) {
- var welImage = $(oStyle.image);
- var pos = welImage.position();
- var szImage = {w: welImage.width(), h: welImage.height()};
- welSelection.css({
- display: 'block',
- left: pos.left, top: pos.top,
- width: szImage.w, height: szImage.h
- }).data('target', oStyle.image); // save current image element.
- var sSizing = szImage.w + 'x' + szImage.h;
- welSelection.find('.note-control-selection-info').text(sSizing);
- } else {
- welSelection.hide();
- }
- };
- this.hide = function(welHandle) {
- welHandle.children().hide();
- };
- };
-
- /**
- * Dialog
- */
- var Dialog = function() {
- this.showImageDialog = function(welDialog, hDropImage, fnInsertImages, fnInsertImage) {
- var welImageDialog = welDialog.find('.note-image-dialog');
- var welDropzone = welDialog.find('.note-dropzone'),
- welImageInput = welDialog.find('.note-image-input'),
- welImageUrl = welDialog.find('.note-image-url'),
- welImageBtn = welDialog.find('.note-image-btn');
- welImageDialog.on('shown.bs.modal', function(e) {
- welDropzone.on('dragenter dragover dragleave', false);
- welDropzone.on('drop', function(e) {
- hDropImage(e); welImageDialog.modal('hide');
- });
- welImageInput.on('change', function(event) {
- fnInsertImages(this.files); $(this).val('');
- welImageDialog.modal('hide');
- });
- welImageUrl.val('').keyup(function(event) {
- if (welImageUrl.val()) {
- welImageBtn.removeClass('disabled').attr('disabled', false);
- } else {
- welImageBtn.addClass('disabled').attr('disabled', true);
- }
- }).trigger('focus');
- welImageBtn.click(function(event) {
- welImageDialog.modal('hide');
- fnInsertImage(welImageUrl.val());
- event.preventDefault();
- });
- }).on('hidden.bs.modal', function(e) {
- welDropzone.off('dragenter dragover dragleave drop');
- welImageInput.off('change');
- welImageDialog.off('shown.bs.modal hidden.bs.modal');
- welImageUrl.off('keyup');
- welImageBtn.off('click');
- }).modal('show');
- };
- this.showLinkDialog = function(welDialog, linkInfo, callback) {
- var welLinkDialog = welDialog.find('.note-link-dialog');
- var welLinkText = welLinkDialog.find('.note-link-text'),
- welLinkUrl = welLinkDialog.find('.note-link-url'),
- welLinkBtn = welLinkDialog.find('.note-link-btn');
- welLinkDialog.on('shown.bs.modal', function(e) {
- welLinkText.html(linkInfo.text);
- welLinkUrl.val(linkInfo.url).keyup(function(event) {
- if (welLinkUrl.val()) {
- welLinkBtn.removeClass('disabled').attr('disabled', false);
- } else {
- welLinkBtn.addClass('disabled').attr('disabled', true);
- }
- if (!linkInfo.text) { welLinkText.html(welLinkUrl.val()); }
- }).trigger('focus');
- welLinkBtn.click(function(event) {
- welLinkDialog.modal('hide'); //hide and createLink (ie9+)
- callback(welLinkUrl.val());
- event.preventDefault();
- });
- }).on('hidden.bs.modal', function(e) {
- welLinkUrl.off('keyup');
- welLinkBtn.off('click');
- welLinkDialog.off('shown.bs.modal hidden.bs.modal');
- }).modal('show');
- };
- this.showHelpDialog = function(welDialog) {
- welDialog.find('.note-help-dialog').modal('show');
- };
- };
-
- /**
- * EventHandler
- *
- * handle mouse & key event on note
- */
- var EventHandler = function() {
- var editor = new Editor();
- var toolbar = new Toolbar(), popover = new Popover();
- var handle = new Handle(), dialog = new Dialog();
-
- var key = { BACKSPACE: 8, TAB: 9, ENTER: 13, SPACE: 32,
- NUM0: 48, NUM1: 49, NUM6: 54, NUM7: 55, NUM8: 56,
- B: 66, E: 69, I: 73, J: 74, K: 75, L: 76, R: 82, S: 83, U: 85,
- Y: 89, Z: 90, SLASH: 191,
- LEFTBRACKET: 219, BACKSLACH: 220, RIGHTBRACKET: 221 };
- // makeLayoutInfo from editor's descendant node.
- var makeLayoutInfo = function(descendant) {
- var welEditor = $(descendant).closest('.note-editor');
- return {
- editor: function() { return welEditor; },
- toolbar: function() { return welEditor.find('.note-toolbar'); },
- editable: function() { return welEditor.find('.note-editable'); },
- codable: function() { return welEditor.find('.note-codable'); },
- statusbar: function() { return welEditor.find('.note-statusbar'); },
- popover: function() { return welEditor.find('.note-popover'); },
- handle: function() { return welEditor.find('.note-handle'); },
- dialog: function() { return welEditor.find('.note-dialog'); }
- };
- };
- var hKeydown = function(event) {
- var bCmd = agent.bMac ? event.metaKey : event.ctrlKey,
- bShift = event.shiftKey, keyCode = event.keyCode;
- // optimize
- var bExecCmd = (bCmd || bShift || keyCode === key.TAB);
- var oLayoutInfo = (bExecCmd) ? makeLayoutInfo(event.target) : null;
- if (keyCode === key.TAB && oLayoutInfo.editable().data('tabsize')) {
- editor.tab(oLayoutInfo.editable());
- } else if (bCmd && ((bShift && keyCode === key.Z) || keyCode === key.Y)) {
- editor.redo(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.Z) {
- editor.undo(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.B) {
- editor.bold(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.I) {
- editor.italic(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.U) {
- editor.underline(oLayoutInfo.editable());
- } else if (bCmd && bShift && keyCode === key.S) {
- editor.strikethrough(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.BACKSLACH) {
- editor.removeFormat(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.K) {
- oLayoutInfo.editable();
- editor.setLinkDialog(oLayoutInfo.editable(), function(linkInfo, cb) {
- dialog.showLinkDialog(oLayoutInfo.dialog(), linkInfo, cb);
- });
- } else if (bCmd && keyCode === key.SLASH) {
- dialog.showHelpDialog(oLayoutInfo.dialog());
- } else if (bCmd && bShift && keyCode === key.L) {
- editor.justifyLeft(oLayoutInfo.editable());
- } else if (bCmd && bShift && keyCode === key.E) {
- editor.justifyCenter(oLayoutInfo.editable());
- } else if (bCmd && bShift && keyCode === key.R) {
- editor.justifyRight(oLayoutInfo.editable());
- } else if (bCmd && bShift && keyCode === key.J) {
- editor.justifyFull(oLayoutInfo.editable());
- } else if (bCmd && bShift && keyCode === key.NUM7) {
- editor.insertUnorderedList(oLayoutInfo.editable());
- } else if (bCmd && bShift && keyCode === key.NUM8) {
- editor.insertOrderedList(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.LEFTBRACKET) {
- editor.outdent(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.RIGHTBRACKET) {
- editor.indent(oLayoutInfo.editable());
- } else if (bCmd && keyCode === key.NUM0) { // formatBlock Paragraph
- editor.formatBlock(oLayoutInfo.editable(), 'P');
- } else if (bCmd && (key.NUM1 <= keyCode && keyCode <= key.NUM6)) {
- var sHeading = 'H' + String.fromCharCode(keyCode); // H1~H6
- editor.formatBlock(oLayoutInfo.editable(), sHeading);
- } else if (bCmd && keyCode === key.ENTER) {
- editor.insertHorizontalRule(oLayoutInfo.editable());
- } else {
- if (keyCode === key.BACKSPACE || keyCode === key.ENTER ||
- keyCode === key.SPACE) {
- editor.recordUndo(makeLayoutInfo(event.target).editable());
- }
- return; // not matched
- }
- event.preventDefault(); //prevent default event for FF
- };
- var insertImages = function(welEditable, files) {
- var callbacks = welEditable.data('callbacks');
- editor.restoreRange(welEditable);
- if (callbacks.onImageUpload) { // call custom handler
- callbacks.onImageUpload(files, editor, welEditable);
- } else {
- $.each(files, function(idx, file) {
- async.readFile(file).done(function(sURL) {
- editor.insertImage(welEditable, sURL);
- }).fail(function() {
- if (callbacks.onImageUploadError) {
- callbacks.onImageUploadError();
- }
- });
- });
- }
- };
- var hDropImage = function(event) {
- var dataTransfer = event.originalEvent.dataTransfer;
- if (dataTransfer && dataTransfer.files) {
- var oLayoutInfo = makeLayoutInfo(event.currentTarget || event.target);
- insertImages(oLayoutInfo.editable(), dataTransfer.files);
- }
- event.stopPropagation();
- event.preventDefault();
- };
- var hMousedown = function(event) {
- //preventDefault Selection for FF, IE8+
- if (dom.isImg(event.target)) { event.preventDefault(); }
- };
-
- var hToolbarAndPopoverUpdate = function(event) {
- var oLayoutInfo = makeLayoutInfo(event.currentTarget || event.target);
- var oStyle = editor.currentStyle(event.target);
- if (!oStyle) { return; }
- toolbar.update(oLayoutInfo.toolbar(), oStyle);
- popover.update(oLayoutInfo.popover(), oStyle);
- handle.update(oLayoutInfo.handle(), oStyle);
- };
- var hScroll = function(event) {
- var oLayoutInfo = makeLayoutInfo(event.currentTarget || event.target);
- //hide popover and handle when scrolled
- popover.hide(oLayoutInfo.popover());
- handle.hide(oLayoutInfo.handle());
- };
- var hHandleMousedown = function(event) {
- if (dom.isControlSizing(event.target)) {
- var oLayoutInfo = makeLayoutInfo(event.target),
- welHandle = oLayoutInfo.handle(), welPopover = oLayoutInfo.popover(),
- welEditable = oLayoutInfo.editable(), welEditor = oLayoutInfo.editor();
- var elTarget = welHandle.find('.note-control-selection').data('target'),
- welTarget = $(elTarget);
- var posStart = welTarget.offset(),
- scrollTop = $(document).scrollTop(), posDistance;
- welEditor.on('mousemove', function(event) {
- posDistance = {x: event.clientX - posStart.left,
- y: event.clientY - (posStart.top - scrollTop)};
- editor.resizeTo(posDistance, welTarget);
- handle.update(welHandle, {image: elTarget});
- popover.update(welPopover, {image: elTarget});
- }).on('mouseup', function() {
- welEditor.off('mousemove').off('mouseup');
- });
- if (!welTarget.data('ratio')) { // original ratio.
- welTarget.data('ratio', welTarget.height() / welTarget.width());
- }
- editor.recordUndo(welEditable);
- event.stopPropagation(); event.preventDefault();
- }
- };
-
- var hToolbarAndPopoverMousedown = function(event) {
- // prevent default event when insertTable (FF, Webkit)
- var welBtn = $(event.target).closest('[data-event]');
- if (welBtn.length > 0) { event.preventDefault(); }
- };
-
- var hToolbarAndPopoverClick = function(event) {
- var welBtn = $(event.target).closest('[data-event]');
-
- if (welBtn.length > 0) {
- var sEvent = welBtn.attr('data-event'),
- sValue = welBtn.attr('data-value');
- var oLayoutInfo = makeLayoutInfo(event.target);
- var welDialog = oLayoutInfo.dialog(),
- welEditable = oLayoutInfo.editable(),
- welCodable = oLayoutInfo.codable();
- // before command
- var elTarget;
- if ($.inArray(sEvent, ['resize', 'floatMe']) !== -1) {
- var welHandle = oLayoutInfo.handle();
- var welSelection = welHandle.find('.note-control-selection');
- elTarget = welSelection.data('target');
- }
- if (editor[sEvent]) { // on command
- welEditable.trigger('focus');
- editor[sEvent](welEditable, sValue, elTarget);
- }
-
- // after command
- if ($.inArray(sEvent, ['backColor', 'foreColor']) !== -1) {
- toolbar.updateRecentColor(welBtn[0], sEvent, sValue);
- } else if (sEvent === 'showLinkDialog') { // popover to dialog
- welEditable.focus();
- editor.setLinkDialog(welEditable, function(linkInfo, cb) {
- dialog.showLinkDialog(welDialog, linkInfo, cb);
- });
- } else if (sEvent === 'showImageDialog') {
- welEditable.focus();
- dialog.showImageDialog(welDialog, hDropImage, function(files) {
- insertImages(welEditable, files);
- }, function(sUrl) {
- editor.restoreRange(welEditable);
- editor.insertImage(welEditable, sUrl);
- });
- } else if (sEvent === 'showHelpDialog') {
- dialog.showHelpDialog(welDialog);
- } else if (sEvent === 'fullscreen') {
- var welEditor = oLayoutInfo.editor();
- welEditor.toggleClass('fullscreen');
- var welToolbar = oLayoutInfo.toolbar();
- var hResizeFullscreen = function() {
- var nHeight = $(window).height() - welToolbar.outerHeight();
- welEditable.css('height', nHeight);
- };
- var bFullscreen = welEditor.hasClass('fullscreen');
- if (bFullscreen) {
- welEditable.data('orgHeight', welEditable.css('height'));
- $(window).resize(hResizeFullscreen).trigger('resize');
- } else {
- welEditable.css('height', welEditable.data('orgHeight'));
- $(window).off('resize');
- }
- toolbar.updateFullscreen(welToolbar, bFullscreen);
- } else if (sEvent === 'codeview') {
- var welEditor = oLayoutInfo.editor(),
- welToolbar = oLayoutInfo.toolbar();
- welEditor.toggleClass('codeview');
- var bCodeview = welEditor.hasClass('codeview');
- if (bCodeview) {
- welCodable.val(welEditable.html());
- welCodable.height(welEditable.height());
- toolbar.disable(welToolbar);
- welCodable.focus();
- } else {
- welEditable.html(welCodable.val());
- welEditable.height(welCodable.height());
- toolbar.enable(welToolbar);
- welEditable.focus();
- }
- toolbar.updateCodeview(oLayoutInfo.toolbar(), bCodeview);
- }
- hToolbarAndPopoverUpdate(event);
- }
- };
- var EDITABLE_PADDING = 24;
- var hStatusbarMousedown = function(event) {
- var welDocument = $(document);
- var oLayoutInfo = makeLayoutInfo(event.target);
- var welEditable = oLayoutInfo.editable(),
- welCodable = oLayoutInfo.codable();
- var nEditableTop = welEditable.offset().top - welDocument.scrollTop();
- var hMousemove = function(event) {
- welEditable.height(event.clientY - (nEditableTop + EDITABLE_PADDING));
- };
- var hMouseup = function() {
- welDocument.unbind('mousemove', hMousemove)
- .unbind('mouseup', hMouseup);
- };
- welDocument.mousemove(hMousemove).mouseup(hMouseup);
- event.stopPropagation(); event.preventDefault();
- };
-
- var PX_PER_EM = 18;
- var hDimensionPickerMove = function(event) {
- var welPicker = $(event.target.parentNode); // target is mousecatcher
- var welDimensionDisplay = welPicker.next();
- var welCatcher = welPicker.find('.note-dimension-picker-mousecatcher');
- var welHighlighted = welPicker.find('.note-dimension-picker-highlighted');
- var welUnhighlighted = welPicker.find('.note-dimension-picker-unhighlighted');
- var posOffset;
- if (event.offsetX === undefined) {
- // HTML5 with jQuery - e.offsetX is undefined in Firefox
- var posCatcher = $(event.target).offset();
- posOffset = {x: event.pageX - posCatcher.left,
- y: event.pageY - posCatcher.top};
- } else {
- posOffset = {x: event.offsetX, y: event.offsetY};
- }
-
- var dim = {c: Math.ceil(posOffset.x / PX_PER_EM) || 1,
- r: Math.ceil(posOffset.y / PX_PER_EM) || 1};
- welHighlighted.css({ width: dim.c +'em', height: dim.r + 'em' });
- welCatcher.attr('data-value', dim.c + 'x' + dim.r);
-
- if (3 < dim.c && dim.c < 10) { // 5~10
- welUnhighlighted.css({ width: dim.c + 1 + 'em'});
- }
- if (3 < dim.r && dim.r < 10) { // 5~10
- welUnhighlighted.css({ height: dim.r + 1 + 'em'});
- }
- welDimensionDisplay.html(dim.c + ' x ' + dim.r);
- };
- /**
- * Attach eventhandler
- * @param {object} oLayoutInfo - layout Informations
- * @param {object} options - user options include custom event handlers
- * @param {function} options.enter - enter key handler
- */
- this.attach = function(oLayoutInfo, options) {
- oLayoutInfo.editable.on('keydown', hKeydown);
- oLayoutInfo.editable.on('mousedown', hMousedown);
- oLayoutInfo.editable.on('keyup mouseup', hToolbarAndPopoverUpdate);
- oLayoutInfo.editable.on('scroll', hScroll);
- //TODO: handle Drag point
- oLayoutInfo.editable.on('dragenter dragover dragleave', false);
- oLayoutInfo.editable.on('drop', hDropImage);
- oLayoutInfo.handle.on('mousedown', hHandleMousedown);
- oLayoutInfo.toolbar.on('click', hToolbarAndPopoverClick);
- oLayoutInfo.popover.on('click', hToolbarAndPopoverClick);
- oLayoutInfo.toolbar.on('mousedown', hToolbarAndPopoverMousedown);
- oLayoutInfo.popover.on('mousedown', hToolbarAndPopoverMousedown);
- oLayoutInfo.statusbar.on('mousedown', hStatusbarMousedown);
-
- //toolbar table dimension
- var welToolbar = oLayoutInfo.toolbar;
- var welCatcher = welToolbar.find('.note-dimension-picker-mousecatcher');
- welCatcher.on('mousemove', hDimensionPickerMove);
- // save selection when focusout
- oLayoutInfo.editable.on('blur', function() {
- editor.saveRange(oLayoutInfo.editable);
- });
- // basic event callbacks (lowercase)
- // enter, focus, blur, keyup, keydown
- if (options.onenter) {
- oLayoutInfo.editable.keypress(function(event) {
- if (event.keyCode === key.ENTER) { options.onenter(event);}
- });
- }
- if (options.onfocus) { oLayoutInfo.editable.focus(options.onfocus); }
- if (options.onblur) { oLayoutInfo.editable.blur(options.onblur); }
- if (options.onkeyup) { oLayoutInfo.editable.keyup(options.onkeyup); }
- if (options.onkeydown) { oLayoutInfo.editable.keydown(options.onkeydown); }
- // callbacks for advanced features (camel)
- // All editor status will be saved on editable with jquery's data
- // for support multiple editor with singleton object.
- oLayoutInfo.editable.data('callbacks', {
- onChange: options.onChange, onAutoSave: options.onAutoSave,
- onPasteBefore: options.onPasteBefore, onPasteAfter: options.onPasteAfter,
- onImageUpload: options.onImageUpload, onImageUploadError: options.onImageUpload,
- onFileUpload: options.onFileUpload, onFileUploadError: options.onFileUpload
- });
- };
- this.dettach = function(oLayoutInfo) {
- oLayoutInfo.editable.off();
- oLayoutInfo.toolbar.off();
- oLayoutInfo.handle.off();
- oLayoutInfo.popover.off();
- };
- };
- /**
- * Renderer
- *
- * rendering toolbar and editable
- */
- var Renderer = function() {
- var aToolbarItem = {
- picture:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Picture" data-event="showImageDialog" tabindex="-1"><i class="fa fa-picture-o icon-picture"></i></button>',
- link:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Link" data-event="showLinkDialog" data-shortcut="Ctrl+K" data-mac-shortcut="⌘+K" tabindex="-1"><i class="fa fa-link icon-link"></i></button>',
- table:
- '<button type="button" class="btn btn-default btn-sm btn-small dropdown-toggle" title="Table" data-toggle="dropdown" tabindex="-1"><i class="fa fa-table icon-table"></i> <span class="caret"></span></button>' +
- '<ul class="dropdown-menu">' +
- '<div class="note-dimension-picker">' +
- '<div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"></div>' +
- '<div class="note-dimension-picker-highlighted"></div>' +
- '<div class="note-dimension-picker-unhighlighted"></div>' +
- '</div>' +
- '<div class="note-dimension-display"> 1 x 1 </div>' +
- '</ul>',
- style:
- '<button type="button" class="btn btn-default btn-sm btn-small dropdown-toggle" title="Style" data-toggle="dropdown" tabindex="-1"><i class="fa fa-magic icon-magic"></i> <span class="caret"></span></button>' +
- '<ul class="dropdown-menu">' +
- '<li><a data-event="formatBlock" data-value="p">Normal</a></li>' +
- '<li><a data-event="formatBlock" data-value="blockquote"><blockquote>Quote</blockquote></a></li>' +
- '<li><a data-event="formatBlock" data-value="pre">Code</a></li>' +
- '<li><a data-event="formatBlock" data-value="h1"><h1>Header 1</h1></a></li>' +
- '<li><a data-event="formatBlock" data-value="h2"><h2>Header 2</h2></a></li>' +
- '<li><a data-event="formatBlock" data-value="h3"><h3>Header 3</h3></a></li>' +
- '<li><a data-event="formatBlock" data-value="h4"><h4>Header 4</h4></a></li>' +
- '<li><a data-event="formatBlock" data-value="h5"><h5>Header 5</h5></a></li>' +
- '<li><a data-event="formatBlock" data-value="h6"><h6>Header 6</h6></a></li>' +
- '</ul>',
- fontsize:
- '<button type="button" class="btn btn-default btn-sm btn-small dropdown-toggle" data-toggle="dropdown" title="Font Size" tabindex="-1"><span class="note-current-fontsize">11</span> <b class="caret"></b></button>' +
- '<ul class="dropdown-menu">' +
- '<li><a data-event="fontSize" data-value="8"><i class="fa fa-check icon-ok"></i> 8</a></li>' +
- '<li><a data-event="fontSize" data-value="9"><i class="fa fa-check icon-ok"></i> 9</a></li>' +
- '<li><a data-event="fontSize" data-value="10"><i class="fa fa-check icon-ok"></i> 10</a></li>' +
- '<li><a data-event="fontSize" data-value="11"><i class="fa fa-check icon-ok"></i> 11</a></li>' +
- '<li><a data-event="fontSize" data-value="12"><i class="fa fa-check icon-ok"></i> 12</a></li>' +
- '<li><a data-event="fontSize" data-value="14"><i class="fa fa-check icon-ok"></i> 14</a></li>' +
- '<li><a data-event="fontSize" data-value="18"><i class="fa fa-check icon-ok"></i> 18</a></li>' +
- '<li><a data-event="fontSize" data-value="24"><i class="fa fa-check icon-ok"></i> 24</a></li>' +
- '<li><a data-event="fontSize" data-value="36"><i class="fa fa-check icon-ok"></i> 36</a></li>' +
- '</ul>',
- color:
- '<button type="button" class="btn btn-default btn-sm btn-small note-recent-color" title="Recent Color" data-event="color" data-value=\'{"backColor":"yellow"}\' tabindex="-1"><i class="fa fa-font icon-font" style="color:black;background-color:yellow;"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small dropdown-toggle" title="More Color" data-toggle="dropdown" tabindex="-1">' +
- '<span class="caret"></span>' +
- '</button>' +
- '<ul class="dropdown-menu">' +
- '<li>' +
- '<div class="btn-group">' +
- '<div class="note-palette-title">BackColor</div>' +
- '<div class="note-color-reset" data-event="backColor" data-value="inherit" title="Transparent">Set transparent</div>' +
- '<div class="note-color-palette" data-target-event="backColor"></div>' +
- '</div>' +
- '<div class="btn-group">' +
- '<div class="note-palette-title">FontColor</div>' +
- '<div class="note-color-reset" data-event="foreColor" data-value="inherit" title="Reset">Reset to default</div>' +
- '<div class="note-color-palette" data-target-event="foreColor"></div>' +
- '</div>' +
- '</li>' +
- '</ul>',
- bold:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Bold" data-shortcut="Ctrl+B" data-mac-shortcut="⌘+B" data-event="bold" tabindex="-1"><i class="fa fa-bold icon-bold"></i></button>',
- italic:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Italic" data-shortcut="Ctrl+I" data-mac-shortcut="⌘+I" data-event="italic" tabindex="-1"><i class="fa fa-italic icon-italic"></i></button>',
- underline:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Underline" data-shortcut="Ctrl+U" data-mac-shortcut="⌘+U" data-event="underline" tabindex="-1"><i class="fa fa-underline icon-underline"></i></button>',
- clear:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Remove Font Style" data-shortcut="Ctrl+\\" data-mac-shortcut="⌘+\\" data-event="removeFormat" tabindex="-1"><i class="fa fa-eraser icon-eraser"></i></button>',
- ul:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Unordered list" data-shortcut="Ctrl+Shift+8" data-mac-shortcut="⌘+⇧+7" data-event="insertUnorderedList" tabindex="-1"><i class="fa fa-list-ul icon-list-ul"></i></button>',
- ol:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Ordered list" data-shortcut="Ctrl+Shift+7" data-mac-shortcut="⌘+⇧+8" data-event="insertOrderedList" tabindex="-1"><i class="fa fa-list-ol icon-list-ol"></i></button>',
- paragraph:
- '<button type="button" class="btn btn-default btn-sm btn-small dropdown-toggle" title="Paragraph" data-toggle="dropdown" tabindex="-1"><i class="fa fa-align-left icon-align-left"></i> <span class="caret"></span></button>' +
- '<ul class="dropdown-menu">' +
- '<li>' +
- '<div class="note-align btn-group">' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Align left" data-shortcut="Ctrl+Shift+L" data-mac-shortcut="⌘+⇧+L" data-event="justifyLeft" tabindex="-1"><i class="fa fa-align-left icon-align-left"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Align center" data-shortcut="Ctrl+Shift+E" data-mac-shortcut="⌘+⇧+E" data-event="justifyCenter" tabindex="-1"><i class="fa fa-align-center icon-align-center"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Align right" data-shortcut="Ctrl+Shift+R" data-mac-shortcut="⌘+⇧+R" data-event="justifyRight" tabindex="-1"><i class="fa fa-align-right icon-align-right"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Justify full" data-shortcut="Ctrl+Shift+J" data-mac-shortcut="⌘+⇧+J" data-event="justifyFull" tabindex="-1"><i class="fa fa-align-justify icon-align-justify"></i></button>' +
- '</div>' +
- '</li>' +
- '<li>' +
- '<div class="note-list btn-group">' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Outdent" data-shortcut="Ctrl+[" data-mac-shortcut="⌘+[" data-event="outdent" tabindex="-1"><i class="fa fa-outdent icon-indent-left"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Indent" data-shortcut="Ctrl+]" data-mac-shortcut="⌘+]" data-event="indent" tabindex="-1"><i class="fa fa-indent icon-indent-right"></i></button>' +
- '</li>' +
- '</ul>',
- height:
- '<button type="button" class="btn btn-default btn-sm btn-small dropdown-toggle" data-toggle="dropdown" title="Line Height" tabindex="-1"><i class="fa fa-text-height icon-text-height"></i> <b class="caret"></b></button>' +
- '<ul class="dropdown-menu">' +
- '<li><a data-event="lineHeight" data-value="1.0"><i class="fa fa-check icon-ok"></i> 1.0</a></li>' +
- '<li><a data-event="lineHeight" data-value="1.2"><i class="fa fa-check icon-ok"></i> 1.2</a></li>' +
- '<li><a data-event="lineHeight" data-value="1.4"><i class="fa fa-check icon-ok"></i> 1.4</a></li>' +
- '<li><a data-event="lineHeight" data-value="1.5"><i class="fa fa-check icon-ok"></i> 1.5</a></li>' +
- '<li><a data-event="lineHeight" data-value="1.6"><i class="fa fa-check icon-ok"></i> 1.6</a></li>' +
- '<li><a data-event="lineHeight" data-value="1.8"><i class="fa fa-check icon-ok"></i> 1.8</a></li>' +
- '<li><a data-event="lineHeight" data-value="2.0"><i class="fa fa-check icon-ok"></i> 2.0</a></li>' +
- '<li><a data-event="lineHeight" data-value="3.0"><i class="fa fa-check icon-ok"></i> 3.0</a></li>' +
- '</ul>',
- help:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Help" data-shortcut="Ctrl+/" data-mac-shortcut="⌘+/" data-event="showHelpDialog" tabindex="-1"><i class="fa fa-question icon-question"></i></button>',
- fullscreen:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Full Screen" data-event="fullscreen" tabindex="-1"><i class="fa fa-arrows-alt icon-fullscreen"></i></button>',
- codeview:
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Code View" data-event="codeview" tabindex="-1"><i class="fa fa-code icon-code"></i></button>'
- };
- var sPopover = '<div class="note-popover">' +
- '<div class="note-link-popover popover bottom in" style="display: none;">' +
- '<div class="arrow"></div>' +
- '<div class="popover-content note-link-content">' +
- '<a href="http://www.google.com" target="_blank">www.google.com</a> ' +
- '<div class="note-insert btn-group">' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Edit" data-event="showLinkDialog" tabindex="-1"><i class="fa fa-edit icon-edit"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Unlink" data-event="unlink" tabindex="-1"><i class="fa fa-unlink icon-unlink"></i></button>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '<div class="note-image-popover popover bottom in" style="display: none;">' +
- '<div class="arrow"></div>' +
- '<div class="popover-content note-image-content">' +
- '<div class="btn-group">' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Resize Full" data-event="resize" data-value="1" tabindex="-1"><span class="note-fontsize-10">100%</span> </button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Resize Half" data-event="resize" data-value="0.5" tabindex="-1"><span class="note-fontsize-10">50%</span> </button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Resize Quarter" data-event="resize" data-value="0.25" tabindex="-1"><span class="note-fontsize-10">25%</span> </button>' +
- '</div>' +
- '<div class="btn-group">' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Float Left" data-event="floatMe" data-value="left" tabindex="-1"><i class="fa fa-align-left icon-align-left"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Float Right" data-event="floatMe" data-value="right" tabindex="-1"><i class="fa fa-align-right icon-align-right"></i></button>' +
- '<button type="button" class="btn btn-default btn-sm btn-small" title="Float None" data-event="floatMe" data-value="none" tabindex="-1"><i class="fa fa-align-justify icon-align-justify"></i></button>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>';
- var sHandle = '<div class="note-handle">' +
- '<div class="note-control-selection">' +
- '<div class="note-control-selection-bg"></div>' +
- '<div class="note-control-holder note-control-nw"></div>' +
- '<div class="note-control-holder note-control-ne"></div>' +
- '<div class="note-control-holder note-control-sw"></div>' +
- '<div class="note-control-sizing note-control-se"></div>' +
- '<div class="note-control-selection-info"></div>' +
- '</div>' +
- '</div>';
- var sShortcutText = '<table class="note-shortcut">' +
- '<thead>' +
- '<tr><th></th><th>Text formatting</th></tr>' +
- '</thead>' +
- '<tbody>' +
- '<tr><td>⌘ + B</td><td>Toggle Bold</td></tr>' +
- '<tr><td>⌘ + I</td><td>Toggle Italic</td></tr>' +
- '<tr><td>⌘ + U</td><td>Toggle Underline</td></tr>' +
- '<tr><td>⌘ + ⇧ + S</td><td>Toggle Strike</td></tr>' +
- '<tr><td>⌘ + \\</td><td>Remove Font Style</td></tr>' +
- '</tr>' +
- '</tbody>' +
- '</table>';
- var sShortcutAction = '<table class="note-shortcut">' +
- '<thead>' +
- '<tr><th></th><th>Action</th></tr>' +
- '</thead>' +
- '<tbody>' +
- '<tr><td>⌘ + Z</td><td>Undo</td></tr>' +
- '<tr><td>⌘ + ⇧ + Z</td><td>Redo</td></tr>' +
- '<tr><td>⌘ + ]</td><td>Indent</td></tr>' +
- '<tr><td>⌘ + [</td><td>Outdent</td></tr>' +
- '<tr><td>⌘ + K</td><td>Insert Link</td></tr>' +
- '<tr><td>⌘ + ENTER</td><td>Insert Horizontal Rule</td></tr>' +
- '</tbody>' +
- '</table>';
- var sShortcutPara = '<table class="note-shortcut">' +
- '<thead>' +
- '<tr><th></th><th>Paragraph formatting</th></tr>' +
- '</thead>' +
- '<tbody>' +
- '<tr><td>⌘ + ⇧ + L</td><td>Align Left</td></tr>' +
- '<tr><td>⌘ + ⇧ + E</td><td>Align Center</td></tr>' +
- '<tr><td>⌘ + ⇧ + R</td><td>Align Right</td></tr>' +
- '<tr><td>⌘ + ⇧ + J</td><td>Justify Full</td></tr>' +
- '<tr><td>⌘ + ⇧ + NUM7</td><td>Ordered List</td></tr>' +
- '<tr><td>⌘ + ⇧ + NUM8</td><td>Unordered List</td></tr>' +
- '</tbody>' +
- '</table>';
- var sShortcutStyle = '<table class="note-shortcut">' +
- '<thead>' +
- '<tr><th></th><th>Document Style</th></tr>' +
- '</thead>' +
- '<tbody>' +
- '<tr><td>⌘ + NUM0</td><td>Normal Text</td></tr>' +
- '<tr><td>⌘ + NUM1</td><td>Heading 1</td></tr>' +
- '<tr><td>⌘ + NUM2</td><td>Heading 2</td></tr>' +
- '<tr><td>⌘ + NUM3</td><td>Heading 3</td></tr>' +
- '<tr><td>⌘ + NUM4</td><td>Heading 4</td></tr>' +
- '<tr><td>⌘ + NUM5</td><td>Heading 5</td></tr>' +
- '<tr><td>⌘ + NUM6</td><td>Heading 6</td></tr>' +
- '</tbody>' +
- '</table>';
- var sShortcutTable = '<table class="note-shortcut-layout">' +
- '<tbody>' +
- '<tr><td>' + sShortcutAction +'</td><td>' + sShortcutText +'</td></tr>' +
- '<tr><td>' + sShortcutStyle +'</td><td>' + sShortcutPara +'</td></tr>' +
- '</tbody>' +
- '</table>';
- if (!agent.bMac) { // shortcut modifier for windows
- sShortcutTable = sShortcutTable.replace(/⌘/g, 'Ctrl').replace(/⇧/g, 'Shift');
- }
- var sDialog = '<div class="note-dialog">' +
- '<div class="note-image-dialog modal" aria-hidden="false">' +
- '<div class="modal-dialog">' +
- '<div class="modal-content">' +
- '<div class="modal-header">' +
- '<button type="button" class="close" aria-hidden="true" tabindex="-1">×</button>' +
- '<h4>Insert Image</h4>' +
- '</div>' +
- '<div class="modal-body">' +
- '<div class="row-fluid">' +
- '<div class="note-dropzone span12">Drag an image here</div>' +
- '<h5>Select from files</h5>' +
- '<input class="note-image-input" type="file" name="files" accept="image/*" capture="camera" />' +
- '<h5>Image URL</h5>' +
- '<input class="note-image-url form-control span12" type="text" />' +
- '</div>' +
- '</div>' +
- '<div class="modal-footer">' +
- '<button href="#" class="btn btn-primary note-image-btn disabled" disabled="disabled">Insert</button>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '<div class="note-link-dialog modal" aria-hidden="false">' +
- '<div class="modal-dialog">' +
- '<div class="modal-content">' +
- '<div class="modal-header">' +
- '<button type="button" class="close" aria-hidden="true" tabindex="-1">×</button>' +
- '<h4>Edit Link</h4>' +
- '</div>' +
- '<div class="modal-body">' +
- '<div class="row-fluid">' +
- '<div class="form-group">' +
- '<label>Text to display</label>' +
- '<span class="note-link-text form-control input-xlarge uneditable-input" />' +
- '</div>' +
- '<div class="form-group">' +
- '<label>To what URL should this link go?</label>' +
- '<input class="note-link-url form-control span12" type="text" />' +
- '</div>' +
- '</div>' +
- '</div>' +
- '<div class="modal-footer">' +
- '<button href="#" class="btn btn-primary note-link-btn disabled" disabled="disabled">Link</button>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '<div class="note-help-dialog modal" aria-hidden="false">' +
- '<div class="modal-dialog">' +
- '<div class="modal-content">' +
- '<div class="modal-body">' +
- '<div class="modal-background">' +
- '<a class="modal-close pull-right" aria-hidden="true" tabindex="-1">Close</a>' +
- '<div class="title">Keyboard shortcuts</div>' +
- sShortcutTable +
- '<p class="text-center"><a href="//hackerwins.github.io/summernote/" target="_blank">Summernote v0.4</a> · <a href="//github.com/HackerWins/summernote" target="_blank">Project</a> · <a href="//github.com/HackerWins/summernote/issues" target="_blank">Issues</a></p>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>';
-
- // createTooltip
- var createTooltip = function(welContainer, sPlacement) {
- welContainer.find('button').each(function(i, elBtn) {
- var welBtn = $(elBtn);
- var sShortcut = welBtn.attr(agent.bMac ? 'data-mac-shortcut': 'data-shortcut');
- if (sShortcut) { welBtn.attr('title', function(i, v) { return v + ' (' + sShortcut + ')'; }); }
- //bootstrap tooltip on btn-group bug: https://github.com/twitter/bootstrap/issues/5687
- }).tooltip({container: 'body', placement: sPlacement || 'top'});
- };
-
- // pallete colors
- var aaColor = [
- ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'],
- ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'],
- ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'],
- ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'],
- ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'],
- ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'],
- ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'],
- ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']
- ];
-
- // createPalette
- var createPalette = function(welContainer) {
- welContainer.find('.note-color-palette').each(function() {
- var welPalette = $(this), sEvent = welPalette.attr('data-target-event');
- var sPaletteContents = '';
- for (var row = 0, szRow = aaColor.length; row < szRow; row++) {
- var aColor = aaColor[row];
- var sLine = '<div>';
- for (var col = 0, szCol = aColor.length; col < szCol; col++) {
- var sColor = aColor[col];
- var sButton = ['<button type="button" class="note-color-btn" style="background-color:', sColor,
- ';" data-event="', sEvent,
- '" data-value="', sColor,
- '" title="', sColor,
- '" data-toggle="button" tabindex="-1"></button>'].join('');
- sLine += sButton;
- }
- sLine += '</div>';
- sPaletteContents += sLine;
- }
- welPalette.html(sPaletteContents);
- });
- };
-
- // createLayout
- var createLayout = this.createLayout = function(welHolder, nHeight, nTabsize, aToolbarSetting) {
- //already created
- if (welHolder.next().hasClass('note-editor')) { return; }
-
- //01. create Editor
- var welEditor = $('<div class="note-editor"></div>');
- //02. statusbar
- if (nHeight > 0) {
- var welStatusbar = $('<div class="note-statusbar"><div class="note-resizebar"><div class="note-icon-bar"></div><div class="note-icon-bar"></div><div class="note-icon-bar"></div></div></div>').prependTo(welEditor);
- }
- //03. create Editable
- var welEditable = $('<div class="note-editable" contentEditable="true"></div>').prependTo(welEditor);
- if (nHeight) { welEditable.height(nHeight); }
- if (nTabsize) {
- welEditable.data('tabsize', nTabsize);
- }
- welEditable.html(dom.html(welHolder));
- welEditable.data('NoteHistory', new History());
- //031. create codable
- var welCodable = $('<textarea class="note-codable"></textarea>').prependTo(welEditor);
- //032. set styleWithCSS for backColor / foreColor clearing with 'inherit'.
- setTimeout(function() { // protect FF Error: NS_ERROR_FAILURE: Failure
- document.execCommand('styleWithCSS', 0, true);
- });
-
- //04. create Toolbar
- var sToolbar = '';
- for (var idx = 0, sz = aToolbarSetting.length; idx < sz; idx ++) {
- var group = aToolbarSetting[idx];
- sToolbar += '<div class="note-' + group[0] + ' btn-group">';
- for (var i = 0, szGroup = group[1].length; i < szGroup; i++) {
- sToolbar += aToolbarItem[group[1][i]];
- }
- sToolbar += '</div>';
- }
- sToolbar = '<div class="note-toolbar btn-toolbar">' + sToolbar + '</div>';
- var welToolbar = $(sToolbar).prependTo(welEditor);
- createPalette(welToolbar);
- createTooltip(welToolbar, 'bottom');
-
- //05. create Popover
- var welPopover = $(sPopover).prependTo(welEditor);
- createTooltip(welPopover);
- //06. handle(control selection, ...)
- $(sHandle).prependTo(welEditor);
-
- //07. create Dialog
- var welDialog = $(sDialog).prependTo(welEditor);
- welDialog.find('button.close, a.modal-close').click(function(event) {
- $(this).closest('.modal').modal('hide');
- });
- //08. Editor/Holder switch
- welEditor.insertAfter(welHolder);
- welHolder.hide();
- };
-
- // layoutInfoFromHolder
- var layoutInfoFromHolder = this.layoutInfoFromHolder = function(welHolder) {
- var welEditor = welHolder.next();
- if (!welEditor.hasClass('note-editor')) { return; }
-
- return {
- editor: welEditor,
- toolbar: welEditor.find('.note-toolbar'),
- editable: welEditor.find('.note-editable'),
- codable: welEditor.find('.note-codable'),
- statusbar: welEditor.find('.note-statusbar'),
- popover: welEditor.find('.note-popover'),
- handle: welEditor.find('.note-handle'),
- dialog: welEditor.find('.note-dialog')
- };
- };
-
- // removeLayout
- var removeLayout = this.removeLayout = function(welHolder) {
- var info = layoutInfoFromHolder(welHolder);
- if (!info) { return; }
- welHolder.html(info.editable.html());
-
- info.editor.remove();
- welHolder.show();
- };
- };
- var renderer = new Renderer();
- var eventHandler = new EventHandler();
- /**
- * extend jquery fn
- */
- $.fn.extend({
- // create Editor Layout and attach Key and Mouse Event
- summernote: function(options) {
- options = $.extend({
- toolbar: [
- ['style', ['style']],
- ['font', ['bold', 'italic', 'underline', 'clear']],
- ['fontsize', ['fontsize']],
- ['color', ['color']],
- ['para', ['ul', 'ol', 'paragraph']],
- ['height', ['height']],
- ['table', ['table']],
- ['insert', ['link', 'picture']],
- ['view', ['fullscreen', 'codeview']],
- ['help', ['help']]
- ]
- }, options );
- this.each(function(idx, elHolder) {
- var welHolder = $(elHolder);
- // createLayout with options
- renderer.createLayout(welHolder, options.height, options.tabsize, options.toolbar);
- var info = renderer.layoutInfoFromHolder(welHolder);
- eventHandler.attach(info, options);
- });
- if (this.first() && options.focus) { // focus on first editable element
- var info = renderer.layoutInfoFromHolder(this.first());
- info.editable.focus();
- }
- if (this.length > 0 && options.oninit) { // callback on init
- options.oninit();
- }
- },
- // get the HTML contents of note or set the HTML contents of note.
- code: function(sHTML) {
- //get the HTML contents
- if (sHTML === undefined) {
- var welHolder = this.first();
- if (welHolder.length === 0) { return; }
- var info = renderer.layoutInfoFromHolder(welHolder);
- if (!!(info && info.editable)) {
- var bCodeview = info.editor.hasClass('codeview');
- return bCodeview ? info.codable.val() : info.editable.html();
- }
- return welHolder.html();
- }
- // set the HTML contents
- this.each(function(i, elHolder) {
- var info = renderer.layoutInfoFromHolder($(elHolder));
- if (info && info.editable) { info.editable.html(sHTML); }
- });
- },
- // destroy Editor Layout and dettach Key and Mouse Event
- destroy: function() {
- this.each(function(idx, elHolder) {
- var welHolder = $(elHolder);
- var info = renderer.layoutInfoFromHolder(welHolder);
- if (!info || !info.editable) { return; }
- eventHandler.dettach(info);
- renderer.removeLayout(welHolder);
- });
- },
- // inner object for test
- summernoteInner: function() {
- return { dom: dom, list: list, func: func, range: range };
- }
- });
- })(window.jQuery); // jQuery
- // Array.prototype.reduce fallback
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
- if ('function' !== typeof Array.prototype.reduce) {
- Array.prototype.reduce = function(callback, opt_initialValue) {
- 'use strict';
- var idx, value, length = this.length >>> 0, isValueSet = false;
- if (1 < arguments.length) { value = opt_initialValue, isValueSet = true; }
- for (idx = 0; length > idx; ++idx) {
- if (this.hasOwnProperty(idx)) {
- if (isValueSet) {
- value = callback(value, this[idx], idx, this);
- } else {
- value = this[idx], isValueSet = true;
- }
- }
- }
- if (!isValueSet) {
- throw new TypeError('Reduce of empty array with no initial value');
- }
- return value;
- };
- }
- ;
- (function() {
- var CSRFToken, Click, ComponentUrl, Link, browserCompatibleDocumentParser, browserIsntBuggy, browserSupportsCustomEvents, browserSupportsPushState, browserSupportsTurbolinks, bypassOnLoadPopstate, cacheCurrentPage, cacheSize, changePage, constrainPageCacheTo, createDocument, currentState, enableTransitionCache, executeScriptTags, extractTitleAndBody, fetch, fetchHistory, fetchReplacement, historyStateIsDefined, initializeTurbolinks, installDocumentReadyPageEventTriggers, installHistoryChangeHandler, installJqueryAjaxSuccessPageUpdateTrigger, loadedAssets, manuallyTriggerHashChangeForFirefox, pageCache, pageChangePrevented, pagesCached, popCookie, processResponse, recallScrollPosition, referer, reflectNewUrl, reflectRedirectedUrl, rememberCurrentState, rememberCurrentUrl, rememberReferer, removeNoscriptTags, requestMethodIsSafe, resetScrollPosition, setAutofocusElement, transitionCacheEnabled, transitionCacheFor, triggerEvent, visit, xhr, _ref,
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
- __hasProp = {}.hasOwnProperty,
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
- __slice = [].slice;
- pageCache = {};
- cacheSize = 10;
- transitionCacheEnabled = false;
- currentState = null;
- loadedAssets = null;
- referer = null;
- createDocument = null;
- xhr = null;
- fetch = function(url) {
- var cachedPage;
- url = new ComponentUrl(url);
- rememberReferer();
- cacheCurrentPage();
- if (transitionCacheEnabled && (cachedPage = transitionCacheFor(url.absolute))) {
- fetchHistory(cachedPage);
- return fetchReplacement(url);
- } else {
- return fetchReplacement(url, resetScrollPosition);
- }
- };
- transitionCacheFor = function(url) {
- var cachedPage;
- cachedPage = pageCache[url];
- if (cachedPage && !cachedPage.transitionCacheDisabled) {
- return cachedPage;
- }
- };
- enableTransitionCache = function(enable) {
- if (enable == null) {
- enable = true;
- }
- return transitionCacheEnabled = enable;
- };
- fetchReplacement = function(url, onLoadFunction) {
- if (onLoadFunction == null) {
- onLoadFunction = (function(_this) {
- return function() {};
- })(this);
- }
- triggerEvent('page:fetch', {
- url: url.absolute
- });
- if (xhr != null) {
- xhr.abort();
- }
- xhr = new XMLHttpRequest;
- xhr.open('GET', url.withoutHashForIE10compatibility(), true);
- xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml');
- xhr.setRequestHeader('X-XHR-Referer', referer);
- xhr.onload = function() {
- var doc;
- triggerEvent('page:receive', {
- url: url.absolute
- });
- if (doc = processResponse()) {
- reflectNewUrl(url);
- changePage.apply(null, extractTitleAndBody(doc));
- manuallyTriggerHashChangeForFirefox();
- reflectRedirectedUrl();
- onLoadFunction();
- return triggerEvent('page:load');
- } else {
- return document.location.href = url.absolute;
- }
- };
- xhr.onloadend = function() {
- return xhr = null;
- };
- xhr.onerror = function() {
- return document.location.href = url.absolute;
- };
- return xhr.send();
- };
- fetchHistory = function(cachedPage) {
- if (xhr != null) {
- xhr.abort();
- }
- changePage(cachedPage.title, cachedPage.body);
- recallScrollPosition(cachedPage);
- return triggerEvent('page:restore');
- };
- cacheCurrentPage = function() {
- var currentStateUrl;
- currentStateUrl = new ComponentUrl(currentState.url);
- pageCache[currentStateUrl.absolute] = {
- url: currentStateUrl.relative,
- body: document.body,
- title: document.title,
- positionY: window.pageYOffset,
- positionX: window.pageXOffset,
- cachedAt: new Date().getTime(),
- transitionCacheDisabled: document.querySelector('[data-no-transition-cache]') != null
- };
- return constrainPageCacheTo(cacheSize);
- };
- pagesCached = function(size) {
- if (size == null) {
- size = cacheSize;
- }
- if (/^[\d]+$/.test(size)) {
- return cacheSize = parseInt(size);
- }
- };
- constrainPageCacheTo = function(limit) {
- var cacheTimesRecentFirst, key, pageCacheKeys, _i, _len, _results;
- pageCacheKeys = Object.keys(pageCache);
- cacheTimesRecentFirst = pageCacheKeys.map(function(url) {
- return pageCache[url].cachedAt;
- }).sort(function(a, b) {
- return b - a;
- });
- _results = [];
- for (_i = 0, _len = pageCacheKeys.length; _i < _len; _i++) {
- key = pageCacheKeys[_i];
- if (!(pageCache[key].cachedAt <= cacheTimesRecentFirst[limit])) {
- continue;
- }
- triggerEvent('page:expire', pageCache[key]);
- _results.push(delete pageCache[key]);
- }
- return _results;
- };
- changePage = function(title, body, csrfToken, runScripts) {
- document.title = title;
- document.documentElement.replaceChild(body, document.body);
- if (csrfToken != null) {
- CSRFToken.update(csrfToken);
- }
- setAutofocusElement();
- if (runScripts) {
- executeScriptTags();
- }
- currentState = window.history.state;
- triggerEvent('page:change');
- return triggerEvent('page:update');
- };
- executeScriptTags = function() {
- var attr, copy, nextSibling, parentNode, script, scripts, _i, _j, _len, _len1, _ref, _ref1;
- scripts = Array.prototype.slice.call(document.body.querySelectorAll('script:not([data-turbolinks-eval="false"])'));
- for (_i = 0, _len = scripts.length; _i < _len; _i++) {
- script = scripts[_i];
- if (!((_ref = script.type) === '' || _ref === 'text/javascript')) {
- continue;
- }
- copy = document.createElement('script');
- _ref1 = script.attributes;
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
- attr = _ref1[_j];
- copy.setAttribute(attr.name, attr.value);
- }
- copy.appendChild(document.createTextNode(script.innerHTML));
- parentNode = script.parentNode, nextSibling = script.nextSibling;
- parentNode.removeChild(script);
- parentNode.insertBefore(copy, nextSibling);
- }
- };
- removeNoscriptTags = function(node) {
- node.innerHTML = node.innerHTML.replace(/<noscript[\S\s]*?<\/noscript>/ig, '');
- return node;
- };
- setAutofocusElement = function() {
- var autofocusElement, list;
- autofocusElement = (list = document.querySelectorAll('input[autofocus], textarea[autofocus]'))[list.length - 1];
- if (autofocusElement && document.activeElement !== autofocusElement) {
- return autofocusElement.focus();
- }
- };
- reflectNewUrl = function(url) {
- if ((url = new ComponentUrl(url)).absolute !== referer) {
- return window.history.pushState({
- turbolinks: true,
- url: url.absolute
- }, '', url.absolute);
- }
- };
- reflectRedirectedUrl = function() {
- var location, preservedHash;
- if (location = xhr.getResponseHeader('X-XHR-Redirected-To')) {
- location = new ComponentUrl(location);
- preservedHash = location.hasNoHash() ? document.location.hash : '';
- return window.history.replaceState(currentState, '', location.href + preservedHash);
- }
- };
- rememberReferer = function() {
- return referer = document.location.href;
- };
- rememberCurrentUrl = function() {
- return window.history.replaceState({
- turbolinks: true,
- url: document.location.href
- }, '', document.location.href);
- };
- rememberCurrentState = function() {
- return currentState = window.history.state;
- };
- manuallyTriggerHashChangeForFirefox = function() {
- var url;
- if (navigator.userAgent.match(/Firefox/) && !(url = new ComponentUrl).hasNoHash()) {
- window.history.replaceState(currentState, '', url.withoutHash());
- return document.location.hash = url.hash;
- }
- };
- recallScrollPosition = function(page) {
- return window.scrollTo(page.positionX, page.positionY);
- };
- resetScrollPosition = function() {
- if (document.location.hash) {
- return document.location.href = document.location.href;
- } else {
- return window.scrollTo(0, 0);
- }
- };
- popCookie = function(name) {
- var value, _ref;
- value = ((_ref = document.cookie.match(new RegExp(name + "=(\\w+)"))) != null ? _ref[1].toUpperCase() : void 0) || '';
- document.cookie = name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/';
- return value;
- };
- triggerEvent = function(name, data) {
- var event;
- event = document.createEvent('Events');
- if (data) {
- event.data = data;
- }
- event.initEvent(name, true, true);
- return document.dispatchEvent(event);
- };
- pageChangePrevented = function() {
- return !triggerEvent('page:before-change');
- };
- processResponse = function() {
- var assetsChanged, clientOrServerError, doc, extractTrackAssets, intersection, validContent;
- clientOrServerError = function() {
- var _ref;
- return (400 <= (_ref = xhr.status) && _ref < 600);
- };
- validContent = function() {
- return xhr.getResponseHeader('Content-Type').match(/^(?:text\/html|application\/xhtml\+xml|application\/xml)(?:;|$)/);
- };
- extractTrackAssets = function(doc) {
- var node, _i, _len, _ref, _results;
- _ref = doc.head.childNodes;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- node = _ref[_i];
- if ((typeof node.getAttribute === "function" ? node.getAttribute('data-turbolinks-track') : void 0) != null) {
- _results.push(node.getAttribute('src') || node.getAttribute('href'));
- }
- }
- return _results;
- };
- assetsChanged = function(doc) {
- var fetchedAssets;
- loadedAssets || (loadedAssets = extractTrackAssets(document));
- fetchedAssets = extractTrackAssets(doc);
- return fetchedAssets.length !== loadedAssets.length || intersection(fetchedAssets, loadedAssets).length !== loadedAssets.length;
- };
- intersection = function(a, b) {
- var value, _i, _len, _ref, _results;
- if (a.length > b.length) {
- _ref = [b, a], a = _ref[0], b = _ref[1];
- }
- _results = [];
- for (_i = 0, _len = a.length; _i < _len; _i++) {
- value = a[_i];
- if (__indexOf.call(b, value) >= 0) {
- _results.push(value);
- }
- }
- return _results;
- };
- if (!clientOrServerError() && validContent()) {
- doc = createDocument(xhr.responseText);
- if (doc && !assetsChanged(doc)) {
- return doc;
- }
- }
- };
- extractTitleAndBody = function(doc) {
- var title;
- title = doc.querySelector('title');
- return [title != null ? title.textContent : void 0, removeNoscriptTags(doc.body), CSRFToken.get(doc).token, 'runScripts'];
- };
- CSRFToken = {
- get: function(doc) {
- var tag;
- if (doc == null) {
- doc = document;
- }
- return {
- node: tag = doc.querySelector('meta[name="csrf-token"]'),
- token: tag != null ? typeof tag.getAttribute === "function" ? tag.getAttribute('content') : void 0 : void 0
- };
- },
- update: function(latest) {
- var current;
- current = this.get();
- if ((current.token != null) && (latest != null) && current.token !== latest) {
- return current.node.setAttribute('content', latest);
- }
- }
- };
- browserCompatibleDocumentParser = function() {
- var createDocumentUsingDOM, createDocumentUsingParser, createDocumentUsingWrite, e, testDoc, _ref;
- createDocumentUsingParser = function(html) {
- return (new DOMParser).parseFromString(html, 'text/html');
- };
- createDocumentUsingDOM = function(html) {
- var doc;
- doc = document.implementation.createHTMLDocument('');
- doc.documentElement.innerHTML = html;
- return doc;
- };
- createDocumentUsingWrite = function(html) {
- var doc;
- doc = document.implementation.createHTMLDocument('');
- doc.open('replace');
- doc.write(html);
- doc.close();
- return doc;
- };
- try {
- if (window.DOMParser) {
- testDoc = createDocumentUsingParser('<html><body><p>test');
- return createDocumentUsingParser;
- }
- } catch (_error) {
- e = _error;
- testDoc = createDocumentUsingDOM('<html><body><p>test');
- return createDocumentUsingDOM;
- } finally {
- if ((testDoc != null ? (_ref = testDoc.body) != null ? _ref.childNodes.length : void 0 : void 0) !== 1) {
- return createDocumentUsingWrite;
- }
- }
- };
- ComponentUrl = (function() {
- function ComponentUrl(original) {
- this.original = original != null ? original : document.location.href;
- if (this.original.constructor === ComponentUrl) {
- return this.original;
- }
- this._parse();
- }
- ComponentUrl.prototype.withoutHash = function() {
- return this.href.replace(this.hash, '');
- };
- ComponentUrl.prototype.withoutHashForIE10compatibility = function() {
- return this.withoutHash();
- };
- ComponentUrl.prototype.hasNoHash = function() {
- return this.hash.length === 0;
- };
- ComponentUrl.prototype._parse = function() {
- var _ref;
- (this.link != null ? this.link : this.link = document.createElement('a')).href = this.original;
- _ref = this.link, this.href = _ref.href, this.protocol = _ref.protocol, this.host = _ref.host, this.hostname = _ref.hostname, this.port = _ref.port, this.pathname = _ref.pathname, this.search = _ref.search, this.hash = _ref.hash;
- this.origin = [this.protocol, '//', this.hostname].join('');
- if (this.port.length !== 0) {
- this.origin += ":" + this.port;
- }
- this.relative = [this.pathname, this.search, this.hash].join('');
- return this.absolute = this.href;
- };
- return ComponentUrl;
- })();
- Link = (function(_super) {
- __extends(Link, _super);
- Link.HTML_EXTENSIONS = ['html'];
- Link.allowExtensions = function() {
- var extension, extensions, _i, _len;
- extensions = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
- for (_i = 0, _len = extensions.length; _i < _len; _i++) {
- extension = extensions[_i];
- Link.HTML_EXTENSIONS.push(extension);
- }
- return Link.HTML_EXTENSIONS;
- };
- function Link(link) {
- this.link = link;
- if (this.link.constructor === Link) {
- return this.link;
- }
- this.original = this.link.href;
- Link.__super__.constructor.apply(this, arguments);
- }
- Link.prototype.shouldIgnore = function() {
- return this._crossOrigin() || this._anchored() || this._nonHtml() || this._optOut() || this._target();
- };
- Link.prototype._crossOrigin = function() {
- return this.origin !== (new ComponentUrl).origin;
- };
- Link.prototype._anchored = function() {
- var current;
- return ((this.hash && this.withoutHash()) === (current = new ComponentUrl).withoutHash()) || (this.href === current.href + '#');
- };
- Link.prototype._nonHtml = function() {
- return this.pathname.match(/\.[a-z]+$/g) && !this.pathname.match(new RegExp("\\.(?:" + (Link.HTML_EXTENSIONS.join('|')) + ")?$", 'g'));
- };
- Link.prototype._optOut = function() {
- var ignore, link;
- link = this.link;
- while (!(ignore || link === document)) {
- ignore = link.getAttribute('data-no-turbolink') != null;
- link = link.parentNode;
- }
- return ignore;
- };
- Link.prototype._target = function() {
- return this.link.target.length !== 0;
- };
- return Link;
- })(ComponentUrl);
- Click = (function() {
- Click.installHandlerLast = function(event) {
- if (!event.defaultPrevented) {
- document.removeEventListener('click', Click.handle, false);
- return document.addEventListener('click', Click.handle, false);
- }
- };
- Click.handle = function(event) {
- return new Click(event);
- };
- function Click(event) {
- this.event = event;
- if (this.event.defaultPrevented) {
- return;
- }
- this._extractLink();
- if (this._validForTurbolinks()) {
- if (!pageChangePrevented()) {
- visit(this.link.href);
- }
- this.event.preventDefault();
- }
- }
- Click.prototype._extractLink = function() {
- var link;
- link = this.event.target;
- while (!(!link.parentNode || link.nodeName === 'A')) {
- link = link.parentNode;
- }
- if (link.nodeName === 'A' && link.href.length !== 0) {
- return this.link = new Link(link);
- }
- };
- Click.prototype._validForTurbolinks = function() {
- return (this.link != null) && !(this.link.shouldIgnore() || this._nonStandardClick());
- };
- Click.prototype._nonStandardClick = function() {
- return this.event.which > 1 || this.event.metaKey || this.event.ctrlKey || this.event.shiftKey || this.event.altKey;
- };
- return Click;
- })();
- bypassOnLoadPopstate = function(fn) {
- return setTimeout(fn, 500);
- };
- installDocumentReadyPageEventTriggers = function() {
- return document.addEventListener('DOMContentLoaded', (function() {
- triggerEvent('page:change');
- return triggerEvent('page:update');
- }), true);
- };
- installJqueryAjaxSuccessPageUpdateTrigger = function() {
- if (typeof jQuery !== 'undefined') {
- return jQuery(document).on('ajaxSuccess', function(event, xhr, settings) {
- if (!jQuery.trim(xhr.responseText)) {
- return;
- }
- return triggerEvent('page:update');
- });
- }
- };
- installHistoryChangeHandler = function(event) {
- var cachedPage, _ref;
- if ((_ref = event.state) != null ? _ref.turbolinks : void 0) {
- if (cachedPage = pageCache[(new ComponentUrl(event.state.url)).absolute]) {
- cacheCurrentPage();
- return fetchHistory(cachedPage);
- } else {
- return visit(event.target.location.href);
- }
- }
- };
- initializeTurbolinks = function() {
- rememberCurrentUrl();
- rememberCurrentState();
- createDocument = browserCompatibleDocumentParser();
- document.addEventListener('click', Click.installHandlerLast, true);
- window.addEventListener('hashchange', function(event) {
- rememberCurrentUrl();
- return rememberCurrentState();
- }, false);
- return bypassOnLoadPopstate(function() {
- return window.addEventListener('popstate', installHistoryChangeHandler, false);
- });
- };
- historyStateIsDefined = window.history.state !== void 0 || navigator.userAgent.match(/Firefox\/2[6|7]/);
- browserSupportsPushState = window.history && window.history.pushState && window.history.replaceState && historyStateIsDefined;
- browserIsntBuggy = !navigator.userAgent.match(/CriOS\//);
- requestMethodIsSafe = (_ref = popCookie('request_method')) === 'GET' || _ref === '';
- browserSupportsTurbolinks = browserSupportsPushState && browserIsntBuggy && requestMethodIsSafe;
- browserSupportsCustomEvents = document.addEventListener && document.createEvent;
- if (browserSupportsCustomEvents) {
- installDocumentReadyPageEventTriggers();
- installJqueryAjaxSuccessPageUpdateTrigger();
- }
- if (browserSupportsTurbolinks) {
- visit = fetch;
- initializeTurbolinks();
- } else {
- visit = function(url) {
- return document.location.href = url;
- };
- }
- this.Turbolinks = {
- visit: visit,
- pagesCached: pagesCached,
- enableTransitionCache: enableTransitionCache,
- allowLinkExtensions: Link.allowExtensions,
- supported: browserSupportsTurbolinks
- };
- }).call(this);
- (function() {
- this.GoogleAnalytics = (function() {
- function GoogleAnalytics() {}
- GoogleAnalytics.load = function() {
- var firstScript, ga;
- window._gaq = [];
- window._gaq.push(["_setAccount", GoogleAnalytics.analyticsId()]);
- ga = document.createElement("script");
- ga.type = "text/javascript";
- ga.async = true;
- ga.src = ("https:" === document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
- firstScript = document.getElementsByTagName("script")[0];
- firstScript.parentNode.insertBefore(ga, firstScript);
- if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
- return document.addEventListener("page:change", (function() {
- return GoogleAnalytics.trackPageview();
- }), true);
- } else {
- return GoogleAnalytics.trackPageview();
- }
- };
- GoogleAnalytics.trackPageview = function(url) {
- if (!GoogleAnalytics.isLocalRequest()) {
- if (url) {
- window._gaq.push(["_trackPageview", url]);
- } else {
- window._gaq.push(["_trackPageview"]);
- }
- return window._gaq.push(["_trackPageLoadTime"]);
- }
- };
- GoogleAnalytics.isLocalRequest = function() {
- return GoogleAnalytics.documentDomainIncludes("local");
- };
- GoogleAnalytics.documentDomainIncludes = function(str) {
- return document.domain.indexOf(str) !== -1;
- };
- GoogleAnalytics.analyticsId = function() {
- return 'UA-58359004-1';
- };
- return GoogleAnalytics;
- })();
- GoogleAnalytics.load();
- }).call(this);
- (function() {
- var attachHandler;
- attachHandler = function() {
- $(".bootstrap_switch").bootstrapSwitch('size', 'large');
- return $('#admin_navbar').affix();
- };
- $(document).ready(attachHandler);
- $(document).on("page:load", attachHandler);
- }).call(this);
- (function() {
- var attachRatingHandler, sendFile;
- attachRatingHandler = function() {
- var summer_note;
- $(".bootstrap_switch").bootstrapSwitch('size', 'large');
- summer_note = $('#post_content');
- summer_note.summernote({
- height: 300,
- onImageUpload: function(files, editor, welEditable) {
- return sendFile(files[0], editor, welEditable);
- }
- });
- summer_note.code(summer_note.val());
- return summer_note.closest('form').submit(function() {
- summer_note.val(summer_note.code());
- return true;
- });
- };
- sendFile = function(file, editor, welEditable) {
- var data;
- data = new FormData();
- data.append("file", file);
- return $.ajax({
- url: '/upload',
- data: data,
- cache: false,
- contentType: false,
- processData: false,
- type: 'POST',
- success: function(data) {
- return editor.insertImage(welEditable, data.url);
- },
- error: function(data) {
- editor.insertImage(welEditable, data.url);
- return alert(data.url);
- }
- });
- };
- $(document).ready(attachRatingHandler);
- $(document).on("page:load", attachRatingHandler);
- }).call(this);
- (function() {
- jQuery(function() {
- $("a[rel~=popover], .has-popover").popover();
- return $("a[rel~=tooltip], .has-tooltip").tooltip();
- });
- }).call(this);
- (function() {
- }).call(this);
- (function() {
- }).call(this);
- (function() {
- }).call(this);
- (function() {
- }).call(this);
- // This is a manifest file that'll be compiled into application.js, which will include all the files
- // listed below.
- //
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
- // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
- //
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
- // compiled file.
- //
- // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
- // about supported directives.
- //
- ;
|